+
+
+
+
+
+
+
+ <&CDS.piwikStats "aladin">
+
+
diff --git a/website/showcase/PanSTARRS-DR1/js/app.js b/website/showcase/PanSTARRS-DR1/js/app.js
new file mode 100644
index 00000000..06bbb74b
--- /dev/null
+++ b/website/showcase/PanSTARRS-DR1/js/app.js
@@ -0,0 +1,93 @@
+$('#layersControl').show();
+
+var curSelectedSource = null;
+var aladin = A.aladin('#aladin', {fov: 45, cooFrame: 'galactic'});
+aladin.gotoRaDec(297.87, 25.96);
+
+aladin.createImageSurvey('panstarrs-color', 'PanSTARRS DR1 color', 'http://alasky.u-strasbg.fr/Pan-STARRS/DR1/color-z-zg-g', 'equatorial', 11);
+aladin.createImageSurvey('panstarrs-g', 'PanSTARRS DR1 g-band', 'http://alasky.u-strasbg.fr/Pan-STARRS/DR1/g', 'equatorial', 11);
+aladin.createImageSurvey('panstarrs-density-map', 'PanSTARRS DR1 density map', 'http://alasky.u-strasbg.fr/footprints/hips-density-maps/II/349/ps1', 'equatorial', 4, {imgFormat: 'jpg'});
+
+aladin.setImageSurvey('panstarrs-color');
+
+
+var hipsCats = {
+ 'ps1': A.catalogHiPS('http://axel.u-strasbg.fr/HiPSCatService/II/349/ps1', {name: 'PanSTARRS DR1 sources', shape: 'circle', sourceSize: 8, color: '#6baed6'}),
+ 'simbad': A.catalogHiPS('http://axel.u-strasbg.fr/HiPSCatService/Simbad', {name: 'Simbad', color: '#ce6dbd'})
+};
+
+hipsCats['simbad'].hide();
+
+aladin.addCatalog(hipsCats['simbad']);
+aladin.addCatalog(hipsCats['ps1']);
+
+
+// listen changes on HiPS image background selection
+$('input[type=radio][name=img-hips]').change(function() {
+ aladin.setImageSurvey(this.value);
+});
+
+
+// listen changes on HiPS catalogues selection
+$('#overlay-form :checkbox').change(function() {
+ var cat = hipsCats[this.value];
+
+ if (this.checked) {
+ cat.show();
+ }
+ else {
+ cat.hide();
+ }
+});
+
+// listen to click on objects
+aladin.on('objectClicked', function(source) {
+ var html = '
';
+
+ if (curSelectedSource != null) {
+ curSelectedSource.deselect();
+ }
+ if (source==null) {
+ $('#explain').html('');
+ $('#explain').hide();
+ return;
+ }
+
+ source.select();
+ curSelectedSource = source;
+ html += '';
+ if (source.catalog.name !== 'Simbad') {
+ html += 'PanSTARRS source ' + source.data.objID + '
';
+ html += '| RAJ2000 | ' + source.data.RAJ2000 + ' | deg |
';
+ html += '| DEJ2000 | ' + source.data.DEJ2000 + ' | deg |
';
+ html += '| gmag | ' + source.data['gmag'] + ' | mag |
';
+ html += '| rmag | ' + source.data['rmag'] + ' | mag |
';
+ html += '| imag | ' + source.data.imag + ' | mag |
';
+ html += '| zmag | ' + source.data.zmag + ' | mag |
';
+ html += '| ymag | ' + source.data.ymag + ' | mag |
';
+ html += '';
+ html += '
';
+
+ html += '
More details';
+ }
+ else {
+ html += '
Simbad object ' + source.data.main_id + '
';
+ html += '
| ra | ' + source.data.ra + ' | deg |
';
+ html += '
| dec | ' + source.data.dec + ' | deg |
';
+ html += '
| pmra | ' + source.data.pmra + ' | mas/yr |
';
+ html += '
| pmdec | ' + source.data.pmdec + ' | mas/yr |
';
+ html += '
| parallax | ' + source.data.plx + ' | mas |
';
+ html += '
| B mag. | ' + source.data.B + ' | mag |
';
+ html += '
| V mag. | ' + source.data.V + ' | mag |
';
+ html += '';
+ html += '';
+
+ html += '
More details';
+ }
+
+
+ $('#explain').html(html);
+ $('#explain').show();
+
+});
+
diff --git a/website/showcase/slider-split-views/aladin-lite.gml b/website/showcase/slider-split-views/aladin-lite.gml
new file mode 100755
index 00000000..5ffd8384
--- /dev/null
+++ b/website/showcase/slider-split-views/aladin-lite.gml
@@ -0,0 +1,70 @@
+
+
+
+
+
+
+
+
+
+
+
+
twentytwenty
+
+
+
+
+
+
+
+
+ <&CDS.headStuff2>
+
+
+
+
+
+
+
+
Split views with slider
+
Share the slider to compare the two selected HiPS.
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/website/showcase/slider-split-views/css/app.css b/website/showcase/slider-split-views/css/app.css
new file mode 100644
index 00000000..27a4b47b
--- /dev/null
+++ b/website/showcase/slider-split-views/css/app.css
@@ -0,0 +1,31 @@
+html, body {
+ height: 100%;
+}
+
+.aladin-zoomControl {
+ top: 80% !important;
+}
+
+.aladin {
+ position: absolute;
+ width: 100%;
+ height: 85vh;
+}
+
+.twentytwenty-handle::before {
+ background: rgba(255, 255, 255, 0.3) !important;
+}
+
+.twentytwenty-handle::after {
+ background: rgba(255, 255, 255, 0.3) !important;
+}
+
+#al2 .aladin-layersControl-container {
+ left: unset;
+ right: 4px;
+}
+
+#al2 .aladin-box {
+ left: unset;
+ right: 4px;
+}
diff --git a/website/showcase/slider-split-views/css/grids-responsive-min.css b/website/showcase/slider-split-views/css/grids-responsive-min.css
new file mode 100644
index 00000000..1df05db8
--- /dev/null
+++ b/website/showcase/slider-split-views/css/grids-responsive-min.css
@@ -0,0 +1,7 @@
+/*!
+Pure v0.6.0
+Copyright 2014 Yahoo! Inc. All rights reserved.
+Licensed under the BSD License.
+https://github.com/yahoo/pure/blob/master/LICENSE.md
+*/
+@media screen and (min-width:35.5em){.pure-u-sm-1,.pure-u-sm-1-1,.pure-u-sm-1-2,.pure-u-sm-1-3,.pure-u-sm-2-3,.pure-u-sm-1-4,.pure-u-sm-3-4,.pure-u-sm-1-5,.pure-u-sm-2-5,.pure-u-sm-3-5,.pure-u-sm-4-5,.pure-u-sm-5-5,.pure-u-sm-1-6,.pure-u-sm-5-6,.pure-u-sm-1-8,.pure-u-sm-3-8,.pure-u-sm-5-8,.pure-u-sm-7-8,.pure-u-sm-1-12,.pure-u-sm-5-12,.pure-u-sm-7-12,.pure-u-sm-11-12,.pure-u-sm-1-24,.pure-u-sm-2-24,.pure-u-sm-3-24,.pure-u-sm-4-24,.pure-u-sm-5-24,.pure-u-sm-6-24,.pure-u-sm-7-24,.pure-u-sm-8-24,.pure-u-sm-9-24,.pure-u-sm-10-24,.pure-u-sm-11-24,.pure-u-sm-12-24,.pure-u-sm-13-24,.pure-u-sm-14-24,.pure-u-sm-15-24,.pure-u-sm-16-24,.pure-u-sm-17-24,.pure-u-sm-18-24,.pure-u-sm-19-24,.pure-u-sm-20-24,.pure-u-sm-21-24,.pure-u-sm-22-24,.pure-u-sm-23-24,.pure-u-sm-24-24{display:inline-block;*display:inline;zoom:1;letter-spacing:normal;word-spacing:normal;vertical-align:top;text-rendering:auto}.pure-u-sm-1-24{width:4.1667%;*width:4.1357%}.pure-u-sm-1-12,.pure-u-sm-2-24{width:8.3333%;*width:8.3023%}.pure-u-sm-1-8,.pure-u-sm-3-24{width:12.5%;*width:12.469%}.pure-u-sm-1-6,.pure-u-sm-4-24{width:16.6667%;*width:16.6357%}.pure-u-sm-1-5{width:20%;*width:19.969%}.pure-u-sm-5-24{width:20.8333%;*width:20.8023%}.pure-u-sm-1-4,.pure-u-sm-6-24{width:25%;*width:24.969%}.pure-u-sm-7-24{width:29.1667%;*width:29.1357%}.pure-u-sm-1-3,.pure-u-sm-8-24{width:33.3333%;*width:33.3023%}.pure-u-sm-3-8,.pure-u-sm-9-24{width:37.5%;*width:37.469%}.pure-u-sm-2-5{width:40%;*width:39.969%}.pure-u-sm-5-12,.pure-u-sm-10-24{width:41.6667%;*width:41.6357%}.pure-u-sm-11-24{width:45.8333%;*width:45.8023%}.pure-u-sm-1-2,.pure-u-sm-12-24{width:50%;*width:49.969%}.pure-u-sm-13-24{width:54.1667%;*width:54.1357%}.pure-u-sm-7-12,.pure-u-sm-14-24{width:58.3333%;*width:58.3023%}.pure-u-sm-3-5{width:60%;*width:59.969%}.pure-u-sm-5-8,.pure-u-sm-15-24{width:62.5%;*width:62.469%}.pure-u-sm-2-3,.pure-u-sm-16-24{width:66.6667%;*width:66.6357%}.pure-u-sm-17-24{width:70.8333%;*width:70.8023%}.pure-u-sm-3-4,.pure-u-sm-18-24{width:75%;*width:74.969%}.pure-u-sm-19-24{width:79.1667%;*width:79.1357%}.pure-u-sm-4-5{width:80%;*width:79.969%}.pure-u-sm-5-6,.pure-u-sm-20-24{width:83.3333%;*width:83.3023%}.pure-u-sm-7-8,.pure-u-sm-21-24{width:87.5%;*width:87.469%}.pure-u-sm-11-12,.pure-u-sm-22-24{width:91.6667%;*width:91.6357%}.pure-u-sm-23-24{width:95.8333%;*width:95.8023%}.pure-u-sm-1,.pure-u-sm-1-1,.pure-u-sm-5-5,.pure-u-sm-24-24{width:100%}}@media screen and (min-width:48em){.pure-u-md-1,.pure-u-md-1-1,.pure-u-md-1-2,.pure-u-md-1-3,.pure-u-md-2-3,.pure-u-md-1-4,.pure-u-md-3-4,.pure-u-md-1-5,.pure-u-md-2-5,.pure-u-md-3-5,.pure-u-md-4-5,.pure-u-md-5-5,.pure-u-md-1-6,.pure-u-md-5-6,.pure-u-md-1-8,.pure-u-md-3-8,.pure-u-md-5-8,.pure-u-md-7-8,.pure-u-md-1-12,.pure-u-md-5-12,.pure-u-md-7-12,.pure-u-md-11-12,.pure-u-md-1-24,.pure-u-md-2-24,.pure-u-md-3-24,.pure-u-md-4-24,.pure-u-md-5-24,.pure-u-md-6-24,.pure-u-md-7-24,.pure-u-md-8-24,.pure-u-md-9-24,.pure-u-md-10-24,.pure-u-md-11-24,.pure-u-md-12-24,.pure-u-md-13-24,.pure-u-md-14-24,.pure-u-md-15-24,.pure-u-md-16-24,.pure-u-md-17-24,.pure-u-md-18-24,.pure-u-md-19-24,.pure-u-md-20-24,.pure-u-md-21-24,.pure-u-md-22-24,.pure-u-md-23-24,.pure-u-md-24-24{display:inline-block;*display:inline;zoom:1;letter-spacing:normal;word-spacing:normal;vertical-align:top;text-rendering:auto}.pure-u-md-1-24{width:4.1667%;*width:4.1357%}.pure-u-md-1-12,.pure-u-md-2-24{width:8.3333%;*width:8.3023%}.pure-u-md-1-8,.pure-u-md-3-24{width:12.5%;*width:12.469%}.pure-u-md-1-6,.pure-u-md-4-24{width:16.6667%;*width:16.6357%}.pure-u-md-1-5{width:20%;*width:19.969%}.pure-u-md-5-24{width:20.8333%;*width:20.8023%}.pure-u-md-1-4,.pure-u-md-6-24{width:25%;*width:24.969%}.pure-u-md-7-24{width:29.1667%;*width:29.1357%}.pure-u-md-1-3,.pure-u-md-8-24{width:33.3333%;*width:33.3023%}.pure-u-md-3-8,.pure-u-md-9-24{width:37.5%;*width:37.469%}.pure-u-md-2-5{width:40%;*width:39.969%}.pure-u-md-5-12,.pure-u-md-10-24{width:41.6667%;*width:41.6357%}.pure-u-md-11-24{width:45.8333%;*width:45.8023%}.pure-u-md-1-2,.pure-u-md-12-24{width:50%;*width:49.969%}.pure-u-md-13-24{width:54.1667%;*width:54.1357%}.pure-u-md-7-12,.pure-u-md-14-24{width:58.3333%;*width:58.3023%}.pure-u-md-3-5{width:60%;*width:59.969%}.pure-u-md-5-8,.pure-u-md-15-24{width:62.5%;*width:62.469%}.pure-u-md-2-3,.pure-u-md-16-24{width:66.6667%;*width:66.6357%}.pure-u-md-17-24{width:70.8333%;*width:70.8023%}.pure-u-md-3-4,.pure-u-md-18-24{width:75%;*width:74.969%}.pure-u-md-19-24{width:79.1667%;*width:79.1357%}.pure-u-md-4-5{width:80%;*width:79.969%}.pure-u-md-5-6,.pure-u-md-20-24{width:83.3333%;*width:83.3023%}.pure-u-md-7-8,.pure-u-md-21-24{width:87.5%;*width:87.469%}.pure-u-md-11-12,.pure-u-md-22-24{width:91.6667%;*width:91.6357%}.pure-u-md-23-24{width:95.8333%;*width:95.8023%}.pure-u-md-1,.pure-u-md-1-1,.pure-u-md-5-5,.pure-u-md-24-24{width:100%}}@media screen and (min-width:64em){.pure-u-lg-1,.pure-u-lg-1-1,.pure-u-lg-1-2,.pure-u-lg-1-3,.pure-u-lg-2-3,.pure-u-lg-1-4,.pure-u-lg-3-4,.pure-u-lg-1-5,.pure-u-lg-2-5,.pure-u-lg-3-5,.pure-u-lg-4-5,.pure-u-lg-5-5,.pure-u-lg-1-6,.pure-u-lg-5-6,.pure-u-lg-1-8,.pure-u-lg-3-8,.pure-u-lg-5-8,.pure-u-lg-7-8,.pure-u-lg-1-12,.pure-u-lg-5-12,.pure-u-lg-7-12,.pure-u-lg-11-12,.pure-u-lg-1-24,.pure-u-lg-2-24,.pure-u-lg-3-24,.pure-u-lg-4-24,.pure-u-lg-5-24,.pure-u-lg-6-24,.pure-u-lg-7-24,.pure-u-lg-8-24,.pure-u-lg-9-24,.pure-u-lg-10-24,.pure-u-lg-11-24,.pure-u-lg-12-24,.pure-u-lg-13-24,.pure-u-lg-14-24,.pure-u-lg-15-24,.pure-u-lg-16-24,.pure-u-lg-17-24,.pure-u-lg-18-24,.pure-u-lg-19-24,.pure-u-lg-20-24,.pure-u-lg-21-24,.pure-u-lg-22-24,.pure-u-lg-23-24,.pure-u-lg-24-24{display:inline-block;*display:inline;zoom:1;letter-spacing:normal;word-spacing:normal;vertical-align:top;text-rendering:auto}.pure-u-lg-1-24{width:4.1667%;*width:4.1357%}.pure-u-lg-1-12,.pure-u-lg-2-24{width:8.3333%;*width:8.3023%}.pure-u-lg-1-8,.pure-u-lg-3-24{width:12.5%;*width:12.469%}.pure-u-lg-1-6,.pure-u-lg-4-24{width:16.6667%;*width:16.6357%}.pure-u-lg-1-5{width:20%;*width:19.969%}.pure-u-lg-5-24{width:20.8333%;*width:20.8023%}.pure-u-lg-1-4,.pure-u-lg-6-24{width:25%;*width:24.969%}.pure-u-lg-7-24{width:29.1667%;*width:29.1357%}.pure-u-lg-1-3,.pure-u-lg-8-24{width:33.3333%;*width:33.3023%}.pure-u-lg-3-8,.pure-u-lg-9-24{width:37.5%;*width:37.469%}.pure-u-lg-2-5{width:40%;*width:39.969%}.pure-u-lg-5-12,.pure-u-lg-10-24{width:41.6667%;*width:41.6357%}.pure-u-lg-11-24{width:45.8333%;*width:45.8023%}.pure-u-lg-1-2,.pure-u-lg-12-24{width:50%;*width:49.969%}.pure-u-lg-13-24{width:54.1667%;*width:54.1357%}.pure-u-lg-7-12,.pure-u-lg-14-24{width:58.3333%;*width:58.3023%}.pure-u-lg-3-5{width:60%;*width:59.969%}.pure-u-lg-5-8,.pure-u-lg-15-24{width:62.5%;*width:62.469%}.pure-u-lg-2-3,.pure-u-lg-16-24{width:66.6667%;*width:66.6357%}.pure-u-lg-17-24{width:70.8333%;*width:70.8023%}.pure-u-lg-3-4,.pure-u-lg-18-24{width:75%;*width:74.969%}.pure-u-lg-19-24{width:79.1667%;*width:79.1357%}.pure-u-lg-4-5{width:80%;*width:79.969%}.pure-u-lg-5-6,.pure-u-lg-20-24{width:83.3333%;*width:83.3023%}.pure-u-lg-7-8,.pure-u-lg-21-24{width:87.5%;*width:87.469%}.pure-u-lg-11-12,.pure-u-lg-22-24{width:91.6667%;*width:91.6357%}.pure-u-lg-23-24{width:95.8333%;*width:95.8023%}.pure-u-lg-1,.pure-u-lg-1-1,.pure-u-lg-5-5,.pure-u-lg-24-24{width:100%}}@media screen and (min-width:80em){.pure-u-xl-1,.pure-u-xl-1-1,.pure-u-xl-1-2,.pure-u-xl-1-3,.pure-u-xl-2-3,.pure-u-xl-1-4,.pure-u-xl-3-4,.pure-u-xl-1-5,.pure-u-xl-2-5,.pure-u-xl-3-5,.pure-u-xl-4-5,.pure-u-xl-5-5,.pure-u-xl-1-6,.pure-u-xl-5-6,.pure-u-xl-1-8,.pure-u-xl-3-8,.pure-u-xl-5-8,.pure-u-xl-7-8,.pure-u-xl-1-12,.pure-u-xl-5-12,.pure-u-xl-7-12,.pure-u-xl-11-12,.pure-u-xl-1-24,.pure-u-xl-2-24,.pure-u-xl-3-24,.pure-u-xl-4-24,.pure-u-xl-5-24,.pure-u-xl-6-24,.pure-u-xl-7-24,.pure-u-xl-8-24,.pure-u-xl-9-24,.pure-u-xl-10-24,.pure-u-xl-11-24,.pure-u-xl-12-24,.pure-u-xl-13-24,.pure-u-xl-14-24,.pure-u-xl-15-24,.pure-u-xl-16-24,.pure-u-xl-17-24,.pure-u-xl-18-24,.pure-u-xl-19-24,.pure-u-xl-20-24,.pure-u-xl-21-24,.pure-u-xl-22-24,.pure-u-xl-23-24,.pure-u-xl-24-24{display:inline-block;*display:inline;zoom:1;letter-spacing:normal;word-spacing:normal;vertical-align:top;text-rendering:auto}.pure-u-xl-1-24{width:4.1667%;*width:4.1357%}.pure-u-xl-1-12,.pure-u-xl-2-24{width:8.3333%;*width:8.3023%}.pure-u-xl-1-8,.pure-u-xl-3-24{width:12.5%;*width:12.469%}.pure-u-xl-1-6,.pure-u-xl-4-24{width:16.6667%;*width:16.6357%}.pure-u-xl-1-5{width:20%;*width:19.969%}.pure-u-xl-5-24{width:20.8333%;*width:20.8023%}.pure-u-xl-1-4,.pure-u-xl-6-24{width:25%;*width:24.969%}.pure-u-xl-7-24{width:29.1667%;*width:29.1357%}.pure-u-xl-1-3,.pure-u-xl-8-24{width:33.3333%;*width:33.3023%}.pure-u-xl-3-8,.pure-u-xl-9-24{width:37.5%;*width:37.469%}.pure-u-xl-2-5{width:40%;*width:39.969%}.pure-u-xl-5-12,.pure-u-xl-10-24{width:41.6667%;*width:41.6357%}.pure-u-xl-11-24{width:45.8333%;*width:45.8023%}.pure-u-xl-1-2,.pure-u-xl-12-24{width:50%;*width:49.969%}.pure-u-xl-13-24{width:54.1667%;*width:54.1357%}.pure-u-xl-7-12,.pure-u-xl-14-24{width:58.3333%;*width:58.3023%}.pure-u-xl-3-5{width:60%;*width:59.969%}.pure-u-xl-5-8,.pure-u-xl-15-24{width:62.5%;*width:62.469%}.pure-u-xl-2-3,.pure-u-xl-16-24{width:66.6667%;*width:66.6357%}.pure-u-xl-17-24{width:70.8333%;*width:70.8023%}.pure-u-xl-3-4,.pure-u-xl-18-24{width:75%;*width:74.969%}.pure-u-xl-19-24{width:79.1667%;*width:79.1357%}.pure-u-xl-4-5{width:80%;*width:79.969%}.pure-u-xl-5-6,.pure-u-xl-20-24{width:83.3333%;*width:83.3023%}.pure-u-xl-7-8,.pure-u-xl-21-24{width:87.5%;*width:87.469%}.pure-u-xl-11-12,.pure-u-xl-22-24{width:91.6667%;*width:91.6357%}.pure-u-xl-23-24{width:95.8333%;*width:95.8023%}.pure-u-xl-1,.pure-u-xl-1-1,.pure-u-xl-5-5,.pure-u-xl-24-24{width:100%}}
\ No newline at end of file
diff --git a/website/showcase/slider-split-views/css/pure-min.css b/website/showcase/slider-split-views/css/pure-min.css
new file mode 100644
index 00000000..0bfb4705
--- /dev/null
+++ b/website/showcase/slider-split-views/css/pure-min.css
@@ -0,0 +1,11 @@
+/*!
+Pure v0.6.0
+Copyright 2014 Yahoo! Inc. All rights reserved.
+Licensed under the BSD License.
+https://github.com/yahoo/pure/blob/master/LICENSE.md
+*/
+/*!
+normalize.css v^3.0 | MIT License | git.io/normalize
+Copyright (c) Nicolas Gallagher and Jonathan Neal
+*/
+/*! normalize.css v3.0.2 | MIT License | git.io/normalize */html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background-color:transparent}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:700}dfn{font-style:italic}h1{font-size:2em;margin:.67em 0}mark{background:#ff0;color:#000}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{-moz-box-sizing:content-box;box-sizing:content-box;height:0}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}button,input,optgroup,select,textarea{color:inherit;font:inherit;margin:0}button{overflow:visible}button,select{text-transform:none}button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}input{line-height:normal}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{height:auto}input[type=search]{-webkit-appearance:textfield;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em}legend{border:0;padding:0}textarea{overflow:auto}optgroup{font-weight:700}table{border-collapse:collapse;border-spacing:0}td,th{padding:0}.hidden,[hidden]{display:none!important}.pure-img{max-width:100%;height:auto;display:block}.pure-g{letter-spacing:-.31em;*letter-spacing:normal;*word-spacing:-.43em;text-rendering:optimizespeed;font-family:FreeSans,Arimo,"Droid Sans",Helvetica,Arial,sans-serif;display:-webkit-flex;-webkit-flex-flow:row wrap;display:-ms-flexbox;-ms-flex-flow:row wrap;-ms-align-content:flex-start;-webkit-align-content:flex-start;align-content:flex-start}.opera-only :-o-prefocus,.pure-g{word-spacing:-.43em}.pure-u{display:inline-block;*display:inline;zoom:1;letter-spacing:normal;word-spacing:normal;vertical-align:top;text-rendering:auto}.pure-g [class *="pure-u"]{font-family:sans-serif}.pure-u-1,.pure-u-1-1,.pure-u-1-2,.pure-u-1-3,.pure-u-2-3,.pure-u-1-4,.pure-u-3-4,.pure-u-1-5,.pure-u-2-5,.pure-u-3-5,.pure-u-4-5,.pure-u-5-5,.pure-u-1-6,.pure-u-5-6,.pure-u-1-8,.pure-u-3-8,.pure-u-5-8,.pure-u-7-8,.pure-u-1-12,.pure-u-5-12,.pure-u-7-12,.pure-u-11-12,.pure-u-1-24,.pure-u-2-24,.pure-u-3-24,.pure-u-4-24,.pure-u-5-24,.pure-u-6-24,.pure-u-7-24,.pure-u-8-24,.pure-u-9-24,.pure-u-10-24,.pure-u-11-24,.pure-u-12-24,.pure-u-13-24,.pure-u-14-24,.pure-u-15-24,.pure-u-16-24,.pure-u-17-24,.pure-u-18-24,.pure-u-19-24,.pure-u-20-24,.pure-u-21-24,.pure-u-22-24,.pure-u-23-24,.pure-u-24-24{display:inline-block;*display:inline;zoom:1;letter-spacing:normal;word-spacing:normal;vertical-align:top;text-rendering:auto}.pure-u-1-24{width:4.1667%;*width:4.1357%}.pure-u-1-12,.pure-u-2-24{width:8.3333%;*width:8.3023%}.pure-u-1-8,.pure-u-3-24{width:12.5%;*width:12.469%}.pure-u-1-6,.pure-u-4-24{width:16.6667%;*width:16.6357%}.pure-u-1-5{width:20%;*width:19.969%}.pure-u-5-24{width:20.8333%;*width:20.8023%}.pure-u-1-4,.pure-u-6-24{width:25%;*width:24.969%}.pure-u-7-24{width:29.1667%;*width:29.1357%}.pure-u-1-3,.pure-u-8-24{width:33.3333%;*width:33.3023%}.pure-u-3-8,.pure-u-9-24{width:37.5%;*width:37.469%}.pure-u-2-5{width:40%;*width:39.969%}.pure-u-5-12,.pure-u-10-24{width:41.6667%;*width:41.6357%}.pure-u-11-24{width:45.8333%;*width:45.8023%}.pure-u-1-2,.pure-u-12-24{width:50%;*width:49.969%}.pure-u-13-24{width:54.1667%;*width:54.1357%}.pure-u-7-12,.pure-u-14-24{width:58.3333%;*width:58.3023%}.pure-u-3-5{width:60%;*width:59.969%}.pure-u-5-8,.pure-u-15-24{width:62.5%;*width:62.469%}.pure-u-2-3,.pure-u-16-24{width:66.6667%;*width:66.6357%}.pure-u-17-24{width:70.8333%;*width:70.8023%}.pure-u-3-4,.pure-u-18-24{width:75%;*width:74.969%}.pure-u-19-24{width:79.1667%;*width:79.1357%}.pure-u-4-5{width:80%;*width:79.969%}.pure-u-5-6,.pure-u-20-24{width:83.3333%;*width:83.3023%}.pure-u-7-8,.pure-u-21-24{width:87.5%;*width:87.469%}.pure-u-11-12,.pure-u-22-24{width:91.6667%;*width:91.6357%}.pure-u-23-24{width:95.8333%;*width:95.8023%}.pure-u-1,.pure-u-1-1,.pure-u-5-5,.pure-u-24-24{width:100%}.pure-button{display:inline-block;zoom:1;line-height:normal;white-space:nowrap;vertical-align:middle;text-align:center;cursor:pointer;-webkit-user-drag:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.pure-button::-moz-focus-inner{padding:0;border:0}.pure-button{font-family:inherit;font-size:100%;padding:.5em 1em;color:#444;color:rgba(0,0,0,.8);border:1px solid #999;border:0 rgba(0,0,0,0);background-color:#E6E6E6;text-decoration:none;border-radius:2px}.pure-button-hover,.pure-button:hover,.pure-button:focus{filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#1a000000', GradientType=0);background-image:-webkit-gradient(linear,0 0,0 100%,from(transparent),color-stop(40%,rgba(0,0,0,.05)),to(rgba(0,0,0,.1)));background-image:-webkit-linear-gradient(transparent,rgba(0,0,0,.05) 40%,rgba(0,0,0,.1));background-image:-moz-linear-gradient(top,rgba(0,0,0,.05) 0,rgba(0,0,0,.1));background-image:-o-linear-gradient(transparent,rgba(0,0,0,.05) 40%,rgba(0,0,0,.1));background-image:linear-gradient(transparent,rgba(0,0,0,.05) 40%,rgba(0,0,0,.1))}.pure-button:focus{outline:0}.pure-button-active,.pure-button:active{box-shadow:0 0 0 1px rgba(0,0,0,.15) inset,0 0 6px rgba(0,0,0,.2) inset;border-color:#000\9}.pure-button[disabled],.pure-button-disabled,.pure-button-disabled:hover,.pure-button-disabled:focus,.pure-button-disabled:active{border:0;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);filter:alpha(opacity=40);-khtml-opacity:.4;-moz-opacity:.4;opacity:.4;cursor:not-allowed;box-shadow:none}.pure-button-hidden{display:none}.pure-button::-moz-focus-inner{padding:0;border:0}.pure-button-primary,.pure-button-selected,a.pure-button-primary,a.pure-button-selected{background-color:#0078e7;color:#fff}.pure-form input[type=text],.pure-form input[type=password],.pure-form input[type=email],.pure-form input[type=url],.pure-form input[type=date],.pure-form input[type=month],.pure-form input[type=time],.pure-form input[type=datetime],.pure-form input[type=datetime-local],.pure-form input[type=week],.pure-form input[type=number],.pure-form input[type=search],.pure-form input[type=tel],.pure-form input[type=color],.pure-form select,.pure-form textarea{padding:.5em .6em;display:inline-block;border:1px solid #ccc;box-shadow:inset 0 1px 3px #ddd;border-radius:4px;vertical-align:middle;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.pure-form input:not([type]){padding:.5em .6em;display:inline-block;border:1px solid #ccc;box-shadow:inset 0 1px 3px #ddd;border-radius:4px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.pure-form input[type=color]{padding:.2em .5em}.pure-form input[type=text]:focus,.pure-form input[type=password]:focus,.pure-form input[type=email]:focus,.pure-form input[type=url]:focus,.pure-form input[type=date]:focus,.pure-form input[type=month]:focus,.pure-form input[type=time]:focus,.pure-form input[type=datetime]:focus,.pure-form input[type=datetime-local]:focus,.pure-form input[type=week]:focus,.pure-form input[type=number]:focus,.pure-form input[type=search]:focus,.pure-form input[type=tel]:focus,.pure-form input[type=color]:focus,.pure-form select:focus,.pure-form textarea:focus{outline:0;border-color:#129FEA}.pure-form input:not([type]):focus{outline:0;border-color:#129FEA}.pure-form input[type=file]:focus,.pure-form input[type=radio]:focus,.pure-form input[type=checkbox]:focus{outline:thin solid #129FEA;outline:1px auto #129FEA}.pure-form .pure-checkbox,.pure-form .pure-radio{margin:.5em 0;display:block}.pure-form input[type=text][disabled],.pure-form input[type=password][disabled],.pure-form input[type=email][disabled],.pure-form input[type=url][disabled],.pure-form input[type=date][disabled],.pure-form input[type=month][disabled],.pure-form input[type=time][disabled],.pure-form input[type=datetime][disabled],.pure-form input[type=datetime-local][disabled],.pure-form input[type=week][disabled],.pure-form input[type=number][disabled],.pure-form input[type=search][disabled],.pure-form input[type=tel][disabled],.pure-form input[type=color][disabled],.pure-form select[disabled],.pure-form textarea[disabled]{cursor:not-allowed;background-color:#eaeded;color:#cad2d3}.pure-form input:not([type])[disabled]{cursor:not-allowed;background-color:#eaeded;color:#cad2d3}.pure-form input[readonly],.pure-form select[readonly],.pure-form textarea[readonly]{background-color:#eee;color:#777;border-color:#ccc}.pure-form input:focus:invalid,.pure-form textarea:focus:invalid,.pure-form select:focus:invalid{color:#b94a48;border-color:#e9322d}.pure-form input[type=file]:focus:invalid:focus,.pure-form input[type=radio]:focus:invalid:focus,.pure-form input[type=checkbox]:focus:invalid:focus{outline-color:#e9322d}.pure-form select{height:2.25em;border:1px solid #ccc;background-color:#fff}.pure-form select[multiple]{height:auto}.pure-form label{margin:.5em 0 .2em}.pure-form fieldset{margin:0;padding:.35em 0 .75em;border:0}.pure-form legend{display:block;width:100%;padding:.3em 0;margin-bottom:.3em;color:#333;border-bottom:1px solid #e5e5e5}.pure-form-stacked input[type=text],.pure-form-stacked input[type=password],.pure-form-stacked input[type=email],.pure-form-stacked input[type=url],.pure-form-stacked input[type=date],.pure-form-stacked input[type=month],.pure-form-stacked input[type=time],.pure-form-stacked input[type=datetime],.pure-form-stacked input[type=datetime-local],.pure-form-stacked input[type=week],.pure-form-stacked input[type=number],.pure-form-stacked input[type=search],.pure-form-stacked input[type=tel],.pure-form-stacked input[type=color],.pure-form-stacked input[type=file],.pure-form-stacked select,.pure-form-stacked label,.pure-form-stacked textarea{display:block;margin:.25em 0}.pure-form-stacked input:not([type]){display:block;margin:.25em 0}.pure-form-aligned input,.pure-form-aligned textarea,.pure-form-aligned select,.pure-form-aligned .pure-help-inline,.pure-form-message-inline{display:inline-block;*display:inline;*zoom:1;vertical-align:middle}.pure-form-aligned textarea{vertical-align:top}.pure-form-aligned .pure-control-group{margin-bottom:.5em}.pure-form-aligned .pure-control-group label{text-align:right;display:inline-block;vertical-align:middle;width:10em;margin:0 1em 0 0}.pure-form-aligned .pure-controls{margin:1.5em 0 0 11em}.pure-form input.pure-input-rounded,.pure-form .pure-input-rounded{border-radius:2em;padding:.5em 1em}.pure-form .pure-group fieldset{margin-bottom:10px}.pure-form .pure-group input,.pure-form .pure-group textarea{display:block;padding:10px;margin:0 0 -1px;border-radius:0;position:relative;top:-1px}.pure-form .pure-group input:focus,.pure-form .pure-group textarea:focus{z-index:3}.pure-form .pure-group input:first-child,.pure-form .pure-group textarea:first-child{top:1px;border-radius:4px 4px 0 0;margin:0}.pure-form .pure-group input:first-child:last-child,.pure-form .pure-group textarea:first-child:last-child{top:1px;border-radius:4px;margin:0}.pure-form .pure-group input:last-child,.pure-form .pure-group textarea:last-child{top:-2px;border-radius:0 0 4px 4px;margin:0}.pure-form .pure-group button{margin:.35em 0}.pure-form .pure-input-1{width:100%}.pure-form .pure-input-2-3{width:66%}.pure-form .pure-input-1-2{width:50%}.pure-form .pure-input-1-3{width:33%}.pure-form .pure-input-1-4{width:25%}.pure-form .pure-help-inline,.pure-form-message-inline{display:inline-block;padding-left:.3em;color:#666;vertical-align:middle;font-size:.875em}.pure-form-message{display:block;color:#666;font-size:.875em}@media only screen and (max-width :480px){.pure-form button[type=submit]{margin:.7em 0 0}.pure-form input:not([type]),.pure-form input[type=text],.pure-form input[type=password],.pure-form input[type=email],.pure-form input[type=url],.pure-form input[type=date],.pure-form input[type=month],.pure-form input[type=time],.pure-form input[type=datetime],.pure-form input[type=datetime-local],.pure-form input[type=week],.pure-form input[type=number],.pure-form input[type=search],.pure-form input[type=tel],.pure-form input[type=color],.pure-form label{margin-bottom:.3em;display:block}.pure-group input:not([type]),.pure-group input[type=text],.pure-group input[type=password],.pure-group input[type=email],.pure-group input[type=url],.pure-group input[type=date],.pure-group input[type=month],.pure-group input[type=time],.pure-group input[type=datetime],.pure-group input[type=datetime-local],.pure-group input[type=week],.pure-group input[type=number],.pure-group input[type=search],.pure-group input[type=tel],.pure-group input[type=color]{margin-bottom:0}.pure-form-aligned .pure-control-group label{margin-bottom:.3em;text-align:left;display:block;width:100%}.pure-form-aligned .pure-controls{margin:1.5em 0 0}.pure-form .pure-help-inline,.pure-form-message-inline,.pure-form-message{display:block;font-size:.75em;padding:.2em 0 .8em}}.pure-menu{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.pure-menu-fixed{position:fixed;left:0;top:0;z-index:3}.pure-menu-list,.pure-menu-item{position:relative}.pure-menu-list{list-style:none;margin:0;padding:0}.pure-menu-item{padding:0;margin:0;height:100%}.pure-menu-link,.pure-menu-heading{display:block;text-decoration:none;white-space:nowrap}.pure-menu-horizontal{width:100%;white-space:nowrap}.pure-menu-horizontal .pure-menu-list{display:inline-block}.pure-menu-horizontal .pure-menu-item,.pure-menu-horizontal .pure-menu-heading,.pure-menu-horizontal .pure-menu-separator{display:inline-block;*display:inline;zoom:1;vertical-align:middle}.pure-menu-item .pure-menu-item{display:block}.pure-menu-children{display:none;position:absolute;left:100%;top:0;margin:0;padding:0;z-index:3}.pure-menu-horizontal .pure-menu-children{left:0;top:auto;width:inherit}.pure-menu-allow-hover:hover>.pure-menu-children,.pure-menu-active>.pure-menu-children{display:block;position:absolute}.pure-menu-has-children>.pure-menu-link:after{padding-left:.5em;content:"\25B8";font-size:small}.pure-menu-horizontal .pure-menu-has-children>.pure-menu-link:after{content:"\25BE"}.pure-menu-scrollable{overflow-y:scroll;overflow-x:hidden}.pure-menu-scrollable .pure-menu-list{display:block}.pure-menu-horizontal.pure-menu-scrollable .pure-menu-list{display:inline-block}.pure-menu-horizontal.pure-menu-scrollable{white-space:nowrap;overflow-y:hidden;overflow-x:auto;-ms-overflow-style:none;-webkit-overflow-scrolling:touch;padding:.5em 0}.pure-menu-horizontal.pure-menu-scrollable::-webkit-scrollbar{display:none}.pure-menu-separator{background-color:#ccc;height:1px;margin:.3em 0}.pure-menu-horizontal .pure-menu-separator{width:1px;height:1.3em;margin:0 .3em}.pure-menu-heading{color:#565d64}.pure-menu-link{color:#777}.pure-menu-children{background-color:#fff}.pure-menu-link,.pure-menu-disabled,.pure-menu-heading{padding:.5em 1em}.pure-menu-disabled{opacity:.5}.pure-menu-disabled .pure-menu-link:hover{background-color:transparent}.pure-menu-active>.pure-menu-link,.pure-menu-link:hover,.pure-menu-link:focus{background-color:#eee}.pure-menu-selected .pure-menu-link,.pure-menu-selected .pure-menu-link:visited{color:#000}.pure-table{border-collapse:collapse;border-spacing:0;empty-cells:show;border:1px solid #cbcbcb}.pure-table caption{color:#000;font:italic 85%/1 arial,sans-serif;padding:1em 0;text-align:center}.pure-table td,.pure-table th{border-left:1px solid #cbcbcb;border-width:0 0 0 1px;font-size:inherit;margin:0;overflow:visible;padding:.5em 1em}.pure-table td:first-child,.pure-table th:first-child{border-left-width:0}.pure-table thead{background-color:#e0e0e0;color:#000;text-align:left;vertical-align:bottom}.pure-table td{background-color:transparent}.pure-table-odd td{background-color:#f2f2f2}.pure-table-striped tr:nth-child(2n-1) td{background-color:#f2f2f2}.pure-table-bordered td{border-bottom:1px solid #cbcbcb}.pure-table-bordered tbody>tr:last-child>td{border-bottom-width:0}.pure-table-horizontal td,.pure-table-horizontal th{border-width:0 0 1px;border-bottom:1px solid #cbcbcb}.pure-table-horizontal tbody>tr:last-child>td{border-bottom-width:0}
diff --git a/website/showcase/slider-split-views/css/twentytwenty.css b/website/showcase/slider-split-views/css/twentytwenty.css
new file mode 100755
index 00000000..cad8aa40
--- /dev/null
+++ b/website/showcase/slider-split-views/css/twentytwenty.css
@@ -0,0 +1,205 @@
+.twentytwenty-horizontal .twentytwenty-handle:before, .twentytwenty-horizontal .twentytwenty-handle:after, .twentytwenty-vertical .twentytwenty-handle:before, .twentytwenty-vertical .twentytwenty-handle:after {
+ content: " ";
+ display: block;
+ background: white;
+ position: absolute;
+ z-index: 30;
+ -webkit-box-shadow: 0px 0px 12px rgba(51, 51, 51, 0.5);
+ -moz-box-shadow: 0px 0px 12px rgba(51, 51, 51, 0.5);
+ box-shadow: 0px 0px 12px rgba(51, 51, 51, 0.5); }
+
+.twentytwenty-horizontal .twentytwenty-handle:before, .twentytwenty-horizontal .twentytwenty-handle:after {
+ width: 3px;
+ height: 9999px;
+ left: 50%;
+ margin-left: -1.5px; }
+
+.twentytwenty-vertical .twentytwenty-handle:before, .twentytwenty-vertical .twentytwenty-handle:after {
+ width: 9999px;
+ height: 3px;
+ top: 50%;
+ margin-top: -1.5px; }
+
+.twentytwenty-before-label, .twentytwenty-after-label, .twentytwenty-overlay {
+ position: absolute;
+ top: 0;
+ width: 100%;
+ height: 100%; }
+
+.twentytwenty-before-label, .twentytwenty-after-label, .twentytwenty-overlay {
+ -webkit-transition-duration: 0.5s;
+ -moz-transition-duration: 0.5s;
+ transition-duration: 0.5s; }
+
+.twentytwenty-before-label, .twentytwenty-after-label {
+ -webkit-transition-property: opacity;
+ -moz-transition-property: opacity;
+ transition-property: opacity; }
+
+.twentytwenty-before-label:before, .twentytwenty-after-label:before {
+ color: white;
+ font-size: 13px;
+ letter-spacing: 0.1em; }
+
+.twentytwenty-before-label:before, .twentytwenty-after-label:before {
+ position: absolute;
+ background: rgba(255, 255, 255, 0.2);
+ line-height: 38px;
+ padding: 0 20px;
+ -webkit-border-radius: 2px;
+ -moz-border-radius: 2px;
+ border-radius: 2px; }
+
+.twentytwenty-horizontal .twentytwenty-before-label:before, .twentytwenty-horizontal .twentytwenty-after-label:before {
+ top: 50%;
+ margin-top: -19px; }
+
+.twentytwenty-vertical .twentytwenty-before-label:before, .twentytwenty-vertical .twentytwenty-after-label:before {
+ left: 50%;
+ margin-left: -45px;
+ text-align: center;
+ width: 90px; }
+
+.twentytwenty-left-arrow, .twentytwenty-right-arrow, .twentytwenty-up-arrow, .twentytwenty-down-arrow {
+ width: 0;
+ height: 0;
+ border: 6px inset transparent;
+ position: absolute; }
+
+.twentytwenty-left-arrow, .twentytwenty-right-arrow {
+ top: 50%;
+ margin-top: -6px; }
+
+.twentytwenty-up-arrow, .twentytwenty-down-arrow {
+ left: 50%;
+ margin-left: -6px; }
+
+.twentytwenty-container {
+ -webkit-box-sizing: content-box;
+ -moz-box-sizing: content-box;
+ box-sizing: content-box;
+ z-index: 0;
+ overflow: hidden;
+ position: relative;
+ -webkit-user-select: none;
+ -moz-user-select: none; }
+ .twentytwenty-container img {
+ max-width: 100%;
+ position: absolute;
+ top: 0;
+ display: block; }
+ .twentytwenty-container.active .twentytwenty-overlay, .twentytwenty-container.active :hover.twentytwenty-overlay {
+ background: rgba(0, 0, 0, 0); }
+ .twentytwenty-container.active .twentytwenty-overlay .twentytwenty-before-label,
+ .twentytwenty-container.active .twentytwenty-overlay .twentytwenty-after-label, .twentytwenty-container.active :hover.twentytwenty-overlay .twentytwenty-before-label,
+ .twentytwenty-container.active :hover.twentytwenty-overlay .twentytwenty-after-label {
+ opacity: 0; }
+ .twentytwenty-container * {
+ -webkit-box-sizing: content-box;
+ -moz-box-sizing: content-box;
+ box-sizing: content-box; }
+
+.twentytwenty-before-label {
+ opacity: 0; }
+ .twentytwenty-before-label:before {
+ content: attr(data-content); }
+
+.twentytwenty-after-label {
+ opacity: 0; }
+ .twentytwenty-after-label:before {
+ content: attr(data-content); }
+
+.twentytwenty-horizontal .twentytwenty-before-label:before {
+ left: 10px; }
+
+.twentytwenty-horizontal .twentytwenty-after-label:before {
+ right: 10px; }
+
+.twentytwenty-vertical .twentytwenty-before-label:before {
+ top: 10px; }
+
+.twentytwenty-vertical .twentytwenty-after-label:before {
+ bottom: 10px; }
+
+.twentytwenty-overlay {
+ -webkit-transition-property: background;
+ -moz-transition-property: background;
+ transition-property: background;
+ background: rgba(0, 0, 0, 0);
+ z-index: 25; }
+ .twentytwenty-overlay:hover {
+ background: rgba(0, 0, 0, 0.5); }
+ .twentytwenty-overlay:hover .twentytwenty-after-label {
+ opacity: 1; }
+ .twentytwenty-overlay:hover .twentytwenty-before-label {
+ opacity: 1; }
+
+.twentytwenty-before {
+ z-index: 20; }
+
+.twentytwenty-after {
+ z-index: 10; }
+
+.twentytwenty-handle {
+ height: 38px;
+ width: 38px;
+ position: absolute;
+ left: 50%;
+ top: 50%;
+ margin-left: -22px;
+ margin-top: -22px;
+ border: 3px solid white;
+ -webkit-border-radius: 1000px;
+ -moz-border-radius: 1000px;
+ border-radius: 1000px;
+ -webkit-box-shadow: 0px 0px 12px rgba(51, 51, 51, 0.5);
+ -moz-box-shadow: 0px 0px 12px rgba(51, 51, 51, 0.5);
+ box-shadow: 0px 0px 12px rgba(51, 51, 51, 0.5);
+ z-index: 40;
+ cursor: pointer; }
+
+.twentytwenty-horizontal .twentytwenty-handle:before {
+ bottom: 50%;
+ margin-bottom: 22px;
+ -webkit-box-shadow: 0 3px 0 white, 0px 0px 12px rgba(51, 51, 51, 0.5);
+ -moz-box-shadow: 0 3px 0 white, 0px 0px 12px rgba(51, 51, 51, 0.5);
+ box-shadow: 0 3px 0 white, 0px 0px 12px rgba(51, 51, 51, 0.5); }
+.twentytwenty-horizontal .twentytwenty-handle:after {
+ top: 50%;
+ margin-top: 22px;
+ -webkit-box-shadow: 0 -3px 0 white, 0px 0px 12px rgba(51, 51, 51, 0.5);
+ -moz-box-shadow: 0 -3px 0 white, 0px 0px 12px rgba(51, 51, 51, 0.5);
+ box-shadow: 0 -3px 0 white, 0px 0px 12px rgba(51, 51, 51, 0.5); }
+
+.twentytwenty-vertical .twentytwenty-handle:before {
+ left: 50%;
+ margin-left: 22px;
+ -webkit-box-shadow: 3px 0 0 white, 0px 0px 12px rgba(51, 51, 51, 0.5);
+ -moz-box-shadow: 3px 0 0 white, 0px 0px 12px rgba(51, 51, 51, 0.5);
+ box-shadow: 3px 0 0 white, 0px 0px 12px rgba(51, 51, 51, 0.5); }
+.twentytwenty-vertical .twentytwenty-handle:after {
+ right: 50%;
+ margin-right: 22px;
+ -webkit-box-shadow: -3px 0 0 white, 0px 0px 12px rgba(51, 51, 51, 0.5);
+ -moz-box-shadow: -3px 0 0 white, 0px 0px 12px rgba(51, 51, 51, 0.5);
+ box-shadow: -3px 0 0 white, 0px 0px 12px rgba(51, 51, 51, 0.5); }
+
+.twentytwenty-left-arrow {
+ border-right: 6px solid white;
+ left: 50%;
+ margin-left: -17px; }
+
+.twentytwenty-right-arrow {
+ border-left: 6px solid white;
+ right: 50%;
+ margin-right: -17px; }
+
+.twentytwenty-up-arrow {
+ border-bottom: 6px solid white;
+ top: 50%;
+ margin-top: -17px; }
+
+.twentytwenty-down-arrow {
+ border-top: 6px solid white;
+ bottom: 50%;
+ margin-bottom: -17px; }
diff --git a/website/showcase/slider-split-views/index.gml b/website/showcase/slider-split-views/index.gml
new file mode 100644
index 00000000..fb0c4549
--- /dev/null
+++ b/website/showcase/slider-split-views/index.gml
@@ -0,0 +1,48 @@
+
+
+
+
+
+
+
+
Split views in Aladin Lite
+
+
+
+
+
+
+
+
+ <&CDS.headStuff2>
+
+
+
+
+
+
+
+
Split views with slider
+
Drag the slider to compare the two selected HiPS.
+
+
+
+
+
+
+
+
+
+
+
+
+
+ <&CDS.piwikStats "aladin">
+
+
+
diff --git a/website/showcase/slider-split-views/js/app.js b/website/showcase/slider-split-views/js/app.js
new file mode 100644
index 00000000..6be41506
--- /dev/null
+++ b/website/showcase/slider-split-views/js/app.js
@@ -0,0 +1,28 @@
+var a1 = A.aladin('#al1', {fov: 0.4, cooFrame: 'equatorial', realFullscreen: true, target: '13 29 52.7 +47 11 42.93', survey: 'P/SDSS9/color'});
+a1.setFovRange(0.01, 175);
+//a1.gotoRaDec(297.87, 25.96);
+var a2 = A.aladin('#al2', {fov: 0.4, cooFrame: 'equatorial', realFullscreen: true, target: '13 29 52.7 +47 11 42.93', survey: 'P/PanSTARRS/DR1/color-z-zg-g', showFrameControl: false, showFullscreenControl: false, showGotoControl: false});
+a2.setFovRange(0.01, 175);
+
+View.CALLBACKS_THROTTLE_TIME = 30;
+a1.on('positionChanged', function(params) {
+ a2.gotoRaDec(params.ra, params.dec);
+});
+a2.on('positionChanged', function(params) {
+ a1.gotoRaDec(params.ra, params.dec);
+});
+a1.on('zoomChanged', function(fov) {
+if (Math.abs(a2.getFov()[0] - fov) / fov > 0.01) {
+ a2.setFoV(fov);
+ }
+});
+a2.on('zoomChanged', function(fov) {
+ if (Math.abs(a1.getFov()[0] - fov) / fov > 0.01) {
+ a1.setFoV(fov);
+ }
+});
+setTimeout(function() {
+ $(".twentytwenty-container").twentytwenty({default_offset_pct: 0.5, no_overlay: true});
+}, 300);
+
+
diff --git a/website/showcase/slider-split-views/js/jquery.event.move.js b/website/showcase/slider-split-views/js/jquery.event.move.js
new file mode 100755
index 00000000..a792b713
--- /dev/null
+++ b/website/showcase/slider-split-views/js/jquery.event.move.js
@@ -0,0 +1,599 @@
+// DOM.event.move
+//
+// 2.0.0
+//
+// Stephen Band
+//
+// Triggers 'movestart', 'move' and 'moveend' events after
+// mousemoves following a mousedown cross a distance threshold,
+// similar to the native 'dragstart', 'drag' and 'dragend' events.
+// Move events are throttled to animation frames. Move event objects
+// have the properties:
+//
+// pageX:
+// pageY: Page coordinates of pointer.
+// startX:
+// startY: Page coordinates of pointer at movestart.
+// distX:
+// distY: Distance the pointer has moved since movestart.
+// deltaX:
+// deltaY: Distance the finger has moved since last event.
+// velocityX:
+// velocityY: Average velocity over last few events.
+
+
+(function(fn) {
+ if (typeof define === 'function' && define.amd) {
+ define([], fn);
+ } else if ((typeof module !== "undefined" && module !== null) && module.exports) {
+ module.exports = fn;
+ } else {
+ fn();
+ }
+})(function(){
+ var assign = Object.assign || window.jQuery && jQuery.extend;
+
+ // Number of pixels a pressed pointer travels before movestart
+ // event is fired.
+ var threshold = 8;
+
+ // Shim for requestAnimationFrame, falling back to timer. See:
+ // see http://paulirish.com/2011/requestanimationframe-for-smart-animating/
+ var requestFrame = (function(){
+ return (
+ window.requestAnimationFrame ||
+ window.webkitRequestAnimationFrame ||
+ window.mozRequestAnimationFrame ||
+ window.oRequestAnimationFrame ||
+ window.msRequestAnimationFrame ||
+ function(fn, element){
+ return window.setTimeout(function(){
+ fn();
+ }, 25);
+ }
+ );
+ })();
+
+ // Shim for customEvent
+ // see https://developer.mozilla.org/en-US/docs/Web/API/CustomEvent/CustomEvent#Polyfill
+ (function () {
+ if ( typeof window.CustomEvent === "function" ) return false;
+ function CustomEvent ( event, params ) {
+ params = params || { bubbles: false, cancelable: false, detail: undefined };
+ var evt = document.createEvent( 'CustomEvent' );
+ evt.initCustomEvent( event, params.bubbles, params.cancelable, params.detail );
+ return evt;
+ }
+
+ CustomEvent.prototype = window.Event.prototype;
+ window.CustomEvent = CustomEvent;
+ })();
+
+ var ignoreTags = {
+ textarea: true,
+ input: true,
+ select: true,
+ button: true
+ };
+
+ var mouseevents = {
+ move: 'mousemove',
+ cancel: 'mouseup dragstart',
+ end: 'mouseup'
+ };
+
+ var touchevents = {
+ move: 'touchmove',
+ cancel: 'touchend',
+ end: 'touchend'
+ };
+
+ var rspaces = /\s+/;
+
+
+ // DOM Events
+
+ var eventOptions = { bubbles: true, cancelable: true };
+
+ var eventsSymbol = typeof Symbol === "function" ? Symbol('events') : {};
+
+ function createEvent(type) {
+ return new CustomEvent(type, eventOptions);
+ }
+
+ function getEvents(node) {
+ return node[eventsSymbol] || (node[eventsSymbol] = {});
+ }
+
+ function on(node, types, fn, data, selector) {
+ types = types.split(rspaces);
+
+ var events = getEvents(node);
+ var i = types.length;
+ var handlers, type;
+
+ function handler(e) { fn(e, data); }
+
+ while (i--) {
+ type = types[i];
+ handlers = events[type] || (events[type] = []);
+ handlers.push([fn, handler]);
+ node.addEventListener(type, handler);
+ }
+ }
+
+ function off(node, types, fn, selector) {
+ types = types.split(rspaces);
+
+ var events = getEvents(node);
+ var i = types.length;
+ var type, handlers, k;
+
+ if (!events) { return; }
+
+ while (i--) {
+ type = types[i];
+ handlers = events[type];
+ if (!handlers) { continue; }
+ k = handlers.length;
+ while (k--) {
+ if (handlers[k][0] === fn) {
+ node.removeEventListener(type, handlers[k][1]);
+ handlers.splice(k, 1);
+ }
+ }
+ }
+ }
+
+ function trigger(node, type, properties) {
+ // Don't cache events. It prevents you from triggering an event of a
+ // given type from inside the handler of another event of that type.
+ var event = createEvent(type);
+ if (properties) { assign(event, properties); }
+ node.dispatchEvent(event);
+ }
+
+
+ // Constructors
+
+ function Timer(fn){
+ var callback = fn,
+ active = false,
+ running = false;
+
+ function trigger(time) {
+ if (active){
+ callback();
+ requestFrame(trigger);
+ running = true;
+ active = false;
+ }
+ else {
+ running = false;
+ }
+ }
+
+ this.kick = function(fn) {
+ active = true;
+ if (!running) { trigger(); }
+ };
+
+ this.end = function(fn) {
+ var cb = callback;
+
+ if (!fn) { return; }
+
+ // If the timer is not running, simply call the end callback.
+ if (!running) {
+ fn();
+ }
+ // If the timer is running, and has been kicked lately, then
+ // queue up the current callback and the end callback, otherwise
+ // just the end callback.
+ else {
+ callback = active ?
+ function(){ cb(); fn(); } :
+ fn ;
+
+ active = true;
+ }
+ };
+ }
+
+
+ // Functions
+
+ function noop() {}
+
+ function preventDefault(e) {
+ e.preventDefault();
+ }
+
+ function isIgnoreTag(e) {
+ return !!ignoreTags[e.target.tagName.toLowerCase()];
+ }
+
+ function isPrimaryButton(e) {
+ // Ignore mousedowns on any button other than the left (or primary)
+ // mouse button, or when a modifier key is pressed.
+ return (e.which === 1 && !e.ctrlKey && !e.altKey);
+ }
+
+ function identifiedTouch(touchList, id) {
+ var i, l;
+
+ if (touchList.identifiedTouch) {
+ return touchList.identifiedTouch(id);
+ }
+
+ // touchList.identifiedTouch() does not exist in
+ // webkit yet… we must do the search ourselves...
+
+ i = -1;
+ l = touchList.length;
+
+ while (++i < l) {
+ if (touchList[i].identifier === id) {
+ return touchList[i];
+ }
+ }
+ }
+
+ function changedTouch(e, data) {
+ var touch = identifiedTouch(e.changedTouches, data.identifier);
+
+ // This isn't the touch you're looking for.
+ if (!touch) { return; }
+
+ // Chrome Android (at least) includes touches that have not
+ // changed in e.changedTouches. That's a bit annoying. Check
+ // that this touch has changed.
+ if (touch.pageX === data.pageX && touch.pageY === data.pageY) { return; }
+
+ return touch;
+ }
+
+
+ // Handlers that decide when the first movestart is triggered
+
+ function mousedown(e){
+ // Ignore non-primary buttons
+ if (!isPrimaryButton(e)) { return; }
+
+ // Ignore form and interactive elements
+ if (isIgnoreTag(e)) { return; }
+
+ on(document, mouseevents.move, mousemove, e);
+ on(document, mouseevents.cancel, mouseend, e);
+ }
+
+ function mousemove(e, data){
+ checkThreshold(e, data, e, removeMouse);
+ }
+
+ function mouseend(e, data) {
+ removeMouse();
+ }
+
+ function removeMouse() {
+ off(document, mouseevents.move, mousemove);
+ off(document, mouseevents.cancel, mouseend);
+ }
+
+ function touchstart(e) {
+ // Don't get in the way of interaction with form elements
+ if (ignoreTags[e.target.tagName.toLowerCase()]) { return; }
+
+ var touch = e.changedTouches[0];
+
+ // iOS live updates the touch objects whereas Android gives us copies.
+ // That means we can't trust the touchstart object to stay the same,
+ // so we must copy the data. This object acts as a template for
+ // movestart, move and moveend event objects.
+ var data = {
+ target: touch.target,
+ pageX: touch.pageX,
+ pageY: touch.pageY,
+ identifier: touch.identifier,
+
+ // The only way to make handlers individually unbindable is by
+ // making them unique.
+ touchmove: function(e, data) { touchmove(e, data); },
+ touchend: function(e, data) { touchend(e, data); }
+ };
+
+ on(document, touchevents.move, data.touchmove, data);
+ on(document, touchevents.cancel, data.touchend, data);
+ }
+
+ function touchmove(e, data) {
+ var touch = changedTouch(e, data);
+ if (!touch) { return; }
+ checkThreshold(e, data, touch, removeTouch);
+ }
+
+ function touchend(e, data) {
+ var touch = identifiedTouch(e.changedTouches, data.identifier);
+ if (!touch) { return; }
+ removeTouch(data);
+ }
+
+ function removeTouch(data) {
+ off(document, touchevents.move, data.touchmove);
+ off(document, touchevents.cancel, data.touchend);
+ }
+
+ function checkThreshold(e, data, touch, fn) {
+ var distX = touch.pageX - data.pageX;
+ var distY = touch.pageY - data.pageY;
+
+ // Do nothing if the threshold has not been crossed.
+ if ((distX * distX) + (distY * distY) < (threshold * threshold)) { return; }
+
+ triggerStart(e, data, touch, distX, distY, fn);
+ }
+
+ function triggerStart(e, data, touch, distX, distY, fn) {
+ var touches = e.targetTouches;
+ var time = e.timeStamp - data.timeStamp;
+
+ // Create a movestart object with some special properties that
+ // are passed only to the movestart handlers.
+ var template = {
+ altKey: e.altKey,
+ ctrlKey: e.ctrlKey,
+ shiftKey: e.shiftKey,
+ startX: data.pageX,
+ startY: data.pageY,
+ distX: distX,
+ distY: distY,
+ deltaX: distX,
+ deltaY: distY,
+ pageX: touch.pageX,
+ pageY: touch.pageY,
+ velocityX: distX / time,
+ velocityY: distY / time,
+ identifier: data.identifier,
+ targetTouches: touches,
+ finger: touches ? touches.length : 1,
+ enableMove: function() {
+ this.moveEnabled = true;
+ this.enableMove = noop;
+ e.preventDefault();
+ }
+ };
+
+ // Trigger the movestart event.
+ trigger(data.target, 'movestart', template);
+
+ // Unbind handlers that tracked the touch or mouse up till now.
+ fn(data);
+ }
+
+
+ // Handlers that control what happens following a movestart
+
+ function activeMousemove(e, data) {
+ var timer = data.timer;
+
+ data.touch = e;
+ data.timeStamp = e.timeStamp;
+ timer.kick();
+ }
+
+ function activeMouseend(e, data) {
+ var target = data.target;
+ var event = data.event;
+ var timer = data.timer;
+
+ removeActiveMouse();
+
+ endEvent(target, event, timer, function() {
+ // Unbind the click suppressor, waiting until after mouseup
+ // has been handled.
+ setTimeout(function(){
+ off(target, 'click', preventDefault);
+ }, 0);
+ });
+ }
+
+ function removeActiveMouse() {
+ off(document, mouseevents.move, activeMousemove);
+ off(document, mouseevents.end, activeMouseend);
+ }
+
+ function activeTouchmove(e, data) {
+ var event = data.event;
+ var timer = data.timer;
+ var touch = changedTouch(e, event);
+
+ if (!touch) { return; }
+
+ // Stop the interface from gesturing
+ e.preventDefault();
+
+ event.targetTouches = e.targetTouches;
+ data.touch = touch;
+ data.timeStamp = e.timeStamp;
+
+ timer.kick();
+ }
+
+ function activeTouchend(e, data) {
+ var target = data.target;
+ var event = data.event;
+ var timer = data.timer;
+ var touch = identifiedTouch(e.changedTouches, event.identifier);
+
+ // This isn't the touch you're looking for.
+ if (!touch) { return; }
+
+ removeActiveTouch(data);
+ endEvent(target, event, timer);
+ }
+
+ function removeActiveTouch(data) {
+ off(document, touchevents.move, data.activeTouchmove);
+ off(document, touchevents.end, data.activeTouchend);
+ }
+
+
+ // Logic for triggering move and moveend events
+
+ function updateEvent(event, touch, timeStamp) {
+ var time = timeStamp - event.timeStamp;
+
+ event.distX = touch.pageX - event.startX;
+ event.distY = touch.pageY - event.startY;
+ event.deltaX = touch.pageX - event.pageX;
+ event.deltaY = touch.pageY - event.pageY;
+
+ // Average the velocity of the last few events using a decay
+ // curve to even out spurious jumps in values.
+ event.velocityX = 0.3 * event.velocityX + 0.7 * event.deltaX / time;
+ event.velocityY = 0.3 * event.velocityY + 0.7 * event.deltaY / time;
+ event.pageX = touch.pageX;
+ event.pageY = touch.pageY;
+ }
+
+ function endEvent(target, event, timer, fn) {
+ timer.end(function(){
+ trigger(target, 'moveend', event);
+ return fn && fn();
+ });
+ }
+
+
+ // Set up the DOM
+
+ function movestart(e) {
+ if (e.defaultPrevented) { return; }
+ if (!e.moveEnabled) { return; }
+
+ var event = {
+ startX: e.startX,
+ startY: e.startY,
+ pageX: e.pageX,
+ pageY: e.pageY,
+ distX: e.distX,
+ distY: e.distY,
+ deltaX: e.deltaX,
+ deltaY: e.deltaY,
+ velocityX: e.velocityX,
+ velocityY: e.velocityY,
+ identifier: e.identifier,
+ targetTouches: e.targetTouches,
+ finger: e.finger
+ };
+
+ var data = {
+ target: e.target,
+ event: event,
+ timer: new Timer(update),
+ touch: undefined,
+ timeStamp: e.timeStamp
+ };
+
+ function update(time) {
+ updateEvent(event, data.touch, data.timeStamp);
+ trigger(data.target, 'move', event);
+ }
+
+ if (e.identifier === undefined) {
+ // We're dealing with a mouse event.
+ // Stop clicks from propagating during a move
+ on(e.target, 'click', preventDefault);
+ on(document, mouseevents.move, activeMousemove, data);
+ on(document, mouseevents.end, activeMouseend, data);
+ }
+ else {
+ // In order to unbind correct handlers they have to be unique
+ data.activeTouchmove = function(e, data) { activeTouchmove(e, data); };
+ data.activeTouchend = function(e, data) { activeTouchend(e, data); };
+
+ // We're dealing with a touch.
+ on(document, touchevents.move, data.activeTouchmove, data);
+ on(document, touchevents.end, data.activeTouchend, data);
+ }
+ }
+
+ on(document, 'mousedown', mousedown);
+ on(document, 'touchstart', touchstart);
+ on(document, 'movestart', movestart);
+
+
+ // jQuery special events
+ //
+ // jQuery event objects are copies of DOM event objects. They need
+ // a little help copying the move properties across.
+
+ if (!window.jQuery) { return; }
+
+ var properties = ("startX startY pageX pageY distX distY deltaX deltaY velocityX velocityY").split(' ');
+
+ function enableMove1(e) { e.enableMove(); }
+ function enableMove2(e) { e.enableMove(); }
+ function enableMove3(e) { e.enableMove(); }
+
+ function add(handleObj) {
+ var handler = handleObj.handler;
+
+ handleObj.handler = function(e) {
+ // Copy move properties across from originalEvent
+ var i = properties.length;
+ var property;
+
+ while(i--) {
+ property = properties[i];
+ e[property] = e.originalEvent[property];
+ }
+
+ handler.apply(this, arguments);
+ };
+ }
+
+ jQuery.event.special.movestart = {
+ setup: function() {
+ // Movestart must be enabled to allow other move events
+ on(this, 'movestart', enableMove1);
+
+ // Do listen to DOM events
+ return false;
+ },
+
+ teardown: function() {
+ off(this, 'movestart', enableMove1);
+ return false;
+ },
+
+ add: add
+ };
+
+ jQuery.event.special.move = {
+ setup: function() {
+ on(this, 'movestart', enableMove2);
+ return false;
+ },
+
+ teardown: function() {
+ off(this, 'movestart', enableMove2);
+ return false;
+ },
+
+ add: add
+ };
+
+ jQuery.event.special.moveend = {
+ setup: function() {
+ on(this, 'movestart', enableMove3);
+ return false;
+ },
+
+ teardown: function() {
+ off(this, 'movestart', enableMove3);
+ return false;
+ },
+
+ add: add
+ };
+});
diff --git a/website/showcase/slider-split-views/js/jquery.twentytwenty.js b/website/showcase/slider-split-views/js/jquery.twentytwenty.js
new file mode 100755
index 00000000..a6b3fb0b
--- /dev/null
+++ b/website/showcase/slider-split-views/js/jquery.twentytwenty.js
@@ -0,0 +1,152 @@
+(function($){
+
+ $.fn.twentytwenty = function(options) {
+ var options = $.extend({
+ default_offset_pct: 0.5,
+ orientation: 'horizontal',
+ before_label: 'Before',
+ after_label: 'After',
+ no_overlay: false,
+ move_slider_on_hover: false,
+ move_with_handle_only: true,
+ click_to_move: false
+ }, options);
+
+ return this.each(function() {
+
+ var sliderPct = options.default_offset_pct;
+ var container = $(this);
+ var sliderOrientation = options.orientation;
+ var beforeDirection = (sliderOrientation === 'vertical') ? 'down' : 'left';
+ var afterDirection = (sliderOrientation === 'vertical') ? 'up' : 'right';
+
+
+ container.wrap("
");
+ if(!options.no_overlay) {
+ container.append("
");
+ }
+ var beforeImg = container.children("div:first"); // CHANGED BY T. BOCH (was find('img:first'))
+ var afterImg = container.children("div:last"); // CHANGED BY T. BOCH
+ container.append("
");
+ var slider = container.find(".twentytwenty-handle");
+ slider.append("
");
+ slider.append("
");
+ container.addClass("twentytwenty-container");
+ beforeImg.addClass("twentytwenty-before");
+ afterImg.addClass("twentytwenty-after");
+
+ var overlay = container.find(".twentytwenty-overlay");
+ overlay.append("
");
+ overlay.append("
");
+
+ var calcOffset = function(dimensionPct) {
+ var w = beforeImg.width();
+ var h = beforeImg.height();
+ return {
+ w: w+"px",
+ h: h+"px",
+ cw: (dimensionPct*w)+"px",
+ ch: (dimensionPct*h)+"px"
+ };
+ };
+
+ var adjustContainer = function(offset) {
+ if (sliderOrientation === 'vertical') {
+ beforeImg.css("clip", "rect(0,"+offset.w+","+offset.ch+",0)");
+ afterImg.css("clip", "rect("+offset.ch+","+offset.w+","+offset.h+",0)");
+ }
+ else {
+ beforeImg.css("clip", "rect(0,"+offset.cw+","+offset.h+",0)");
+ afterImg.css("clip", "rect(0,"+offset.w+","+offset.h+","+offset.cw+")");
+ }
+ container.css("height", offset.h);
+ };
+
+ var adjustSlider = function(pct) {
+ var offset = calcOffset(pct);
+ slider.css((sliderOrientation==="vertical") ? "top" : "left", (sliderOrientation==="vertical") ? offset.ch : offset.cw);
+ adjustContainer(offset);
+ };
+
+ // Return the number specified or the min/max number if it outside the range given.
+ var minMaxNumber = function(num, min, max) {
+ return Math.max(min, Math.min(max, num));
+ };
+
+ // Calculate the slider percentage based on the position.
+ var getSliderPercentage = function(positionX, positionY) {
+ var sliderPercentage = (sliderOrientation === 'vertical') ?
+ (positionY-offsetY)/imgHeight :
+ (positionX-offsetX)/imgWidth;
+
+ return minMaxNumber(sliderPercentage, 0, 1);
+ };
+
+
+ $(window).on("resize.twentytwenty", function(e) {
+ adjustSlider(sliderPct);
+ });
+
+ var offsetX = 0;
+ var offsetY = 0;
+ var imgWidth = 0;
+ var imgHeight = 0;
+ var onMoveStart = function(e) {
+ if (((e.distX > e.distY && e.distX < -e.distY) || (e.distX < e.distY && e.distX > -e.distY)) && sliderOrientation !== 'vertical') {
+ e.preventDefault();
+ }
+ else if (((e.distX < e.distY && e.distX < -e.distY) || (e.distX > e.distY && e.distX > -e.distY)) && sliderOrientation === 'vertical') {
+ e.preventDefault();
+ }
+ container.addClass("active");
+ offsetX = container.offset().left;
+ offsetY = container.offset().top;
+ imgWidth = beforeImg.width();
+ imgHeight = beforeImg.height();
+ };
+ var onMove = function(e) {
+ if (container.hasClass("active")) {
+ sliderPct = getSliderPercentage(e.pageX, e.pageY);
+ adjustSlider(sliderPct);
+ }
+ };
+ var onMoveEnd = function() {
+ container.removeClass("active");
+ };
+
+ var moveTarget = options.move_with_handle_only ? slider : container;
+ moveTarget.on("movestart",onMoveStart);
+ moveTarget.on("move",onMove);
+ moveTarget.on("moveend",onMoveEnd);
+
+ if (options.move_slider_on_hover) {
+ container.on("mouseenter", onMoveStart);
+ container.on("mousemove", onMove);
+ container.on("mouseleave", onMoveEnd);
+ }
+
+ slider.on("touchmove", function(e) {
+ e.preventDefault();
+ });
+
+ container.find("img").on("mousedown", function(event) {
+ event.preventDefault();
+ });
+
+ if (options.click_to_move) {
+ container.on('click', function(e) {
+ offsetX = container.offset().left;
+ offsetY = container.offset().top;
+ imgWidth = beforeImg.width();
+ imgHeight = beforeImg.height();
+
+ sliderPct = getSliderPercentage(e.pageX, e.pageY);
+ adjustSlider(sliderPct);
+ });
+ }
+
+ $(window).trigger("resize.twentytwenty");
+ });
+ };
+
+})(jQuery);