Saved: 2018-02-28 05:35

Torey Heinz committed Feb 28, 2018
commit c0b6de3c05a31a0698241c6dfbefedd396203b2a
Showing 27 changed files with 3156 additions and 180 deletions
app/views/pages/index.liquid +183 -171
@@ @@ -8,188 +8,200 @@ is_layout: false
---
{% extends 'layouts/application' %}
{% block 'main' %}
- <header>
+ <header>
<div class="content row column text-center">
<h1>
Canvas Innovations
</h1>
<p>West Michigan's Premier Shop for All Your Canvas and Upholstery Needs.</p>
<p class="cta">
- <a href="#" class="button"><strong>Get a Free Estimate</strong></a>
+ <a href="#" class="button"><strong>Get a Free Estimate</strong></a>
</p>
</div>
- </header>
- <section class="services featured" >
+ </header>
+ <section class="services featured">
<div class="row">
- {% with_scope featured: true %}
- {% for service in contents.services %}
- <div class="columns medium-4">
+ {% with_scope featured: true %} {% for service in contents.services %}
+ <div class="columns medium-4">
<div class="card text-center">
- <div class="card-divider">
- <p class="lead"><a href="{% path_to service %}">{{ service.title }}</a></p>
-
- </div>
- <img src="{{ service.featured_image.url | resize: '600x450#' }}">
- <div class="card-section">
- {{ service.brief }}
- </div>
+ <div class="card-divider">
+ <p class="lead"><a href="{% path_to service %}">{{ service.title }}</a></p>
+ </div>
+ <img src="{{ service.featured_image.url | resize: '600x450#' }}">
+ <div class="card-section">
+ {{ service.brief }}
+ </div>
</div>
- </div>
- {% endfor %}
- {% endwith_scope %}
+ </div>
+ {% endfor %} {% endwith_scope %}
</div>
- </div>
-
- <section class="services" >
- <div class="row small-up-2 medium-up-3 large-up-4" >
- {% with_scope featured: nil %}
- {% for service in contents.services %}
- <div class="columns medium-4">
- <div class="card text-center">
- <div class="card-divider">
- <p class="lead"><a href="{% path_to service %}">{{ service.title }}</a></p>
-
- </div>
- <img src="{{ service.featured_image.url | resize: '400x225#' }}">
- <div class="card-section">
- {{ service.brief }}
- </div>
- </div>
- </div>
- {% endfor %}
- {% endwith_scope %}
</div>
- </section>
-
- <section class="estimate">
- <form class="webform-client-form MultiFile-intercepted" enctype="multipart/form-data" action="/request-estimate?service_url=https%3A//www.canvasinnovations.us/marine-services/upholstery&amp;service_interest=Upholstery" method="post" id="webform-client-form-598" accept-charset="UTF-8"><div><div class="form-item webform-component webform-component-markup" id="webform-component-personal-information-title">
- <div class="row">
- <h3>Personal Information</h3>
- <hr>
- <div class="column medium-4">
- <label>
- Name <small>(required)</small>
- <input type="text" name="submitted[first_name]" value="" size="30" maxlength="128" class="form-text required">
- </label>
-
- <label>
- Email <small> (required)</small>
- <input class="email form-text form-email required" type="email" id="edit-submitted-email-address" name="submitted[email_address]" size="30">
- </label>
- <label>
- Phone <small> (required)</small>
- <input type="text" id="edit-submitted-phone-number" name="submitted[phone_number]" value="" size="15" maxlength="128" class="form-text required">
- </label>
- </div>
- <div class="column medium-8">
- <label>
- Instructions, Comments, or Questions
- <div class="form-textarea-wrapper"><textarea style="height: 280px" id="edit-submitted-instructions-comments-or-questions" name="submitted[instructions_comments_or_questions]" class="form-textarea"></textarea></div>
- </label>
+ <section class="services">
+ <div class="row small-up-2 medium-up-3 large-up-4">
+ {% with_scope featured: nil %} {% for service in contents.services %}
+ <div class="columns medium-4">
+ <div class="card text-center">
+ <div class="card-divider">
+ <p class="lead"><a href="{% path_to service %}">{{ service.title }}</a></p>
+ </div>
+ <img src="{{ service.featured_image.url | resize: '400x225#' }}">
+ <div class="card-section">
+ {{ service.brief }}
+ </div>
+ </div>
+ </div>
+ {% endfor %} {% endwith_scope %}
</div>
- </div>
-
- <hr>
- <h3>Vessel Information</h3>
- <hr>
- <label>
- Make/Model
- <input type="text" id="edit-submitted-make-model" name="submitted[make_model]" value="" size="30" maxlength="128" class="form-text">
- </label>
- <div class="form-item webform-component webform-component-number" id="webform-component-size">
- <label>
- Size <small> (required)</small>
- <input type="number" id="edit-submitted-size" name="submitted[size]" step="0.5" class="form-text form-number required"> <span class="field-suffix">Ft</span>
- </label>
- </div>
- <label>
- City <small> (required)</small>
- <input type="text" id="edit-submitted-vessel-city" name="submitted[vessel_city]" value="" size="30" maxlength="128" class="form-text required">
- </label>
- <div class="form-item webform-component webform-component-select" id="webform-component-vessel-state">
- <label>
- State <small> (required)</small>
- <select id="edit-submitted-vessel-state" name="submitted[vessel_state]" class="form-select required"><option value="" selected="selected">- Select -</option><option value="IL">Illinois</option><option value="IN">Indiana</option><option value="MI">Michigan</option><option value="OH">Ohio</option></select>
- </label>
- </div>
- <label>
- Zip Code <small> (required)</small>
- <input type="text" id="edit-submitted-vessel-zip" name="submitted[vessel_zip]" value="" size="5" maxlength="128" class="form-text required">
- </label>
- <label>
- Marina
- <input type="text" id="edit-submitted-marina" name="submitted[marina]" value="" size="30" maxlength="128" class="form-text">
- </label>
- <div class="form-item webform-component webform-component-checkboxes" id="webform-component-services-requested">
- <label>
- Services Requested <small> (required)</small>
- <div id="edit-submitted-services-requested" class="form-checkboxes"><div class="form-item form-type-checkbox form-item-submitted-services-requested-enclosures">
- </label>
- <input type="checkbox" id="edit-submitted-services-requested-1" name="submitted[services_requested][enclosures]" value="enclosures" class="form-checkbox"> <label class="option" for="edit-submitted-services-requested-1">Enclosure </label>
-
- </div>
- <div class="form-item form-type-checkbox form-item-submitted-services-requested-uphosltry">
- <input type="checkbox" id="edit-submitted-services-requested-2" name="submitted[services_requested][uphosltry]" value="uphosltry" class="form-checkbox"> <label class="option" for="edit-submitted-services-requested-2">Upholstry </label>
-
- </div>
- <div class="form-item form-type-checkbox form-item-submitted-services-requested-tops">
- <input type="checkbox" id="edit-submitted-services-requested-3" name="submitted[services_requested][tops]" value="tops" class="form-checkbox"> <label class="option" for="edit-submitted-services-requested-3">Boat Tops </label>
-
- </div>
- <div class="form-item form-type-checkbox form-item-submitted-services-requested-covers">
- <input type="checkbox" id="edit-submitted-services-requested-4" name="submitted[services_requested][covers]" value="covers" class="form-checkbox"> <label class="option" for="edit-submitted-services-requested-4">Covers </label>
-
- </div>
- <div class="form-item form-type-checkbox form-item-submitted-services-requested-windows">
- <input type="checkbox" id="edit-submitted-services-requested-5" name="submitted[services_requested][windows]" value="windows" class="form-checkbox"> <label class="option" for="edit-submitted-services-requested-5">Bonded Windows </label>
-
- </div>
- <div class="form-item form-type-checkbox form-item-submitted-services-requested-carpet">
- <input type="checkbox" id="edit-submitted-services-requested-6" name="submitted[services_requested][carpet]" value="carpet" class="form-checkbox"> <label class="option" for="edit-submitted-services-requested-6">Carpet </label>
-
- </div>
- <div class="form-item form-type-checkbox form-item-submitted-services-requested-dodger">
- <input type="checkbox" id="edit-submitted-services-requested-7" name="submitted[services_requested][dodger]" value="dodger" class="form-checkbox"> <label class="option" for="edit-submitted-services-requested-7">Dodgers </label>
-
- </div>
- <div class="form-item form-type-checkbox form-item-submitted-services-requested-headliners">
- <input type="checkbox" id="edit-submitted-services-requested-8" name="submitted[services_requested][headliners]" value="headliners" class="form-checkbox"> <label class="option" for="edit-submitted-services-requested-8">Headliners </label>
-
- </div>
- <div class="form-item form-type-checkbox form-item-submitted-services-requested-repairs">
- <input type="checkbox" id="edit-submitted-services-requested-9" name="submitted[services_requested][repairs]" value="repairs" class="form-checkbox"> <label class="option" for="edit-submitted-services-requested-9">Repairs &amp; Stitching </label>
-
- </div>
- <div class="form-item form-type-checkbox form-item-submitted-services-requested-framebending">
- <input type="checkbox" id="edit-submitted-services-requested-10" name="submitted[services_requested][framebending]" value="framebending" class="form-checkbox"> <label class="option" for="edit-submitted-services-requested-10">Custom Frame Bending </label>
-
- </div>
- <div class="form-item form-type-checkbox form-item-submitted-services-requested-misc">
- <input type="checkbox" id="edit-submitted-services-requested-11" name="submitted[services_requested][misc]" value="misc" class="form-checkbox"> <label class="option" for="edit-submitted-services-requested-11">Misc/NA </label>
-
- </div>
- </div>
- </div>
- <div class="form-item webform-component webform-component-multifile" id="webform-component-vessel-images-multi">
- <div class="form-item form-type-file form-item-files-vessel-images-multi">
- <label>
- Vessel Images
- <div class="MultiFile-wrap" id="edit-vessel-images-multi_wrap"><input class="form-item multi MultiFile-identifier-vessel-images-multi form-file jquery-once-1-processed MultiFile-applied" type="file" id="edit-vessel-images-multi" name="files[vessel_images_multi][]" size="60" value=""><div class="MultiFile-list" id="edit-vessel-images-multi_wrap_list"></div></div>
- </label>
- <div class="description">Please upload any relevant images.</div>
- </div>
- <div class="outer"><div class="inner"></div></div><input type="hidden" name="submitted[vessel_images_multi][_fids]" value="">
- <input type="hidden" name="submitted[vessel_images_multi][_old_fids]">
-
- </div>
- <input type="hidden" name="details[sid]">
- <input type="hidden" name="details[page_num]" value="1">
- <input type="hidden" name="details[page_count]" value="1">
- <input type="hidden" name="details[finished]" value="0">
- <input type="hidden" name="form_build_id" value="form-XlJ0zOK1V4N95GlwBuj7VP0EwSksg8EYPRx8hgFY8Ko">
- <input type="hidden" name="form_id" value="webform_client_form_598">
- <div class="form-actions form-wrapper" id="edit-actions"><input class="btn btn-primary form-submit" type="submit" id="edit-submit" name="op" value="Submit"></div></div>
- </form>
- </section>
- {% endblock %}
-
+ </section>
+ <section class="estimate">
+ <form class="webform-client-form MultiFile-intercepted" enctype="multipart/form-data" action="/request-estimate?service_url=https%3A//www.canvasinnovations.us/marine-services/upholstery&amp;service_interest=Upholstery" method="post" id="webform-client-form-598" accept-charset="UTF-8">
+ <div>
+ <div class="form-item webform-component webform-component-markup" id="webform-component-personal-information-title">
+ <div class="row">
+ <h3>Personal Information</h3>
+ <hr>
+ <div class="column medium-4">
+ <label>
+ Name <small>(required)</small>
+ <input type="text" name="submitted[first_name]" value="" size="30" maxlength="128" class="form-text required">
+ </label>
+ <label>
+ Email <small> (required)</small>
+ <input class="email form-text form-email required" type="email" id="edit-submitted-email-address" name="submitted[email_address]" size="30">
+ </label>
+ <label>
+ Phone <small> (required)</small>
+ <input type="text" id="edit-submitted-phone-number" name="submitted[phone_number]" value="" size="15" maxlength="128" class="form-text required">
+ </label>
+ </div>
+ <div class="column medium-8">
+ <label>
+ Instructions, Comments, or Questions
+ <div class="form-textarea-wrapper">
+ <textarea style="height: 280px" id="edit-submitted-instructions-comments-or-questions" name="submitted[instructions_comments_or_questions]" class="form-textarea"></textarea>
+ </div>
+ </label>
+ </div>
+ </div>
+ <hr>
+ <div class="row">
+ <div class="column medium-8">
+ <h3>Vessel Information</h3>
+ <hr>
+ <label>
+ Make/Model
+ <input type="text" id="edit-submitted-make-model" name="submitted[make_model]" value="" size="30" maxlength="128" class="form-text">
+ </label>
+ <div class="form-item webform-component webform-component-number" id="webform-component-size">
+ <label>
+ Size <small> (required)</small>
+ <input type="number" id="edit-submitted-size" name="submitted[size]" step="0.5" class="form-text form-number required"> <span class="field-suffix">Ft</span>
+ </label>
+ </div>
+ <label>
+ City <small> (required)</small>
+ <input type="text" id="edit-submitted-vessel-city" name="submitted[vessel_city]" value="" size="30" maxlength="128" class="form-text required">
+ </label>
+ <div class="form-item webform-component webform-component-select" id="webform-component-vessel-state">
+ <label>
+ State <small> (required)</small>
+ <select id="edit-submitted-vessel-state" name="submitted[vessel_state]" class="form-select required">
+ <option value="" selected="selected">- Select -</option>
+ <option value="IL">Illinois</option>
+ <option value="IN">Indiana</option>
+ <option value="MI">Michigan</option>
+ <option value="OH">Ohio</option>
+ </select>
+ </label>
+ </div>
+ <label>
+ Zip Code <small> (required)</small>
+ <input type="text" id="edit-submitted-vessel-zip" name="submitted[vessel_zip]" value="" size="5" maxlength="128" class="form-text required">
+ </label>
+ <label>
+ Marina
+ <input type="text" id="edit-submitted-marina" name="submitted[marina]" value="" size="30" maxlength="128" class="form-text">
+ </label>
+ </div>
+ <div class="column medium-4">
+ <label>
+ Services Requested <small> (required)</small>
+ <div id="edit-submitted-services-requested" class="form-checkboxes">
+ <div class="form-item form-type-checkbox form-item-submitted-services-requested-enclosures">
+ </label>
+ <input type="checkbox" id="edit-submitted-services-requested-1" name="submitted[services_requested][enclosures]" value="enclosures" class="form-checkbox">
+ <label class="option" for="edit-submitted-services-requested-1">Enclosure </label>
+ </div>
+ <div class="form-item form-type-checkbox form-item-submitted-services-requested-uphosltry">
+ <input type="checkbox" id="edit-submitted-services-requested-2" name="submitted[services_requested][uphosltry]" value="uphosltry" class="form-checkbox">
+ <label class="option" for="edit-submitted-services-requested-2">Upholstry </label>
+ </div>
+ <div class="form-item form-type-checkbox form-item-submitted-services-requested-tops">
+ <input type="checkbox" id="edit-submitted-services-requested-3" name="submitted[services_requested][tops]" value="tops" class="form-checkbox">
+ <label class="option" for="edit-submitted-services-requested-3">Boat Tops </label>
+ </div>
+ <div class="form-item form-type-checkbox form-item-submitted-services-requested-covers">
+ <input type="checkbox" id="edit-submitted-services-requested-4" name="submitted[services_requested][covers]" value="covers" class="form-checkbox">
+ <label class="option" for="edit-submitted-services-requested-4">Covers </label>
+ </div>
+ <div class="form-item form-type-checkbox form-item-submitted-services-requested-windows">
+ <input type="checkbox" id="edit-submitted-services-requested-5" name="submitted[services_requested][windows]" value="windows" class="form-checkbox">
+ <label class="option" for="edit-submitted-services-requested-5">Bonded Windows </label>
+ </div>
+ <div class="form-item form-type-checkbox form-item-submitted-services-requested-carpet">
+ <input type="checkbox" id="edit-submitted-services-requested-6" name="submitted[services_requested][carpet]" value="carpet" class="form-checkbox">
+ <label class="option" for="edit-submitted-services-requested-6">Carpet </label>
+ </div>
+ <div class="form-item form-type-checkbox form-item-submitted-services-requested-dodger">
+ <input type="checkbox" id="edit-submitted-services-requested-7" name="submitted[services_requested][dodger]" value="dodger" class="form-checkbox">
+ <label class="option" for="edit-submitted-services-requested-7">Dodgers </label>
+ </div>
+ <div class="form-item form-type-checkbox form-item-submitted-services-requested-headliners">
+ <input type="checkbox" id="edit-submitted-services-requested-8" name="submitted[services_requested][headliners]" value="headliners" class="form-checkbox">
+ <label class="option" for="edit-submitted-services-requested-8">Headliners </label>
+ </div>
+ <div class="form-item form-type-checkbox form-item-submitted-services-requested-repairs">
+ <input type="checkbox" id="edit-submitted-services-requested-9" name="submitted[services_requested][repairs]" value="repairs" class="form-checkbox">
+ <label class="option" for="edit-submitted-services-requested-9">Repairs &amp; Stitching </label>
+ </div>
+ <div class="form-item form-type-checkbox form-item-submitted-services-requested-framebending">
+ <input type="checkbox" id="edit-submitted-services-requested-10" name="submitted[services_requested][framebending]" value="framebending" class="form-checkbox">
+ <label class="option" for="edit-submitted-services-requested-10">Custom Frame Bending </label>
+ </div>
+ <div class="form-item form-type-checkbox form-item-submitted-services-requested-misc">
+ <input type="checkbox" id="edit-submitted-services-requested-11" name="submitted[services_requested][misc]" value="misc" class="form-checkbox">
+ <label class="option" for="edit-submitted-services-requested-11">Misc/NA </label>
+ </div>
+ <label>
+ Vessel Images
+ <div class="MultiFile-wrap" id="edit-vessel-images-multi_wrap">
+ <input class="form-item multi MultiFile-identifier-vessel-images-multi form-file jquery-once-1-processed MultiFile-applied" type="file" id="edit-vessel-images-multi" name="files[vessel_images_multi][]" size="60" value="">
+ <div class="MultiFile-list" id="edit-vessel-images-multi_wrap_list"></div>
+ </div>
+ </label>
+ <div class="description">Please upload any relevant images.</div>
+ </div>
+ </div>
+ <div class="form-item webform-component webform-component-multifile" id="webform-component-vessel-images-multi">
+ <div class="form-item form-type-file form-item-files-vessel-images-multi">
+
+ </div>
+ <div class="outer">
+ <div class="inner"></div>
+ </div>
+ <input type="hidden" name="submitted[vessel_images_multi][_fids]" value="">
+ <input type="hidden" name="submitted[vessel_images_multi][_old_fids]">
+ </div>
+ <input type="hidden" name="details[sid]">
+ <input type="hidden" name="details[page_num]" value="1">
+ <input type="hidden" name="details[page_count]" value="1">
+ <input type="hidden" name="details[finished]" value="0">
+ <input type="hidden" name="form_build_id" value="form-XlJ0zOK1V4N95GlwBuj7VP0EwSksg8EYPRx8hgFY8Ko">
+ <input type="hidden" name="form_id" value="webform_client_form_598">
+ <div class="form-actions form-wrapper" id="edit-actions">
+ <input class="btn btn-primary form-submit" type="submit" id="edit-submit" name="op" value="Submit">
+ </div>
+ </div>
+ </form>
+ </section>
+ {% endblock %}
app/views/pages/layouts/application.liquid +4 -4
@@ @@ -20,7 +20,8 @@ is_layout: true
gtag('js', new Date());
gtag('config', '###');
</script>
-
+ {% block head %}
+ {% endblock %}
</head>
<body class="{{ page.slug }}">
<!-- Start Top Bar -->
@@ @@ -48,9 +49,8 @@ is_layout: true
</footer>
</div>
<script src="https://code.jquery.com/jquery-2.2.3.min.js" integrity="sha256-a23g1Nt4dtEYOj7bR+vTu7+T8VP13humZFBJNIYoEJo=" crossorigin="anonymous"></script>
- {{ 'vendor/jquery.sticky.js' | javascript_tag }}
- {{ 'vendor/what-input.min.js' | javascript_tag }}
- {{ 'vendor/foundation.min.js' | javascript_tag }}
{{ 'app.js' | javascript_tag }}
+ {% block body_bottom %}
+ {% endblock %}
</body>
</html>
app/views/pages/services/content_type_template.liquid +31 -2
@@ @@ -3,6 +3,10 @@ title: Service Template Page
content_type: services
---
{% extends 'layouts/application' %}
+ {% block head %}
+ {{ 'blueimp/blueimp-gallery.css' | stylesheet_tag }}
+ {% endblock %}
+
{% block main %}
<header class="service" data-background-url="{{ service.featured_image.url | resize: '1200x400#' }}">
<div class="content row column text-center">
@@ @@ -23,12 +27,37 @@ content_type: services
</p>
</div>
</div>
- <div class="row column callout medium-up-5">
+ <div id="links" class="row column callout medium-up-5">
{% for image in service.images %}
<div class="column column-block">
- <img class="" src="{{ image.file.url }}">
+ <a href="{{ image.file.url }}">
+ <img class="" src="{{ image.file.url }}">
+ </a>
</div>
{% endfor %}
</div>
{% endblock %}
+ {% block body_bottom %}
+ <div id="blueimp-gallery" class="blueimp-gallery">
+ <div class="slides"></div>
+ <h3 class="title"></h3>
+ <a class="prev">‹</a>
+ <a class="next">›</a>
+ <a class="close">×</a>
+ <a class="play-pause"></a>
+ <ol class="indicator"></ol>
+ </div>
+ {{ 'blueimp/blueimp-gallery.js' | javascript_tag }}
+ <script>
+ document.getElementById('links').onclick = function (event) {
+ event = event || window.event;
+ var target = event.target || event.srcElement,
+ link = target.src ? target.parentNode : target,
+ options = {index: link, event: event},
+ links = this.getElementsByTagName('a');
+ blueimp.Gallery(links, options);
+ };
+ </script>
+ {% endblock %}
+
public/javascripts/app.js +4 -0
@@ @@ -1,3 +1,7 @@
+ //= require vendor/jquery.sticky
+ //= require vendor/what-input
+ //= require vendor/foundation
+
$(document).foundation();
// $(".top-bar").sticky({zIndex:10});
public/javascripts/blueimp/blueimp-gallery-fullscreen.js +84 -0
@@ @@ -0,0 +1,84 @@
+ /*
+ * blueimp Gallery Fullscreen JS
+ * https://github.com/blueimp/Gallery
+ *
+ * Copyright 2013, Sebastian Tschan
+ * https://blueimp.net
+ *
+ * Licensed under the MIT license:
+ * https://opensource.org/licenses/MIT
+ */
+
+ /* global define, window, document */
+
+ ;(function (factory) {
+ 'use strict'
+ if (typeof define === 'function' && define.amd) {
+ // Register as an anonymous AMD module:
+ define(['./blueimp-helper', './blueimp-gallery'], factory)
+ } else {
+ // Browser globals:
+ factory(window.blueimp.helper || window.jQuery, window.blueimp.Gallery)
+ }
+ })(function ($, Gallery) {
+ 'use strict'
+
+ $.extend(Gallery.prototype.options, {
+ // Defines if the gallery should open in fullscreen mode:
+ fullScreen: false
+ })
+
+ var initialize = Gallery.prototype.initialize
+ var close = Gallery.prototype.close
+
+ $.extend(Gallery.prototype, {
+ getFullScreenElement: function () {
+ return (
+ document.fullscreenElement ||
+ document.webkitFullscreenElement ||
+ document.mozFullScreenElement ||
+ document.msFullscreenElement
+ )
+ },
+
+ requestFullScreen: function (element) {
+ if (element.requestFullscreen) {
+ element.requestFullscreen()
+ } else if (element.webkitRequestFullscreen) {
+ element.webkitRequestFullscreen()
+ } else if (element.mozRequestFullScreen) {
+ element.mozRequestFullScreen()
+ } else if (element.msRequestFullscreen) {
+ element.msRequestFullscreen()
+ }
+ },
+
+ exitFullScreen: function () {
+ if (document.exitFullscreen) {
+ document.exitFullscreen()
+ } else if (document.webkitCancelFullScreen) {
+ document.webkitCancelFullScreen()
+ } else if (document.mozCancelFullScreen) {
+ document.mozCancelFullScreen()
+ } else if (document.msExitFullscreen) {
+ document.msExitFullscreen()
+ }
+ },
+
+ initialize: function () {
+ initialize.call(this)
+ if (this.options.fullScreen && !this.getFullScreenElement()) {
+ this.requestFullScreen(this.container[0])
+ }
+ },
+
+ close: function () {
+ if (this.getFullScreenElement() === this.container[0]) {
+ this.exitFullScreen()
+ }
+ close.call(this)
+ }
+ })
+
+ return Gallery
+ })
public/javascripts/blueimp/blueimp-gallery-indicator.js +145 -0
@@ @@ -0,0 +1,145 @@
+ /*
+ * blueimp Gallery Indicator JS
+ * https://github.com/blueimp/Gallery
+ *
+ * Copyright 2013, Sebastian Tschan
+ * https://blueimp.net
+ *
+ * Licensed under the MIT license:
+ * https://opensource.org/licenses/MIT
+ */
+
+ /* global define, window, document */
+
+ ;(function (factory) {
+ 'use strict'
+ if (typeof define === 'function' && define.amd) {
+ // Register as an anonymous AMD module:
+ define(['./blueimp-helper', './blueimp-gallery'], factory)
+ } else {
+ // Browser globals:
+ factory(window.blueimp.helper || window.jQuery, window.blueimp.Gallery)
+ }
+ })(function ($, Gallery) {
+ 'use strict'
+
+ $.extend(Gallery.prototype.options, {
+ // The tag name, Id, element or querySelector of the indicator container:
+ indicatorContainer: 'ol',
+ // The class for the active indicator:
+ activeIndicatorClass: 'active',
+ // The list object property (or data attribute) with the thumbnail URL,
+ // used as alternative to a thumbnail child element:
+ thumbnailProperty: 'thumbnail',
+ // Defines if the gallery indicators should display a thumbnail:
+ thumbnailIndicators: true
+ })
+
+ var initSlides = Gallery.prototype.initSlides
+ var addSlide = Gallery.prototype.addSlide
+ var resetSlides = Gallery.prototype.resetSlides
+ var handleClick = Gallery.prototype.handleClick
+ var handleSlide = Gallery.prototype.handleSlide
+ var handleClose = Gallery.prototype.handleClose
+
+ $.extend(Gallery.prototype, {
+ createIndicator: function (obj) {
+ var indicator = this.indicatorPrototype.cloneNode(false)
+ var title = this.getItemProperty(obj, this.options.titleProperty)
+ var thumbnailProperty = this.options.thumbnailProperty
+ var thumbnailUrl
+ var thumbnail
+ if (this.options.thumbnailIndicators) {
+ if (thumbnailProperty) {
+ thumbnailUrl = this.getItemProperty(obj, thumbnailProperty)
+ }
+ if (thumbnailUrl === undefined) {
+ thumbnail = obj.getElementsByTagName && $(obj).find('img')[0]
+ if (thumbnail) {
+ thumbnailUrl = thumbnail.src
+ }
+ }
+ if (thumbnailUrl) {
+ indicator.style.backgroundImage = 'url("' + thumbnailUrl + '")'
+ }
+ }
+ if (title) {
+ indicator.title = title
+ }
+ return indicator
+ },
+
+ addIndicator: function (index) {
+ if (this.indicatorContainer.length) {
+ var indicator = this.createIndicator(this.list[index])
+ indicator.setAttribute('data-index', index)
+ this.indicatorContainer[0].appendChild(indicator)
+ this.indicators.push(indicator)
+ }
+ },
+
+ setActiveIndicator: function (index) {
+ if (this.indicators) {
+ if (this.activeIndicator) {
+ this.activeIndicator.removeClass(this.options.activeIndicatorClass)
+ }
+ this.activeIndicator = $(this.indicators[index])
+ this.activeIndicator.addClass(this.options.activeIndicatorClass)
+ }
+ },
+
+ initSlides: function (reload) {
+ if (!reload) {
+ this.indicatorContainer = this.container.find(
+ this.options.indicatorContainer
+ )
+ if (this.indicatorContainer.length) {
+ this.indicatorPrototype = document.createElement('li')
+ this.indicators = this.indicatorContainer[0].children
+ }
+ }
+ initSlides.call(this, reload)
+ },
+
+ addSlide: function (index) {
+ addSlide.call(this, index)
+ this.addIndicator(index)
+ },
+
+ resetSlides: function () {
+ resetSlides.call(this)
+ this.indicatorContainer.empty()
+ this.indicators = []
+ },
+
+ handleClick: function (event) {
+ var target = event.target || event.srcElement
+ var parent = target.parentNode
+ if (parent === this.indicatorContainer[0]) {
+ // Click on indicator element
+ this.preventDefault(event)
+ this.slide(this.getNodeIndex(target))
+ } else if (parent.parentNode === this.indicatorContainer[0]) {
+ // Click on indicator child element
+ this.preventDefault(event)
+ this.slide(this.getNodeIndex(parent))
+ } else {
+ return handleClick.call(this, event)
+ }
+ },
+
+ handleSlide: function (index) {
+ handleSlide.call(this, index)
+ this.setActiveIndicator(index)
+ },
+
+ handleClose: function () {
+ if (this.activeIndicator) {
+ this.activeIndicator.removeClass(this.options.activeIndicatorClass)
+ }
+ handleClose.call(this)
+ }
+ })
+
+ return Gallery
+ })
public/javascripts/blueimp/blueimp-gallery-video.js +166 -0
@@ @@ -0,0 +1,166 @@
+ /*
+ * blueimp Gallery Video Factory JS
+ * https://github.com/blueimp/Gallery
+ *
+ * Copyright 2013, Sebastian Tschan
+ * https://blueimp.net
+ *
+ * Licensed under the MIT license:
+ * https://opensource.org/licenses/MIT
+ */
+
+ /* global define, window, document */
+
+ ;(function (factory) {
+ 'use strict'
+ if (typeof define === 'function' && define.amd) {
+ // Register as an anonymous AMD module:
+ define(['./blueimp-helper', './blueimp-gallery'], factory)
+ } else {
+ // Browser globals:
+ factory(window.blueimp.helper || window.jQuery, window.blueimp.Gallery)
+ }
+ })(function ($, Gallery) {
+ 'use strict'
+
+ $.extend(Gallery.prototype.options, {
+ // The class for video content elements:
+ videoContentClass: 'video-content',
+ // The class for video when it is loading:
+ videoLoadingClass: 'video-loading',
+ // The class for video when it is playing:
+ videoPlayingClass: 'video-playing',
+ // The list object property (or data attribute) for the video poster URL:
+ videoPosterProperty: 'poster',
+ // The list object property (or data attribute) for the video sources array:
+ videoSourcesProperty: 'sources'
+ })
+
+ var handleSlide = Gallery.prototype.handleSlide
+
+ $.extend(Gallery.prototype, {
+ handleSlide: function (index) {
+ handleSlide.call(this, index)
+ if (this.playingVideo) {
+ this.playingVideo.pause()
+ }
+ },
+
+ videoFactory: function (obj, callback, videoInterface) {
+ var that = this
+ var options = this.options
+ var videoContainerNode = this.elementPrototype.cloneNode(false)
+ var videoContainer = $(videoContainerNode)
+ var errorArgs = [
+ {
+ type: 'error',
+ target: videoContainerNode
+ }
+ ]
+ var video = videoInterface || document.createElement('video')
+ var url = this.getItemProperty(obj, options.urlProperty)
+ var type = this.getItemProperty(obj, options.typeProperty)
+ var title = this.getItemProperty(obj, options.titleProperty)
+ var posterUrl = this.getItemProperty(obj, options.videoPosterProperty)
+ var posterImage
+ var sources = this.getItemProperty(obj, options.videoSourcesProperty)
+ var source
+ var playMediaControl
+ var isLoading
+ var hasControls
+ videoContainer.addClass(options.videoContentClass)
+ if (title) {
+ videoContainerNode.title = title
+ }
+ if (video.canPlayType) {
+ if (url && type && video.canPlayType(type)) {
+ video.src = url
+ } else if (sources) {
+ while (sources.length) {
+ source = sources.shift()
+ url = this.getItemProperty(source, options.urlProperty)
+ type = this.getItemProperty(source, options.typeProperty)
+ if (url && type && video.canPlayType(type)) {
+ video.src = url
+ break
+ }
+ }
+ }
+ }
+ if (posterUrl) {
+ video.poster = posterUrl
+ posterImage = this.imagePrototype.cloneNode(false)
+ $(posterImage).addClass(options.toggleClass)
+ posterImage.src = posterUrl
+ posterImage.draggable = false
+ videoContainerNode.appendChild(posterImage)
+ }
+ playMediaControl = document.createElement('a')
+ playMediaControl.setAttribute('target', '_blank')
+ if (!videoInterface) {
+ playMediaControl.setAttribute('download', title)
+ }
+ playMediaControl.href = url
+ if (video.src) {
+ video.controls = true
+ ;(videoInterface || $(video))
+ .on('error', function () {
+ that.setTimeout(callback, errorArgs)
+ })
+ .on('pause', function () {
+ if (video.seeking) return
+ isLoading = false
+ videoContainer
+ .removeClass(that.options.videoLoadingClass)
+ .removeClass(that.options.videoPlayingClass)
+ if (hasControls) {
+ that.container.addClass(that.options.controlsClass)
+ }
+ delete that.playingVideo
+ if (that.interval) {
+ that.play()
+ }
+ })
+ .on('playing', function () {
+ isLoading = false
+ videoContainer
+ .removeClass(that.options.videoLoadingClass)
+ .addClass(that.options.videoPlayingClass)
+ if (that.container.hasClass(that.options.controlsClass)) {
+ hasControls = true
+ that.container.removeClass(that.options.controlsClass)
+ } else {
+ hasControls = false
+ }
+ })
+ .on('play', function () {
+ window.clearTimeout(that.timeout)
+ isLoading = true
+ videoContainer.addClass(that.options.videoLoadingClass)
+ that.playingVideo = video
+ })
+ $(playMediaControl).on('click', function (event) {
+ that.preventDefault(event)
+ if (isLoading) {
+ video.pause()
+ } else {
+ video.play()
+ }
+ })
+ videoContainerNode.appendChild(
+ (videoInterface && videoInterface.element) || video
+ )
+ }
+ videoContainerNode.appendChild(playMediaControl)
+ this.setTimeout(callback, [
+ {
+ type: 'load',
+ target: videoContainerNode
+ }
+ ])
+ return videoContainerNode
+ }
+ })
+
+ return Gallery
+ })
public/javascripts/blueimp/blueimp-gallery-vimeo.js +210 -0
@@ @@ -0,0 +1,210 @@
+ /*
+ * blueimp Gallery Vimeo Video Factory JS
+ * https://github.com/blueimp/Gallery
+ *
+ * Copyright 2013, Sebastian Tschan
+ * https://blueimp.net
+ *
+ * Licensed under the MIT license:
+ * https://opensource.org/licenses/MIT
+ */
+
+ /* global define, window, document, $f */
+
+ ;(function (factory) {
+ 'use strict'
+ if (typeof define === 'function' && define.amd) {
+ // Register as an anonymous AMD module:
+ define(['./blueimp-helper', './blueimp-gallery-video'], factory)
+ } else {
+ // Browser globals:
+ factory(window.blueimp.helper || window.jQuery, window.blueimp.Gallery)
+ }
+ })(function ($, Gallery) {
+ 'use strict'
+
+ if (!window.postMessage) {
+ return Gallery
+ }
+
+ $.extend(Gallery.prototype.options, {
+ // The list object property (or data attribute) with the Vimeo video id:
+ vimeoVideoIdProperty: 'vimeo',
+ // The URL for the Vimeo video player, can be extended with custom parameters:
+ // https://developer.vimeo.com/player/embedding
+ vimeoPlayerUrl:
+ '//player.vimeo.com/video/VIDEO_ID?api=1&player_id=PLAYER_ID',
+ // The prefix for the Vimeo video player ID:
+ vimeoPlayerIdPrefix: 'vimeo-player-',
+ // Require a click on the native Vimeo player for the initial playback:
+ vimeoClickToPlay: true
+ })
+
+ var textFactory =
+ Gallery.prototype.textFactory || Gallery.prototype.imageFactory
+ var VimeoPlayer = function (url, videoId, playerId, clickToPlay) {
+ this.url = url
+ this.videoId = videoId
+ this.playerId = playerId
+ this.clickToPlay = clickToPlay
+ this.element = document.createElement('div')
+ this.listeners = {}
+ }
+ var counter = 0
+
+ $.extend(VimeoPlayer.prototype, {
+ canPlayType: function () {
+ return true
+ },
+
+ on: function (type, func) {
+ this.listeners[type] = func
+ return this
+ },
+
+ loadAPI: function () {
+ var that = this
+ var apiUrl = '//f.vimeocdn.com/js/froogaloop2.min.js'
+ var scriptTags = document.getElementsByTagName('script')
+ var i = scriptTags.length
+ var scriptTag
+ var called
+ function callback () {
+ if (!called && that.playOnReady) {
+ that.play()
+ }
+ called = true
+ }
+ while (i) {
+ i -= 1
+ if (scriptTags[i].src === apiUrl) {
+ scriptTag = scriptTags[i]
+ break
+ }
+ }
+ if (!scriptTag) {
+ scriptTag = document.createElement('script')
+ scriptTag.src = apiUrl
+ }
+ $(scriptTag).on('load', callback)
+ scriptTags[0].parentNode.insertBefore(scriptTag, scriptTags[0])
+ // Fix for cached scripts on IE 8:
+ if (/loaded|complete/.test(scriptTag.readyState)) {
+ callback()
+ }
+ },
+
+ onReady: function () {
+ var that = this
+ this.ready = true
+ this.player.addEvent('play', function () {
+ that.hasPlayed = true
+ that.onPlaying()
+ })
+ this.player.addEvent('pause', function () {
+ that.onPause()
+ })
+ this.player.addEvent('finish', function () {
+ that.onPause()
+ })
+ if (this.playOnReady) {
+ this.play()
+ }
+ },
+
+ onPlaying: function () {
+ if (this.playStatus < 2) {
+ this.listeners.playing()
+ this.playStatus = 2
+ }
+ },
+
+ onPause: function () {
+ this.listeners.pause()
+ delete this.playStatus
+ },
+
+ insertIframe: function () {
+ var iframe = document.createElement('iframe')
+ iframe.src = this.url
+ .replace('VIDEO_ID', this.videoId)
+ .replace('PLAYER_ID', this.playerId)
+ iframe.id = this.playerId
+ this.element.parentNode.replaceChild(iframe, this.element)
+ this.element = iframe
+ },
+
+ play: function () {
+ var that = this
+ if (!this.playStatus) {
+ this.listeners.play()
+ this.playStatus = 1
+ }
+ if (this.ready) {
+ if (
+ !this.hasPlayed &&
+ (this.clickToPlay ||
+ (window.navigator &&
+ /iP(hone|od|ad)/.test(window.navigator.platform)))
+ ) {
+ // Manually trigger the playing callback if clickToPlay
+ // is enabled and to workaround a limitation in iOS,
+ // which requires synchronous user interaction to start
+ // the video playback:
+ this.onPlaying()
+ } else {
+ this.player.api('play')
+ }
+ } else {
+ this.playOnReady = true
+ if (!window.$f) {
+ this.loadAPI()
+ } else if (!this.player) {
+ this.insertIframe()
+ this.player = $f(this.element)
+ this.player.addEvent('ready', function () {
+ that.onReady()
+ })
+ }
+ }
+ },
+
+ pause: function () {
+ if (this.ready) {
+ this.player.api('pause')
+ } else if (this.playStatus) {
+ delete this.playOnReady
+ this.listeners.pause()
+ delete this.playStatus
+ }
+ }
+ })
+
+ $.extend(Gallery.prototype, {
+ VimeoPlayer: VimeoPlayer,
+
+ textFactory: function (obj, callback) {
+ var options = this.options
+ var videoId = this.getItemProperty(obj, options.vimeoVideoIdProperty)
+ if (videoId) {
+ if (this.getItemProperty(obj, options.urlProperty) === undefined) {
+ obj[options.urlProperty] = '//vimeo.com/' + videoId
+ }
+ counter += 1
+ return this.videoFactory(
+ obj,
+ callback,
+ new VimeoPlayer(
+ options.vimeoPlayerUrl,
+ videoId,
+ options.vimeoPlayerIdPrefix + counter,
+ options.vimeoClickToPlay
+ )
+ )
+ }
+ return textFactory.call(this, obj, callback)
+ }
+ })
+
+ return Gallery
+ })
public/javascripts/blueimp/blueimp-gallery-youtube.js +223 -0
@@ @@ -0,0 +1,223 @@
+ /*
+ * blueimp Gallery YouTube Video Factory JS
+ * https://github.com/blueimp/Gallery
+ *
+ * Copyright 2013, Sebastian Tschan
+ * https://blueimp.net
+ *
+ * Licensed under the MIT license:
+ * https://opensource.org/licenses/MIT
+ */
+
+ /* global define, window, document, YT */
+
+ ;(function (factory) {
+ 'use strict'
+ if (typeof define === 'function' && define.amd) {
+ // Register as an anonymous AMD module:
+ define(['./blueimp-helper', './blueimp-gallery-video'], factory)
+ } else {
+ // Browser globals:
+ factory(window.blueimp.helper || window.jQuery, window.blueimp.Gallery)
+ }
+ })(function ($, Gallery) {
+ 'use strict'
+
+ if (!window.postMessage) {
+ return Gallery
+ }
+
+ $.extend(Gallery.prototype.options, {
+ // The list object property (or data attribute) with the YouTube video id:
+ youTubeVideoIdProperty: 'youtube',
+ // Optional object with parameters passed to the YouTube video player:
+ // https://developers.google.com/youtube/player_parameters
+ youTubePlayerVars: {
+ wmode: 'transparent'
+ },
+ // Require a click on the native YouTube player for the initial playback:
+ youTubeClickToPlay: true
+ })
+
+ var textFactory =
+ Gallery.prototype.textFactory || Gallery.prototype.imageFactory
+ var YouTubePlayer = function (videoId, playerVars, clickToPlay) {
+ this.videoId = videoId
+ this.playerVars = playerVars
+ this.clickToPlay = clickToPlay
+ this.element = document.createElement('div')
+ this.listeners = {}
+ }
+
+ $.extend(YouTubePlayer.prototype, {
+ canPlayType: function () {
+ return true
+ },
+
+ on: function (type, func) {
+ this.listeners[type] = func
+ return this
+ },
+
+ loadAPI: function () {
+ var that = this
+ var onYouTubeIframeAPIReady = window.onYouTubeIframeAPIReady
+ var apiUrl = '//www.youtube.com/iframe_api'
+ var scriptTags = document.getElementsByTagName('script')
+ var i = scriptTags.length
+ var scriptTag
+ window.onYouTubeIframeAPIReady = function () {
+ if (onYouTubeIframeAPIReady) {
+ onYouTubeIframeAPIReady.apply(this)
+ }
+ if (that.playOnReady) {
+ that.play()
+ }
+ }
+ while (i) {
+ i -= 1
+ if (scriptTags[i].src === apiUrl) {
+ return
+ }
+ }
+ scriptTag = document.createElement('script')
+ scriptTag.src = apiUrl
+ scriptTags[0].parentNode.insertBefore(scriptTag, scriptTags[0])
+ },
+
+ onReady: function () {
+ this.ready = true
+ if (this.playOnReady) {
+ this.play()
+ }
+ },
+
+ onPlaying: function () {
+ if (this.playStatus < 2) {
+ this.listeners.playing()
+ this.playStatus = 2
+ }
+ },
+
+ onPause: function () {
+ Gallery.prototype.setTimeout.call(this, this.checkSeek, null, 2000)
+ },
+
+ checkSeek: function () {
+ if (
+ this.stateChange === YT.PlayerState.PAUSED ||
+ this.stateChange === YT.PlayerState.ENDED
+ ) {
+ // check if current state change is actually paused
+ this.listeners.pause()
+ delete this.playStatus
+ }
+ },
+
+ onStateChange: function (event) {
+ switch (event.data) {
+ case YT.PlayerState.PLAYING:
+ this.hasPlayed = true
+ this.onPlaying()
+ break
+ case YT.PlayerState.PAUSED:
+ case YT.PlayerState.ENDED:
+ this.onPause()
+ break
+ }
+ // Save most recent state change to this.stateChange
+ this.stateChange = event.data
+ },
+
+ onError: function (event) {
+ this.listeners.error(event)
+ },
+
+ play: function () {
+ var that = this
+ if (!this.playStatus) {
+ this.listeners.play()
+ this.playStatus = 1
+ }
+ if (this.ready) {
+ if (
+ !this.hasPlayed &&
+ (this.clickToPlay ||
+ (window.navigator &&
+ /iP(hone|od|ad)/.test(window.navigator.platform)))
+ ) {
+ // Manually trigger the playing callback if clickToPlay
+ // is enabled and to workaround a limitation in iOS,
+ // which requires synchronous user interaction to start
+ // the video playback:
+ this.onPlaying()
+ } else {
+ this.player.playVideo()
+ }
+ } else {
+ this.playOnReady = true
+ if (!(window.YT && YT.Player)) {
+ this.loadAPI()
+ } else if (!this.player) {
+ this.player = new YT.Player(this.element, {
+ videoId: this.videoId,
+ playerVars: this.playerVars,
+ events: {
+ onReady: function () {
+ that.onReady()
+ },
+ onStateChange: function (event) {
+ that.onStateChange(event)
+ },
+ onError: function (event) {
+ that.onError(event)
+ }
+ }
+ })
+ }
+ }
+ },
+
+ pause: function () {
+ if (this.ready) {
+ this.player.pauseVideo()
+ } else if (this.playStatus) {
+ delete this.playOnReady
+ this.listeners.pause()
+ delete this.playStatus
+ }
+ }
+ })
+
+ $.extend(Gallery.prototype, {
+ YouTubePlayer: YouTubePlayer,
+
+ textFactory: function (obj, callback) {
+ var options = this.options
+ var videoId = this.getItemProperty(obj, options.youTubeVideoIdProperty)
+ if (videoId) {
+ if (this.getItemProperty(obj, options.urlProperty) === undefined) {
+ obj[options.urlProperty] = '//www.youtube.com/watch?v=' + videoId
+ }
+ if (
+ this.getItemProperty(obj, options.videoPosterProperty) === undefined
+ ) {
+ obj[options.videoPosterProperty] =
+ '//img.youtube.com/vi/' + videoId + '/maxresdefault.jpg'
+ }
+ return this.videoFactory(
+ obj,
+ callback,
+ new YouTubePlayer(
+ videoId,
+ options.youTubePlayerVars,
+ options.youTubeClickToPlay
+ )
+ )
+ }
+ return textFactory.call(this, obj, callback)
+ }
+ })
+
+ return Gallery
+ })
public/javascripts/blueimp/blueimp-gallery.js +1408 -0
@@ @@ -0,0 +1,1408 @@
+ /*
+ * blueimp Gallery JS
+ * https://github.com/blueimp/Gallery
+ *
+ * Copyright 2013, Sebastian Tschan
+ * https://blueimp.net
+ *
+ * Swipe implementation based on
+ * https://github.com/bradbirdsall/Swipe
+ *
+ * Licensed under the MIT license:
+ * https://opensource.org/licenses/MIT
+ */
+
+ /* global define, window, document, DocumentTouch */
+
+ ;(function (factory) {
+ 'use strict'
+ if (typeof define === 'function' && define.amd) {
+ // Register as an anonymous AMD module:
+ define(['./blueimp-helper'], factory)
+ } else {
+ // Browser globals:
+ window.blueimp = window.blueimp || {}
+ window.blueimp.Gallery = factory(window.blueimp.helper || window.jQuery)
+ }
+ })(function ($) {
+ 'use strict'
+
+ function Gallery (list, options) {
+ if (document.body.style.maxHeight === undefined) {
+ // document.body.style.maxHeight is undefined on IE6 and lower
+ return null
+ }
+ if (!this || this.options !== Gallery.prototype.options) {
+ // Called as function instead of as constructor,
+ // so we simply return a new instance:
+ return new Gallery(list, options)
+ }
+ if (!list || !list.length) {
+ this.console.log(
+ 'blueimp Gallery: No or empty list provided as first argument.',
+ list
+ )
+ return
+ }
+ this.list = list
+ this.num = list.length
+ this.initOptions(options)
+ this.initialize()
+ }
+
+ $.extend(Gallery.prototype, {
+ options: {
+ // The Id, element or querySelector of the gallery widget:
+ container: '#blueimp-gallery',
+ // The tag name, Id, element or querySelector of the slides container:
+ slidesContainer: 'div',
+ // The tag name, Id, element or querySelector of the title element:
+ titleElement: 'h3',
+ // The class to add when the gallery is visible:
+ displayClass: 'blueimp-gallery-display',
+ // The class to add when the gallery controls are visible:
+ controlsClass: 'blueimp-gallery-controls',
+ // The class to add when the gallery only displays one element:
+ singleClass: 'blueimp-gallery-single',
+ // The class to add when the left edge has been reached:
+ leftEdgeClass: 'blueimp-gallery-left',
+ // The class to add when the right edge has been reached:
+ rightEdgeClass: 'blueimp-gallery-right',
+ // The class to add when the automatic slideshow is active:
+ playingClass: 'blueimp-gallery-playing',
+ // The class for all slides:
+ slideClass: 'slide',
+ // The slide class for loading elements:
+ slideLoadingClass: 'slide-loading',
+ // The slide class for elements that failed to load:
+ slideErrorClass: 'slide-error',
+ // The class for the content element loaded into each slide:
+ slideContentClass: 'slide-content',
+ // The class for the "toggle" control:
+ toggleClass: 'toggle',
+ // The class for the "prev" control:
+ prevClass: 'prev',
+ // The class for the "next" control:
+ nextClass: 'next',
+ // The class for the "close" control:
+ closeClass: 'close',
+ // The class for the "play-pause" toggle control:
+ playPauseClass: 'play-pause',
+ // The list object property (or data attribute) with the object type:
+ typeProperty: 'type',
+ // The list object property (or data attribute) with the object title:
+ titleProperty: 'title',
+ // The list object property (or data attribute) with the object URL:
+ urlProperty: 'href',
+ // The list object property (or data attribute) with the object srcset URL(s):
+ srcsetProperty: 'urlset',
+ // The gallery listens for transitionend events before triggering the
+ // opened and closed events, unless the following option is set to false:
+ displayTransition: true,
+ // Defines if the gallery slides are cleared from the gallery modal,
+ // or reused for the next gallery initialization:
+ clearSlides: true,
+ // Defines if images should be stretched to fill the available space,
+ // while maintaining their aspect ratio (will only be enabled for browsers
+ // supporting background-size="contain", which excludes IE < 9).
+ // Set to "cover", to make images cover all available space (requires
+ // support for background-size="cover", which excludes IE < 9):
+ stretchImages: false,
+ // Toggle the controls on pressing the Return key:
+ toggleControlsOnReturn: true,
+ // Toggle the controls on slide click:
+ toggleControlsOnSlideClick: true,
+ // Toggle the automatic slideshow interval on pressing the Space key:
+ toggleSlideshowOnSpace: true,
+ // Navigate the gallery by pressing left and right on the keyboard:
+ enableKeyboardNavigation: true,
+ // Close the gallery on pressing the Esc key:
+ closeOnEscape: true,
+ // Close the gallery when clicking on an empty slide area:
+ closeOnSlideClick: true,
+ // Close the gallery by swiping up or down:
+ closeOnSwipeUpOrDown: true,
+ // Emulate touch events on mouse-pointer devices such as desktop browsers:
+ emulateTouchEvents: true,
+ // Stop touch events from bubbling up to ancestor elements of the Gallery:
+ stopTouchEventsPropagation: false,
+ // Hide the page scrollbars:
+ hidePageScrollbars: true,
+ // Stops any touches on the container from scrolling the page:
+ disableScroll: true,
+ // Carousel mode (shortcut for carousel specific options):
+ carousel: false,
+ // Allow continuous navigation, moving from last to first
+ // and from first to last slide:
+ continuous: true,
+ // Remove elements outside of the preload range from the DOM:
+ unloadElements: true,
+ // Start with the automatic slideshow:
+ startSlideshow: false,
+ // Delay in milliseconds between slides for the automatic slideshow:
+ slideshowInterval: 5000,
+ // The starting index as integer.
+ // Can also be an object of the given list,
+ // or an equal object with the same url property:
+ index: 0,
+ // The number of elements to load around the current index:
+ preloadRange: 2,
+ // The transition speed between slide changes in milliseconds:
+ transitionSpeed: 400,
+ // The transition speed for automatic slide changes, set to an integer
+ // greater 0 to override the default transition speed:
+ slideshowTransitionSpeed: undefined,
+ // The event object for which the default action will be canceled
+ // on Gallery initialization (e.g. the click event to open the Gallery):
+ event: undefined,
+ // Callback function executed when the Gallery is initialized.
+ // Is called with the gallery instance as "this" object:
+ onopen: undefined,
+ // Callback function executed when the Gallery has been initialized
+ // and the initialization transition has been completed.
+ // Is called with the gallery instance as "this" object:
+ onopened: undefined,
+ // Callback function executed on slide change.
+ // Is called with the gallery instance as "this" object and the
+ // current index and slide as arguments:
+ onslide: undefined,
+ // Callback function executed after the slide change transition.
+ // Is called with the gallery instance as "this" object and the
+ // current index and slide as arguments:
+ onslideend: undefined,
+ // Callback function executed on slide content load.
+ // Is called with the gallery instance as "this" object and the
+ // slide index and slide element as arguments:
+ onslidecomplete: undefined,
+ // Callback function executed when the Gallery is about to be closed.
+ // Is called with the gallery instance as "this" object:
+ onclose: undefined,
+ // Callback function executed when the Gallery has been closed
+ // and the closing transition has been completed.
+ // Is called with the gallery instance as "this" object:
+ onclosed: undefined
+ },
+
+ carouselOptions: {
+ hidePageScrollbars: false,
+ toggleControlsOnReturn: false,
+ toggleSlideshowOnSpace: false,
+ enableKeyboardNavigation: false,
+ closeOnEscape: false,
+ closeOnSlideClick: false,
+ closeOnSwipeUpOrDown: false,
+ disableScroll: false,
+ startSlideshow: true
+ },
+
+ console:
+ window.console && typeof window.console.log === 'function'
+ ? window.console
+ : { log: function () {} },
+
+ // Detect touch, transition, transform and background-size support:
+ support: (function (element) {
+ var support = {
+ touch:
+ window.ontouchstart !== undefined ||
+ (window.DocumentTouch && document instanceof DocumentTouch)
+ }
+ var transitions = {
+ webkitTransition: {
+ end: 'webkitTransitionEnd',
+ prefix: '-webkit-'
+ },
+ MozTransition: {
+ end: 'transitionend',
+ prefix: '-moz-'
+ },
+ OTransition: {
+ end: 'otransitionend',
+ prefix: '-o-'
+ },
+ transition: {
+ end: 'transitionend',
+ prefix: ''
+ }
+ }
+ var prop
+ for (prop in transitions) {
+ if (
+ transitions.hasOwnProperty(prop) &&
+ element.style[prop] !== undefined
+ ) {
+ support.transition = transitions[prop]
+ support.transition.name = prop
+ break
+ }
+ }
+ function elementTests () {
+ var transition = support.transition
+ var prop
+ var translateZ
+ document.body.appendChild(element)
+ if (transition) {
+ prop = transition.name.slice(0, -9) + 'ransform'
+ if (element.style[prop] !== undefined) {
+ element.style[prop] = 'translateZ(0)'
+ translateZ = window
+ .getComputedStyle(element)
+ .getPropertyValue(transition.prefix + 'transform')
+ support.transform = {
+ prefix: transition.prefix,
+ name: prop,
+ translate: true,
+ translateZ: !!translateZ && translateZ !== 'none'
+ }
+ }
+ }
+ if (element.style.backgroundSize !== undefined) {
+ support.backgroundSize = {}
+ element.style.backgroundSize = 'contain'
+ support.backgroundSize.contain =
+ window
+ .getComputedStyle(element)
+ .getPropertyValue('background-size') === 'contain'
+ element.style.backgroundSize = 'cover'
+ support.backgroundSize.cover =
+ window
+ .getComputedStyle(element)
+ .getPropertyValue('background-size') === 'cover'
+ }
+ document.body.removeChild(element)
+ }
+ if (document.body) {
+ elementTests()
+ } else {
+ $(document).on('DOMContentLoaded', elementTests)
+ }
+ return support
+ // Test element, has to be standard HTML and must not be hidden
+ // for the CSS3 tests using window.getComputedStyle to be applicable:
+ })(document.createElement('div')),
+
+ requestAnimationFrame:
+ window.requestAnimationFrame ||
+ window.webkitRequestAnimationFrame ||
+ window.mozRequestAnimationFrame,
+
+ cancelAnimationFrame:
+ window.cancelAnimationFrame ||
+ window.webkitCancelRequestAnimationFrame ||
+ window.webkitCancelAnimationFrame ||
+ window.mozCancelAnimationFrame,
+
+ initialize: function () {
+ this.initStartIndex()
+ if (this.initWidget() === false) {
+ return false
+ }
+ this.initEventListeners()
+ // Load the slide at the given index:
+ this.onslide(this.index)
+ // Manually trigger the slideend event for the initial slide:
+ this.ontransitionend()
+ // Start the automatic slideshow if applicable:
+ if (this.options.startSlideshow) {
+ this.play()
+ }
+ },
+
+ slide: function (to, speed) {
+ window.clearTimeout(this.timeout)
+ var index = this.index
+ var direction
+ var naturalDirection
+ var diff
+ if (index === to || this.num === 1) {
+ return
+ }
+ if (!speed) {
+ speed = this.options.transitionSpeed
+ }
+ if (this.support.transform) {
+ if (!this.options.continuous) {
+ to = this.circle(to)
+ }
+ // 1: backward, -1: forward:
+ direction = Math.abs(index - to) / (index - to)
+ // Get the actual position of the slide:
+ if (this.options.continuous) {
+ naturalDirection = direction
+ direction = -this.positions[this.circle(to)] / this.slideWidth
+ // If going forward but to < index, use to = slides.length + to
+ // If going backward but to > index, use to = -slides.length + to
+ if (direction !== naturalDirection) {
+ to = -direction * this.num + to
+ }
+ }
+ diff = Math.abs(index - to) - 1
+ // Move all the slides between index and to in the right direction:
+ while (diff) {
+ diff -= 1
+ this.move(
+ this.circle((to > index ? to : index) - diff - 1),
+ this.slideWidth * direction,
+ 0
+ )
+ }
+ to = this.circle(to)
+ this.move(index, this.slideWidth * direction, speed)
+ this.move(to, 0, speed)
+ if (this.options.continuous) {
+ this.move(
+ this.circle(to - direction),
+ -(this.slideWidth * direction),
+ 0
+ )
+ }
+ } else {
+ to = this.circle(to)
+ this.animate(index * -this.slideWidth, to * -this.slideWidth, speed)
+ }
+ this.onslide(to)
+ },
+
+ getIndex: function () {
+ return this.index
+ },
+
+ getNumber: function () {
+ return this.num
+ },
+
+ prev: function () {
+ if (this.options.continuous || this.index) {
+ this.slide(this.index - 1)
+ }
+ },
+
+ next: function () {
+ if (this.options.continuous || this.index < this.num - 1) {
+ this.slide(this.index + 1)
+ }
+ },
+
+ play: function (time) {
+ var that = this
+ window.clearTimeout(this.timeout)
+ this.interval = time || this.options.slideshowInterval
+ if (this.elements[this.index] > 1) {
+ this.timeout = this.setTimeout(
+ (!this.requestAnimationFrame && this.slide) ||
+ function (to, speed) {
+ that.animationFrameId = that.requestAnimationFrame.call(
+ window,
+ function () {
+ that.slide(to, speed)
+ }
+ )
+ },
+ [this.index + 1, this.options.slideshowTransitionSpeed],
+ this.interval
+ )
+ }
+ this.container.addClass(this.options.playingClass)
+ },
+
+ pause: function () {
+ window.clearTimeout(this.timeout)
+ this.interval = null
+ if (this.cancelAnimationFrame) {
+ this.cancelAnimationFrame.call(window, this.animationFrameId)
+ this.animationFrameId = null
+ }
+ this.container.removeClass(this.options.playingClass)
+ },
+
+ add: function (list) {
+ var i
+ if (!list.concat) {
+ // Make a real array out of the list to add:
+ list = Array.prototype.slice.call(list)
+ }
+ if (!this.list.concat) {
+ // Make a real array out of the Gallery list:
+ this.list = Array.prototype.slice.call(this.list)
+ }
+ this.list = this.list.concat(list)
+ this.num = this.list.length
+ if (this.num > 2 && this.options.continuous === null) {
+ this.options.continuous = true
+ this.container.removeClass(this.options.leftEdgeClass)
+ }
+ this.container
+ .removeClass(this.options.rightEdgeClass)
+ .removeClass(this.options.singleClass)
+ for (i = this.num - list.length; i < this.num; i += 1) {
+ this.addSlide(i)
+ this.positionSlide(i)
+ }
+ this.positions.length = this.num
+ this.initSlides(true)
+ },
+
+ resetSlides: function () {
+ this.slidesContainer.empty()
+ this.unloadAllSlides()
+ this.slides = []
+ },
+
+ handleClose: function () {
+ var options = this.options
+ this.destroyEventListeners()
+ // Cancel the slideshow:
+ this.pause()
+ this.container[0].style.display = 'none'
+ this.container
+ .removeClass(options.displayClass)
+ .removeClass(options.singleClass)
+ .removeClass(options.leftEdgeClass)
+ .removeClass(options.rightEdgeClass)
+ if (options.hidePageScrollbars) {
+ document.body.style.overflow = this.bodyOverflowStyle
+ }
+ if (this.options.clearSlides) {
+ this.resetSlides()
+ }
+ if (this.options.onclosed) {
+ this.options.onclosed.call(this)
+ }
+ },
+
+ close: function () {
+ var that = this
+ function closeHandler (event) {
+ if (event.target === that.container[0]) {
+ that.container.off(that.support.transition.end, closeHandler)
+ that.handleClose()
+ }
+ }
+ if (this.options.onclose) {
+ this.options.onclose.call(this)
+ }
+ if (this.support.transition && this.options.displayTransition) {
+ this.container.on(this.support.transition.end, closeHandler)
+ this.container.removeClass(this.options.displayClass)
+ } else {
+ this.handleClose()
+ }
+ },
+
+ circle: function (index) {
+ // Always return a number inside of the slides index range:
+ return (this.num + index % this.num) % this.num
+ },
+
+ move: function (index, dist, speed) {
+ this.translateX(index, dist, speed)
+ this.positions[index] = dist
+ },
+
+ translate: function (index, x, y, speed) {
+ var style = this.slides[index].style
+ var transition = this.support.transition
+ var transform = this.support.transform
+ style[transition.name + 'Duration'] = speed + 'ms'
+ style[transform.name] =
+ 'translate(' +
+ x +
+ 'px, ' +
+ y +
+ 'px)' +
+ (transform.translateZ ? ' translateZ(0)' : '')
+ },
+
+ translateX: function (index, x, speed) {
+ this.translate(index, x, 0, speed)
+ },
+
+ translateY: function (index, y, speed) {
+ this.translate(index, 0, y, speed)
+ },
+
+ animate: function (from, to, speed) {
+ if (!speed) {
+ this.slidesContainer[0].style.left = to + 'px'
+ return
+ }
+ var that = this
+ var start = new Date().getTime()
+ var timer = window.setInterval(function () {
+ var timeElap = new Date().getTime() - start
+ if (timeElap > speed) {
+ that.slidesContainer[0].style.left = to + 'px'
+ that.ontransitionend()
+ window.clearInterval(timer)
+ return
+ }
+ that.slidesContainer[0].style.left =
+ (to - from) * (Math.floor(timeElap / speed * 100) / 100) + from + 'px'
+ }, 4)
+ },
+
+ preventDefault: function (event) {
+ if (event.preventDefault) {
+ event.preventDefault()
+ } else {
+ event.returnValue = false
+ }
+ },
+
+ stopPropagation: function (event) {
+ if (event.stopPropagation) {
+ event.stopPropagation()
+ } else {
+ event.cancelBubble = true
+ }
+ },
+
+ onresize: function () {
+ this.initSlides(true)
+ },
+
+ onmousedown: function (event) {
+ // Trigger on clicks of the left mouse button only
+ // and exclude video elements:
+ if (
+ event.which &&
+ event.which === 1 &&
+ event.target.nodeName !== 'VIDEO'
+ ) {
+ // Preventing the default mousedown action is required
+ // to make touch emulation work with Firefox:
+ event.preventDefault()
+ ;(event.originalEvent || event).touches = [
+ {
+ pageX: event.pageX,
+ pageY: event.pageY
+ }
+ ]
+ this.ontouchstart(event)
+ }
+ },
+
+ onmousemove: function (event) {
+ if (this.touchStart) {
+ ;(event.originalEvent || event).touches = [
+ {
+ pageX: event.pageX,
+ pageY: event.pageY
+ }
+ ]
+ this.ontouchmove(event)
+ }
+ },
+
+ onmouseup: function (event) {
+ if (this.touchStart) {
+ this.ontouchend(event)
+ delete this.touchStart
+ }
+ },
+
+ onmouseout: function (event) {
+ if (this.touchStart) {
+ var target = event.target
+ var related = event.relatedTarget
+ if (!related || (related !== target && !$.contains(target, related))) {
+ this.onmouseup(event)
+ }
+ }
+ },
+
+ ontouchstart: function (event) {
+ if (this.options.stopTouchEventsPropagation) {
+ this.stopPropagation(event)
+ }
+ // jQuery doesn't copy touch event properties by default,
+ // so we have to access the originalEvent object:
+ var touches = (event.originalEvent || event).touches[0]
+ this.touchStart = {
+ // Remember the initial touch coordinates:
+ x: touches.pageX,
+ y: touches.pageY,
+ // Store the time to determine touch duration:
+ time: Date.now()
+ }
+ // Helper variable to detect scroll movement:
+ this.isScrolling = undefined
+ // Reset delta values:
+ this.touchDelta = {}
+ },
+
+ ontouchmove: function (event) {
+ if (this.options.stopTouchEventsPropagation) {
+ this.stopPropagation(event)
+ }
+ // jQuery doesn't copy touch event properties by default,
+ // so we have to access the originalEvent object:
+ var touches = (event.originalEvent || event).touches[0]
+ var scale = (event.originalEvent || event).scale
+ var index = this.index
+ var touchDeltaX
+ var indices
+ // Ensure this is a one touch swipe and not, e.g. a pinch:
+ if (touches.length > 1 || (scale && scale !== 1)) {
+ return
+ }
+ if (this.options.disableScroll) {
+ event.preventDefault()
+ }
+ // Measure change in x and y coordinates:
+ this.touchDelta = {
+ x: touches.pageX - this.touchStart.x,
+ y: touches.pageY - this.touchStart.y
+ }
+ touchDeltaX = this.touchDelta.x
+ // Detect if this is a vertical scroll movement (run only once per touch):
+ if (this.isScrolling === undefined) {
+ this.isScrolling =
+ this.isScrolling ||
+ Math.abs(touchDeltaX) < Math.abs(this.touchDelta.y)
+ }
+ if (!this.isScrolling) {
+ // Always prevent horizontal scroll:
+ event.preventDefault()
+ // Stop the slideshow:
+ window.clearTimeout(this.timeout)
+ if (this.options.continuous) {
+ indices = [this.circle(index + 1), index, this.circle(index - 1)]
+ } else {
+ // Increase resistance if first slide and sliding left
+ // or last slide and sliding right:
+ this.touchDelta.x = touchDeltaX =
+ touchDeltaX /
+ ((!index && touchDeltaX > 0) ||
+ (index === this.num - 1 && touchDeltaX < 0)
+ ? Math.abs(touchDeltaX) / this.slideWidth + 1
+ : 1)
+ indices = [index]
+ if (index) {
+ indices.push(index - 1)
+ }
+ if (index < this.num - 1) {
+ indices.unshift(index + 1)
+ }
+ }
+ while (indices.length) {
+ index = indices.pop()
+ this.translateX(index, touchDeltaX + this.positions[index], 0)
+ }
+ } else {
+ this.translateY(index, this.touchDelta.y + this.positions[index], 0)
+ }
+ },
+
+ ontouchend: function (event) {
+ if (this.options.stopTouchEventsPropagation) {
+ this.stopPropagation(event)
+ }
+ var index = this.index
+ var speed = this.options.transitionSpeed
+ var slideWidth = this.slideWidth
+ var isShortDuration = Number(Date.now() - this.touchStart.time) < 250
+ // Determine if slide attempt triggers next/prev slide:
+ var isValidSlide =
+ (isShortDuration && Math.abs(this.touchDelta.x) > 20) ||
+ Math.abs(this.touchDelta.x) > slideWidth / 2
+ // Determine if slide attempt is past start or end:
+ var isPastBounds =
+ (!index && this.touchDelta.x > 0) ||
+ (index === this.num - 1 && this.touchDelta.x < 0)
+ var isValidClose =
+ !isValidSlide &&
+ this.options.closeOnSwipeUpOrDown &&
+ ((isShortDuration && Math.abs(this.touchDelta.y) > 20) ||
+ Math.abs(this.touchDelta.y) > this.slideHeight / 2)
+ var direction
+ var indexForward
+ var indexBackward
+ var distanceForward
+ var distanceBackward
+ if (this.options.continuous) {
+ isPastBounds = false
+ }
+ // Determine direction of swipe (true: right, false: left):
+ direction = this.touchDelta.x < 0 ? -1 : 1
+ if (!this.isScrolling) {
+ if (isValidSlide && !isPastBounds) {
+ indexForward = index + direction
+ indexBackward = index - direction
+ distanceForward = slideWidth * direction
+ distanceBackward = -slideWidth * direction
+ if (this.options.continuous) {
+ this.move(this.circle(indexForward), distanceForward, 0)
+ this.move(this.circle(index - 2 * direction), distanceBackward, 0)
+ } else if (indexForward >= 0 && indexForward < this.num) {
+ this.move(indexForward, distanceForward, 0)
+ }
+ this.move(index, this.positions[index] + distanceForward, speed)
+ this.move(
+ this.circle(indexBackward),
+ this.positions[this.circle(indexBackward)] + distanceForward,
+ speed
+ )
+ index = this.circle(indexBackward)
+ this.onslide(index)
+ } else {
+ // Move back into position
+ if (this.options.continuous) {
+ this.move(this.circle(index - 1), -slideWidth, speed)
+ this.move(index, 0, speed)
+ this.move(this.circle(index + 1), slideWidth, speed)
+ } else {
+ if (index) {
+ this.move(index - 1, -slideWidth, speed)
+ }
+ this.move(index, 0, speed)
+ if (index < this.num - 1) {
+ this.move(index + 1, slideWidth, speed)
+ }
+ }
+ }
+ } else {
+ if (isValidClose) {
+ this.close()
+ } else {
+ // Move back into position
+ this.translateY(index, 0, speed)
+ }
+ }
+ },
+
+ ontouchcancel: function (event) {
+ if (this.touchStart) {
+ this.ontouchend(event)
+ delete this.touchStart
+ }
+ },
+
+ ontransitionend: function (event) {
+ var slide = this.slides[this.index]
+ if (!event || slide === event.target) {
+ if (this.interval) {
+ this.play()
+ }
+ this.setTimeout(this.options.onslideend, [this.index, slide])
+ }
+ },
+
+ oncomplete: function (event) {
+ var target = event.target || event.srcElement
+ var parent = target && target.parentNode
+ var index
+ if (!target || !parent) {
+ return
+ }
+ index = this.getNodeIndex(parent)
+ $(parent).removeClass(this.options.slideLoadingClass)
+ if (event.type === 'error') {
+ $(parent).addClass(this.options.slideErrorClass)
+ this.elements[index] = 3 // Fail
+ } else {
+ this.elements[index] = 2 // Done
+ }
+ // Fix for IE7's lack of support for percentage max-height:
+ if (target.clientHeight > this.container[0].clientHeight) {
+ target.style.maxHeight = this.container[0].clientHeight
+ }
+ if (this.interval && this.slides[this.index] === parent) {
+ this.play()
+ }
+ this.setTimeout(this.options.onslidecomplete, [index, parent])
+ },
+
+ onload: function (event) {
+ this.oncomplete(event)
+ },
+
+ onerror: function (event) {
+ this.oncomplete(event)
+ },
+
+ onkeydown: function (event) {
+ switch (event.which || event.keyCode) {
+ case 13: // Return
+ if (this.options.toggleControlsOnReturn) {
+ this.preventDefault(event)
+ this.toggleControls()
+ }
+ break
+ case 27: // Esc
+ if (this.options.closeOnEscape) {
+ this.close()
+ // prevent Esc from closing other things
+ event.stopImmediatePropagation()
+ }
+ break
+ case 32: // Space
+ if (this.options.toggleSlideshowOnSpace) {
+ this.preventDefault(event)
+ this.toggleSlideshow()
+ }
+ break
+ case 37: // Left
+ if (this.options.enableKeyboardNavigation) {
+ this.preventDefault(event)
+ this.prev()
+ }
+ break
+ case 39: // Right
+ if (this.options.enableKeyboardNavigation) {
+ this.preventDefault(event)
+ this.next()
+ }
+ break
+ }
+ },
+
+ handleClick: function (event) {
+ var options = this.options
+ var target = event.target || event.srcElement
+ var parent = target.parentNode
+ function isTarget (className) {
+ return $(target).hasClass(className) || $(parent).hasClass(className)
+ }
+ if (isTarget(options.toggleClass)) {
+ // Click on "toggle" control
+ this.preventDefault(event)
+ this.toggleControls()
+ } else if (isTarget(options.prevClass)) {
+ // Click on "prev" control
+ this.preventDefault(event)
+ this.prev()
+ } else if (isTarget(options.nextClass)) {
+ // Click on "next" control
+ this.preventDefault(event)
+ this.next()
+ } else if (isTarget(options.closeClass)) {
+ // Click on "close" control
+ this.preventDefault(event)
+ this.close()
+ } else if (isTarget(options.playPauseClass)) {
+ // Click on "play-pause" control
+ this.preventDefault(event)
+ this.toggleSlideshow()
+ } else if (parent === this.slidesContainer[0]) {
+ // Click on slide background
+ if (options.closeOnSlideClick) {
+ this.preventDefault(event)
+ this.close()
+ } else if (options.toggleControlsOnSlideClick) {
+ this.preventDefault(event)
+ this.toggleControls()
+ }
+ } else if (
+ parent.parentNode &&
+ parent.parentNode === this.slidesContainer[0]
+ ) {
+ // Click on displayed element
+ if (options.toggleControlsOnSlideClick) {
+ this.preventDefault(event)
+ this.toggleControls()
+ }
+ }
+ },
+
+ onclick: function (event) {
+ if (
+ this.options.emulateTouchEvents &&
+ this.touchDelta &&
+ (Math.abs(this.touchDelta.x) > 20 || Math.abs(this.touchDelta.y) > 20)
+ ) {
+ delete this.touchDelta
+ return
+ }
+ return this.handleClick(event)
+ },
+
+ updateEdgeClasses: function (index) {
+ if (!index) {
+ this.container.addClass(this.options.leftEdgeClass)
+ } else {
+ this.container.removeClass(this.options.leftEdgeClass)
+ }
+ if (index === this.num - 1) {
+ this.container.addClass(this.options.rightEdgeClass)
+ } else {
+ this.container.removeClass(this.options.rightEdgeClass)
+ }
+ },
+
+ handleSlide: function (index) {
+ if (!this.options.continuous) {
+ this.updateEdgeClasses(index)
+ }
+ this.loadElements(index)
+ if (this.options.unloadElements) {
+ this.unloadElements(index)
+ }
+ this.setTitle(index)
+ },
+
+ onslide: function (index) {
+ this.index = index
+ this.handleSlide(index)
+ this.setTimeout(this.options.onslide, [index, this.slides[index]])
+ },
+
+ setTitle: function (index) {
+ var firstChild = this.slides[index].firstChild
+ var text = firstChild.title || firstChild.alt
+ var titleElement = this.titleElement
+ if (titleElement.length) {
+ this.titleElement.empty()
+ if (text) {
+ titleElement[0].appendChild(document.createTextNode(text))
+ }
+ }
+ },
+
+ setTimeout: function (func, args, wait) {
+ var that = this
+ return (
+ func &&
+ window.setTimeout(function () {
+ func.apply(that, args || [])
+ }, wait || 0)
+ )
+ },
+
+ imageFactory: function (obj, callback) {
+ var that = this
+ var img = this.imagePrototype.cloneNode(false)
+ var url = obj
+ var backgroundSize = this.options.stretchImages
+ var called
+ var element
+ var title
+ function callbackWrapper (event) {
+ if (!called) {
+ event = {
+ type: event.type,
+ target: element
+ }
+ if (!element.parentNode) {
+ // Fix for IE7 firing the load event for
+ // cached images before the element could
+ // be added to the DOM:
+ return that.setTimeout(callbackWrapper, [event])
+ }
+ called = true
+ $(img).off('load error', callbackWrapper)
+ if (backgroundSize) {
+ if (event.type === 'load') {
+ element.style.background = 'url("' + url + '") center no-repeat'
+ element.style.backgroundSize = backgroundSize
+ }
+ }
+ callback(event)
+ }
+ }
+ if (typeof url !== 'string') {
+ url = this.getItemProperty(obj, this.options.urlProperty)
+ title = this.getItemProperty(obj, this.options.titleProperty)
+ }
+ if (backgroundSize === true) {
+ backgroundSize = 'contain'
+ }
+ backgroundSize =
+ this.support.backgroundSize &&
+ this.support.backgroundSize[backgroundSize] &&
+ backgroundSize
+ if (backgroundSize) {
+ element = this.elementPrototype.cloneNode(false)
+ } else {
+ element = img
+ img.draggable = false
+ }
+ if (title) {
+ element.title = title
+ }
+ $(img).on('load error', callbackWrapper)
+ img.src = url
+ return element
+ },
+
+ createElement: function (obj, callback) {
+ var type = obj && this.getItemProperty(obj, this.options.typeProperty)
+ var factory =
+ (type && this[type.split('/')[0] + 'Factory']) || this.imageFactory
+ var element = obj && factory.call(this, obj, callback)
+ var srcset = this.getItemProperty(obj, this.options.srcsetProperty)
+ if (!element) {
+ element = this.elementPrototype.cloneNode(false)
+ this.setTimeout(callback, [
+ {
+ type: 'error',
+ target: element
+ }
+ ])
+ }
+ if (srcset) {
+ element.setAttribute('srcset', srcset)
+ }
+ $(element).addClass(this.options.slideContentClass)
+ return element
+ },
+
+ loadElement: function (index) {
+ if (!this.elements[index]) {
+ if (this.slides[index].firstChild) {
+ this.elements[index] = $(this.slides[index]).hasClass(
+ this.options.slideErrorClass
+ )
+ ? 3
+ : 2
+ } else {
+ this.elements[index] = 1 // Loading
+ $(this.slides[index]).addClass(this.options.slideLoadingClass)
+ this.slides[index].appendChild(
+ this.createElement(this.list[index], this.proxyListener)
+ )
+ }
+ }
+ },
+
+ loadElements: function (index) {
+ var limit = Math.min(this.num, this.options.preloadRange * 2 + 1)
+ var j = index
+ var i
+ for (i = 0; i < limit; i += 1) {
+ // First load the current slide element (0),
+ // then the next one (+1),
+ // then the previous one (-2),
+ // then the next after next (+2), etc.:
+ j += i * (i % 2 === 0 ? -1 : 1)
+ // Connect the ends of the list to load slide elements for
+ // continuous navigation:
+ j = this.circle(j)
+ this.loadElement(j)
+ }
+ },
+
+ unloadElements: function (index) {
+ var i, diff
+ for (i in this.elements) {
+ if (this.elements.hasOwnProperty(i)) {
+ diff = Math.abs(index - i)
+ if (
+ diff > this.options.preloadRange &&
+ diff + this.options.preloadRange < this.num
+ ) {
+ this.unloadSlide(i)
+ delete this.elements[i]
+ }
+ }
+ }
+ },
+
+ addSlide: function (index) {
+ var slide = this.slidePrototype.cloneNode(false)
+ slide.setAttribute('data-index', index)
+ this.slidesContainer[0].appendChild(slide)
+ this.slides.push(slide)
+ },
+
+ positionSlide: function (index) {
+ var slide = this.slides[index]
+ slide.style.width = this.slideWidth + 'px'
+ if (this.support.transform) {
+ slide.style.left = index * -this.slideWidth + 'px'
+ this.move(
+ index,
+ this.index > index
+ ? -this.slideWidth
+ : this.index < index ? this.slideWidth : 0,
+ 0
+ )
+ }
+ },
+
+ initSlides: function (reload) {
+ var clearSlides, i
+ if (!reload) {
+ this.positions = []
+ this.positions.length = this.num
+ this.elements = {}
+ this.imagePrototype = document.createElement('img')
+ this.elementPrototype = document.createElement('div')
+ this.slidePrototype = document.createElement('div')
+ $(this.slidePrototype).addClass(this.options.slideClass)
+ this.slides = this.slidesContainer[0].children
+ clearSlides =
+ this.options.clearSlides || this.slides.length !== this.num
+ }
+ this.slideWidth = this.container[0].offsetWidth
+ this.slideHeight = this.container[0].offsetHeight
+ this.slidesContainer[0].style.width = this.num * this.slideWidth + 'px'
+ if (clearSlides) {
+ this.resetSlides()
+ }
+ for (i = 0; i < this.num; i += 1) {
+ if (clearSlides) {
+ this.addSlide(i)
+ }
+ this.positionSlide(i)
+ }
+ // Reposition the slides before and after the given index:
+ if (this.options.continuous && this.support.transform) {
+ this.move(this.circle(this.index - 1), -this.slideWidth, 0)
+ this.move(this.circle(this.index + 1), this.slideWidth, 0)
+ }
+ if (!this.support.transform) {
+ this.slidesContainer[0].style.left =
+ this.index * -this.slideWidth + 'px'
+ }
+ },
+
+ unloadSlide: function (index) {
+ var slide, firstChild
+ slide = this.slides[index]
+ firstChild = slide.firstChild
+ if (firstChild !== null) {
+ slide.removeChild(firstChild)
+ }
+ },
+
+ unloadAllSlides: function () {
+ var i, len
+ for (i = 0, len = this.slides.length; i < len; i++) {
+ this.unloadSlide(i)
+ }
+ },
+
+ toggleControls: function () {
+ var controlsClass = this.options.controlsClass
+ if (this.container.hasClass(controlsClass)) {
+ this.container.removeClass(controlsClass)
+ } else {
+ this.container.addClass(controlsClass)
+ }
+ },
+
+ toggleSlideshow: function () {
+ if (!this.interval) {
+ this.play()
+ } else {
+ this.pause()
+ }
+ },
+
+ getNodeIndex: function (element) {
+ return parseInt(element.getAttribute('data-index'), 10)
+ },
+
+ getNestedProperty: function (obj, property) {
+ property.replace(
+ // Matches native JavaScript notation in a String,
+ // e.g. '["doubleQuoteProp"].dotProp[2]'
+ // eslint-disable-next-line no-useless-escape
+ /\[(?:'([^']+)'|"([^"]+)"|(\d+))\]|(?:(?:^|\.)([^\.\[]+))/g,
+ function (str, singleQuoteProp, doubleQuoteProp, arrayIndex, dotProp) {
+ var prop =
+ dotProp ||
+ singleQuoteProp ||
+ doubleQuoteProp ||
+ (arrayIndex && parseInt(arrayIndex, 10))
+ if (str && obj) {
+ obj = obj[prop]
+ }
+ }
+ )
+ return obj
+ },
+
+ getDataProperty: function (obj, property) {
+ var key
+ var prop
+ if (obj.dataset) {
+ key = property.replace(/-([a-z])/g, function (_, b) {
+ return b.toUpperCase()
+ })
+ prop = obj.dataset[key]
+ } else if (obj.getAttribute) {
+ prop = obj.getAttribute(
+ 'data-' + property.replace(/([A-Z])/g, '-$1').toLowerCase()
+ )
+ }
+ if (typeof prop === 'string') {
+ // eslint-disable-next-line no-useless-escape
+ if (
+ /^(true|false|null|-?\d+(\.\d+)?|\{[\s\S]*\}|\[[\s\S]*\])$/.test(prop)
+ ) {
+ try {
+ return $.parseJSON(prop)
+ } catch (ignore) {}
+ }
+ return prop
+ }
+ },
+
+ getItemProperty: function (obj, property) {
+ var prop = this.getDataProperty(obj, property)
+ if (prop === undefined) {
+ prop = obj[property]
+ }
+ if (prop === undefined) {
+ prop = this.getNestedProperty(obj, property)
+ }
+ return prop
+ },
+
+ initStartIndex: function () {
+ var index = this.options.index
+ var urlProperty = this.options.urlProperty
+ var i
+ // Check if the index is given as a list object:
+ if (index && typeof index !== 'number') {
+ for (i = 0; i < this.num; i += 1) {
+ if (
+ this.list[i] === index ||
+ this.getItemProperty(this.list[i], urlProperty) ===
+ this.getItemProperty(index, urlProperty)
+ ) {
+ index = i
+ break
+ }
+ }
+ }
+ // Make sure the index is in the list range:
+ this.index = this.circle(parseInt(index, 10) || 0)
+ },
+
+ initEventListeners: function () {
+ var that = this
+ var slidesContainer = this.slidesContainer
+ function proxyListener (event) {
+ var type =
+ that.support.transition && that.support.transition.end === event.type
+ ? 'transitionend'
+ : event.type
+ that['on' + type](event)
+ }
+ $(window).on('resize', proxyListener)
+ $(document.body).on('keydown', proxyListener)
+ this.container.on('click', proxyListener)
+ if (this.support.touch) {
+ slidesContainer.on(
+ 'touchstart touchmove touchend touchcancel',
+ proxyListener
+ )
+ } else if (this.options.emulateTouchEvents && this.support.transition) {
+ slidesContainer.on(
+ 'mousedown mousemove mouseup mouseout',
+ proxyListener
+ )
+ }
+ if (this.support.transition) {
+ slidesContainer.on(this.support.transition.end, proxyListener)
+ }
+ this.proxyListener = proxyListener
+ },
+
+ destroyEventListeners: function () {
+ var slidesContainer = this.slidesContainer
+ var proxyListener = this.proxyListener
+ $(window).off('resize', proxyListener)
+ $(document.body).off('keydown', proxyListener)
+ this.container.off('click', proxyListener)
+ if (this.support.touch) {
+ slidesContainer.off(
+ 'touchstart touchmove touchend touchcancel',
+ proxyListener
+ )
+ } else if (this.options.emulateTouchEvents && this.support.transition) {
+ slidesContainer.off(
+ 'mousedown mousemove mouseup mouseout',
+ proxyListener
+ )
+ }
+ if (this.support.transition) {
+ slidesContainer.off(this.support.transition.end, proxyListener)
+ }
+ },
+
+ handleOpen: function () {
+ if (this.options.onopened) {
+ this.options.onopened.call(this)
+ }
+ },
+
+ initWidget: function () {
+ var that = this
+ function openHandler (event) {
+ if (event.target === that.container[0]) {
+ that.container.off(that.support.transition.end, openHandler)
+ that.handleOpen()
+ }
+ }
+ this.container = $(this.options.container)
+ if (!this.container.length) {
+ this.console.log(
+ 'blueimp Gallery: Widget container not found.',
+ this.options.container
+ )
+ return false
+ }
+ this.slidesContainer = this.container
+ .find(this.options.slidesContainer)
+ .first()
+ if (!this.slidesContainer.length) {
+ this.console.log(
+ 'blueimp Gallery: Slides container not found.',
+ this.options.slidesContainer
+ )
+ return false
+ }
+ this.titleElement = this.container.find(this.options.titleElement).first()
+ if (this.num === 1) {
+ this.container.addClass(this.options.singleClass)
+ }
+ if (this.options.onopen) {
+ this.options.onopen.call(this)
+ }
+ if (this.support.transition && this.options.displayTransition) {
+ this.container.on(this.support.transition.end, openHandler)
+ } else {
+ this.handleOpen()
+ }
+ if (this.options.hidePageScrollbars) {
+ // Hide the page scrollbars:
+ this.bodyOverflowStyle = document.body.style.overflow
+ document.body.style.overflow = 'hidden'
+ }
+ this.container[0].style.display = 'block'
+ this.initSlides()
+ this.container.addClass(this.options.displayClass)
+ },
+
+ initOptions: function (options) {
+ // Create a copy of the prototype options:
+ this.options = $.extend({}, this.options)
+ // Check if carousel mode is enabled:
+ if (
+ (options && options.carousel) ||
+ (this.options.carousel && (!options || options.carousel !== false))
+ ) {
+ $.extend(this.options, this.carouselOptions)
+ }
+ // Override any given options:
+ $.extend(this.options, options)
+ if (this.num < 3) {
+ // 1 or 2 slides cannot be displayed continuous,
+ // remember the original option by setting to null instead of false:
+ this.options.continuous = this.options.continuous ? null : false
+ }
+ if (!this.support.transition) {
+ this.options.emulateTouchEvents = false
+ }
+ if (this.options.event) {
+ this.preventDefault(this.options.event)
+ }
+ }
+ })
+
+ return Gallery
+ })
public/javascripts/blueimp/blueimp-gallery.min.js +2 -0
@@ @@ -0,0 +1,2 @@
+ !function(){"use strict";function t(t,e){var i;for(i in e)e.hasOwnProperty(i)&&(t[i]=e[i]);return t}function e(t){if(!this||this.find!==e.prototype.find)return new e(t);if(this.length=0,t)if("string"==typeof t&&(t=this.find(t)),t.nodeType||t===t.window)this.length=1,this[0]=t;else{var i=t.length;for(this.length=i;i;)this[i-=1]=t[i]}}e.extend=t,e.contains=function(t,e){do{if((e=e.parentNode)===t)return!0}while(e);return!1},e.parseJSON=function(t){return window.JSON&&JSON.parse(t)},t(e.prototype,{find:function(t){var i=this[0]||document;return"string"==typeof t&&(t=i.querySelectorAll?i.querySelectorAll(t):"#"===t.charAt(0)?i.getElementById(t.slice(1)):i.getElementsByTagName(t)),new e(t)},hasClass:function(t){return!!this[0]&&new RegExp("(^|\\s+)"+t+"(\\s+|$)").test(this[0].className)},addClass:function(t){for(var e,i=this.length;i;){if(i-=1,!(e=this[i]).className)return e.className=t,this;if(this.hasClass(t))return this;e.className+=" "+t}return this},removeClass:function(t){for(var e,i=new RegExp("(^|\\s+)"+t+"(\\s+|$)"),s=this.length;s;)(e=this[s-=1]).className=e.className.replace(i," ");return this},on:function(t,e){for(var i,s,n=t.split(/\s+/);n.length;)for(t=n.shift(),i=this.length;i;)(s=this[i-=1]).addEventListener?s.addEventListener(t,e,!1):s.attachEvent&&s.attachEvent("on"+t,e);return this},off:function(t,e){for(var i,s,n=t.split(/\s+/);n.length;)for(t=n.shift(),i=this.length;i;)(s=this[i-=1]).removeEventListener?s.removeEventListener(t,e,!1):s.detachEvent&&s.detachEvent("on"+t,e);return this},empty:function(){for(var t,e=this.length;e;)for(t=this[e-=1];t.hasChildNodes();)t.removeChild(t.lastChild);return this},first:function(){return new e(this[0])}}),"function"==typeof define&&define.amd?define(function(){return e}):(window.blueimp=window.blueimp||{},window.blueimp.helper=e)}(),function(t){"use strict";"function"==typeof define&&define.amd?define(["./blueimp-helper"],t):(window.blueimp=window.blueimp||{},window.blueimp.Gallery=t(window.blueimp.helper||window.jQuery))}(function(t){"use strict";function e(t,i){return void 0===document.body.style.maxHeight?null:this&&this.options===e.prototype.options?void(t&&t.length?(this.list=t,this.num=t.length,this.initOptions(i),this.initialize()):this.console.log("blueimp Gallery: No or empty list provided as first argument.",t)):new e(t,i)}return t.extend(e.prototype,{options:{container:"#blueimp-gallery",slidesContainer:"div",titleElement:"h3",displayClass:"blueimp-gallery-display",controlsClass:"blueimp-gallery-controls",singleClass:"blueimp-gallery-single",leftEdgeClass:"blueimp-gallery-left",rightEdgeClass:"blueimp-gallery-right",playingClass:"blueimp-gallery-playing",slideClass:"slide",slideLoadingClass:"slide-loading",slideErrorClass:"slide-error",slideContentClass:"slide-content",toggleClass:"toggle",prevClass:"prev",nextClass:"next",closeClass:"close",playPauseClass:"play-pause",typeProperty:"type",titleProperty:"title",urlProperty:"href",srcsetProperty:"urlset",displayTransition:!0,clearSlides:!0,stretchImages:!1,toggleControlsOnReturn:!0,toggleControlsOnSlideClick:!0,toggleSlideshowOnSpace:!0,enableKeyboardNavigation:!0,closeOnEscape:!0,closeOnSlideClick:!0,closeOnSwipeUpOrDown:!0,emulateTouchEvents:!0,stopTouchEventsPropagation:!1,hidePageScrollbars:!0,disableScroll:!0,carousel:!1,continuous:!0,unloadElements:!0,startSlideshow:!1,slideshowInterval:5e3,index:0,preloadRange:2,transitionSpeed:400,slideshowTransitionSpeed:void 0,event:void 0,onopen:void 0,onopened:void 0,onslide:void 0,onslideend:void 0,onslidecomplete:void 0,onclose:void 0,onclosed:void 0},carouselOptions:{hidePageScrollbars:!1,toggleControlsOnReturn:!1,toggleSlideshowOnSpace:!1,enableKeyboardNavigation:!1,closeOnEscape:!1,closeOnSlideClick:!1,closeOnSwipeUpOrDown:!1,disableScroll:!1,startSlideshow:!0},console:window.console&&"function"==typeof window.console.log?window.console:{log:function(){}},support:function(e){function i(){var t,i,s=n.transition;document.body.appendChild(e),s&&(t=s.name.slice(0,-9)+"ransform",void 0!==e.style[t]&&(e.style[t]="translateZ(0)",i=window.getComputedStyle(e).getPropertyValue(s.prefix+"transform"),n.transform={prefix:s.prefix,name:t,translate:!0,translateZ:!!i&&"none"!==i})),void 0!==e.style.backgroundSize&&(n.backgroundSize={},e.style.backgroundSize="contain",n.backgroundSize.contain="contain"===window.getComputedStyle(e).getPropertyValue("background-size"),e.style.backgroundSize="cover",n.backgroundSize.cover="cover"===window.getComputedStyle(e).getPropertyValue("background-size")),document.body.removeChild(e)}var s,n={touch:void 0!==window.ontouchstart||window.DocumentTouch&&document instanceof DocumentTouch},o={webkitTransition:{end:"webkitTransitionEnd",prefix:"-webkit-"},MozTransition:{end:"transitionend",prefix:"-moz-"},OTransition:{end:"otransitionend",prefix:"-o-"},transition:{end:"transitionend",prefix:""}};for(s in o)if(o.hasOwnProperty(s)&&void 0!==e.style[s]){n.transition=o[s],n.transition.name=s;break}return document.body?i():t(document).on("DOMContentLoaded",i),n}(document.createElement("div")),requestAnimationFrame:window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame,cancelAnimationFrame:window.cancelAnimationFrame||window.webkitCancelRequestAnimationFrame||window.webkitCancelAnimationFrame||window.mozCancelAnimationFrame,initialize:function(){if(this.initStartIndex(),!1===this.initWidget())return!1;this.initEventListeners(),this.onslide(this.index),this.ontransitionend(),this.options.startSlideshow&&this.play()},slide:function(t,e){window.clearTimeout(this.timeout);var i,s,n,o=this.index;if(o!==t&&1!==this.num){if(e||(e=this.options.transitionSpeed),this.support.transform){for(this.options.continuous||(t=this.circle(t)),i=Math.abs(o-t)/(o-t),this.options.continuous&&(s=i,(i=-this.positions[this.circle(t)]/this.slideWidth)!==s&&(t=-i*this.num+t)),n=Math.abs(o-t)-1;n;)n-=1,this.move(this.circle((t>o?t:o)-n-1),this.slideWidth*i,0);t=this.circle(t),this.move(o,this.slideWidth*i,e),this.move(t,0,e),this.options.continuous&&this.move(this.circle(t-i),-this.slideWidth*i,0)}else t=this.circle(t),this.animate(o*-this.slideWidth,t*-this.slideWidth,e);this.onslide(t)}},getIndex:function(){return this.index},getNumber:function(){return this.num},prev:function(){(this.options.continuous||this.index)&&this.slide(this.index-1)},next:function(){(this.options.continuous||this.index<this.num-1)&&this.slide(this.index+1)},play:function(t){var e=this;window.clearTimeout(this.timeout),this.interval=t||this.options.slideshowInterval,this.elements[this.index]>1&&(this.timeout=this.setTimeout(!this.requestAnimationFrame&&this.slide||function(t,i){e.animationFrameId=e.requestAnimationFrame.call(window,function(){e.slide(t,i)})},[this.index+1,this.options.slideshowTransitionSpeed],this.interval)),this.container.addClass(this.options.playingClass)},pause:function(){window.clearTimeout(this.timeout),this.interval=null,this.cancelAnimationFrame&&(this.cancelAnimationFrame.call(window,this.animationFrameId),this.animationFrameId=null),this.container.removeClass(this.options.playingClass)},add:function(t){var e;for(t.concat||(t=Array.prototype.slice.call(t)),this.list.concat||(this.list=Array.prototype.slice.call(this.list)),this.list=this.list.concat(t),this.num=this.list.length,this.num>2&&null===this.options.continuous&&(this.options.continuous=!0,this.container.removeClass(this.options.leftEdgeClass)),this.container.removeClass(this.options.rightEdgeClass).removeClass(this.options.singleClass),e=this.num-t.length;e<this.num;e+=1)this.addSlide(e),this.positionSlide(e);this.positions.length=this.num,this.initSlides(!0)},resetSlides:function(){this.slidesContainer.empty(),this.unloadAllSlides(),this.slides=[]},handleClose:function(){var t=this.options;this.destroyEventListeners(),this.pause(),this.container[0].style.display="none",this.container.removeClass(t.displayClass).removeClass(t.singleClass).removeClass(t.leftEdgeClass).removeClass(t.rightEdgeClass),t.hidePageScrollbars&&(document.body.style.overflow=this.bodyOverflowStyle),this.options.clearSlides&&this.resetSlides(),this.options.onclosed&&this.options.onclosed.call(this)},close:function(){function t(i){i.target===e.container[0]&&(e.container.off(e.support.transition.end,t),e.handleClose())}var e=this;this.options.onclose&&this.options.onclose.call(this),this.support.transition&&this.options.displayTransition?(this.container.on(this.support.transition.end,t),this.container.removeClass(this.options.displayClass)):this.handleClose()},circle:function(t){return(this.num+t%this.num)%this.num},move:function(t,e,i){this.translateX(t,e,i),this.positions[t]=e},translate:function(t,e,i,s){var n=this.slides[t].style,o=this.support.transition,a=this.support.transform;n[o.name+"Duration"]=s+"ms",n[a.name]="translate("+e+"px, "+i+"px)"+(a.translateZ?" translateZ(0)":"")},translateX:function(t,e,i){this.translate(t,e,0,i)},translateY:function(t,e,i){this.translate(t,0,e,i)},animate:function(t,e,i){if(i)var s=this,n=(new Date).getTime(),o=window.setInterval(function(){var a=(new Date).getTime()-n;if(a>i)return s.slidesContainer[0].style.left=e+"px",s.ontransitionend(),void window.clearInterval(o);s.slidesContainer[0].style.left=(e-t)*(Math.floor(a/i*100)/100)+t+"px"},4);else this.slidesContainer[0].style.left=e+"px"},preventDefault:function(t){t.preventDefault?t.preventDefault():t.returnValue=!1},stopPropagation:function(t){t.stopPropagation?t.stopPropagation():t.cancelBubble=!0},onresize:function(){this.initSlides(!0)},onmousedown:function(t){t.which&&1===t.which&&"VIDEO"!==t.target.nodeName&&(t.preventDefault(),(t.originalEvent||t).touches=[{pageX:t.pageX,pageY:t.pageY}],this.ontouchstart(t))},onmousemove:function(t){this.touchStart&&((t.originalEvent||t).touches=[{pageX:t.pageX,pageY:t.pageY}],this.ontouchmove(t))},onmouseup:function(t){this.touchStart&&(this.ontouchend(t),delete this.touchStart)},onmouseout:function(e){if(this.touchStart){var i=e.target,s=e.relatedTarget;s&&(s===i||t.contains(i,s))||this.onmouseup(e)}},ontouchstart:function(t){this.options.stopTouchEventsPropagation&&this.stopPropagation(t);var e=(t.originalEvent||t).touches[0];this.touchStart={x:e.pageX,y:e.pageY,time:Date.now()},this.isScrolling=void 0,this.touchDelta={}},ontouchmove:function(t){this.options.stopTouchEventsPropagation&&this.stopPropagation(t);var e,i,s=(t.originalEvent||t).touches[0],n=(t.originalEvent||t).scale,o=this.index;if(!(s.length>1||n&&1!==n))if(this.options.disableScroll&&t.preventDefault(),this.touchDelta={x:s.pageX-this.touchStart.x,y:s.pageY-this.touchStart.y},e=this.touchDelta.x,void 0===this.isScrolling&&(this.isScrolling=this.isScrolling||Math.abs(e)<Math.abs(this.touchDelta.y)),this.isScrolling)this.translateY(o,this.touchDelta.y+this.positions[o],0);else for(t.preventDefault(),window.clearTimeout(this.timeout),this.options.continuous?i=[this.circle(o+1),o,this.circle(o-1)]:(this.touchDelta.x=e/=!o&&e>0||o===this.num-1&&e<0?Math.abs(e)/this.slideWidth+1:1,i=[o],o&&i.push(o-1),o<this.num-1&&i.unshift(o+1));i.length;)o=i.pop(),this.translateX(o,e+this.positions[o],0)},ontouchend:function(t){this.options.stopTouchEventsPropagation&&this.stopPropagation(t);var e,i,s,n,o,a=this.index,r=this.options.transitionSpeed,l=this.slideWidth,h=Number(Date.now()-this.touchStart.time)<250,d=h&&Math.abs(this.touchDelta.x)>20||Math.abs(this.touchDelta.x)>l/2,c=!a&&this.touchDelta.x>0||a===this.num-1&&this.touchDelta.x<0,u=!d&&this.options.closeOnSwipeUpOrDown&&(h&&Math.abs(this.touchDelta.y)>20||Math.abs(this.touchDelta.y)>this.slideHeight/2);this.options.continuous&&(c=!1),e=this.touchDelta.x<0?-1:1,this.isScrolling?u?this.close():this.translateY(a,0,r):d&&!c?(i=a+e,s=a-e,n=l*e,o=-l*e,this.options.continuous?(this.move(this.circle(i),n,0),this.move(this.circle(a-2*e),o,0)):i>=0&&i<this.num&&this.move(i,n,0),this.move(a,this.positions[a]+n,r),this.move(this.circle(s),this.positions[this.circle(s)]+n,r),a=this.circle(s),this.onslide(a)):this.options.continuous?(this.move(this.circle(a-1),-l,r),this.move(a,0,r),this.move(this.circle(a+1),l,r)):(a&&this.move(a-1,-l,r),this.move(a,0,r),a<this.num-1&&this.move(a+1,l,r))},ontouchcancel:function(t){this.touchStart&&(this.ontouchend(t),delete this.touchStart)},ontransitionend:function(t){var e=this.slides[this.index];t&&e!==t.target||(this.interval&&this.play(),this.setTimeout(this.options.onslideend,[this.index,e]))},oncomplete:function(e){var i,s=e.target||e.srcElement,n=s&&s.parentNode;s&&n&&(i=this.getNodeIndex(n),t(n).removeClass(this.options.slideLoadingClass),"error"===e.type?(t(n).addClass(this.options.slideErrorClass),this.elements[i]=3):this.elements[i]=2,s.clientHeight>this.container[0].clientHeight&&(s.style.maxHeight=this.container[0].clientHeight),this.interval&&this.slides[this.index]===n&&this.play(),this.setTimeout(this.options.onslidecomplete,[i,n]))},onload:function(t){this.oncomplete(t)},onerror:function(t){this.oncomplete(t)},onkeydown:function(t){switch(t.which||t.keyCode){case 13:this.options.toggleControlsOnReturn&&(this.preventDefault(t),this.toggleControls());break;case 27:this.options.closeOnEscape&&(this.close(),t.stopImmediatePropagation());break;case 32:this.options.toggleSlideshowOnSpace&&(this.preventDefault(t),this.toggleSlideshow());break;case 37:this.options.enableKeyboardNavigation&&(this.preventDefault(t),this.prev());break;case 39:this.options.enableKeyboardNavigation&&(this.preventDefault(t),this.next())}},handleClick:function(e){function i(e){return t(n).hasClass(e)||t(o).hasClass(e)}var s=this.options,n=e.target||e.srcElement,o=n.parentNode;i(s.toggleClass)?(this.preventDefault(e),this.toggleControls()):i(s.prevClass)?(this.preventDefault(e),this.prev()):i(s.nextClass)?(this.preventDefault(e),this.next()):i(s.closeClass)?(this.preventDefault(e),this.close()):i(s.playPauseClass)?(this.preventDefault(e),this.toggleSlideshow()):o===this.slidesContainer[0]?s.closeOnSlideClick?(this.preventDefault(e),this.close()):s.toggleControlsOnSlideClick&&(this.preventDefault(e),this.toggleControls()):o.parentNode&&o.parentNode===this.slidesContainer[0]&&s.toggleControlsOnSlideClick&&(this.preventDefault(e),this.toggleControls())},onclick:function(t){if(!(this.options.emulateTouchEvents&&this.touchDelta&&(Math.abs(this.touchDelta.x)>20||Math.abs(this.touchDelta.y)>20)))return this.handleClick(t);delete this.touchDelta},updateEdgeClasses:function(t){t?this.container.removeClass(this.options.leftEdgeClass):this.container.addClass(this.options.leftEdgeClass),t===this.num-1?this.container.addClass(this.options.rightEdgeClass):this.container.removeClass(this.options.rightEdgeClass)},handleSlide:function(t){this.options.continuous||this.updateEdgeClasses(t),this.loadElements(t),this.options.unloadElements&&this.unloadElements(t),this.setTitle(t)},onslide:function(t){this.index=t,this.handleSlide(t),this.setTimeout(this.options.onslide,[t,this.slides[t]])},setTitle:function(t){var e=this.slides[t].firstChild,i=e.title||e.alt,s=this.titleElement;s.length&&(this.titleElement.empty(),i&&s[0].appendChild(document.createTextNode(i)))},setTimeout:function(t,e,i){var s=this;return t&&window.setTimeout(function(){t.apply(s,e||[])},i||0)},imageFactory:function(e,i){function s(e){if(!n){if(e={type:e.type,target:o},!o.parentNode)return r.setTimeout(s,[e]);n=!0,t(l).off("load error",s),d&&"load"===e.type&&(o.style.background='url("'+h+'") center no-repeat',o.style.backgroundSize=d),i(e)}}var n,o,a,r=this,l=this.imagePrototype.cloneNode(!1),h=e,d=this.options.stretchImages;return"string"!=typeof h&&(h=this.getItemProperty(e,this.options.urlProperty),a=this.getItemProperty(e,this.options.titleProperty)),!0===d&&(d="contain"),(d=this.support.backgroundSize&&this.support.backgroundSize[d]&&d)?o=this.elementPrototype.cloneNode(!1):(o=l,l.draggable=!1),a&&(o.title=a),t(l).on("load error",s),l.src=h,o},createElement:function(e,i){var s=e&&this.getItemProperty(e,this.options.typeProperty),n=s&&this[s.split("/")[0]+"Factory"]||this.imageFactory,o=e&&n.call(this,e,i),a=this.getItemProperty(e,this.options.srcsetProperty);return o||(o=this.elementPrototype.cloneNode(!1),this.setTimeout(i,[{type:"error",target:o}])),a&&o.setAttribute("srcset",a),t(o).addClass(this.options.slideContentClass),o},loadElement:function(e){this.elements[e]||(this.slides[e].firstChild?this.elements[e]=t(this.slides[e]).hasClass(this.options.slideErrorClass)?3:2:(this.elements[e]=1,t(this.slides[e]).addClass(this.options.slideLoadingClass),this.slides[e].appendChild(this.createElement(this.list[e],this.proxyListener))))},loadElements:function(t){var e,i=Math.min(this.num,2*this.options.preloadRange+1),s=t;for(e=0;e<i;e+=1)s+=e*(e%2==0?-1:1),s=this.circle(s),this.loadElement(s)},unloadElements:function(t){var e,i;for(e in this.elements)this.elements.hasOwnProperty(e)&&(i=Math.abs(t-e))>this.options.preloadRange&&i+this.options.preloadRange<this.num&&(this.unloadSlide(e),delete this.elements[e])},addSlide:function(t){var e=this.slidePrototype.cloneNode(!1);e.setAttribute("data-index",t),this.slidesContainer[0].appendChild(e),this.slides.push(e)},positionSlide:function(t){var e=this.slides[t];e.style.width=this.slideWidth+"px",this.support.transform&&(e.style.left=t*-this.slideWidth+"px",this.move(t,this.index>t?-this.slideWidth:this.index<t?this.slideWidth:0,0))},initSlides:function(e){var i,s;for(e||(this.positions=[],this.positions.length=this.num,this.elements={},this.imagePrototype=document.createElement("img"),this.elementPrototype=document.createElement("div"),this.slidePrototype=document.createElement("div"),t(this.slidePrototype).addClass(this.options.slideClass),this.slides=this.slidesContainer[0].children,i=this.options.clearSlides||this.slides.length!==this.num),this.slideWidth=this.container[0].offsetWidth,this.slideHeight=this.container[0].offsetHeight,this.slidesContainer[0].style.width=this.num*this.slideWidth+"px",i&&this.resetSlides(),s=0;s<this.num;s+=1)i&&this.addSlide(s),this.positionSlide(s);this.options.continuous&&this.support.transform&&(this.move(this.circle(this.index-1),-this.slideWidth,0),this.move(this.circle(this.index+1),this.slideWidth,0)),this.support.transform||(this.slidesContainer[0].style.left=this.index*-this.slideWidth+"px")},unloadSlide:function(t){var e,i;null!==(i=(e=this.slides[t]).firstChild)&&e.removeChild(i)},unloadAllSlides:function(){var t,e;for(t=0,e=this.slides.length;t<e;t++)this.unloadSlide(t)},toggleControls:function(){var t=this.options.controlsClass;this.container.hasClass(t)?this.container.removeClass(t):this.container.addClass(t)},toggleSlideshow:function(){this.interval?this.pause():this.play()},getNodeIndex:function(t){return parseInt(t.getAttribute("data-index"),10)},getNestedProperty:function(t,e){return e.replace(/\[(?:'([^']+)'|"([^"]+)"|(\d+))\]|(?:(?:^|\.)([^\.\[]+))/g,function(e,i,s,n,o){var a=o||i||s||n&&parseInt(n,10);e&&t&&(t=t[a])}),t},getDataProperty:function(e,i){var s,n;if(e.dataset?(s=i.replace(/-([a-z])/g,function(t,e){return e.toUpperCase()}),n=e.dataset[s]):e.getAttribute&&(n=e.getAttribute("data-"+i.replace(/([A-Z])/g,"-$1").toLowerCase())),"string"==typeof n){if(/^(true|false|null|-?\d+(\.\d+)?|\{[\s\S]*\}|\[[\s\S]*\])$/.test(n))try{return t.parseJSON(n)}catch(t){}return n}},getItemProperty:function(t,e){var i=this.getDataProperty(t,e);return void 0===i&&(i=t[e]),void 0===i&&(i=this.getNestedProperty(t,e)),i},initStartIndex:function(){var t,e=this.options.index,i=this.options.urlProperty;if(e&&"number"!=typeof e)for(t=0;t<this.num;t+=1)if(this.list[t]===e||this.getItemProperty(this.list[t],i)===this.getItemProperty(e,i)){e=t;break}this.index=this.circle(parseInt(e,10)||0)},initEventListeners:function(){function e(t){var e=i.support.transition&&i.support.transition.end===t.type?"transitionend":t.type;i["on"+e](t)}var i=this,s=this.slidesContainer;t(window).on("resize",e),t(document.body).on("keydown",e),this.container.on("click",e),this.support.touch?s.on("touchstart touchmove touchend touchcancel",e):this.options.emulateTouchEvents&&this.support.transition&&s.on("mousedown mousemove mouseup mouseout",e),this.support.transition&&s.on(this.support.transition.end,e),this.proxyListener=e},destroyEventListeners:function(){var e=this.slidesContainer,i=this.proxyListener;t(window).off("resize",i),t(document.body).off("keydown",i),this.container.off("click",i),this.support.touch?e.off("touchstart touchmove touchend touchcancel",i):this.options.emulateTouchEvents&&this.support.transition&&e.off("mousedown mousemove mouseup mouseout",i),this.support.transition&&e.off(this.support.transition.end,i)},handleOpen:function(){this.options.onopened&&this.options.onopened.call(this)},initWidget:function(){function e(t){t.target===i.container[0]&&(i.container.off(i.support.transition.end,e),i.handleOpen())}var i=this;return this.container=t(this.options.container),this.container.length?(this.slidesContainer=this.container.find(this.options.slidesContainer).first(),this.slidesContainer.length?(this.titleElement=this.container.find(this.options.titleElement).first(),1===this.num&&this.container.addClass(this.options.singleClass),this.options.onopen&&this.options.onopen.call(this),this.support.transition&&this.options.displayTransition?this.container.on(this.support.transition.end,e):this.handleOpen(),this.options.hidePageScrollbars&&(this.bodyOverflowStyle=document.body.style.overflow,document.body.style.overflow="hidden"),this.container[0].style.display="block",this.initSlides(),void this.container.addClass(this.options.displayClass)):(this.console.log("blueimp Gallery: Slides container not found.",this.options.slidesContainer),!1)):(this.console.log("blueimp Gallery: Widget container not found.",this.options.container),!1)},initOptions:function(e){this.options=t.extend({},this.options),(e&&e.carousel||this.options.carousel&&(!e||!1!==e.carousel))&&t.extend(this.options,this.carouselOptions),t.extend(this.options,e),this.num<3&&(this.options.continuous=!!this.options.continuous&&null),this.support.transition||(this.options.emulateTouchEvents=!1),this.options.event&&this.preventDefault(this.options.event)}}),e}),function(t){"use strict";"function"==typeof define&&define.amd?define(["./blueimp-helper","./blueimp-gallery"],t):t(window.blueimp.helper||window.jQuery,window.blueimp.Gallery)}(function(t,e){"use strict";t.extend(e.prototype.options,{fullScreen:!1});var i=e.prototype.initialize,s=e.prototype.close;return t.extend(e.prototype,{getFullScreenElement:function(){return document.fullscreenElement||document.webkitFullscreenElement||document.mozFullScreenElement||document.msFullscreenElement},requestFullScreen:function(t){t.requestFullscreen?t.requestFullscreen():t.webkitRequestFullscreen?t.webkitRequestFullscreen():t.mozRequestFullScreen?t.mozRequestFullScreen():t.msRequestFullscreen&&t.msRequestFullscreen()},exitFullScreen:function(){document.exitFullscreen?document.exitFullscreen():document.webkitCancelFullScreen?document.webkitCancelFullScreen():document.mozCancelFullScreen?document.mozCancelFullScreen():document.msExitFullscreen&&document.msExitFullscreen()},initialize:function(){i.call(this),this.options.fullScreen&&!this.getFullScreenElement()&&this.requestFullScreen(this.container[0])},close:function(){this.getFullScreenElement()===this.container[0]&&this.exitFullScreen(),s.call(this)}}),e}),function(t){"use strict";"function"==typeof define&&define.amd?define(["./blueimp-helper","./blueimp-gallery"],t):t(window.blueimp.helper||window.jQuery,window.blueimp.Gallery)}(function(t,e){"use strict";t.extend(e.prototype.options,{indicatorContainer:"ol",activeIndicatorClass:"active",thumbnailProperty:"thumbnail",thumbnailIndicators:!0});var i=e.prototype.initSlides,s=e.prototype.addSlide,n=e.prototype.resetSlides,o=e.prototype.handleClick,a=e.prototype.handleSlide,r=e.prototype.handleClose;return t.extend(e.prototype,{createIndicator:function(e){var i,s,n=this.indicatorPrototype.cloneNode(!1),o=this.getItemProperty(e,this.options.titleProperty),a=this.options.thumbnailProperty;return this.options.thumbnailIndicators&&(a&&(i=this.getItemProperty(e,a)),void 0===i&&(s=e.getElementsByTagName&&t(e).find("img")[0])&&(i=s.src),i&&(n.style.backgroundImage='url("'+i+'")')),o&&(n.title=o),n},addIndicator:function(t){if(this.indicatorContainer.length){var e=this.createIndicator(this.list[t]);e.setAttribute("data-index",t),this.indicatorContainer[0].appendChild(e),this.indicators.push(e)}},setActiveIndicator:function(e){this.indicators&&(this.activeIndicator&&this.activeIndicator.removeClass(this.options.activeIndicatorClass),this.activeIndicator=t(this.indicators[e]),this.activeIndicator.addClass(this.options.activeIndicatorClass))},initSlides:function(t){t||(this.indicatorContainer=this.container.find(this.options.indicatorContainer),this.indicatorContainer.length&&(this.indicatorPrototype=document.createElement("li"),this.indicators=this.indicatorContainer[0].children)),i.call(this,t)},addSlide:function(t){s.call(this,t),this.addIndicator(t)},resetSlides:function(){n.call(this),this.indicatorContainer.empty(),this.indicators=[]},handleClick:function(t){var e=t.target||t.srcElement,i=e.parentNode;if(i===this.indicatorContainer[0])this.preventDefault(t),this.slide(this.getNodeIndex(e));else{if(i.parentNode!==this.indicatorContainer[0])return o.call(this,t);this.preventDefault(t),this.slide(this.getNodeIndex(i))}},handleSlide:function(t){a.call(this,t),this.setActiveIndicator(t)},handleClose:function(){this.activeIndicator&&this.activeIndicator.removeClass(this.options.activeIndicatorClass),r.call(this)}}),e}),function(t){"use strict";"function"==typeof define&&define.amd?define(["./blueimp-helper","./blueimp-gallery"],t):t(window.blueimp.helper||window.jQuery,window.blueimp.Gallery)}(function(t,e){"use strict";t.extend(e.prototype.options,{videoContentClass:"video-content",videoLoadingClass:"video-loading",videoPlayingClass:"video-playing",videoPosterProperty:"poster",videoSourcesProperty:"sources"});var i=e.prototype.handleSlide;return t.extend(e.prototype,{handleSlide:function(t){i.call(this,t),this.playingVideo&&this.playingVideo.pause()},videoFactory:function(e,i,s){var n,o,a,r,l,h=this,d=this.options,c=this.elementPrototype.cloneNode(!1),u=t(c),p=[{type:"error",target:c}],m=s||document.createElement("video"),y=this.getItemProperty(e,d.urlProperty),f=this.getItemProperty(e,d.typeProperty),g=this.getItemProperty(e,d.titleProperty),v=this.getItemProperty(e,d.videoPosterProperty),C=this.getItemProperty(e,d.videoSourcesProperty);if(u.addClass(d.videoContentClass),g&&(c.title=g),m.canPlayType)if(y&&f&&m.canPlayType(f))m.src=y;else if(C)for(;C.length;)if(o=C.shift(),y=this.getItemProperty(o,d.urlProperty),f=this.getItemProperty(o,d.typeProperty),y&&f&&m.canPlayType(f)){m.src=y;break}return v&&(m.poster=v,n=this.imagePrototype.cloneNode(!1),t(n).addClass(d.toggleClass),n.src=v,n.draggable=!1,c.appendChild(n)),(a=document.createElement("a")).setAttribute("target","_blank"),s||a.setAttribute("download",g),a.href=y,m.src&&(m.controls=!0,(s||t(m)).on("error",function(){h.setTimeout(i,p)}).on("pause",function(){m.seeking||(r=!1,u.removeClass(h.options.videoLoadingClass).removeClass(h.options.videoPlayingClass),l&&h.container.addClass(h.options.controlsClass),delete h.playingVideo,h.interval&&h.play())}).on("playing",function(){r=!1,u.removeClass(h.options.videoLoadingClass).addClass(h.options.videoPlayingClass),h.container.hasClass(h.options.controlsClass)?(l=!0,h.container.removeClass(h.options.controlsClass)):l=!1}).on("play",function(){window.clearTimeout(h.timeout),r=!0,u.addClass(h.options.videoLoadingClass),h.playingVideo=m}),t(a).on("click",function(t){h.preventDefault(t),r?m.pause():m.play()}),c.appendChild(s&&s.element||m)),c.appendChild(a),this.setTimeout(i,[{type:"load",target:c}]),c}}),e}),function(t){"use strict";"function"==typeof define&&define.amd?define(["./blueimp-helper","./blueimp-gallery-video"],t):t(window.blueimp.helper||window.jQuery,window.blueimp.Gallery)}(function(t,e){"use strict";if(!window.postMessage)return e;t.extend(e.prototype.options,{vimeoVideoIdProperty:"vimeo",vimeoPlayerUrl:"//player.vimeo.com/video/VIDEO_ID?api=1&player_id=PLAYER_ID",vimeoPlayerIdPrefix:"vimeo-player-",vimeoClickToPlay:!0});var i=e.prototype.textFactory||e.prototype.imageFactory,s=function(t,e,i,s){this.url=t,this.videoId=e,this.playerId=i,this.clickToPlay=s,this.element=document.createElement("div"),this.listeners={}},n=0;return t.extend(s.prototype,{canPlayType:function(){return!0},on:function(t,e){return this.listeners[t]=e,this},loadAPI:function(){function e(){!s&&n.playOnReady&&n.play(),s=!0}for(var i,s,n=this,o="//f.vimeocdn.com/js/froogaloop2.min.js",a=document.getElementsByTagName("script"),r=a.length;r;)if(r-=1,a[r].src===o){i=a[r];break}i||((i=document.createElement("script")).src=o),t(i).on("load",e),a[0].parentNode.insertBefore(i,a[0]),/loaded|complete/.test(i.readyState)&&e()},onReady:function(){var t=this;this.ready=!0,this.player.addEvent("play",function(){t.hasPlayed=!0,t.onPlaying()}),this.player.addEvent("pause",function(){t.onPause()}),this.player.addEvent("finish",function(){t.onPause()}),this.playOnReady&&this.play()},onPlaying:function(){this.playStatus<2&&(this.listeners.playing(),this.playStatus=2)},onPause:function(){this.listeners.pause(),delete this.playStatus},insertIframe:function(){var t=document.createElement("iframe");t.src=this.url.replace("VIDEO_ID",this.videoId).replace("PLAYER_ID",this.playerId),t.id=this.playerId,this.element.parentNode.replaceChild(t,this.element),this.element=t},play:function(){var t=this;this.playStatus||(this.listeners.play(),this.playStatus=1),this.ready?!this.hasPlayed&&(this.clickToPlay||window.navigator&&/iP(hone|od|ad)/.test(window.navigator.platform))?this.onPlaying():this.player.api("play"):(this.playOnReady=!0,window.$f?this.player||(this.insertIframe(),this.player=$f(this.element),this.player.addEvent("ready",function(){t.onReady()})):this.loadAPI())},pause:function(){this.ready?this.player.api("pause"):this.playStatus&&(delete this.playOnReady,this.listeners.pause(),delete this.playStatus)}}),t.extend(e.prototype,{VimeoPlayer:s,textFactory:function(t,e){var o=this.options,a=this.getItemProperty(t,o.vimeoVideoIdProperty);return a?(void 0===this.getItemProperty(t,o.urlProperty)&&(t[o.urlProperty]="//vimeo.com/"+a),n+=1,this.videoFactory(t,e,new s(o.vimeoPlayerUrl,a,o.vimeoPlayerIdPrefix+n,o.vimeoClickToPlay))):i.call(this,t,e)}}),e}),function(t){"use strict";"function"==typeof define&&define.amd?define(["./blueimp-helper","./blueimp-gallery-video"],t):t(window.blueimp.helper||window.jQuery,window.blueimp.Gallery)}(function(t,e){"use strict";if(!window.postMessage)return e;t.extend(e.prototype.options,{youTubeVideoIdProperty:"youtube",youTubePlayerVars:{wmode:"transparent"},youTubeClickToPlay:!0});var i=e.prototype.textFactory||e.prototype.imageFactory,s=function(t,e,i){this.videoId=t,this.playerVars=e,this.clickToPlay=i,this.element=document.createElement("div"),this.listeners={}};return t.extend(s.prototype,{canPlayType:function(){return!0},on:function(t,e){return this.listeners[t]=e,this},loadAPI:function(){var t,e=this,i=window.onYouTubeIframeAPIReady,s="//www.youtube.com/iframe_api",n=document.getElementsByTagName("script"),o=n.length;for(window.onYouTubeIframeAPIReady=function(){i&&i.apply(this),e.playOnReady&&e.play()};o;)if(o-=1,n[o].src===s)return;(t=document.createElement("script")).src=s,n[0].parentNode.insertBefore(t,n[0])},onReady:function(){this.ready=!0,this.playOnReady&&this.play()},onPlaying:function(){this.playStatus<2&&(this.listeners.playing(),this.playStatus=2)},onPause:function(){e.prototype.setTimeout.call(this,this.checkSeek,null,2e3)},checkSeek:function(){this.stateChange!==YT.PlayerState.PAUSED&&this.stateChange!==YT.PlayerState.ENDED||(this.listeners.pause(),delete this.playStatus)},onStateChange:function(t){switch(t.data){case YT.PlayerState.PLAYING:this.hasPlayed=!0,this.onPlaying();break;case YT.PlayerState.PAUSED:case YT.PlayerState.ENDED:this.onPause()}this.stateChange=t.data},onError:function(t){this.listeners.error(t)},play:function(){var t=this;this.playStatus||(this.listeners.play(),this.playStatus=1),this.ready?!this.hasPlayed&&(this.clickToPlay||window.navigator&&/iP(hone|od|ad)/.test(window.navigator.platform))?this.onPlaying():this.player.playVideo():(this.playOnReady=!0,window.YT&&YT.Player?this.player||(this.player=new YT.Player(this.element,{videoId:this.videoId,playerVars:this.playerVars,events:{onReady:function(){t.onReady()},onStateChange:function(e){t.onStateChange(e)},onError:function(e){t.onError(e)}}})):this.loadAPI())},pause:function(){this.ready?this.player.pauseVideo():this.playStatus&&(delete this.playOnReady,this.listeners.pause(),delete this.playStatus)}}),t.extend(e.prototype,{YouTubePlayer:s,textFactory:function(t,e){var n=this.options,o=this.getItemProperty(t,n.youTubeVideoIdProperty);return o?(void 0===this.getItemProperty(t,n.urlProperty)&&(t[n.urlProperty]="//www.youtube.com/watch?v="+o),void 0===this.getItemProperty(t,n.videoPosterProperty)&&(t[n.videoPosterProperty]="//img.youtube.com/vi/"+o+"/maxresdefault.jpg"),this.videoFactory(t,e,new s(o,n.youTubePlayerVars,n.youTubeClickToPlay))):i.call(this,t,e)}}),e});
+ //# sourceMappingURL=blueimp-gallery.min.js.map
\ No newline at end of file
public/javascripts/blueimp/blueimp-gallery.min.js.map +1 -0
@@ @@ -0,0 +1 @@
+ {"version":3,"sources":["blueimp-helper.js","blueimp-gallery.js","blueimp-gallery-fullscreen.js","blueimp-gallery-indicator.js","blueimp-gallery-video.js","blueimp-gallery-vimeo.js","blueimp-gallery-youtube.js"],"names":["extend","obj1","obj2","prop","hasOwnProperty","Helper","query","this","find","prototype","length","nodeType","window","i","contains","container","element","parentNode","parseJSON","string","JSON","parse","document","querySelectorAll","charAt","getElementById","slice","getElementsByTagName","hasClass","className","RegExp","test","addClass","removeClass","regexp","replace","on","eventName","handler","eventNames","split","shift","addEventListener","attachEvent","off","removeEventListener","detachEvent","empty","hasChildNodes","removeChild","lastChild","first","define","amd","blueimp","helper","factory","Gallery","jQuery","$","list","options","undefined","body","style","maxHeight","num","initOptions","initialize","console","log","slidesContainer","titleElement","displayClass","controlsClass","singleClass","leftEdgeClass","rightEdgeClass","playingClass","slideClass","slideLoadingClass","slideErrorClass","slideContentClass","toggleClass","prevClass","nextClass","closeClass","playPauseClass","typeProperty","titleProperty","urlProperty","srcsetProperty","displayTransition","clearSlides","stretchImages","toggleControlsOnReturn","toggleControlsOnSlideClick","toggleSlideshowOnSpace","enableKeyboardNavigation","closeOnEscape","closeOnSlideClick","closeOnSwipeUpOrDown","emulateTouchEvents","stopTouchEventsPropagation","hidePageScrollbars","disableScroll","carousel","continuous","unloadElements","startSlideshow","slideshowInterval","index","preloadRange","transitionSpeed","slideshowTransitionSpeed","event","onopen","onopened","onslide","onslideend","onslidecomplete","onclose","onclosed","carouselOptions","support","elementTests","translateZ","transition","appendChild","name","getComputedStyle","getPropertyValue","prefix","transform","translate","backgroundSize","contain","cover","touch","ontouchstart","DocumentTouch","transitions","webkitTransition","end","MozTransition","OTransition","createElement","requestAnimationFrame","webkitRequestAnimationFrame","mozRequestAnimationFrame","cancelAnimationFrame","webkitCancelRequestAnimationFrame","webkitCancelAnimationFrame","mozCancelAnimationFrame","initStartIndex","initWidget","initEventListeners","ontransitionend","play","slide","to","speed","clearTimeout","timeout","direction","naturalDirection","diff","circle","Math","abs","positions","slideWidth","move","animate","getIndex","getNumber","prev","next","time","that","interval","elements","setTimeout","animationFrameId","call","pause","add","concat","Array","addSlide","positionSlide","initSlides","resetSlides","unloadAllSlides","slides","handleClose","destroyEventListeners","display","overflow","bodyOverflowStyle","close","closeHandler","target","dist","translateX","x","y","translateY","from","start","Date","getTime","timer","setInterval","timeElap","left","clearInterval","floor","preventDefault","returnValue","stopPropagation","cancelBubble","onresize","onmousedown","which","nodeName","originalEvent","touches","pageX","pageY","onmousemove","touchStart","ontouchmove","onmouseup","ontouchend","onmouseout","related","relatedTarget","now","isScrolling","touchDelta","touchDeltaX","indices","scale","push","unshift","pop","indexForward","indexBackward","distanceForward","distanceBackward","isShortDuration","Number","isValidSlide","isPastBounds","isValidClose","slideHeight","ontouchcancel","oncomplete","srcElement","parent","getNodeIndex","type","clientHeight","onload","onerror","onkeydown","keyCode","toggleControls","stopImmediatePropagation","toggleSlideshow","handleClick","isTarget","onclick","updateEdgeClasses","handleSlide","loadElements","setTitle","firstChild","text","title","alt","createTextNode","func","args","wait","apply","imageFactory","obj","callback","callbackWrapper","called","img","background","url","imagePrototype","cloneNode","getItemProperty","elementPrototype","draggable","src","srcset","setAttribute","loadElement","proxyListener","limit","min","j","unloadSlide","slidePrototype","width","reload","children","offsetWidth","offsetHeight","len","parseInt","getAttribute","getNestedProperty","property","str","singleQuoteProp","doubleQuoteProp","arrayIndex","dotProp","getDataProperty","key","dataset","_","b","toUpperCase","toLowerCase","ignore","handleOpen","openHandler","fullScreen","getFullScreenElement","fullscreenElement","webkitFullscreenElement","mozFullScreenElement","msFullscreenElement","requestFullScreen","requestFullscreen","webkitRequestFullscreen","mozRequestFullScreen","msRequestFullscreen","exitFullScreen","exitFullscreen","webkitCancelFullScreen","mozCancelFullScreen","msExitFullscreen","indicatorContainer","activeIndicatorClass","thumbnailProperty","thumbnailIndicators","createIndicator","thumbnailUrl","thumbnail","indicator","indicatorPrototype","backgroundImage","addIndicator","indicators","setActiveIndicator","activeIndicator","videoContentClass","videoLoadingClass","videoPlayingClass","videoPosterProperty","videoSourcesProperty","playingVideo","videoFactory","videoInterface","posterImage","source","playMediaControl","isLoading","hasControls","videoContainerNode","videoContainer","errorArgs","video","posterUrl","sources","canPlayType","poster","href","controls","seeking","postMessage","vimeoVideoIdProperty","vimeoPlayerUrl","vimeoPlayerIdPrefix","vimeoClickToPlay","textFactory","VimeoPlayer","videoId","playerId","clickToPlay","listeners","counter","loadAPI","playOnReady","scriptTag","apiUrl","scriptTags","insertBefore","readyState","onReady","ready","player","addEvent","hasPlayed","onPlaying","onPause","playStatus","playing","insertIframe","iframe","id","replaceChild","navigator","platform","api","$f","youTubeVideoIdProperty","youTubePlayerVars","wmode","youTubeClickToPlay","YouTubePlayer","playerVars","onYouTubeIframeAPIReady","checkSeek","stateChange","YT","PlayerState","PAUSED","ENDED","onStateChange","data","PLAYING","onError","error","playVideo","Player","events","pauseVideo"],"mappings":"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"}
\ No newline at end of file
public/javascripts/blueimp/blueimp-helper.js +190 -0
@@ @@ -0,0 +1,190 @@
+ /*
+ * blueimp helper JS
+ * https://github.com/blueimp/Gallery
+ *
+ * Copyright 2013, Sebastian Tschan
+ * https://blueimp.net
+ *
+ * Licensed under the MIT license:
+ * https://opensource.org/licenses/MIT
+ */
+
+ /* global define, window, document */
+
+ ;(function () {
+ 'use strict'
+
+ function extend (obj1, obj2) {
+ var prop
+ for (prop in obj2) {
+ if (obj2.hasOwnProperty(prop)) {
+ obj1[prop] = obj2[prop]
+ }
+ }
+ return obj1
+ }
+
+ function Helper (query) {
+ if (!this || this.find !== Helper.prototype.find) {
+ // Called as function instead of as constructor,
+ // so we simply return a new instance:
+ return new Helper(query)
+ }
+ this.length = 0
+ if (query) {
+ if (typeof query === 'string') {
+ query = this.find(query)
+ }
+ if (query.nodeType || query === query.window) {
+ // Single HTML element
+ this.length = 1
+ this[0] = query
+ } else {
+ // HTML element collection
+ var i = query.length
+ this.length = i
+ while (i) {
+ i -= 1
+ this[i] = query[i]
+ }
+ }
+ }
+ }
+
+ Helper.extend = extend
+
+ Helper.contains = function (container, element) {
+ do {
+ element = element.parentNode
+ if (element === container) {
+ return true
+ }
+ } while (element)
+ return false
+ }
+
+ Helper.parseJSON = function (string) {
+ return window.JSON && JSON.parse(string)
+ }
+
+ extend(Helper.prototype, {
+ find: function (query) {
+ var container = this[0] || document
+ if (typeof query === 'string') {
+ if (container.querySelectorAll) {
+ query = container.querySelectorAll(query)
+ } else if (query.charAt(0) === '#') {
+ query = container.getElementById(query.slice(1))
+ } else {
+ query = container.getElementsByTagName(query)
+ }
+ }
+ return new Helper(query)
+ },
+
+ hasClass: function (className) {
+ if (!this[0]) {
+ return false
+ }
+ return new RegExp('(^|\\s+)' + className + '(\\s+|$)').test(
+ this[0].className
+ )
+ },
+
+ addClass: function (className) {
+ var i = this.length
+ var element
+ while (i) {
+ i -= 1
+ element = this[i]
+ if (!element.className) {
+ element.className = className
+ return this
+ }
+ if (this.hasClass(className)) {
+ return this
+ }
+ element.className += ' ' + className
+ }
+ return this
+ },
+
+ removeClass: function (className) {
+ var regexp = new RegExp('(^|\\s+)' + className + '(\\s+|$)')
+ var i = this.length
+ var element
+ while (i) {
+ i -= 1
+ element = this[i]
+ element.className = element.className.replace(regexp, ' ')
+ }
+ return this
+ },
+
+ on: function (eventName, handler) {
+ var eventNames = eventName.split(/\s+/)
+ var i
+ var element
+ while (eventNames.length) {
+ eventName = eventNames.shift()
+ i = this.length
+ while (i) {
+ i -= 1
+ element = this[i]
+ if (element.addEventListener) {
+ element.addEventListener(eventName, handler, false)
+ } else if (element.attachEvent) {
+ element.attachEvent('on' + eventName, handler)
+ }
+ }
+ }
+ return this
+ },
+
+ off: function (eventName, handler) {
+ var eventNames = eventName.split(/\s+/)
+ var i
+ var element
+ while (eventNames.length) {
+ eventName = eventNames.shift()
+ i = this.length
+ while (i) {
+ i -= 1
+ element = this[i]
+ if (element.removeEventListener) {
+ element.removeEventListener(eventName, handler, false)
+ } else if (element.detachEvent) {
+ element.detachEvent('on' + eventName, handler)
+ }
+ }
+ }
+ return this
+ },
+
+ empty: function () {
+ var i = this.length
+ var element
+ while (i) {
+ i -= 1
+ element = this[i]
+ while (element.hasChildNodes()) {
+ element.removeChild(element.lastChild)
+ }
+ }
+ return this
+ },
+
+ first: function () {
+ return new Helper(this[0])
+ }
+ })
+
+ if (typeof define === 'function' && define.amd) {
+ define(function () {
+ return Helper
+ })
+ } else {
+ window.blueimp = window.blueimp || {}
+ window.blueimp.helper = Helper
+ }
+ })()
public/javascripts/blueimp/jquery.blueimp-gallery.js +73 -0
@@ @@ -0,0 +1,73 @@
+ /*
+ * blueimp Gallery jQuery plugin
+ * https://github.com/blueimp/Gallery
+ *
+ * Copyright 2013, Sebastian Tschan
+ * https://blueimp.net
+ *
+ * Licensed under the MIT license:
+ * https://opensource.org/licenses/MIT
+ */
+
+ /* global define, window, document */
+
+ ;(function (factory) {
+ 'use strict'
+ if (typeof define === 'function' && define.amd) {
+ define(['jquery', './blueimp-gallery'], factory)
+ } else {
+ factory(window.jQuery, window.blueimp.Gallery)
+ }
+ })(function ($, Gallery) {
+ 'use strict'
+
+ // Global click handler to open links with data-gallery attribute
+ // in the Gallery lightbox:
+ $(document).on('click', '[data-gallery]', function (event) {
+ // Get the container id from the data-gallery attribute:
+ var id = $(this).data('gallery')
+ var widget = $(id)
+ var container =
+ (widget.length && widget) || $(Gallery.prototype.options.container)
+ var callbacks = {
+ onopen: function () {
+ container.data('gallery', this).trigger('open')
+ },
+ onopened: function () {
+ container.trigger('opened')
+ },
+ onslide: function () {
+ container.trigger('slide', arguments)
+ },
+ onslideend: function () {
+ container.trigger('slideend', arguments)
+ },
+ onslidecomplete: function () {
+ container.trigger('slidecomplete', arguments)
+ },
+ onclose: function () {
+ container.trigger('close')
+ },
+ onclosed: function () {
+ container.trigger('closed').removeData('gallery')
+ }
+ }
+ var options = $.extend(
+ // Retrieve custom options from data-attributes
+ // on the Gallery widget:
+ container.data(),
+ {
+ container: container[0],
+ index: this,
+ event: event
+ },
+ callbacks
+ )
+ // Select all links with the same data-gallery attribute:
+ var links = $('[data-gallery="' + id + '"]')
+ if (options.filter) {
+ links = links.filter(options.filter)
+ }
+ return new Gallery(links, options)
+ })
+ })
public/javascripts/blueimp/jquery.blueimp-gallery.min.js +2 -0
@@ @@ -0,0 +1,2 @@
+ !function(t){"use strict";"function"==typeof define&&define.amd?define(["./blueimp-helper"],t):(window.blueimp=window.blueimp||{},window.blueimp.Gallery=t(window.blueimp.helper||window.jQuery))}(function(t){"use strict";function e(t,i){return void 0===document.body.style.maxHeight?null:this&&this.options===e.prototype.options?void(t&&t.length?(this.list=t,this.num=t.length,this.initOptions(i),this.initialize()):this.console.log("blueimp Gallery: No or empty list provided as first argument.",t)):new e(t,i)}return t.extend(e.prototype,{options:{container:"#blueimp-gallery",slidesContainer:"div",titleElement:"h3",displayClass:"blueimp-gallery-display",controlsClass:"blueimp-gallery-controls",singleClass:"blueimp-gallery-single",leftEdgeClass:"blueimp-gallery-left",rightEdgeClass:"blueimp-gallery-right",playingClass:"blueimp-gallery-playing",slideClass:"slide",slideLoadingClass:"slide-loading",slideErrorClass:"slide-error",slideContentClass:"slide-content",toggleClass:"toggle",prevClass:"prev",nextClass:"next",closeClass:"close",playPauseClass:"play-pause",typeProperty:"type",titleProperty:"title",urlProperty:"href",srcsetProperty:"urlset",displayTransition:!0,clearSlides:!0,stretchImages:!1,toggleControlsOnReturn:!0,toggleControlsOnSlideClick:!0,toggleSlideshowOnSpace:!0,enableKeyboardNavigation:!0,closeOnEscape:!0,closeOnSlideClick:!0,closeOnSwipeUpOrDown:!0,emulateTouchEvents:!0,stopTouchEventsPropagation:!1,hidePageScrollbars:!0,disableScroll:!0,carousel:!1,continuous:!0,unloadElements:!0,startSlideshow:!1,slideshowInterval:5e3,index:0,preloadRange:2,transitionSpeed:400,slideshowTransitionSpeed:void 0,event:void 0,onopen:void 0,onopened:void 0,onslide:void 0,onslideend:void 0,onslidecomplete:void 0,onclose:void 0,onclosed:void 0},carouselOptions:{hidePageScrollbars:!1,toggleControlsOnReturn:!1,toggleSlideshowOnSpace:!1,enableKeyboardNavigation:!1,closeOnEscape:!1,closeOnSlideClick:!1,closeOnSwipeUpOrDown:!1,disableScroll:!1,startSlideshow:!0},console:window.console&&"function"==typeof window.console.log?window.console:{log:function(){}},support:function(e){function i(){var t,i,s=n.transition;document.body.appendChild(e),s&&(t=s.name.slice(0,-9)+"ransform",void 0!==e.style[t]&&(e.style[t]="translateZ(0)",i=window.getComputedStyle(e).getPropertyValue(s.prefix+"transform"),n.transform={prefix:s.prefix,name:t,translate:!0,translateZ:!!i&&"none"!==i})),void 0!==e.style.backgroundSize&&(n.backgroundSize={},e.style.backgroundSize="contain",n.backgroundSize.contain="contain"===window.getComputedStyle(e).getPropertyValue("background-size"),e.style.backgroundSize="cover",n.backgroundSize.cover="cover"===window.getComputedStyle(e).getPropertyValue("background-size")),document.body.removeChild(e)}var s,n={touch:void 0!==window.ontouchstart||window.DocumentTouch&&document instanceof DocumentTouch},o={webkitTransition:{end:"webkitTransitionEnd",prefix:"-webkit-"},MozTransition:{end:"transitionend",prefix:"-moz-"},OTransition:{end:"otransitionend",prefix:"-o-"},transition:{end:"transitionend",prefix:""}};for(s in o)if(o.hasOwnProperty(s)&&void 0!==e.style[s]){n.transition=o[s],n.transition.name=s;break}return document.body?i():t(document).on("DOMContentLoaded",i),n}(document.createElement("div")),requestAnimationFrame:window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame,cancelAnimationFrame:window.cancelAnimationFrame||window.webkitCancelRequestAnimationFrame||window.webkitCancelAnimationFrame||window.mozCancelAnimationFrame,initialize:function(){if(this.initStartIndex(),!1===this.initWidget())return!1;this.initEventListeners(),this.onslide(this.index),this.ontransitionend(),this.options.startSlideshow&&this.play()},slide:function(t,e){window.clearTimeout(this.timeout);var i,s,n,o=this.index;if(o!==t&&1!==this.num){if(e||(e=this.options.transitionSpeed),this.support.transform){for(this.options.continuous||(t=this.circle(t)),i=Math.abs(o-t)/(o-t),this.options.continuous&&(s=i,(i=-this.positions[this.circle(t)]/this.slideWidth)!==s&&(t=-i*this.num+t)),n=Math.abs(o-t)-1;n;)n-=1,this.move(this.circle((t>o?t:o)-n-1),this.slideWidth*i,0);t=this.circle(t),this.move(o,this.slideWidth*i,e),this.move(t,0,e),this.options.continuous&&this.move(this.circle(t-i),-this.slideWidth*i,0)}else t=this.circle(t),this.animate(o*-this.slideWidth,t*-this.slideWidth,e);this.onslide(t)}},getIndex:function(){return this.index},getNumber:function(){return this.num},prev:function(){(this.options.continuous||this.index)&&this.slide(this.index-1)},next:function(){(this.options.continuous||this.index<this.num-1)&&this.slide(this.index+1)},play:function(t){var e=this;window.clearTimeout(this.timeout),this.interval=t||this.options.slideshowInterval,this.elements[this.index]>1&&(this.timeout=this.setTimeout(!this.requestAnimationFrame&&this.slide||function(t,i){e.animationFrameId=e.requestAnimationFrame.call(window,function(){e.slide(t,i)})},[this.index+1,this.options.slideshowTransitionSpeed],this.interval)),this.container.addClass(this.options.playingClass)},pause:function(){window.clearTimeout(this.timeout),this.interval=null,this.cancelAnimationFrame&&(this.cancelAnimationFrame.call(window,this.animationFrameId),this.animationFrameId=null),this.container.removeClass(this.options.playingClass)},add:function(t){var e;for(t.concat||(t=Array.prototype.slice.call(t)),this.list.concat||(this.list=Array.prototype.slice.call(this.list)),this.list=this.list.concat(t),this.num=this.list.length,this.num>2&&null===this.options.continuous&&(this.options.continuous=!0,this.container.removeClass(this.options.leftEdgeClass)),this.container.removeClass(this.options.rightEdgeClass).removeClass(this.options.singleClass),e=this.num-t.length;e<this.num;e+=1)this.addSlide(e),this.positionSlide(e);this.positions.length=this.num,this.initSlides(!0)},resetSlides:function(){this.slidesContainer.empty(),this.unloadAllSlides(),this.slides=[]},handleClose:function(){var t=this.options;this.destroyEventListeners(),this.pause(),this.container[0].style.display="none",this.container.removeClass(t.displayClass).removeClass(t.singleClass).removeClass(t.leftEdgeClass).removeClass(t.rightEdgeClass),t.hidePageScrollbars&&(document.body.style.overflow=this.bodyOverflowStyle),this.options.clearSlides&&this.resetSlides(),this.options.onclosed&&this.options.onclosed.call(this)},close:function(){function t(i){i.target===e.container[0]&&(e.container.off(e.support.transition.end,t),e.handleClose())}var e=this;this.options.onclose&&this.options.onclose.call(this),this.support.transition&&this.options.displayTransition?(this.container.on(this.support.transition.end,t),this.container.removeClass(this.options.displayClass)):this.handleClose()},circle:function(t){return(this.num+t%this.num)%this.num},move:function(t,e,i){this.translateX(t,e,i),this.positions[t]=e},translate:function(t,e,i,s){var n=this.slides[t].style,o=this.support.transition,a=this.support.transform;n[o.name+"Duration"]=s+"ms",n[a.name]="translate("+e+"px, "+i+"px)"+(a.translateZ?" translateZ(0)":"")},translateX:function(t,e,i){this.translate(t,e,0,i)},translateY:function(t,e,i){this.translate(t,0,e,i)},animate:function(t,e,i){if(i)var s=this,n=(new Date).getTime(),o=window.setInterval(function(){var a=(new Date).getTime()-n;if(a>i)return s.slidesContainer[0].style.left=e+"px",s.ontransitionend(),void window.clearInterval(o);s.slidesContainer[0].style.left=(e-t)*(Math.floor(a/i*100)/100)+t+"px"},4);else this.slidesContainer[0].style.left=e+"px"},preventDefault:function(t){t.preventDefault?t.preventDefault():t.returnValue=!1},stopPropagation:function(t){t.stopPropagation?t.stopPropagation():t.cancelBubble=!0},onresize:function(){this.initSlides(!0)},onmousedown:function(t){t.which&&1===t.which&&"VIDEO"!==t.target.nodeName&&(t.preventDefault(),(t.originalEvent||t).touches=[{pageX:t.pageX,pageY:t.pageY}],this.ontouchstart(t))},onmousemove:function(t){this.touchStart&&((t.originalEvent||t).touches=[{pageX:t.pageX,pageY:t.pageY}],this.ontouchmove(t))},onmouseup:function(t){this.touchStart&&(this.ontouchend(t),delete this.touchStart)},onmouseout:function(e){if(this.touchStart){var i=e.target,s=e.relatedTarget;s&&(s===i||t.contains(i,s))||this.onmouseup(e)}},ontouchstart:function(t){this.options.stopTouchEventsPropagation&&this.stopPropagation(t);var e=(t.originalEvent||t).touches[0];this.touchStart={x:e.pageX,y:e.pageY,time:Date.now()},this.isScrolling=void 0,this.touchDelta={}},ontouchmove:function(t){this.options.stopTouchEventsPropagation&&this.stopPropagation(t);var e,i,s=(t.originalEvent||t).touches[0],n=(t.originalEvent||t).scale,o=this.index;if(!(s.length>1||n&&1!==n))if(this.options.disableScroll&&t.preventDefault(),this.touchDelta={x:s.pageX-this.touchStart.x,y:s.pageY-this.touchStart.y},e=this.touchDelta.x,void 0===this.isScrolling&&(this.isScrolling=this.isScrolling||Math.abs(e)<Math.abs(this.touchDelta.y)),this.isScrolling)this.translateY(o,this.touchDelta.y+this.positions[o],0);else for(t.preventDefault(),window.clearTimeout(this.timeout),this.options.continuous?i=[this.circle(o+1),o,this.circle(o-1)]:(this.touchDelta.x=e/=!o&&e>0||o===this.num-1&&e<0?Math.abs(e)/this.slideWidth+1:1,i=[o],o&&i.push(o-1),o<this.num-1&&i.unshift(o+1));i.length;)o=i.pop(),this.translateX(o,e+this.positions[o],0)},ontouchend:function(t){this.options.stopTouchEventsPropagation&&this.stopPropagation(t);var e,i,s,n,o,a=this.index,l=this.options.transitionSpeed,r=this.slideWidth,h=Number(Date.now()-this.touchStart.time)<250,d=h&&Math.abs(this.touchDelta.x)>20||Math.abs(this.touchDelta.x)>r/2,c=!a&&this.touchDelta.x>0||a===this.num-1&&this.touchDelta.x<0,u=!d&&this.options.closeOnSwipeUpOrDown&&(h&&Math.abs(this.touchDelta.y)>20||Math.abs(this.touchDelta.y)>this.slideHeight/2);this.options.continuous&&(c=!1),e=this.touchDelta.x<0?-1:1,this.isScrolling?u?this.close():this.translateY(a,0,l):d&&!c?(i=a+e,s=a-e,n=r*e,o=-r*e,this.options.continuous?(this.move(this.circle(i),n,0),this.move(this.circle(a-2*e),o,0)):i>=0&&i<this.num&&this.move(i,n,0),this.move(a,this.positions[a]+n,l),this.move(this.circle(s),this.positions[this.circle(s)]+n,l),a=this.circle(s),this.onslide(a)):this.options.continuous?(this.move(this.circle(a-1),-r,l),this.move(a,0,l),this.move(this.circle(a+1),r,l)):(a&&this.move(a-1,-r,l),this.move(a,0,l),a<this.num-1&&this.move(a+1,r,l))},ontouchcancel:function(t){this.touchStart&&(this.ontouchend(t),delete this.touchStart)},ontransitionend:function(t){var e=this.slides[this.index];t&&e!==t.target||(this.interval&&this.play(),this.setTimeout(this.options.onslideend,[this.index,e]))},oncomplete:function(e){var i,s=e.target||e.srcElement,n=s&&s.parentNode;s&&n&&(i=this.getNodeIndex(n),t(n).removeClass(this.options.slideLoadingClass),"error"===e.type?(t(n).addClass(this.options.slideErrorClass),this.elements[i]=3):this.elements[i]=2,s.clientHeight>this.container[0].clientHeight&&(s.style.maxHeight=this.container[0].clientHeight),this.interval&&this.slides[this.index]===n&&this.play(),this.setTimeout(this.options.onslidecomplete,[i,n]))},onload:function(t){this.oncomplete(t)},onerror:function(t){this.oncomplete(t)},onkeydown:function(t){switch(t.which||t.keyCode){case 13:this.options.toggleControlsOnReturn&&(this.preventDefault(t),this.toggleControls());break;case 27:this.options.closeOnEscape&&(this.close(),t.stopImmediatePropagation());break;case 32:this.options.toggleSlideshowOnSpace&&(this.preventDefault(t),this.toggleSlideshow());break;case 37:this.options.enableKeyboardNavigation&&(this.preventDefault(t),this.prev());break;case 39:this.options.enableKeyboardNavigation&&(this.preventDefault(t),this.next())}},handleClick:function(e){function i(e){return t(n).hasClass(e)||t(o).hasClass(e)}var s=this.options,n=e.target||e.srcElement,o=n.parentNode;i(s.toggleClass)?(this.preventDefault(e),this.toggleControls()):i(s.prevClass)?(this.preventDefault(e),this.prev()):i(s.nextClass)?(this.preventDefault(e),this.next()):i(s.closeClass)?(this.preventDefault(e),this.close()):i(s.playPauseClass)?(this.preventDefault(e),this.toggleSlideshow()):o===this.slidesContainer[0]?s.closeOnSlideClick?(this.preventDefault(e),this.close()):s.toggleControlsOnSlideClick&&(this.preventDefault(e),this.toggleControls()):o.parentNode&&o.parentNode===this.slidesContainer[0]&&s.toggleControlsOnSlideClick&&(this.preventDefault(e),this.toggleControls())},onclick:function(t){if(!(this.options.emulateTouchEvents&&this.touchDelta&&(Math.abs(this.touchDelta.x)>20||Math.abs(this.touchDelta.y)>20)))return this.handleClick(t);delete this.touchDelta},updateEdgeClasses:function(t){t?this.container.removeClass(this.options.leftEdgeClass):this.container.addClass(this.options.leftEdgeClass),t===this.num-1?this.container.addClass(this.options.rightEdgeClass):this.container.removeClass(this.options.rightEdgeClass)},handleSlide:function(t){this.options.continuous||this.updateEdgeClasses(t),this.loadElements(t),this.options.unloadElements&&this.unloadElements(t),this.setTitle(t)},onslide:function(t){this.index=t,this.handleSlide(t),this.setTimeout(this.options.onslide,[t,this.slides[t]])},setTitle:function(t){var e=this.slides[t].firstChild,i=e.title||e.alt,s=this.titleElement;s.length&&(this.titleElement.empty(),i&&s[0].appendChild(document.createTextNode(i)))},setTimeout:function(t,e,i){var s=this;return t&&window.setTimeout(function(){t.apply(s,e||[])},i||0)},imageFactory:function(e,i){function s(e){if(!n){if(e={type:e.type,target:o},!o.parentNode)return l.setTimeout(s,[e]);n=!0,t(r).off("load error",s),d&&"load"===e.type&&(o.style.background='url("'+h+'") center no-repeat',o.style.backgroundSize=d),i(e)}}var n,o,a,l=this,r=this.imagePrototype.cloneNode(!1),h=e,d=this.options.stretchImages;return"string"!=typeof h&&(h=this.getItemProperty(e,this.options.urlProperty),a=this.getItemProperty(e,this.options.titleProperty)),!0===d&&(d="contain"),(d=this.support.backgroundSize&&this.support.backgroundSize[d]&&d)?o=this.elementPrototype.cloneNode(!1):(o=r,r.draggable=!1),a&&(o.title=a),t(r).on("load error",s),r.src=h,o},createElement:function(e,i){var s=e&&this.getItemProperty(e,this.options.typeProperty),n=s&&this[s.split("/")[0]+"Factory"]||this.imageFactory,o=e&&n.call(this,e,i),a=this.getItemProperty(e,this.options.srcsetProperty);return o||(o=this.elementPrototype.cloneNode(!1),this.setTimeout(i,[{type:"error",target:o}])),a&&o.setAttribute("srcset",a),t(o).addClass(this.options.slideContentClass),o},loadElement:function(e){this.elements[e]||(this.slides[e].firstChild?this.elements[e]=t(this.slides[e]).hasClass(this.options.slideErrorClass)?3:2:(this.elements[e]=1,t(this.slides[e]).addClass(this.options.slideLoadingClass),this.slides[e].appendChild(this.createElement(this.list[e],this.proxyListener))))},loadElements:function(t){var e,i=Math.min(this.num,2*this.options.preloadRange+1),s=t;for(e=0;e<i;e+=1)s+=e*(e%2==0?-1:1),s=this.circle(s),this.loadElement(s)},unloadElements:function(t){var e,i;for(e in this.elements)this.elements.hasOwnProperty(e)&&(i=Math.abs(t-e))>this.options.preloadRange&&i+this.options.preloadRange<this.num&&(this.unloadSlide(e),delete this.elements[e])},addSlide:function(t){var e=this.slidePrototype.cloneNode(!1);e.setAttribute("data-index",t),this.slidesContainer[0].appendChild(e),this.slides.push(e)},positionSlide:function(t){var e=this.slides[t];e.style.width=this.slideWidth+"px",this.support.transform&&(e.style.left=t*-this.slideWidth+"px",this.move(t,this.index>t?-this.slideWidth:this.index<t?this.slideWidth:0,0))},initSlides:function(e){var i,s;for(e||(this.positions=[],this.positions.length=this.num,this.elements={},this.imagePrototype=document.createElement("img"),this.elementPrototype=document.createElement("div"),this.slidePrototype=document.createElement("div"),t(this.slidePrototype).addClass(this.options.slideClass),this.slides=this.slidesContainer[0].children,i=this.options.clearSlides||this.slides.length!==this.num),this.slideWidth=this.container[0].offsetWidth,this.slideHeight=this.container[0].offsetHeight,this.slidesContainer[0].style.width=this.num*this.slideWidth+"px",i&&this.resetSlides(),s=0;s<this.num;s+=1)i&&this.addSlide(s),this.positionSlide(s);this.options.continuous&&this.support.transform&&(this.move(this.circle(this.index-1),-this.slideWidth,0),this.move(this.circle(this.index+1),this.slideWidth,0)),this.support.transform||(this.slidesContainer[0].style.left=this.index*-this.slideWidth+"px")},unloadSlide:function(t){var e,i;null!==(i=(e=this.slides[t]).firstChild)&&e.removeChild(i)},unloadAllSlides:function(){var t,e;for(t=0,e=this.slides.length;t<e;t++)this.unloadSlide(t)},toggleControls:function(){var t=this.options.controlsClass;this.container.hasClass(t)?this.container.removeClass(t):this.container.addClass(t)},toggleSlideshow:function(){this.interval?this.pause():this.play()},getNodeIndex:function(t){return parseInt(t.getAttribute("data-index"),10)},getNestedProperty:function(t,e){return e.replace(/\[(?:'([^']+)'|"([^"]+)"|(\d+))\]|(?:(?:^|\.)([^\.\[]+))/g,function(e,i,s,n,o){var a=o||i||s||n&&parseInt(n,10);e&&t&&(t=t[a])}),t},getDataProperty:function(e,i){var s,n;if(e.dataset?(s=i.replace(/-([a-z])/g,function(t,e){return e.toUpperCase()}),n=e.dataset[s]):e.getAttribute&&(n=e.getAttribute("data-"+i.replace(/([A-Z])/g,"-$1").toLowerCase())),"string"==typeof n){if(/^(true|false|null|-?\d+(\.\d+)?|\{[\s\S]*\}|\[[\s\S]*\])$/.test(n))try{return t.parseJSON(n)}catch(t){}return n}},getItemProperty:function(t,e){var i=this.getDataProperty(t,e);return void 0===i&&(i=t[e]),void 0===i&&(i=this.getNestedProperty(t,e)),i},initStartIndex:function(){var t,e=this.options.index,i=this.options.urlProperty;if(e&&"number"!=typeof e)for(t=0;t<this.num;t+=1)if(this.list[t]===e||this.getItemProperty(this.list[t],i)===this.getItemProperty(e,i)){e=t;break}this.index=this.circle(parseInt(e,10)||0)},initEventListeners:function(){function e(t){var e=i.support.transition&&i.support.transition.end===t.type?"transitionend":t.type;i["on"+e](t)}var i=this,s=this.slidesContainer;t(window).on("resize",e),t(document.body).on("keydown",e),this.container.on("click",e),this.support.touch?s.on("touchstart touchmove touchend touchcancel",e):this.options.emulateTouchEvents&&this.support.transition&&s.on("mousedown mousemove mouseup mouseout",e),this.support.transition&&s.on(this.support.transition.end,e),this.proxyListener=e},destroyEventListeners:function(){var e=this.slidesContainer,i=this.proxyListener;t(window).off("resize",i),t(document.body).off("keydown",i),this.container.off("click",i),this.support.touch?e.off("touchstart touchmove touchend touchcancel",i):this.options.emulateTouchEvents&&this.support.transition&&e.off("mousedown mousemove mouseup mouseout",i),this.support.transition&&e.off(this.support.transition.end,i)},handleOpen:function(){this.options.onopened&&this.options.onopened.call(this)},initWidget:function(){function e(t){t.target===i.container[0]&&(i.container.off(i.support.transition.end,e),i.handleOpen())}var i=this;return this.container=t(this.options.container),this.container.length?(this.slidesContainer=this.container.find(this.options.slidesContainer).first(),this.slidesContainer.length?(this.titleElement=this.container.find(this.options.titleElement).first(),1===this.num&&this.container.addClass(this.options.singleClass),this.options.onopen&&this.options.onopen.call(this),this.support.transition&&this.options.displayTransition?this.container.on(this.support.transition.end,e):this.handleOpen(),this.options.hidePageScrollbars&&(this.bodyOverflowStyle=document.body.style.overflow,document.body.style.overflow="hidden"),this.container[0].style.display="block",this.initSlides(),void this.container.addClass(this.options.displayClass)):(this.console.log("blueimp Gallery: Slides container not found.",this.options.slidesContainer),!1)):(this.console.log("blueimp Gallery: Widget container not found.",this.options.container),!1)},initOptions:function(e){this.options=t.extend({},this.options),(e&&e.carousel||this.options.carousel&&(!e||!1!==e.carousel))&&t.extend(this.options,this.carouselOptions),t.extend(this.options,e),this.num<3&&(this.options.continuous=!!this.options.continuous&&null),this.support.transition||(this.options.emulateTouchEvents=!1),this.options.event&&this.preventDefault(this.options.event)}}),e}),function(t){"use strict";"function"==typeof define&&define.amd?define(["./blueimp-helper","./blueimp-gallery"],t):t(window.blueimp.helper||window.jQuery,window.blueimp.Gallery)}(function(t,e){"use strict";t.extend(e.prototype.options,{fullScreen:!1});var i=e.prototype.initialize,s=e.prototype.close;return t.extend(e.prototype,{getFullScreenElement:function(){return document.fullscreenElement||document.webkitFullscreenElement||document.mozFullScreenElement||document.msFullscreenElement},requestFullScreen:function(t){t.requestFullscreen?t.requestFullscreen():t.webkitRequestFullscreen?t.webkitRequestFullscreen():t.mozRequestFullScreen?t.mozRequestFullScreen():t.msRequestFullscreen&&t.msRequestFullscreen()},exitFullScreen:function(){document.exitFullscreen?document.exitFullscreen():document.webkitCancelFullScreen?document.webkitCancelFullScreen():document.mozCancelFullScreen?document.mozCancelFullScreen():document.msExitFullscreen&&document.msExitFullscreen()},initialize:function(){i.call(this),this.options.fullScreen&&!this.getFullScreenElement()&&this.requestFullScreen(this.container[0])},close:function(){this.getFullScreenElement()===this.container[0]&&this.exitFullScreen(),s.call(this)}}),e}),function(t){"use strict";"function"==typeof define&&define.amd?define(["./blueimp-helper","./blueimp-gallery"],t):t(window.blueimp.helper||window.jQuery,window.blueimp.Gallery)}(function(t,e){"use strict";t.extend(e.prototype.options,{indicatorContainer:"ol",activeIndicatorClass:"active",thumbnailProperty:"thumbnail",thumbnailIndicators:!0});var i=e.prototype.initSlides,s=e.prototype.addSlide,n=e.prototype.resetSlides,o=e.prototype.handleClick,a=e.prototype.handleSlide,l=e.prototype.handleClose;return t.extend(e.prototype,{createIndicator:function(e){var i,s,n=this.indicatorPrototype.cloneNode(!1),o=this.getItemProperty(e,this.options.titleProperty),a=this.options.thumbnailProperty;return this.options.thumbnailIndicators&&(a&&(i=this.getItemProperty(e,a)),void 0===i&&(s=e.getElementsByTagName&&t(e).find("img")[0])&&(i=s.src),i&&(n.style.backgroundImage='url("'+i+'")')),o&&(n.title=o),n},addIndicator:function(t){if(this.indicatorContainer.length){var e=this.createIndicator(this.list[t]);e.setAttribute("data-index",t),this.indicatorContainer[0].appendChild(e),this.indicators.push(e)}},setActiveIndicator:function(e){this.indicators&&(this.activeIndicator&&this.activeIndicator.removeClass(this.options.activeIndicatorClass),this.activeIndicator=t(this.indicators[e]),this.activeIndicator.addClass(this.options.activeIndicatorClass))},initSlides:function(t){t||(this.indicatorContainer=this.container.find(this.options.indicatorContainer),this.indicatorContainer.length&&(this.indicatorPrototype=document.createElement("li"),this.indicators=this.indicatorContainer[0].children)),i.call(this,t)},addSlide:function(t){s.call(this,t),this.addIndicator(t)},resetSlides:function(){n.call(this),this.indicatorContainer.empty(),this.indicators=[]},handleClick:function(t){var e=t.target||t.srcElement,i=e.parentNode;if(i===this.indicatorContainer[0])this.preventDefault(t),this.slide(this.getNodeIndex(e));else{if(i.parentNode!==this.indicatorContainer[0])return o.call(this,t);this.preventDefault(t),this.slide(this.getNodeIndex(i))}},handleSlide:function(t){a.call(this,t),this.setActiveIndicator(t)},handleClose:function(){this.activeIndicator&&this.activeIndicator.removeClass(this.options.activeIndicatorClass),l.call(this)}}),e}),function(t){"use strict";"function"==typeof define&&define.amd?define(["./blueimp-helper","./blueimp-gallery"],t):t(window.blueimp.helper||window.jQuery,window.blueimp.Gallery)}(function(t,e){"use strict";t.extend(e.prototype.options,{videoContentClass:"video-content",videoLoadingClass:"video-loading",videoPlayingClass:"video-playing",videoPosterProperty:"poster",videoSourcesProperty:"sources"});var i=e.prototype.handleSlide;return t.extend(e.prototype,{handleSlide:function(t){i.call(this,t),this.playingVideo&&this.playingVideo.pause()},videoFactory:function(e,i,s){var n,o,a,l,r,h=this,d=this.options,c=this.elementPrototype.cloneNode(!1),u=t(c),p=[{type:"error",target:c}],m=s||document.createElement("video"),y=this.getItemProperty(e,d.urlProperty),f=this.getItemProperty(e,d.typeProperty),g=this.getItemProperty(e,d.titleProperty),v=this.getItemProperty(e,d.videoPosterProperty),C=this.getItemProperty(e,d.videoSourcesProperty);if(u.addClass(d.videoContentClass),g&&(c.title=g),m.canPlayType)if(y&&f&&m.canPlayType(f))m.src=y;else if(C)for(;C.length;)if(o=C.shift(),y=this.getItemProperty(o,d.urlProperty),f=this.getItemProperty(o,d.typeProperty),y&&f&&m.canPlayType(f)){m.src=y;break}return v&&(m.poster=v,n=this.imagePrototype.cloneNode(!1),t(n).addClass(d.toggleClass),n.src=v,n.draggable=!1,c.appendChild(n)),(a=document.createElement("a")).setAttribute("target","_blank"),s||a.setAttribute("download",g),a.href=y,m.src&&(m.controls=!0,(s||t(m)).on("error",function(){h.setTimeout(i,p)}).on("pause",function(){m.seeking||(l=!1,u.removeClass(h.options.videoLoadingClass).removeClass(h.options.videoPlayingClass),r&&h.container.addClass(h.options.controlsClass),delete h.playingVideo,h.interval&&h.play())}).on("playing",function(){l=!1,u.removeClass(h.options.videoLoadingClass).addClass(h.options.videoPlayingClass),h.container.hasClass(h.options.controlsClass)?(r=!0,h.container.removeClass(h.options.controlsClass)):r=!1}).on("play",function(){window.clearTimeout(h.timeout),l=!0,u.addClass(h.options.videoLoadingClass),h.playingVideo=m}),t(a).on("click",function(t){h.preventDefault(t),l?m.pause():m.play()}),c.appendChild(s&&s.element||m)),c.appendChild(a),this.setTimeout(i,[{type:"load",target:c}]),c}}),e}),function(t){"use strict";"function"==typeof define&&define.amd?define(["./blueimp-helper","./blueimp-gallery-video"],t):t(window.blueimp.helper||window.jQuery,window.blueimp.Gallery)}(function(t,e){"use strict";if(!window.postMessage)return e;t.extend(e.prototype.options,{vimeoVideoIdProperty:"vimeo",vimeoPlayerUrl:"//player.vimeo.com/video/VIDEO_ID?api=1&player_id=PLAYER_ID",vimeoPlayerIdPrefix:"vimeo-player-",vimeoClickToPlay:!0});var i=e.prototype.textFactory||e.prototype.imageFactory,s=function(t,e,i,s){this.url=t,this.videoId=e,this.playerId=i,this.clickToPlay=s,this.element=document.createElement("div"),this.listeners={}},n=0;return t.extend(s.prototype,{canPlayType:function(){return!0},on:function(t,e){return this.listeners[t]=e,this},loadAPI:function(){function e(){!s&&n.playOnReady&&n.play(),s=!0}for(var i,s,n=this,o="//f.vimeocdn.com/js/froogaloop2.min.js",a=document.getElementsByTagName("script"),l=a.length;l;)if(l-=1,a[l].src===o){i=a[l];break}i||((i=document.createElement("script")).src=o),t(i).on("load",e),a[0].parentNode.insertBefore(i,a[0]),/loaded|complete/.test(i.readyState)&&e()},onReady:function(){var t=this;this.ready=!0,this.player.addEvent("play",function(){t.hasPlayed=!0,t.onPlaying()}),this.player.addEvent("pause",function(){t.onPause()}),this.player.addEvent("finish",function(){t.onPause()}),this.playOnReady&&this.play()},onPlaying:function(){this.playStatus<2&&(this.listeners.playing(),this.playStatus=2)},onPause:function(){this.listeners.pause(),delete this.playStatus},insertIframe:function(){var t=document.createElement("iframe");t.src=this.url.replace("VIDEO_ID",this.videoId).replace("PLAYER_ID",this.playerId),t.id=this.playerId,this.element.parentNode.replaceChild(t,this.element),this.element=t},play:function(){var t=this;this.playStatus||(this.listeners.play(),this.playStatus=1),this.ready?!this.hasPlayed&&(this.clickToPlay||window.navigator&&/iP(hone|od|ad)/.test(window.navigator.platform))?this.onPlaying():this.player.api("play"):(this.playOnReady=!0,window.$f?this.player||(this.insertIframe(),this.player=$f(this.element),this.player.addEvent("ready",function(){t.onReady()})):this.loadAPI())},pause:function(){this.ready?this.player.api("pause"):this.playStatus&&(delete this.playOnReady,this.listeners.pause(),delete this.playStatus)}}),t.extend(e.prototype,{VimeoPlayer:s,textFactory:function(t,e){var o=this.options,a=this.getItemProperty(t,o.vimeoVideoIdProperty);return a?(void 0===this.getItemProperty(t,o.urlProperty)&&(t[o.urlProperty]="//vimeo.com/"+a),n+=1,this.videoFactory(t,e,new s(o.vimeoPlayerUrl,a,o.vimeoPlayerIdPrefix+n,o.vimeoClickToPlay))):i.call(this,t,e)}}),e}),function(t){"use strict";"function"==typeof define&&define.amd?define(["./blueimp-helper","./blueimp-gallery-video"],t):t(window.blueimp.helper||window.jQuery,window.blueimp.Gallery)}(function(t,e){"use strict";if(!window.postMessage)return e;t.extend(e.prototype.options,{youTubeVideoIdProperty:"youtube",youTubePlayerVars:{wmode:"transparent"},youTubeClickToPlay:!0});var i=e.prototype.textFactory||e.prototype.imageFactory,s=function(t,e,i){this.videoId=t,this.playerVars=e,this.clickToPlay=i,this.element=document.createElement("div"),this.listeners={}};return t.extend(s.prototype,{canPlayType:function(){return!0},on:function(t,e){return this.listeners[t]=e,this},loadAPI:function(){var t,e=this,i=window.onYouTubeIframeAPIReady,s="//www.youtube.com/iframe_api",n=document.getElementsByTagName("script"),o=n.length;for(window.onYouTubeIframeAPIReady=function(){i&&i.apply(this),e.playOnReady&&e.play()};o;)if(o-=1,n[o].src===s)return;(t=document.createElement("script")).src=s,n[0].parentNode.insertBefore(t,n[0])},onReady:function(){this.ready=!0,this.playOnReady&&this.play()},onPlaying:function(){this.playStatus<2&&(this.listeners.playing(),this.playStatus=2)},onPause:function(){e.prototype.setTimeout.call(this,this.checkSeek,null,2e3)},checkSeek:function(){this.stateChange!==YT.PlayerState.PAUSED&&this.stateChange!==YT.PlayerState.ENDED||(this.listeners.pause(),delete this.playStatus)},onStateChange:function(t){switch(t.data){case YT.PlayerState.PLAYING:this.hasPlayed=!0,this.onPlaying();break;case YT.PlayerState.PAUSED:case YT.PlayerState.ENDED:this.onPause()}this.stateChange=t.data},onError:function(t){this.listeners.error(t)},play:function(){var t=this;this.playStatus||(this.listeners.play(),this.playStatus=1),this.ready?!this.hasPlayed&&(this.clickToPlay||window.navigator&&/iP(hone|od|ad)/.test(window.navigator.platform))?this.onPlaying():this.player.playVideo():(this.playOnReady=!0,window.YT&&YT.Player?this.player||(this.player=new YT.Player(this.element,{videoId:this.videoId,playerVars:this.playerVars,events:{onReady:function(){t.onReady()},onStateChange:function(e){t.onStateChange(e)},onError:function(e){t.onError(e)}}})):this.loadAPI())},pause:function(){this.ready?this.player.pauseVideo():this.playStatus&&(delete this.playOnReady,this.listeners.pause(),delete this.playStatus)}}),t.extend(e.prototype,{YouTubePlayer:s,textFactory:function(t,e){var n=this.options,o=this.getItemProperty(t,n.youTubeVideoIdProperty);return o?(void 0===this.getItemProperty(t,n.urlProperty)&&(t[n.urlProperty]="//www.youtube.com/watch?v="+o),void 0===this.getItemProperty(t,n.videoPosterProperty)&&(t[n.videoPosterProperty]="//img.youtube.com/vi/"+o+"/maxresdefault.jpg"),this.videoFactory(t,e,new s(o,n.youTubePlayerVars,n.youTubeClickToPlay))):i.call(this,t,e)}}),e}),function(t){"use strict";"function"==typeof define&&define.amd?define(["jquery","./blueimp-gallery"],t):t(window.jQuery,window.blueimp.Gallery)}(function(t,e){"use strict";t(document).on("click","[data-gallery]",function(i){var s=t(this).data("gallery"),n=t(s),o=n.length&&n||t(e.prototype.options.container),a={onopen:function(){o.data("gallery",this).trigger("open")},onopened:function(){o.trigger("opened")},onslide:function(){o.trigger("slide",arguments)},onslideend:function(){o.trigger("slideend",arguments)},onslidecomplete:function(){o.trigger("slidecomplete",arguments)},onclose:function(){o.trigger("close")},onclosed:function(){o.trigger("closed").removeData("gallery")}},l=t.extend(o.data(),{container:o[0],index:this,event:i},a),r=t('[data-gallery="'+s+'"]');return l.filter&&(r=r.filter(l.filter)),new e(r,l)})});
+ //# sourceMappingURL=jquery.blueimp-gallery.min.js.map
\ No newline at end of file
public/javascripts/blueimp/jquery.blueimp-gallery.min.js.map +1 -0
@@ @@ -0,0 +1 @@
+ {"version":3,"sources":["blueimp-gallery.js","blueimp-gallery-fullscreen.js","blueimp-gallery-indicator.js","blueimp-gallery-video.js","blueimp-gallery-vimeo.js","blueimp-gallery-youtube.js","jquery.blueimp-gallery.js"],"names":["factory","define","amd","window","blueimp","Gallery","helper","jQuery","$","list","options","undefined","document","body","style","maxHeight","this","prototype","length","num","initOptions","initialize","console","log","extend","container","slidesContainer","titleElement","displayClass","controlsClass","singleClass","leftEdgeClass","rightEdgeClass","playingClass","slideClass","slideLoadingClass","slideErrorClass","slideContentClass","toggleClass","prevClass","nextClass","closeClass","playPauseClass","typeProperty","titleProperty","urlProperty","srcsetProperty","displayTransition","clearSlides","stretchImages","toggleControlsOnReturn","toggleControlsOnSlideClick","toggleSlideshowOnSpace","enableKeyboardNavigation","closeOnEscape","closeOnSlideClick","closeOnSwipeUpOrDown","emulateTouchEvents","stopTouchEventsPropagation","hidePageScrollbars","disableScroll","carousel","continuous","unloadElements","startSlideshow","slideshowInterval","index","preloadRange","transitionSpeed","slideshowTransitionSpeed","event","onopen","onopened","onslide","onslideend","onslidecomplete","onclose","onclosed","carouselOptions","support","element","elementTests","prop","translateZ","transition","appendChild","name","slice","getComputedStyle","getPropertyValue","prefix","transform","translate","backgroundSize","contain","cover","removeChild","touch","ontouchstart","DocumentTouch","transitions","webkitTransition","end","MozTransition","OTransition","hasOwnProperty","on","createElement","requestAnimationFrame","webkitRequestAnimationFrame","mozRequestAnimationFrame","cancelAnimationFrame","webkitCancelRequestAnimationFrame","webkitCancelAnimationFrame","mozCancelAnimationFrame","initStartIndex","initWidget","initEventListeners","ontransitionend","play","slide","to","speed","clearTimeout","timeout","direction","naturalDirection","diff","circle","Math","abs","positions","slideWidth","move","animate","getIndex","getNumber","prev","next","time","that","interval","elements","setTimeout","animationFrameId","call","addClass","pause","removeClass","add","i","concat","Array","addSlide","positionSlide","initSlides","resetSlides","empty","unloadAllSlides","slides","handleClose","destroyEventListeners","display","overflow","bodyOverflowStyle","close","closeHandler","target","off","dist","translateX","x","y","translateY","from","start","Date","getTime","timer","setInterval","timeElap","left","clearInterval","floor","preventDefault","returnValue","stopPropagation","cancelBubble","onresize","onmousedown","which","nodeName","originalEvent","touches","pageX","pageY","onmousemove","touchStart","ontouchmove","onmouseup","ontouchend","onmouseout","related","relatedTarget","contains","now","isScrolling","touchDelta","touchDeltaX","indices","scale","push","unshift","pop","indexForward","indexBackward","distanceForward","distanceBackward","isShortDuration","Number","isValidSlide","isPastBounds","isValidClose","slideHeight","ontouchcancel","oncomplete","srcElement","parent","parentNode","getNodeIndex","type","clientHeight","onload","onerror","onkeydown","keyCode","toggleControls","stopImmediatePropagation","toggleSlideshow","handleClick","isTarget","className","hasClass","onclick","updateEdgeClasses","handleSlide","loadElements","setTitle","firstChild","text","title","alt","createTextNode","func","args","wait","apply","imageFactory","obj","callback","callbackWrapper","called","img","background","url","imagePrototype","cloneNode","getItemProperty","elementPrototype","draggable","src","split","srcset","setAttribute","loadElement","proxyListener","limit","min","j","unloadSlide","slidePrototype","width","reload","children","offsetWidth","offsetHeight","len","parseInt","getAttribute","getNestedProperty","property","replace","str","singleQuoteProp","doubleQuoteProp","arrayIndex","dotProp","getDataProperty","key","dataset","_","b","toUpperCase","toLowerCase","test","parseJSON","ignore","handleOpen","openHandler","find","first","fullScreen","getFullScreenElement","fullscreenElement","webkitFullscreenElement","mozFullScreenElement","msFullscreenElement","requestFullScreen","requestFullscreen","webkitRequestFullscreen","mozRequestFullScreen","msRequestFullscreen","exitFullScreen","exitFullscreen","webkitCancelFullScreen","mozCancelFullScreen","msExitFullscreen","indicatorContainer","activeIndicatorClass","thumbnailProperty","thumbnailIndicators","createIndicator","thumbnailUrl","thumbnail","indicator","indicatorPrototype","getElementsByTagName","backgroundImage","addIndicator","indicators","setActiveIndicator","activeIndicator","videoContentClass","videoLoadingClass","videoPlayingClass","videoPosterProperty","videoSourcesProperty","playingVideo","videoFactory","videoInterface","posterImage","source","playMediaControl","isLoading","hasControls","videoContainerNode","videoContainer","errorArgs","video","posterUrl","sources","canPlayType","shift","poster","href","controls","seeking","postMessage","vimeoVideoIdProperty","vimeoPlayerUrl","vimeoPlayerIdPrefix","vimeoClickToPlay","textFactory","VimeoPlayer","videoId","playerId","clickToPlay","listeners","counter","loadAPI","playOnReady","scriptTag","apiUrl","scriptTags","insertBefore","readyState","onReady","ready","player","addEvent","hasPlayed","onPlaying","onPause","playStatus","playing","insertIframe","iframe","id","replaceChild","navigator","platform","api","$f","youTubeVideoIdProperty","youTubePlayerVars","wmode","youTubeClickToPlay","YouTubePlayer","playerVars","onYouTubeIframeAPIReady","checkSeek","stateChange","YT","PlayerState","PAUSED","ENDED","onStateChange","data","PLAYING","onError","error","playVideo","Player","events","pauseVideo","widget","callbacks","trigger","arguments","removeData","links","filter"],"mappings":"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"}
\ No newline at end of file
public/stylesheets/app.scss +3 -3
@@ @@ -100,8 +100,8 @@ header {
font-family: $header-font-family;
}
- .content {
- background-color: $light-gray;
- }
+ // .content {
+ // background-color: $light-gray;
+ // }
@import "featured_services";
public/stylesheets/blueimp/blueimp-gallery-indicator.css +97 -0
@@ @@ -0,0 +1,97 @@
+ @charset "UTF-8";
+ /*
+ * blueimp Gallery Indicator CSS
+ * https://github.com/blueimp/Gallery
+ *
+ * Copyright 2013, Sebastian Tschan
+ * https://blueimp.net
+ *
+ * Licensed under the MIT license:
+ * https://opensource.org/licenses/MIT
+ */
+
+ .blueimp-gallery > .indicator {
+ position: absolute;
+ top: auto;
+ right: 15px;
+ bottom: 15px;
+ left: 15px;
+ margin: 0 40px;
+ padding: 0;
+ list-style: none;
+ text-align: center;
+ line-height: 10px;
+ display: none;
+ }
+ .blueimp-gallery > .indicator > li {
+ display: inline-block;
+ width: 9px;
+ height: 9px;
+ margin: 6px 3px 0 3px;
+ -webkit-box-sizing: content-box;
+ -moz-box-sizing: content-box;
+ box-sizing: content-box;
+ border: 1px solid transparent;
+ background: #ccc;
+ background: rgba(255, 255, 255, 0.25) center no-repeat;
+ border-radius: 5px;
+ box-shadow: 0 0 2px #000;
+ opacity: 0.5;
+ cursor: pointer;
+ }
+ .blueimp-gallery > .indicator > li:hover,
+ .blueimp-gallery > .indicator > .active {
+ background-color: #fff;
+ border-color: #fff;
+ opacity: 1;
+ }
+
+
+ .blueimp-gallery > .indicator > li:after {
+ opacity: 0;
+ display: block;
+ position: absolute;
+ content: '';
+ top: -5em;
+ width: 75px;
+ height: 75px;
+ transition: transform 600ms ease-out, opacity 400ms ease-out;
+ transform: translateX(-50%) translateY(0) translateZ(0px);
+ pointer-events:none;
+ }
+
+ .blueimp-gallery > .indicator > li:hover:after {
+ opacity: 1;
+ border-radius: 50%;
+ background: inherit;
+ transform: translateX(-50%) translateY(-5px) translateZ(0px);
+ }
+
+ .blueimp-gallery > .indicator > .active:after {
+ display: none;
+ }
+
+ .blueimp-gallery-controls > .indicator {
+ display: block;
+ /* Fix z-index issues (controls behind slide element) on Android: */
+ -webkit-transform: translateZ(0);
+ -moz-transform: translateZ(0);
+ -ms-transform: translateZ(0);
+ -o-transform: translateZ(0);
+ transform: translateZ(0);
+ }
+ .blueimp-gallery-single > .indicator {
+ display: none;
+ }
+ .blueimp-gallery > .indicator {
+ -webkit-user-select: none;
+ -khtml-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+ }
+
+ /* IE7 fixes */
+ *+html .blueimp-gallery > .indicator > li {
+ display: inline;
+ }
public/stylesheets/blueimp/blueimp-gallery-video.css +87 -0
@@ @@ -0,0 +1,87 @@
+ @charset "UTF-8";
+ /*
+ * blueimp Gallery Video Factory CSS
+ * https://github.com/blueimp/Gallery
+ *
+ * Copyright 2013, Sebastian Tschan
+ * https://blueimp.net
+ *
+ * Licensed under the MIT license:
+ * https://opensource.org/licenses/MIT
+ */
+
+ .blueimp-gallery > .slides > .slide > .video-content > img {
+ position: absolute;
+ top: 0;
+ right: 0;
+ bottom: 0;
+ left: 0;
+ margin: auto;
+ width: auto;
+ height: auto;
+ max-width: 100%;
+ max-height: 100%;
+ /* Prevent artifacts in Mozilla Firefox: */
+ -moz-backface-visibility: hidden;
+ }
+ .blueimp-gallery > .slides > .slide > .video-content > video {
+ position: absolute;
+ top: 0;
+ left: 0;
+ width: 100%;
+ height: 100%;
+ }
+ .blueimp-gallery > .slides > .slide > .video-content > iframe {
+ position: absolute;
+ top: 100%;
+ left: 0;
+ width: 100%;
+ height: 100%;
+ border: none;
+ }
+ .blueimp-gallery > .slides > .slide > .video-playing > iframe {
+ top: 0;
+ }
+ .blueimp-gallery > .slides > .slide > .video-content > a {
+ position: absolute;
+ top: 50%;
+ right: 0;
+ left: 0;
+ margin: -64px auto 0;
+ width: 128px;
+ height: 128px;
+ background: url(../img/video-play.png) center no-repeat;
+ opacity: 0.8;
+ cursor: pointer;
+ }
+ .blueimp-gallery > .slides > .slide > .video-content > a:hover {
+ opacity: 1;
+ }
+ .blueimp-gallery > .slides > .slide > .video-playing > a,
+ .blueimp-gallery > .slides > .slide > .video-playing > img {
+ display: none;
+ }
+ .blueimp-gallery > .slides > .slide > .video-content > video {
+ display: none;
+ }
+ .blueimp-gallery > .slides > .slide > .video-playing > video {
+ display: block;
+ }
+ .blueimp-gallery > .slides > .slide > .video-loading > a {
+ background: url(../img/loading.gif) center no-repeat;
+ background-size: 64px 64px;
+ }
+
+ /* Replace PNGs with SVGs for capable browsers (excluding IE<9) */
+ body:last-child .blueimp-gallery > .slides > .slide > .video-content:not(.video-loading) > a {
+ background-image: url(../img/video-play.svg);
+ }
+
+ /* IE7 fixes */
+ *+html .blueimp-gallery > .slides > .slide > .video-content {
+ height: 100%;
+ }
+ *+html .blueimp-gallery > .slides > .slide > .video-content > a {
+ left: 50%;
+ margin-left: -64px;
+ }
public/stylesheets/blueimp/blueimp-gallery.css +226 -0
@@ @@ -0,0 +1,226 @@
+ @charset "UTF-8";
+ /*
+ * blueimp Gallery CSS
+ * https://github.com/blueimp/Gallery
+ *
+ * Copyright 2013, Sebastian Tschan
+ * https://blueimp.net
+ *
+ * Licensed under the MIT license:
+ * https://opensource.org/licenses/MIT
+ */
+
+ .blueimp-gallery,
+ .blueimp-gallery > .slides > .slide > .slide-content {
+ position: absolute;
+ top: 0;
+ right: 0;
+ bottom: 0;
+ left: 0;
+ /* Prevent artifacts in Mozilla Firefox: */
+ -moz-backface-visibility: hidden;
+ }
+ .blueimp-gallery > .slides > .slide > .slide-content {
+ margin: auto;
+ width: auto;
+ height: auto;
+ max-width: 100%;
+ max-height: 100%;
+ opacity: 1;
+ }
+ .blueimp-gallery {
+ position: fixed;
+ z-index: 999999;
+ overflow: hidden;
+ background: #000;
+ background: rgba(0, 0, 0, 0.9);
+ opacity: 0;
+ display: none;
+ direction: ltr;
+ -ms-touch-action: none;
+ touch-action: none;
+ }
+ .blueimp-gallery-carousel {
+ position: relative;
+ z-index: auto;
+ margin: 1em auto;
+ /* Set the carousel width/height ratio to 16/9: */
+ padding-bottom: 56.25%;
+ box-shadow: 0 0 10px #000;
+ -ms-touch-action: pan-y;
+ touch-action: pan-y;
+ }
+ .blueimp-gallery-display {
+ display: block;
+ opacity: 1;
+ }
+ .blueimp-gallery > .slides {
+ position: relative;
+ height: 100%;
+ overflow: hidden;
+ }
+ .blueimp-gallery-carousel > .slides {
+ position: absolute;
+ }
+ .blueimp-gallery > .slides > .slide {
+ position: relative;
+ float: left;
+ height: 100%;
+ text-align: center;
+ -webkit-transition-timing-function: cubic-bezier(0.645, 0.045, 0.355, 1.000);
+ -moz-transition-timing-function: cubic-bezier(0.645, 0.045, 0.355, 1.000);
+ -ms-transition-timing-function: cubic-bezier(0.645, 0.045, 0.355, 1.000);
+ -o-transition-timing-function: cubic-bezier(0.645, 0.045, 0.355, 1.000);
+ transition-timing-function: cubic-bezier(0.645, 0.045, 0.355, 1.000);
+ }
+ .blueimp-gallery,
+ .blueimp-gallery > .slides > .slide > .slide-content {
+ -webkit-transition: opacity 0.2s linear;
+ -moz-transition: opacity 0.2s linear;
+ -ms-transition: opacity 0.2s linear;
+ -o-transition: opacity 0.2s linear;
+ transition: opacity 0.2s linear;
+ }
+ .blueimp-gallery > .slides > .slide-loading {
+ background: url(../img/loading.gif) center no-repeat;
+ background-size: 64px 64px;
+ }
+ .blueimp-gallery > .slides > .slide-loading > .slide-content {
+ opacity: 0;
+ }
+ .blueimp-gallery > .slides > .slide-error {
+ background: url(../img/error.png) center no-repeat;
+ }
+ .blueimp-gallery > .slides > .slide-error > .slide-content {
+ display: none;
+ }
+ .blueimp-gallery > .prev,
+ .blueimp-gallery > .next {
+ position: absolute;
+ top: 50%;
+ left: 15px;
+ width: 40px;
+ height: 40px;
+ margin-top: -23px;
+ font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
+ font-size: 60px;
+ font-weight: 100;
+ line-height: 30px;
+ color: #fff;
+ text-decoration: none;
+ text-shadow: 0 0 2px #000;
+ text-align: center;
+ background: #222;
+ background: rgba(0, 0, 0, 0.5);
+ -webkit-box-sizing: content-box;
+ -moz-box-sizing: content-box;
+ box-sizing: content-box;
+ border: 3px solid #fff;
+ -webkit-border-radius: 23px;
+ -moz-border-radius: 23px;
+ border-radius: 23px;
+ opacity: 0.5;
+ cursor: pointer;
+ display: none;
+ }
+ .blueimp-gallery > .next {
+ left: auto;
+ right: 15px;
+ }
+ .blueimp-gallery > .close,
+ .blueimp-gallery > .title {
+ position: absolute;
+ top: 15px;
+ left: 15px;
+ margin: 0 40px 0 0;
+ font-size: 20px;
+ line-height: 30px;
+ color: #fff;
+ text-shadow: 0 0 2px #000;
+ opacity: 0.8;
+ display: none;
+ }
+ .blueimp-gallery > .close {
+ padding: 15px;
+ right: 15px;
+ left: auto;
+ margin: -15px;
+ font-size: 30px;
+ text-decoration: none;
+ cursor: pointer;
+ }
+ .blueimp-gallery > .play-pause {
+ position: absolute;
+ right: 15px;
+ bottom: 15px;
+ width: 15px;
+ height: 15px;
+ background: url(../img/play-pause.png) 0 0 no-repeat;
+ cursor: pointer;
+ opacity: 0.5;
+ display: none;
+ }
+ .blueimp-gallery-playing > .play-pause {
+ background-position: -15px 0;
+ }
+ .blueimp-gallery > .prev:hover,
+ .blueimp-gallery > .next:hover,
+ .blueimp-gallery > .close:hover,
+ .blueimp-gallery > .title:hover,
+ .blueimp-gallery > .play-pause:hover {
+ color: #fff;
+ opacity: 1;
+ }
+ .blueimp-gallery-controls > .prev,
+ .blueimp-gallery-controls > .next,
+ .blueimp-gallery-controls > .close,
+ .blueimp-gallery-controls > .title,
+ .blueimp-gallery-controls > .play-pause {
+ display: block;
+ /* Fix z-index issues (controls behind slide element) on Android: */
+ -webkit-transform: translateZ(0);
+ -moz-transform: translateZ(0);
+ -ms-transform: translateZ(0);
+ -o-transform: translateZ(0);
+ transform: translateZ(0);
+ }
+ .blueimp-gallery-single > .prev,
+ .blueimp-gallery-left > .prev,
+ .blueimp-gallery-single > .next,
+ .blueimp-gallery-right > .next,
+ .blueimp-gallery-single > .play-pause {
+ display: none;
+ }
+ .blueimp-gallery > .slides > .slide > .slide-content,
+ .blueimp-gallery > .prev,
+ .blueimp-gallery > .next,
+ .blueimp-gallery > .close,
+ .blueimp-gallery > .play-pause {
+ -webkit-user-select: none;
+ -khtml-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+ }
+
+ /* Replace PNGs with SVGs for capable browsers (excluding IE<9) */
+ body:last-child .blueimp-gallery > .slides > .slide-error {
+ background-image: url(../img/error.svg);
+ }
+ body:last-child .blueimp-gallery > .play-pause {
+ width: 20px;
+ height: 20px;
+ background-size: 40px 20px;
+ background-image: url(../img/play-pause.svg);
+ }
+ body:last-child .blueimp-gallery-playing > .play-pause {
+ background-position: -20px 0;
+ }
+
+ /* IE7 fixes */
+ *+html .blueimp-gallery > .slides > .slide {
+ min-height: 300px;
+ }
+ *+html .blueimp-gallery > .slides > .slide > .slide-content {
+ position: relative;
+ }
public/stylesheets/blueimp/img/error.png +0 -0
public/stylesheets/blueimp/img/error.svg +5 -0
@@ @@ -0,0 +1,5 @@
+ <?xml version="1.0" encoding="UTF-8"?>
+ <svg xmlns="http://www.w3.org/2000/svg" version="1.1" width="64" height="64">
+ <circle cx="32" cy="32" r="25" stroke="red" stroke-width="7" fill="black" fill-opacity="0.2"/>
+ <rect x="28" y="7" width="8" height="50" fill="red" transform="rotate(45, 32, 32)"/>
+ </svg>
public/stylesheets/blueimp/img/loading.gif +0 -0
public/stylesheets/blueimp/img/play-pause.png +0 -0
public/stylesheets/blueimp/img/play-pause.svg +6 -0
@@ @@ -0,0 +1,6 @@
+ <?xml version="1.0" encoding="UTF-8"?>
+ <svg xmlns="http://www.w3.org/2000/svg" version="1.1" width="30" height="15">
+ <polygon points="2,1 2,14 13,7" stroke="black" stroke-width="1" fill="white"/>
+ <rect x="17" y="2" width="4" height="11" stroke="black" stroke-width="1" fill="white"/>
+ <rect x="24" y="2" width="4" height="11" stroke="black" stroke-width="1" fill="white"/>
+ </svg>
public/stylesheets/blueimp/img/video-play.png +0 -0
public/stylesheets/blueimp/img/video-play.svg +5 -0
@@ @@ -0,0 +1,5 @@
+ <?xml version="1.0" encoding="UTF-8"?>
+ <svg xmlns="http://www.w3.org/2000/svg" version="1.1" width="64" height="64">
+ <circle cx="32" cy="32" r="25" stroke="white" stroke-width="7" fill="black" fill-opacity="0.2"/>
+ <polygon points="26,22 26,42 43,32" fill="white"/>
+ </svg>