twitter_ratchet_rails 0.0.1 → 0.0.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/app/assets/javascripts/twitter_ratchet_rails/modals.js +41 -0
- data/app/assets/javascripts/twitter_ratchet_rails/popovers.js +87 -0
- data/app/assets/javascripts/twitter_ratchet_rails/push.js +483 -0
- data/app/assets/javascripts/twitter_ratchet_rails/ratchet.js +82 -54
- data/app/assets/javascripts/twitter_ratchet_rails/segmented-controllers.js +65 -0
- data/app/assets/javascripts/twitter_ratchet_rails/sliders.js +136 -0
- data/app/assets/javascripts/twitter_ratchet_rails/toggles.js +118 -0
- data/app/assets/stylesheets/twitter_ratchet_rails/ratchet-theme-android.css +113 -79
- data/app/assets/stylesheets/twitter_ratchet_rails/ratchet-theme-ios.css +90 -90
- data/app/assets/stylesheets/twitter_ratchet_rails/ratchet.css.erb +171 -166
- data/lib/twitter_ratchet_rails/version.rb +1 -1
- data/test/dummy/app/assets/javascripts/application.js +1 -0
- data/test/dummy/app/assets/javascripts/users.js +2 -0
- data/test/dummy/app/assets/stylesheets/application.css +1 -0
- data/test/dummy/app/assets/stylesheets/scaffold.css +56 -0
- data/test/dummy/app/assets/stylesheets/users.css +4 -0
- data/test/dummy/app/controllers/users_controller.rb +58 -0
- data/test/dummy/app/helpers/users_helper.rb +2 -0
- data/test/dummy/app/models/user.rb +2 -0
- data/test/dummy/app/views/layouts/application.html.erb +26 -9
- data/test/dummy/app/views/users/_form.html.erb +25 -0
- data/test/dummy/app/views/users/edit.html.erb +6 -0
- data/test/dummy/app/views/users/index.html.erb +51 -0
- data/test/dummy/app/views/users/new.html.erb +5 -0
- data/test/dummy/app/views/users/show.html.erb +14 -0
- data/test/dummy/config/routes.rb +4 -0
- data/test/dummy/db/development.sqlite3 +0 -0
- data/test/dummy/db/migrate/20140620120642_create_users.rb +10 -0
- data/test/dummy/db/schema.rb +23 -0
- data/test/dummy/log/development.log +834 -0
- data/test/dummy/test/controllers/users_controller_test.rb +49 -0
- data/test/dummy/test/fixtures/users.yml +9 -0
- data/test/dummy/test/helpers/users_helper_test.rb +4 -0
- data/test/{integration/navigation_test.rb → dummy/test/models/user_test.rb} +1 -4
- data/test/dummy/tmp/cache/assets/development/sprockets/02365dc2cb50c9b2a206bf87d9181ef9 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/05c4a034c993964dc3064d1e840449fd +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/0800f54ee19cf3cee10b956fa9786799 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/0e66254a0ff45c104998339ae7c607c5 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/0e804c20d0e8d07c2477ce1c0f102adf +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/13fe41fee1fe35b49d145bcc06610705 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/163a4561a07fbc33d8a229302099d8dd +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/2bd9a33c28022e3c885044a69be41a10 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/2d3d6a06270e38c5b1ff9b578aa35990 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/2f5173deea6c795b8fdde723bb4b63af +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/30e315773d1e399a47375b9e13041ed0 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/32593d4dfd09e0a66f70fe8095bb1014 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/357970feca3ac29060c1e3861e2c0953 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/35fa941d49cfabf40906d7ac81e502b5 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/371bf96e99717688ed7313a0c53f4212 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/3a18489ba6c9aaef36fe82a5eccaa683 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/3b2f71b1e0ed4912133e1322edeebeb4 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/3cff68a61696f3df6cc0150dfe5f0a7a +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/4050a4e5062ab95c9f32e9b6940821ea +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/510da110ae528e2d22533be39ff696c5 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/5159109e8d44f828ad6e8c67292647ee +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/56a757e904e5be9c01961ca2d84bf6dd +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/5f1a0d05e77ca8b9a1fc2a47e17a8174 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/6ecbd847a59c3a487acbaf3a341a116e +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/6fc757c2c8329244ca95d6909865bbc2 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/7c5d2dcee0e90462ec7314c630051fc2 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/87b209c0c9da28094a8d5581a21262c6 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/90cccb07f2fc8407c9356103eb53c419 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/c71d61ab8105e8c42bf9dc173a72671d +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/cebc6db0bbb8120f430da3970b173d2f +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/cffd775d018f68ce5dba1ee0d951a994 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/d247d1ed3987a4834f22fb867bdca6bc +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/d47632ab6c54bae0f6a62e211aca4938 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/d771ace226fc8215a3572e0aa35bb0d6 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/dd1bfc325578c5b436921f471d625afa +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/f333e4623731332ab806c650e07ef890 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/f4a9eb5609520a5f6dbad5dbdbeb37ca +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/f56253b5f374fff1a33fbbc9881c9124 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/f7cbd26ba1d28d48de824f0e94586655 +0 -0
- data/test/dummy/tmp/pids/server.pid +1 -0
- metadata +130 -14
- data/app/helpers/twitter_ratchet_rails/application_helper.rb +0 -4
- data/app/views/layouts/twitter_ratchet_rails/application.html.erb +0 -14
- data/test/test_helper.rb +0 -15
- data/test/twitter_ratchet_rails_test.rb +0 -7
@@ -1,23 +1,27 @@
|
|
1
1
|
/*!
|
2
2
|
* =====================================================
|
3
|
-
* Ratchet v2.0.
|
3
|
+
* Ratchet v2.0.2 (http://goratchet.com)
|
4
4
|
* Copyright 2014 Connor Sears
|
5
|
-
* Licensed under MIT.
|
5
|
+
* Licensed under MIT (https://github.com/twbs/ratchet/blob/master/LICENSE)
|
6
6
|
*
|
7
|
-
* v2.0.
|
7
|
+
* v2.0.2 designed by @connors.
|
8
8
|
* =====================================================
|
9
9
|
*/
|
10
|
-
/*
|
11
|
-
*
|
12
|
-
*
|
13
|
-
*
|
14
|
-
*
|
10
|
+
/* ========================================================================
|
11
|
+
* Ratchet: modals.js v2.0.2
|
12
|
+
* http://goratchet.com/components#modals
|
13
|
+
* ========================================================================
|
14
|
+
* Copyright 2014 Connor Sears
|
15
|
+
* Licensed under MIT (https://github.com/twbs/ratchet/blob/master/LICENSE)
|
16
|
+
* ======================================================================== */
|
15
17
|
|
16
18
|
!(function () {
|
17
19
|
'use strict';
|
18
20
|
|
19
21
|
var findModals = function (target) {
|
20
|
-
var i
|
22
|
+
var i;
|
23
|
+
var modals = document.querySelectorAll('a');
|
24
|
+
|
21
25
|
for (; target && target !== document; target = target.parentNode) {
|
22
26
|
for (i = modals.length; i--;) {
|
23
27
|
if (modals[i] === target) {
|
@@ -45,11 +49,13 @@
|
|
45
49
|
});
|
46
50
|
}());
|
47
51
|
|
48
|
-
/*
|
49
|
-
*
|
50
|
-
*
|
51
|
-
*
|
52
|
-
*
|
52
|
+
/* ========================================================================
|
53
|
+
* Ratchet: popovers.js v2.0.2
|
54
|
+
* http://goratchet.com/components#popovers
|
55
|
+
* ========================================================================
|
56
|
+
* Copyright 2014 Connor Sears
|
57
|
+
* Licensed under MIT (https://github.com/twbs/ratchet/blob/master/LICENSE)
|
58
|
+
* ======================================================================== */
|
53
59
|
|
54
60
|
!(function () {
|
55
61
|
'use strict';
|
@@ -57,7 +63,9 @@
|
|
57
63
|
var popover;
|
58
64
|
|
59
65
|
var findPopovers = function (target) {
|
60
|
-
var i
|
66
|
+
var i;
|
67
|
+
var popovers = document.querySelectorAll('a');
|
68
|
+
|
61
69
|
for (; target && target !== document; target = target.parentNode) {
|
62
70
|
for (i = popovers.length; i--;) {
|
63
71
|
if (popovers[i] === target) {
|
@@ -100,7 +108,7 @@
|
|
100
108
|
popover = null;
|
101
109
|
}
|
102
110
|
|
103
|
-
if (popover
|
111
|
+
if (popover === null) {
|
104
112
|
return;
|
105
113
|
}
|
106
114
|
|
@@ -126,16 +134,17 @@
|
|
126
134
|
};
|
127
135
|
|
128
136
|
window.addEventListener('touchend', showHidePopover);
|
129
|
-
window.addEventListener('click', showHidePopover);
|
130
137
|
|
131
138
|
}());
|
132
139
|
|
133
|
-
/*
|
134
|
-
*
|
135
|
-
*
|
136
|
-
*
|
137
|
-
*
|
138
|
-
*
|
140
|
+
/* ========================================================================
|
141
|
+
* Ratchet: push.js v2.0.2
|
142
|
+
* http://goratchet.com/components#push
|
143
|
+
* ========================================================================
|
144
|
+
* inspired by @defunkt's jquery.pjax.js
|
145
|
+
* Copyright 2014 Connor Sears
|
146
|
+
* Licensed under MIT (https://github.com/twbs/ratchet/blob/master/LICENSE)
|
147
|
+
* ======================================================================== */
|
139
148
|
|
140
149
|
/* global _gaq: true */
|
141
150
|
|
@@ -145,7 +154,7 @@
|
|
145
154
|
var noop = function () {};
|
146
155
|
|
147
156
|
|
148
|
-
// Pushstate
|
157
|
+
// Pushstate caching
|
149
158
|
// ==================
|
150
159
|
|
151
160
|
var isScrolling;
|
@@ -153,9 +162,9 @@
|
|
153
162
|
var cacheMapping = sessionStorage;
|
154
163
|
var domCache = {};
|
155
164
|
var transitionMap = {
|
156
|
-
|
157
|
-
|
158
|
-
|
165
|
+
slideIn : 'slide-out',
|
166
|
+
slideOut : 'slide-in',
|
167
|
+
fade : 'fade'
|
159
168
|
};
|
160
169
|
|
161
170
|
var bars = {
|
@@ -524,7 +533,9 @@
|
|
524
533
|
};
|
525
534
|
|
526
535
|
var findTarget = function (target) {
|
527
|
-
var i
|
536
|
+
var i;
|
537
|
+
var toggles = document.querySelectorAll('a');
|
538
|
+
|
528
539
|
for (; target && target !== document; target = target.parentNode) {
|
529
540
|
for (i = toggles.length; i--;) {
|
530
541
|
if (toggles[i] === target) {
|
@@ -585,7 +596,8 @@
|
|
585
596
|
}
|
586
597
|
|
587
598
|
data.title = head.querySelector('title');
|
588
|
-
|
599
|
+
var text = 'innerText' in data.title ? 'innerText' : 'textContent';
|
600
|
+
data.title = data.title && data.title[text].trim();
|
589
601
|
|
590
602
|
if (options.transition) {
|
591
603
|
data = extendWithDom(data, '.content', body);
|
@@ -609,17 +621,21 @@
|
|
609
621
|
|
610
622
|
}());
|
611
623
|
|
612
|
-
/*
|
613
|
-
*
|
614
|
-
*
|
615
|
-
*
|
616
|
-
*
|
624
|
+
/* ========================================================================
|
625
|
+
* Ratchet: segmented-controllers.js v2.0.2
|
626
|
+
* http://goratchet.com/components#segmentedControls
|
627
|
+
* ========================================================================
|
628
|
+
* Copyright 2014 Connor Sears
|
629
|
+
* Licensed under MIT (https://github.com/twbs/ratchet/blob/master/LICENSE)
|
630
|
+
* ======================================================================== */
|
617
631
|
|
618
632
|
!(function () {
|
619
633
|
'use strict';
|
620
634
|
|
621
635
|
var getTarget = function (target) {
|
622
|
-
var i
|
636
|
+
var i;
|
637
|
+
var segmentedControls = document.querySelectorAll('.segmented-control .control-item');
|
638
|
+
|
623
639
|
for (; target && target !== document; target = target.parentNode) {
|
624
640
|
for (i = segmentedControls.length; i--;) {
|
625
641
|
if (segmentedControls[i] === target) {
|
@@ -670,12 +686,15 @@
|
|
670
686
|
|
671
687
|
window.addEventListener('click', function (e) { if (getTarget(e.target)) {e.preventDefault();} });
|
672
688
|
}());
|
673
|
-
|
674
|
-
|
675
|
-
*
|
676
|
-
*
|
677
|
-
*
|
678
|
-
|
689
|
+
|
690
|
+
/* ========================================================================
|
691
|
+
* Ratchet: sliders.js v2.0.2
|
692
|
+
* http://goratchet.com/components#sliders
|
693
|
+
* ========================================================================
|
694
|
+
Adapted from Brad Birdsall's swipe
|
695
|
+
* Copyright 2014 Connor Sears
|
696
|
+
* Licensed under MIT (https://github.com/twbs/ratchet/blob/master/LICENSE)
|
697
|
+
* ======================================================================== */
|
679
698
|
|
680
699
|
!(function () {
|
681
700
|
'use strict';
|
@@ -695,7 +714,9 @@
|
|
695
714
|
var scrollableArea;
|
696
715
|
|
697
716
|
var getSlider = function (target) {
|
698
|
-
var i
|
717
|
+
var i;
|
718
|
+
var sliders = document.querySelectorAll('.slider > .slide-group');
|
719
|
+
|
699
720
|
for (; target && target !== document; target = target.parentNode) {
|
700
721
|
for (i = sliders.length; i--;) {
|
701
722
|
if (sliders[i] === target) {
|
@@ -706,14 +727,16 @@
|
|
706
727
|
};
|
707
728
|
|
708
729
|
var getScroll = function () {
|
709
|
-
|
710
|
-
|
711
|
-
|
730
|
+
if ('webkitTransform' in slider.style) {
|
731
|
+
var translate3d = slider.style.webkitTransform.match(/translate3d\(([^,]*)/);
|
732
|
+
var ret = translate3d ? translate3d[1] : 0;
|
733
|
+
return parseInt(ret, 10);
|
734
|
+
}
|
712
735
|
};
|
713
736
|
|
714
737
|
var setSlideNumber = function (offset) {
|
715
738
|
var round = offset ? (deltaX < 0 ? 'ceil' : 'floor') : 'round';
|
716
|
-
slideNumber = Math[round](getScroll() / (
|
739
|
+
slideNumber = Math[round](getScroll() / (scrollableArea / slider.children.length));
|
717
740
|
slideNumber += offset;
|
718
741
|
slideNumber = Math.min(slideNumber, 0);
|
719
742
|
slideNumber = Math.max(-(slider.children.length - 1), slideNumber);
|
@@ -801,11 +824,14 @@
|
|
801
824
|
|
802
825
|
}());
|
803
826
|
|
804
|
-
/*
|
805
|
-
*
|
806
|
-
*
|
807
|
-
*
|
808
|
-
|
827
|
+
/* ========================================================================
|
828
|
+
* Ratchet: toggles.js v2.0.2
|
829
|
+
* http://goratchet.com/components#toggles
|
830
|
+
* ========================================================================
|
831
|
+
Adapted from Brad Birdsall's swipe
|
832
|
+
* Copyright 2014 Connor Sears
|
833
|
+
* Licensed under MIT (https://github.com/twbs/ratchet/blob/master/LICENSE)
|
834
|
+
* ======================================================================== */
|
809
835
|
|
810
836
|
!(function () {
|
811
837
|
'use strict';
|
@@ -816,7 +842,9 @@
|
|
816
842
|
var toggle = false;
|
817
843
|
|
818
844
|
var findToggle = function (target) {
|
819
|
-
var i
|
845
|
+
var i;
|
846
|
+
var toggles = document.querySelectorAll('.toggle');
|
847
|
+
|
820
848
|
for (; target && target !== document; target = target.parentNode) {
|
821
849
|
for (i = toggles.length; i--;) {
|
822
850
|
if (toggles[i] === target) {
|
@@ -879,7 +907,7 @@
|
|
879
907
|
|
880
908
|
handle.style.webkitTransform = 'translate3d(' + distanceX + 'px,0,0)';
|
881
909
|
|
882
|
-
toggle.classList[(distanceX > (toggleWidth/2 - handleWidth/2)) ? 'add' : 'remove']('active');
|
910
|
+
toggle.classList[(distanceX > (toggleWidth / 2 - handleWidth / 2)) ? 'add' : 'remove']('active');
|
883
911
|
});
|
884
912
|
|
885
913
|
window.addEventListener('touchend', function (e) {
|
@@ -891,7 +919,7 @@
|
|
891
919
|
var toggleWidth = toggle.clientWidth;
|
892
920
|
var handleWidth = handle.clientWidth;
|
893
921
|
var offset = (toggleWidth - handleWidth);
|
894
|
-
var slideOn = (!touchMove && !toggle.classList.contains('active')) || (touchMove && (distanceX > (toggleWidth/2 - handleWidth/2)));
|
922
|
+
var slideOn = (!touchMove && !toggle.classList.contains('active')) || (touchMove && (distanceX > (toggleWidth / 2 - handleWidth / 2)));
|
895
923
|
|
896
924
|
if (slideOn) {
|
897
925
|
handle.style.webkitTransform = 'translate3d(' + offset + 'px,0,0)';
|
@@ -0,0 +1,65 @@
|
|
1
|
+
/* ========================================================================
|
2
|
+
* Ratchet: segmented-controllers.js v2.0.2
|
3
|
+
* http://goratchet.com/components#segmentedControls
|
4
|
+
* ========================================================================
|
5
|
+
* Copyright 2014 Connor Sears
|
6
|
+
* Licensed under MIT (https://github.com/twbs/ratchet/blob/master/LICENSE)
|
7
|
+
* ======================================================================== */
|
8
|
+
|
9
|
+
!(function () {
|
10
|
+
'use strict';
|
11
|
+
|
12
|
+
var getTarget = function (target) {
|
13
|
+
var i;
|
14
|
+
var segmentedControls = document.querySelectorAll('.segmented-control .control-item');
|
15
|
+
|
16
|
+
for (; target && target !== document; target = target.parentNode) {
|
17
|
+
for (i = segmentedControls.length; i--;) {
|
18
|
+
if (segmentedControls[i] === target) {
|
19
|
+
return target;
|
20
|
+
}
|
21
|
+
}
|
22
|
+
}
|
23
|
+
};
|
24
|
+
|
25
|
+
window.addEventListener('touchend', function (e) {
|
26
|
+
var activeTab;
|
27
|
+
var activeBodies;
|
28
|
+
var targetBody;
|
29
|
+
var targetTab = getTarget(e.target);
|
30
|
+
var className = 'active';
|
31
|
+
var classSelector = '.' + className;
|
32
|
+
|
33
|
+
if (!targetTab) {
|
34
|
+
return;
|
35
|
+
}
|
36
|
+
|
37
|
+
activeTab = targetTab.parentNode.querySelector(classSelector);
|
38
|
+
|
39
|
+
if (activeTab) {
|
40
|
+
activeTab.classList.remove(className);
|
41
|
+
}
|
42
|
+
|
43
|
+
targetTab.classList.add(className);
|
44
|
+
|
45
|
+
if (!targetTab.hash) {
|
46
|
+
return;
|
47
|
+
}
|
48
|
+
|
49
|
+
targetBody = document.querySelector(targetTab.hash);
|
50
|
+
|
51
|
+
if (!targetBody) {
|
52
|
+
return;
|
53
|
+
}
|
54
|
+
|
55
|
+
activeBodies = targetBody.parentNode.querySelectorAll(classSelector);
|
56
|
+
|
57
|
+
for (var i = 0; i < activeBodies.length; i++) {
|
58
|
+
activeBodies[i].classList.remove(className);
|
59
|
+
}
|
60
|
+
|
61
|
+
targetBody.classList.add(className);
|
62
|
+
});
|
63
|
+
|
64
|
+
window.addEventListener('click', function (e) { if (getTarget(e.target)) {e.preventDefault();} });
|
65
|
+
}());
|
@@ -0,0 +1,136 @@
|
|
1
|
+
/* ========================================================================
|
2
|
+
* Ratchet: sliders.js v2.0.2
|
3
|
+
* http://goratchet.com/components#sliders
|
4
|
+
* ========================================================================
|
5
|
+
Adapted from Brad Birdsall's swipe
|
6
|
+
* Copyright 2014 Connor Sears
|
7
|
+
* Licensed under MIT (https://github.com/twbs/ratchet/blob/master/LICENSE)
|
8
|
+
* ======================================================================== */
|
9
|
+
|
10
|
+
!(function () {
|
11
|
+
'use strict';
|
12
|
+
|
13
|
+
var pageX;
|
14
|
+
var pageY;
|
15
|
+
var slider;
|
16
|
+
var deltaX;
|
17
|
+
var deltaY;
|
18
|
+
var offsetX;
|
19
|
+
var lastSlide;
|
20
|
+
var startTime;
|
21
|
+
var resistance;
|
22
|
+
var sliderWidth;
|
23
|
+
var slideNumber;
|
24
|
+
var isScrolling;
|
25
|
+
var scrollableArea;
|
26
|
+
|
27
|
+
var getSlider = function (target) {
|
28
|
+
var i;
|
29
|
+
var sliders = document.querySelectorAll('.slider > .slide-group');
|
30
|
+
|
31
|
+
for (; target && target !== document; target = target.parentNode) {
|
32
|
+
for (i = sliders.length; i--;) {
|
33
|
+
if (sliders[i] === target) {
|
34
|
+
return target;
|
35
|
+
}
|
36
|
+
}
|
37
|
+
}
|
38
|
+
};
|
39
|
+
|
40
|
+
var getScroll = function () {
|
41
|
+
if ('webkitTransform' in slider.style) {
|
42
|
+
var translate3d = slider.style.webkitTransform.match(/translate3d\(([^,]*)/);
|
43
|
+
var ret = translate3d ? translate3d[1] : 0;
|
44
|
+
return parseInt(ret, 10);
|
45
|
+
}
|
46
|
+
};
|
47
|
+
|
48
|
+
var setSlideNumber = function (offset) {
|
49
|
+
var round = offset ? (deltaX < 0 ? 'ceil' : 'floor') : 'round';
|
50
|
+
slideNumber = Math[round](getScroll() / (scrollableArea / slider.children.length));
|
51
|
+
slideNumber += offset;
|
52
|
+
slideNumber = Math.min(slideNumber, 0);
|
53
|
+
slideNumber = Math.max(-(slider.children.length - 1), slideNumber);
|
54
|
+
};
|
55
|
+
|
56
|
+
var onTouchStart = function (e) {
|
57
|
+
slider = getSlider(e.target);
|
58
|
+
|
59
|
+
if (!slider) {
|
60
|
+
return;
|
61
|
+
}
|
62
|
+
|
63
|
+
var firstItem = slider.querySelector('.slide');
|
64
|
+
|
65
|
+
scrollableArea = firstItem.offsetWidth * slider.children.length;
|
66
|
+
isScrolling = undefined;
|
67
|
+
sliderWidth = slider.offsetWidth;
|
68
|
+
resistance = 1;
|
69
|
+
lastSlide = -(slider.children.length - 1);
|
70
|
+
startTime = +new Date();
|
71
|
+
pageX = e.touches[0].pageX;
|
72
|
+
pageY = e.touches[0].pageY;
|
73
|
+
deltaX = 0;
|
74
|
+
deltaY = 0;
|
75
|
+
|
76
|
+
setSlideNumber(0);
|
77
|
+
|
78
|
+
slider.style['-webkit-transition-duration'] = 0;
|
79
|
+
};
|
80
|
+
|
81
|
+
var onTouchMove = function (e) {
|
82
|
+
if (e.touches.length > 1 || !slider) {
|
83
|
+
return; // Exit if a pinch || no slider
|
84
|
+
}
|
85
|
+
|
86
|
+
deltaX = e.touches[0].pageX - pageX;
|
87
|
+
deltaY = e.touches[0].pageY - pageY;
|
88
|
+
pageX = e.touches[0].pageX;
|
89
|
+
pageY = e.touches[0].pageY;
|
90
|
+
|
91
|
+
if (typeof isScrolling === 'undefined') {
|
92
|
+
isScrolling = Math.abs(deltaY) > Math.abs(deltaX);
|
93
|
+
}
|
94
|
+
|
95
|
+
if (isScrolling) {
|
96
|
+
return;
|
97
|
+
}
|
98
|
+
|
99
|
+
offsetX = (deltaX / resistance) + getScroll();
|
100
|
+
|
101
|
+
e.preventDefault();
|
102
|
+
|
103
|
+
resistance = slideNumber === 0 && deltaX > 0 ? (pageX / sliderWidth) + 1.25 :
|
104
|
+
slideNumber === lastSlide && deltaX < 0 ? (Math.abs(pageX) / sliderWidth) + 1.25 : 1;
|
105
|
+
|
106
|
+
slider.style.webkitTransform = 'translate3d(' + offsetX + 'px,0,0)';
|
107
|
+
};
|
108
|
+
|
109
|
+
var onTouchEnd = function (e) {
|
110
|
+
if (!slider || isScrolling) {
|
111
|
+
return;
|
112
|
+
}
|
113
|
+
|
114
|
+
setSlideNumber(
|
115
|
+
(+new Date()) - startTime < 1000 && Math.abs(deltaX) > 15 ? (deltaX < 0 ? -1 : 1) : 0
|
116
|
+
);
|
117
|
+
|
118
|
+
offsetX = slideNumber * sliderWidth;
|
119
|
+
|
120
|
+
slider.style['-webkit-transition-duration'] = '.2s';
|
121
|
+
slider.style.webkitTransform = 'translate3d(' + offsetX + 'px,0,0)';
|
122
|
+
|
123
|
+
e = new CustomEvent('slide', {
|
124
|
+
detail: { slideNumber: Math.abs(slideNumber) },
|
125
|
+
bubbles: true,
|
126
|
+
cancelable: true
|
127
|
+
});
|
128
|
+
|
129
|
+
slider.parentNode.dispatchEvent(e);
|
130
|
+
};
|
131
|
+
|
132
|
+
window.addEventListener('touchstart', onTouchStart);
|
133
|
+
window.addEventListener('touchmove', onTouchMove);
|
134
|
+
window.addEventListener('touchend', onTouchEnd);
|
135
|
+
|
136
|
+
}());
|