Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/twbs/ratchet.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'dist/js/ratchet.js')
-rw-r--r--dist/js/ratchet.js194
1 files changed, 148 insertions, 46 deletions
diff --git a/dist/js/ratchet.js b/dist/js/ratchet.js
index cae24cb..1264ccd 100644
--- a/dist/js/ratchet.js
+++ b/dist/js/ratchet.js
@@ -1,17 +1,75 @@
/*!
* =====================================================
* Ratchet v2.0.2 (http://goratchet.com)
- * Copyright 2014 Connor Sears
+ * Copyright 2015 Connor Sears
* Licensed under MIT (https://github.com/twbs/ratchet/blob/master/LICENSE)
*
* v2.0.2 designed by @connors.
* =====================================================
*/
/* ========================================================================
+ * Ratchet: common.js v2.0.2
+ * http://goratchet.com/
+ * ========================================================================
+ * Copyright 2015 Connor Sears
+ * Licensed under MIT (https://github.com/twbs/ratchet/blob/master/LICENSE)
+ * ======================================================================== */
+
+!(function () {
+ 'use strict';
+
+ // Compatible With CustomEvent
+ if (!window.CustomEvent) {
+ window.CustomEvent = function (type, config) {
+ var e = document.createEvent('CustomEvent');
+ e.initCustomEvent(type, config.bubbles, config.cancelable, config.detail);
+ return e;
+ };
+ }
+
+ // Create Ratchet namespace
+ if (typeof window.RATCHET === 'undefined') {
+ window.RATCHET = {};
+ }
+
+ // Original script from http://davidwalsh.name/vendor-prefix
+ window.RATCHET.getBrowserCapabilities = (function () {
+ var styles = window.getComputedStyle(document.documentElement, '');
+ var pre = (Array.prototype.slice
+ .call(styles)
+ .join('')
+ .match(/-(moz|webkit|ms)-/) || (styles.OLink === '' && ['', 'o'])
+ )[1];
+ return {
+ prefix: '-' + pre + '-',
+ transform: pre[0].toUpperCase() + pre.substr(1) + 'Transform'
+ };
+ })();
+
+ window.RATCHET.getTransitionEnd = (function () {
+ var el = document.createElement('ratchet');
+ var transEndEventNames = {
+ WebkitTransition : 'webkitTransitionEnd',
+ MozTransition : 'transitionend',
+ OTransition : 'oTransitionEnd otransitionend',
+ transition : 'transitionend'
+ };
+
+ for (var name in transEndEventNames) {
+ if (el.style[name] !== undefined) {
+ return transEndEventNames[name];
+ }
+ }
+
+ return transEndEventNames.transition;
+ })();
+}());
+
+/* ========================================================================
* Ratchet: modals.js v2.0.2
* http://goratchet.com/components#modals
* ========================================================================
- * Copyright 2014 Connor Sears
+ * Copyright 2015 Connor Sears
* Licensed under MIT (https://github.com/twbs/ratchet/blob/master/LICENSE)
* ======================================================================== */
@@ -53,7 +111,7 @@
* Ratchet: popovers.js v2.0.2
* http://goratchet.com/components#popovers
* ========================================================================
- * Copyright 2014 Connor Sears
+ * Copyright 2015 Connor Sears
* Licensed under MIT (https://github.com/twbs/ratchet/blob/master/LICENSE)
* ======================================================================== */
@@ -77,7 +135,7 @@
var onPopoverHidden = function () {
popover.style.display = 'none';
- popover.removeEventListener('webkitTransitionEnd', onPopoverHidden);
+ popover.removeEventListener(window.RATCHET.getTransitionEnd, onPopoverHidden);
};
var backdrop = (function () {
@@ -86,7 +144,7 @@
element.classList.add('backdrop');
element.addEventListener('touchend', function () {
- popover.addEventListener('webkitTransitionEnd', onPopoverHidden);
+ popover.addEventListener(window.RATCHET.getTransitionEnd, onPopoverHidden);
popover.classList.remove('visible');
popover.parentNode.removeChild(backdrop);
});
@@ -103,8 +161,7 @@
try {
popover = document.querySelector(anchor.hash);
- }
- catch (error) {
+ } catch (error) {
popover = null;
}
@@ -142,7 +199,7 @@
* http://goratchet.com/components#push
* ========================================================================
* inspired by @defunkt's jquery.pjax.js
- * Copyright 2014 Connor Sears
+ * Copyright 2015 Connor Sears
* Licensed under MIT (https://github.com/twbs/ratchet/blob/master/LICENSE)
* ======================================================================== */
@@ -182,7 +239,6 @@
}
cacheMapping[data.id] = JSON.stringify(data);
window.history.replaceState(data.id, data.title, data.url);
- domCache[data.id] = document.body.cloneNode(true);
};
var cachePush = function () {
@@ -200,7 +256,9 @@
delete cacheMapping[cacheBackStack.shift()];
}
- window.history.pushState(null, '', cacheMapping[PUSH.id].url);
+ if (getCached(PUSH.id).url) {
+ window.history.pushState(null, '', getCached(PUSH.id).url);
+ }
cacheMapping.cacheForwardStack = JSON.stringify(cacheForwardStack);
cacheMapping.cacheBackStack = JSON.stringify(cacheBackStack);
@@ -331,7 +389,9 @@
swapContent(
(activeObj.contents || activeDom).cloneNode(true),
document.querySelector('.content'),
- transition
+ transition, function () {
+ triggerStateChange();
+ }
);
PUSH.id = id;
@@ -369,7 +429,11 @@
clearTimeout(options._timeout);
}
if (xhr.readyState === 4) {
- xhr.status === 200 ? success(xhr, options) : failure(options.url);
+ if (xhr.status === 200) {
+ success(xhr, options);
+ } else {
+ failure(options.url);
+ }
}
};
@@ -383,6 +447,8 @@
});
}
+ cacheCurrentContent();
+
if (options.timeout) {
options._timeout = setTimeout(function () { xhr.abort('timeout'); }, options.timeout);
}
@@ -394,6 +460,10 @@
}
};
+ function cacheCurrentContent () {
+ domCache[PUSH.id] = document.body.cloneNode(true);
+ }
+
// Main XHR handlers
// =================
@@ -465,7 +535,7 @@
document.body.insertBefore(swap, document.querySelector('.content'));
}
} else {
- enter = /in$/.test(transition);
+ enter = /in$/.test(transition);
if (transition === 'fade') {
container.classList.add('in');
@@ -483,35 +553,41 @@
}
if (!transition) {
- complete && complete();
+ if (complete) {
+ complete();
+ }
}
if (transition === 'fade') {
container.offsetWidth; // force reflow
container.classList.remove('in');
var fadeContainerEnd = function () {
- container.removeEventListener('webkitTransitionEnd', fadeContainerEnd);
+ container.removeEventListener(window.RATCHET.getTransitionEnd, fadeContainerEnd);
swap.classList.add('in');
- swap.addEventListener('webkitTransitionEnd', fadeSwapEnd);
+ swap.addEventListener(window.RATCHET.getTransitionEnd, fadeSwapEnd);
};
var fadeSwapEnd = function () {
- swap.removeEventListener('webkitTransitionEnd', fadeSwapEnd);
+ swap.removeEventListener(window.RATCHET.getTransitionEnd, fadeSwapEnd);
container.parentNode.removeChild(container);
swap.classList.remove('fade');
swap.classList.remove('in');
- complete && complete();
+ if (complete) {
+ complete();
+ }
};
- container.addEventListener('webkitTransitionEnd', fadeContainerEnd);
+ container.addEventListener(window.RATCHET.getTransitionEnd, fadeContainerEnd);
}
if (/slide/.test(transition)) {
var slideEnd = function () {
- swap.removeEventListener('webkitTransitionEnd', slideEnd);
+ swap.removeEventListener(window.RATCHET.getTransitionEnd, slideEnd);
swap.classList.remove('sliding', 'sliding-in');
swap.classList.remove(swapDirection);
container.parentNode.removeChild(container);
- complete && complete();
+ if (complete) {
+ complete();
+ }
};
container.offsetWidth; // force reflow
@@ -519,7 +595,7 @@
containerDirection = enter ? 'left' : 'right';
container.classList.add(containerDirection);
swap.classList.remove(swapDirection);
- swap.addEventListener('webkitTransitionEnd', slideEnd);
+ swap.addEventListener(window.RATCHET.getTransitionEnd, slideEnd);
}
};
@@ -616,9 +692,16 @@
window.addEventListener('touchstart', function () { isScrolling = false; });
window.addEventListener('touchmove', function () { isScrolling = true; });
window.addEventListener('touchend', touchend);
- window.addEventListener('click', function (e) { if (getTarget(e)) {e.preventDefault();} });
+ window.addEventListener('click', function (e) {
+ if (getTarget(e)) {
+ e.preventDefault();
+ }
+ });
window.addEventListener('popstate', popstate);
+
+ // TODO : Remove this line in the next major version
window.PUSH = PUSH;
+ window.RATCHET.push = PUSH;
}());
@@ -626,7 +709,7 @@
* Ratchet: segmented-controllers.js v2.0.2
* http://goratchet.com/components#segmentedControls
* ========================================================================
- * Copyright 2014 Connor Sears
+ * Copyright 2015 Connor Sears
* Licensed under MIT (https://github.com/twbs/ratchet/blob/master/LICENSE)
* ======================================================================== */
@@ -685,7 +768,12 @@
targetBody.classList.add(className);
});
- window.addEventListener('click', function (e) { if (getTarget(e.target)) {e.preventDefault();} });
+ window.addEventListener('click', function (e) {
+ if (getTarget(e.target)) {
+ e.preventDefault();
+ }
+ });
+
}());
/* ========================================================================
@@ -693,7 +781,7 @@
* http://goratchet.com/components#sliders
* ========================================================================
Adapted from Brad Birdsall's swipe
- * Copyright 2014 Connor Sears
+ * Copyright 2015 Connor Sears
* Licensed under MIT (https://github.com/twbs/ratchet/blob/master/LICENSE)
* ======================================================================== */
@@ -713,6 +801,10 @@
var slideNumber;
var isScrolling;
var scrollableArea;
+ var startedMoving;
+
+ var transformPrefix = window.RATCHET.getBrowserCapabilities.prefix;
+ var transformProperty = window.RATCHET.getBrowserCapabilities.transform;
var getSlider = function (target) {
var i;
@@ -728,11 +820,9 @@
};
var getScroll = function () {
- if ('webkitTransform' in slider.style) {
- var translate3d = slider.style.webkitTransform.match(/translate3d\(([^,]*)/);
- var ret = translate3d ? translate3d[1] : 0;
- return parseInt(ret, 10);
- }
+ var translate3d = slider.style[transformProperty].match(/translate3d\(([^,]*)/);
+ var ret = translate3d ? translate3d[1] : 0;
+ return parseInt(ret, 10);
};
var setSlideNumber = function (offset) {
@@ -765,7 +855,7 @@
setSlideNumber(0);
- slider.style['-webkit-transition-duration'] = 0;
+ slider.style[transformPrefix + 'transition-duration'] = 0;
};
var onTouchMove = function (e) {
@@ -773,12 +863,17 @@
return; // Exit if a pinch || no slider
}
+ // adjust the starting position if we just started to avoid jumpage
+ if (!startedMoving) {
+ pageX += (e.touches[0].pageX - pageX) - 1;
+ }
+
deltaX = e.touches[0].pageX - pageX;
deltaY = e.touches[0].pageY - pageY;
pageX = e.touches[0].pageX;
pageY = e.touches[0].pageY;
- if (typeof isScrolling === 'undefined') {
+ if (typeof isScrolling === 'undefined' && startedMoving) {
isScrolling = Math.abs(deltaY) > Math.abs(deltaX);
}
@@ -793,7 +888,10 @@
resistance = slideNumber === 0 && deltaX > 0 ? (pageX / sliderWidth) + 1.25 :
slideNumber === lastSlide && deltaX < 0 ? (Math.abs(pageX) / sliderWidth) + 1.25 : 1;
- slider.style.webkitTransform = 'translate3d(' + offsetX + 'px,0,0)';
+ slider.style[transformProperty] = 'translate3d(' + offsetX + 'px,0,0)';
+
+ // started moving
+ startedMoving = true;
};
var onTouchEnd = function (e) {
@@ -801,14 +899,15 @@
return;
}
- setSlideNumber(
- (+new Date()) - startTime < 1000 && Math.abs(deltaX) > 15 ? (deltaX < 0 ? -1 : 1) : 0
- );
+ // we're done moving
+ startedMoving = false;
+
+ setSlideNumber((+new Date()) - startTime < 1000 && Math.abs(deltaX) > 15 ? (deltaX < 0 ? -1 : 1) : 0);
offsetX = slideNumber * sliderWidth;
- slider.style['-webkit-transition-duration'] = '.2s';
- slider.style.webkitTransform = 'translate3d(' + offsetX + 'px,0,0)';
+ slider.style[transformPrefix + 'transition-duration'] = '.2s';
+ slider.style[transformProperty] = 'translate3d(' + offsetX + 'px,0,0)';
e = new CustomEvent('slide', {
detail: { slideNumber: Math.abs(slideNumber) },
@@ -830,7 +929,7 @@
* http://goratchet.com/components#toggles
* ========================================================================
Adapted from Brad Birdsall's swipe
- * Copyright 2014 Connor Sears
+ * Copyright 2015 Connor Sears
* Licensed under MIT (https://github.com/twbs/ratchet/blob/master/LICENSE)
* ======================================================================== */
@@ -841,6 +940,7 @@
var touchMove = false;
var distanceX = false;
var toggle = false;
+ var transformProperty = window.RATCHET.getBrowserCapabilities.transform;
var findToggle = function (target) {
var i;
@@ -900,13 +1000,13 @@
e.preventDefault();
if (distanceX < 0) {
- return (handle.style.webkitTransform = 'translate3d(0,0,0)');
+ return (handle.style[transformProperty] = 'translate3d(0,0,0)');
}
if (distanceX > offset) {
- return (handle.style.webkitTransform = 'translate3d(' + offset + 'px,0,0)');
+ return (handle.style[transformProperty] = 'translate3d(' + offset + 'px,0,0)');
}
- handle.style.webkitTransform = 'translate3d(' + distanceX + 'px,0,0)';
+ handle.style[transformProperty] = 'translate3d(' + distanceX + 'px,0,0)';
toggle.classList[(distanceX > (toggleWidth / 2 - handleWidth / 2)) ? 'add' : 'remove']('active');
});
@@ -923,15 +1023,17 @@
var slideOn = (!touchMove && !toggle.classList.contains('active')) || (touchMove && (distanceX > (toggleWidth / 2 - handleWidth / 2)));
if (slideOn) {
- handle.style.webkitTransform = 'translate3d(' + offset + 'px,0,0)';
+ handle.style[transformProperty] = 'translate3d(' + offset + 'px,0,0)';
} else {
- handle.style.webkitTransform = 'translate3d(0,0,0)';
+ handle.style[transformProperty] = 'translate3d(0,0,0)';
}
toggle.classList[slideOn ? 'add' : 'remove']('active');
e = new CustomEvent('toggle', {
- detail: { isActive: slideOn },
+ detail: {
+ isActive: slideOn
+ },
bubbles: true,
cancelable: true
});