swup 2.0.16 → 2.0.17

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/swup.js CHANGED
@@ -91,7 +91,7 @@ return /******/ (function(modules) { // webpackBootstrap
91
91
  /******/
92
92
  /******/
93
93
  /******/ // Load entry module and return exports
94
- /******/ return __webpack_require__(__webpack_require__.s = 2);
94
+ /******/ return __webpack_require__(__webpack_require__.s = 3);
95
95
  /******/ })
96
96
  /************************************************************************/
97
97
  /******/ ([
@@ -101,6 +101,71 @@ return /******/ (function(modules) { // webpackBootstrap
101
101
  "use strict";
102
102
 
103
103
 
104
+ Object.defineProperty(exports, "__esModule", {
105
+ value: true
106
+ });
107
+ exports.Link = exports.markSwupElements = exports.normalizeUrl = exports.getCurrentUrl = exports.transitionProperty = exports.transitionEnd = exports.fetch = exports.getDataFromHtml = exports.createHistoryRecord = exports.classify = undefined;
108
+
109
+ var _classify = __webpack_require__(7);
110
+
111
+ var _classify2 = _interopRequireDefault(_classify);
112
+
113
+ var _createHistoryRecord = __webpack_require__(8);
114
+
115
+ var _createHistoryRecord2 = _interopRequireDefault(_createHistoryRecord);
116
+
117
+ var _getDataFromHtml = __webpack_require__(9);
118
+
119
+ var _getDataFromHtml2 = _interopRequireDefault(_getDataFromHtml);
120
+
121
+ var _fetch = __webpack_require__(10);
122
+
123
+ var _fetch2 = _interopRequireDefault(_fetch);
124
+
125
+ var _transitionEnd = __webpack_require__(11);
126
+
127
+ var _transitionEnd2 = _interopRequireDefault(_transitionEnd);
128
+
129
+ var _transitionProperty = __webpack_require__(12);
130
+
131
+ var _transitionProperty2 = _interopRequireDefault(_transitionProperty);
132
+
133
+ var _getCurrentUrl = __webpack_require__(13);
134
+
135
+ var _getCurrentUrl2 = _interopRequireDefault(_getCurrentUrl);
136
+
137
+ var _normalizeUrl = __webpack_require__(14);
138
+
139
+ var _normalizeUrl2 = _interopRequireDefault(_normalizeUrl);
140
+
141
+ var _markSwupElements = __webpack_require__(15);
142
+
143
+ var _markSwupElements2 = _interopRequireDefault(_markSwupElements);
144
+
145
+ var _Link = __webpack_require__(2);
146
+
147
+ var _Link2 = _interopRequireDefault(_Link);
148
+
149
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
150
+
151
+ var classify = exports.classify = _classify2.default;
152
+ var createHistoryRecord = exports.createHistoryRecord = _createHistoryRecord2.default;
153
+ var getDataFromHtml = exports.getDataFromHtml = _getDataFromHtml2.default;
154
+ var fetch = exports.fetch = _fetch2.default;
155
+ var transitionEnd = exports.transitionEnd = _transitionEnd2.default;
156
+ var transitionProperty = exports.transitionProperty = _transitionProperty2.default;
157
+ var getCurrentUrl = exports.getCurrentUrl = _getCurrentUrl2.default;
158
+ var normalizeUrl = exports.normalizeUrl = _normalizeUrl2.default;
159
+ var markSwupElements = exports.markSwupElements = _markSwupElements2.default;
160
+ var Link = exports.Link = _Link2.default;
161
+
162
+ /***/ }),
163
+ /* 1 */
164
+ /***/ (function(module, exports, __webpack_require__) {
165
+
166
+ "use strict";
167
+
168
+
104
169
  Object.defineProperty(exports, "__esModule", {
105
170
  value: true
106
171
  });
@@ -133,68 +198,75 @@ var escapeCssIdentifier = exports.escapeCssIdentifier = function escapeCssIdenti
133
198
  };
134
199
 
135
200
  /***/ }),
136
- /* 1 */
201
+ /* 2 */
137
202
  /***/ (function(module, exports, __webpack_require__) {
138
203
 
139
204
  "use strict";
140
205
 
141
206
 
142
207
  Object.defineProperty(exports, "__esModule", {
143
- value: true
208
+ value: true
144
209
  });
145
- exports.Link = exports.markSwupElements = exports.getCurrentUrl = exports.transitionEnd = exports.fetch = exports.getDataFromHtml = exports.createHistoryRecord = exports.classify = undefined;
146
-
147
- var _classify = __webpack_require__(7);
148
-
149
- var _classify2 = _interopRequireDefault(_classify);
150
-
151
- var _createHistoryRecord = __webpack_require__(8);
152
-
153
- var _createHistoryRecord2 = _interopRequireDefault(_createHistoryRecord);
154
-
155
- var _getDataFromHtml = __webpack_require__(9);
156
-
157
- var _getDataFromHtml2 = _interopRequireDefault(_getDataFromHtml);
158
-
159
- var _fetch = __webpack_require__(10);
160
-
161
- var _fetch2 = _interopRequireDefault(_fetch);
162
210
 
163
- var _transitionEnd = __webpack_require__(11);
164
-
165
- var _transitionEnd2 = _interopRequireDefault(_transitionEnd);
211
+ var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
166
212
 
167
- var _getCurrentUrl = __webpack_require__(12);
213
+ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
168
214
 
169
- var _getCurrentUrl2 = _interopRequireDefault(_getCurrentUrl);
215
+ var Link = function () {
216
+ function Link(elementOrUrl) {
217
+ _classCallCheck(this, Link);
170
218
 
171
- var _markSwupElements = __webpack_require__(13);
219
+ if (elementOrUrl instanceof Element || elementOrUrl instanceof SVGElement) {
220
+ this.link = elementOrUrl;
221
+ } else {
222
+ this.link = document.createElement('a');
223
+ this.link.href = elementOrUrl;
224
+ }
225
+ }
172
226
 
173
- var _markSwupElements2 = _interopRequireDefault(_markSwupElements);
227
+ _createClass(Link, [{
228
+ key: 'getPath',
229
+ value: function getPath() {
230
+ var path = this.link.pathname;
231
+ if (path[0] !== '/') {
232
+ path = '/' + path;
233
+ }
234
+ return path;
235
+ }
236
+ }, {
237
+ key: 'getAddress',
238
+ value: function getAddress() {
239
+ var path = this.link.pathname + this.link.search;
174
240
 
175
- var _Link = __webpack_require__(14);
241
+ if (this.link.getAttribute('xlink:href')) {
242
+ path = this.link.getAttribute('xlink:href');
243
+ }
176
244
 
177
- var _Link2 = _interopRequireDefault(_Link);
245
+ if (path[0] !== '/') {
246
+ path = '/' + path;
247
+ }
248
+ return path;
249
+ }
250
+ }, {
251
+ key: 'getHash',
252
+ value: function getHash() {
253
+ return this.link.hash;
254
+ }
255
+ }]);
178
256
 
179
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
257
+ return Link;
258
+ }();
180
259
 
181
- var classify = exports.classify = _classify2.default;
182
- var createHistoryRecord = exports.createHistoryRecord = _createHistoryRecord2.default;
183
- var getDataFromHtml = exports.getDataFromHtml = _getDataFromHtml2.default;
184
- var fetch = exports.fetch = _fetch2.default;
185
- var transitionEnd = exports.transitionEnd = _transitionEnd2.default;
186
- var getCurrentUrl = exports.getCurrentUrl = _getCurrentUrl2.default;
187
- var markSwupElements = exports.markSwupElements = _markSwupElements2.default;
188
- var Link = exports.Link = _Link2.default;
260
+ exports.default = Link;
189
261
 
190
262
  /***/ }),
191
- /* 2 */
263
+ /* 3 */
192
264
  /***/ (function(module, exports, __webpack_require__) {
193
265
 
194
266
  "use strict";
195
267
 
196
268
 
197
- var _index = __webpack_require__(3);
269
+ var _index = __webpack_require__(4);
198
270
 
199
271
  var _index2 = _interopRequireDefault(_index);
200
272
 
@@ -203,7 +275,7 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de
203
275
  module.exports = _index2.default; // this is here for webpack to expose Swup as window.Swup
204
276
 
205
277
  /***/ }),
206
- /* 3 */
278
+ /* 4 */
207
279
  /***/ (function(module, exports, __webpack_require__) {
208
280
 
209
281
  "use strict";
@@ -220,55 +292,55 @@ var _createClass = function () { function defineProperties(target, props) { for
220
292
  // modules
221
293
 
222
294
 
223
- var _delegateIt = __webpack_require__(4);
295
+ var _delegateIt = __webpack_require__(5);
224
296
 
225
297
  var _delegateIt2 = _interopRequireDefault(_delegateIt);
226
298
 
227
- var _Cache = __webpack_require__(5);
299
+ var _Cache = __webpack_require__(6);
228
300
 
229
301
  var _Cache2 = _interopRequireDefault(_Cache);
230
302
 
231
- var _loadPage = __webpack_require__(6);
303
+ var _loadPage = __webpack_require__(16);
232
304
 
233
305
  var _loadPage2 = _interopRequireDefault(_loadPage);
234
306
 
235
- var _renderPage = __webpack_require__(15);
307
+ var _renderPage = __webpack_require__(17);
236
308
 
237
309
  var _renderPage2 = _interopRequireDefault(_renderPage);
238
310
 
239
- var _triggerEvent = __webpack_require__(16);
311
+ var _triggerEvent = __webpack_require__(18);
240
312
 
241
313
  var _triggerEvent2 = _interopRequireDefault(_triggerEvent);
242
314
 
243
- var _on = __webpack_require__(17);
315
+ var _on = __webpack_require__(19);
244
316
 
245
317
  var _on2 = _interopRequireDefault(_on);
246
318
 
247
- var _off = __webpack_require__(18);
319
+ var _off = __webpack_require__(20);
248
320
 
249
321
  var _off2 = _interopRequireDefault(_off);
250
322
 
251
- var _updateTransition = __webpack_require__(19);
323
+ var _updateTransition = __webpack_require__(21);
252
324
 
253
325
  var _updateTransition2 = _interopRequireDefault(_updateTransition);
254
326
 
255
- var _getAnchorElement = __webpack_require__(20);
327
+ var _getAnchorElement = __webpack_require__(22);
256
328
 
257
329
  var _getAnchorElement2 = _interopRequireDefault(_getAnchorElement);
258
330
 
259
- var _getAnimationPromises = __webpack_require__(21);
331
+ var _getAnimationPromises = __webpack_require__(23);
260
332
 
261
333
  var _getAnimationPromises2 = _interopRequireDefault(_getAnimationPromises);
262
334
 
263
- var _getPageData = __webpack_require__(22);
335
+ var _getPageData = __webpack_require__(24);
264
336
 
265
337
  var _getPageData2 = _interopRequireDefault(_getPageData);
266
338
 
267
- var _plugins = __webpack_require__(23);
339
+ var _plugins = __webpack_require__(25);
268
340
 
269
- var _utils = __webpack_require__(0);
341
+ var _utils = __webpack_require__(1);
270
342
 
271
- var _helpers = __webpack_require__(1);
343
+ var _helpers = __webpack_require__(0);
272
344
 
273
345
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
274
346
 
@@ -374,9 +446,9 @@ var Swup = function () {
374
446
  window.addEventListener('popstate', this.boundPopStateHandler);
375
447
 
376
448
  // initial save to cache
377
- var page = (0, _helpers.getDataFromHtml)(document.documentElement.outerHTML, this.options.containers);
378
- page.url = page.responseURL = (0, _helpers.getCurrentUrl)();
379
449
  if (this.options.cache) {
450
+ var page = (0, _helpers.getDataFromHtml)(document.documentElement.outerHTML, this.options.containers);
451
+ page.url = page.responseURL = (0, _helpers.getCurrentUrl)();
380
452
  this.cache.cacheUrl(page);
381
453
  }
382
454
 
@@ -506,7 +578,7 @@ var Swup = function () {
506
578
  exports.default = Swup;
507
579
 
508
580
  /***/ }),
509
- /* 4 */
581
+ /* 5 */
510
582
  /***/ (function(module, __webpack_exports__, __webpack_require__) {
511
583
 
512
584
  "use strict";
@@ -599,7 +671,7 @@ function delegate(base, selector, type, callback, options) {
599
671
 
600
672
 
601
673
  /***/ }),
602
- /* 5 */
674
+ /* 6 */
603
675
  /***/ (function(module, exports, __webpack_require__) {
604
676
 
605
677
  "use strict";
@@ -608,9 +680,12 @@ function delegate(base, selector, type, callback, options) {
608
680
  Object.defineProperty(exports, "__esModule", {
609
681
  value: true
610
682
  });
683
+ exports.Cache = undefined;
611
684
 
612
685
  var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
613
686
 
687
+ var _helpers = __webpack_require__(0);
688
+
614
689
  function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
615
690
 
616
691
  var Cache = exports.Cache = function () {
@@ -624,6 +699,7 @@ var Cache = exports.Cache = function () {
624
699
  _createClass(Cache, [{
625
700
  key: 'cacheUrl',
626
701
  value: function cacheUrl(page) {
702
+ page.url = (0, _helpers.normalizeUrl)(page.url);
627
703
  if (page.url in this.pages === false) {
628
704
  this.pages[page.url] = page;
629
705
  }
@@ -633,16 +709,18 @@ var Cache = exports.Cache = function () {
633
709
  }, {
634
710
  key: 'getPage',
635
711
  value: function getPage(url) {
712
+ url = (0, _helpers.normalizeUrl)(url);
636
713
  return this.pages[url];
637
714
  }
638
715
  }, {
639
716
  key: 'getCurrentPage',
640
717
  value: function getCurrentPage() {
641
- return this.getPage(window.location.pathname + window.location.search);
718
+ return this.getPage((0, _helpers.getCurrentUrl)());
642
719
  }
643
720
  }, {
644
721
  key: 'exists',
645
722
  value: function exists(url) {
723
+ url = (0, _helpers.normalizeUrl)(url);
646
724
  return url in this.pages;
647
725
  }
648
726
  }, {
@@ -664,130 +742,6 @@ var Cache = exports.Cache = function () {
664
742
 
665
743
  exports.default = Cache;
666
744
 
667
- /***/ }),
668
- /* 6 */
669
- /***/ (function(module, exports, __webpack_require__) {
670
-
671
- "use strict";
672
-
673
-
674
- Object.defineProperty(exports, "__esModule", {
675
- value: true
676
- });
677
-
678
- var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };
679
-
680
- var _helpers = __webpack_require__(1);
681
-
682
- var loadPage = function loadPage(data, popstate) {
683
- var _this = this;
684
-
685
- // create array for storing animation promises
686
- var animationPromises = [],
687
- xhrPromise = void 0;
688
- var animateOut = function animateOut() {
689
- _this.triggerEvent('animationOutStart');
690
-
691
- // handle classes
692
- document.documentElement.classList.add('is-changing');
693
- document.documentElement.classList.add('is-leaving');
694
- document.documentElement.classList.add('is-animating');
695
- if (popstate) {
696
- document.documentElement.classList.add('is-popstate');
697
- }
698
- document.documentElement.classList.add('to-' + (0, _helpers.classify)(data.url));
699
-
700
- // animation promise stuff
701
- animationPromises = _this.getAnimationPromises('out');
702
- Promise.all(animationPromises).then(function () {
703
- _this.triggerEvent('animationOutDone');
704
- });
705
-
706
- // create history record if this is not a popstate call
707
- if (!popstate) {
708
- // create pop element with or without anchor
709
- var state = void 0;
710
- if (_this.scrollToElement != null) {
711
- state = data.url + _this.scrollToElement;
712
- } else {
713
- state = data.url;
714
- }
715
-
716
- (0, _helpers.createHistoryRecord)(state);
717
- }
718
- };
719
-
720
- this.triggerEvent('transitionStart', popstate);
721
-
722
- // set transition object
723
- if (data.customTransition != null) {
724
- this.updateTransition(window.location.pathname, data.url, data.customTransition);
725
- document.documentElement.classList.add('to-' + (0, _helpers.classify)(data.customTransition));
726
- } else {
727
- this.updateTransition(window.location.pathname, data.url);
728
- }
729
-
730
- // start/skip animation
731
- if (!popstate || this.options.animateHistoryBrowsing) {
732
- animateOut();
733
- } else {
734
- this.triggerEvent('animationSkipped');
735
- }
736
-
737
- // start/skip loading of page
738
- if (this.cache.exists(data.url)) {
739
- xhrPromise = new Promise(function (resolve) {
740
- resolve();
741
- });
742
- this.triggerEvent('pageRetrievedFromCache');
743
- } else {
744
- if (!this.preloadPromise || this.preloadPromise.route != data.url) {
745
- xhrPromise = new Promise(function (resolve, reject) {
746
- (0, _helpers.fetch)(_extends({}, data, { headers: _this.options.requestHeaders }), function (response) {
747
- if (response.status === 500) {
748
- _this.triggerEvent('serverError');
749
- reject(data.url);
750
- return;
751
- } else {
752
- // get json data
753
- var page = _this.getPageData(response);
754
- if (page != null) {
755
- page.url = data.url;
756
- } else {
757
- reject(data.url);
758
- return;
759
- }
760
- // render page
761
- _this.cache.cacheUrl(page);
762
- _this.triggerEvent('pageLoaded');
763
- }
764
- resolve();
765
- });
766
- });
767
- } else {
768
- xhrPromise = this.preloadPromise;
769
- }
770
- }
771
-
772
- // when everything is ready, handle the outcome
773
- Promise.all(animationPromises.concat([xhrPromise])).then(function () {
774
- // render page
775
- _this.renderPage(_this.cache.getPage(data.url), popstate);
776
- _this.preloadPromise = null;
777
- }).catch(function (errorUrl) {
778
- // rewrite the skipPopStateHandling function to redirect manually when the history.go is processed
779
- _this.options.skipPopStateHandling = function () {
780
- window.location = errorUrl;
781
- return true;
782
- };
783
-
784
- // go back to the actual page were still at
785
- window.history.go(-1);
786
- });
787
- };
788
-
789
- exports.default = loadPage;
790
-
791
745
  /***/ }),
792
746
  /* 7 */
793
747
  /***/ (function(module, exports, __webpack_require__) {
@@ -843,34 +797,27 @@ Object.defineProperty(exports, "__esModule", {
843
797
  value: true
844
798
  });
845
799
 
846
- var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
847
-
848
- var _utils = __webpack_require__(0);
800
+ var _utils = __webpack_require__(1);
849
801
 
850
802
  var getDataFromHtml = function getDataFromHtml(html, containers) {
851
803
  var fakeDom = document.createElement('html');
852
804
  fakeDom.innerHTML = html;
853
805
  var blocks = [];
854
806
 
855
- var _loop = function _loop(i) {
856
- if (fakeDom.querySelector(containers[i]) == null) {
857
- // page in invalid
858
- return {
859
- v: null
860
- };
807
+ containers.forEach(function (selector) {
808
+ if ((0, _utils.query)(selector, fakeDom) == null) {
809
+ console.error('Container ' + selector + ' not found on page.');
810
+ return null;
861
811
  } else {
862
- (0, _utils.queryAll)(containers[i]).forEach(function (item, index) {
863
- (0, _utils.queryAll)(containers[i], fakeDom)[index].setAttribute('data-swup', blocks.length); // marks element with data-swup
864
- blocks.push((0, _utils.queryAll)(containers[i], fakeDom)[index].outerHTML);
812
+ if ((0, _utils.queryAll)(selector).length !== (0, _utils.queryAll)(selector, fakeDom).length) {
813
+ console.warn('Mismatched number of containers found on new page.');
814
+ }
815
+ (0, _utils.queryAll)(selector).forEach(function (item, index) {
816
+ (0, _utils.queryAll)(selector, fakeDom)[index].setAttribute('data-swup', blocks.length);
817
+ blocks.push((0, _utils.queryAll)(selector, fakeDom)[index].outerHTML);
865
818
  });
866
819
  }
867
- };
868
-
869
- for (var i = 0; i < containers.length; i++) {
870
- var _ret = _loop(i);
871
-
872
- if ((typeof _ret === 'undefined' ? 'undefined' : _typeof(_ret)) === "object") return _ret.v;
873
- }
820
+ });
874
821
 
875
822
  var json = {
876
823
  title: fakeDom.querySelector('title').innerText,
@@ -946,22 +893,11 @@ Object.defineProperty(exports, "__esModule", {
946
893
  value: true
947
894
  });
948
895
  var transitionEnd = function transitionEnd() {
949
- var el = document.createElement('div');
950
-
951
- var transEndEventNames = {
952
- WebkitTransition: 'webkitTransitionEnd',
953
- MozTransition: 'transitionend',
954
- OTransition: 'oTransitionEnd otransitionend',
955
- transition: 'transitionend'
956
- };
957
-
958
- for (var name in transEndEventNames) {
959
- if (el.style[name] !== undefined) {
960
- return transEndEventNames[name];
961
- }
896
+ if (window.ontransitionend === undefined && window.onwebkittransitionend !== undefined) {
897
+ return 'webkitTransitionEnd';
898
+ } else {
899
+ return 'transitionend';
962
900
  }
963
-
964
- return false;
965
901
  };
966
902
 
967
903
  exports.default = transitionEnd;
@@ -973,6 +909,26 @@ exports.default = transitionEnd;
973
909
  "use strict";
974
910
 
975
911
 
912
+ Object.defineProperty(exports, "__esModule", {
913
+ value: true
914
+ });
915
+ var transitionProperty = function transitionProperty() {
916
+ if (window.ontransitionend === undefined && window.onwebkittransitionend !== undefined) {
917
+ return 'WebkitTransition';
918
+ } else {
919
+ return 'transition';
920
+ }
921
+ };
922
+
923
+ exports.default = transitionProperty;
924
+
925
+ /***/ }),
926
+ /* 13 */
927
+ /***/ (function(module, exports, __webpack_require__) {
928
+
929
+ "use strict";
930
+
931
+
976
932
  Object.defineProperty(exports, "__esModule", {
977
933
  value: true
978
934
  });
@@ -983,7 +939,30 @@ var getCurrentUrl = function getCurrentUrl() {
983
939
  exports.default = getCurrentUrl;
984
940
 
985
941
  /***/ }),
986
- /* 13 */
942
+ /* 14 */
943
+ /***/ (function(module, exports, __webpack_require__) {
944
+
945
+ "use strict";
946
+
947
+
948
+ Object.defineProperty(exports, "__esModule", {
949
+ value: true
950
+ });
951
+
952
+ var _Link = __webpack_require__(2);
953
+
954
+ var _Link2 = _interopRequireDefault(_Link);
955
+
956
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
957
+
958
+ var normalizeUrl = function normalizeUrl(url) {
959
+ return new _Link2.default(url).getAddress();
960
+ };
961
+
962
+ exports.default = normalizeUrl;
963
+
964
+ /***/ }),
965
+ /* 15 */
987
966
  /***/ (function(module, exports, __webpack_require__) {
988
967
 
989
968
  "use strict";
@@ -993,31 +972,27 @@ Object.defineProperty(exports, "__esModule", {
993
972
  value: true
994
973
  });
995
974
 
996
- var _utils = __webpack_require__(0);
975
+ var _utils = __webpack_require__(1);
997
976
 
998
977
  var markSwupElements = function markSwupElements(element, containers) {
999
978
  var blocks = 0;
1000
979
 
1001
- var _loop = function _loop(i) {
1002
- if (element.querySelector(containers[i]) == null) {
1003
- console.warn('Element ' + containers[i] + ' is not in current page.');
980
+ containers.forEach(function (selector) {
981
+ if ((0, _utils.query)(selector, element) == null) {
982
+ console.error('Container ' + selector + ' not found on page.');
1004
983
  } else {
1005
- (0, _utils.queryAll)(containers[i]).forEach(function (item, index) {
1006
- (0, _utils.queryAll)(containers[i], element)[index].setAttribute('data-swup', blocks);
984
+ (0, _utils.queryAll)(selector).forEach(function (item, index) {
985
+ (0, _utils.queryAll)(selector, element)[index].setAttribute('data-swup', blocks);
1007
986
  blocks++;
1008
987
  });
1009
988
  }
1010
- };
1011
-
1012
- for (var i = 0; i < containers.length; i++) {
1013
- _loop(i);
1014
- }
989
+ });
1015
990
  };
1016
991
 
1017
992
  exports.default = markSwupElements;
1018
993
 
1019
994
  /***/ }),
1020
- /* 14 */
995
+ /* 16 */
1021
996
  /***/ (function(module, exports, __webpack_require__) {
1022
997
 
1023
998
  "use strict";
@@ -1027,59 +1002,121 @@ Object.defineProperty(exports, "__esModule", {
1027
1002
  value: true
1028
1003
  });
1029
1004
 
1030
- var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
1005
+ var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };
1031
1006
 
1032
- function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
1007
+ var _helpers = __webpack_require__(0);
1033
1008
 
1034
- var Link = function () {
1035
- function Link(elementOrUrl) {
1036
- _classCallCheck(this, Link);
1009
+ var loadPage = function loadPage(data, popstate) {
1010
+ var _this = this;
1037
1011
 
1038
- if (elementOrUrl instanceof Element || elementOrUrl instanceof SVGElement) {
1039
- this.link = elementOrUrl;
1040
- } else {
1041
- this.link = document.createElement('a');
1042
- this.link.href = elementOrUrl;
1043
- }
1044
- }
1012
+ // create array for storing animation promises
1013
+ var animationPromises = [],
1014
+ xhrPromise = void 0;
1015
+ var animateOut = function animateOut() {
1016
+ _this.triggerEvent('animationOutStart');
1045
1017
 
1046
- _createClass(Link, [{
1047
- key: 'getPath',
1048
- value: function getPath() {
1049
- var path = this.link.pathname;
1050
- if (path[0] !== '/') {
1051
- path = '/' + path;
1052
- }
1053
- return path;
1018
+ // handle classes
1019
+ document.documentElement.classList.add('is-changing');
1020
+ document.documentElement.classList.add('is-leaving');
1021
+ document.documentElement.classList.add('is-animating');
1022
+ if (popstate) {
1023
+ document.documentElement.classList.add('is-popstate');
1054
1024
  }
1055
- }, {
1056
- key: 'getAddress',
1057
- value: function getAddress() {
1058
- var path = this.link.pathname + this.link.search;
1025
+ document.documentElement.classList.add('to-' + (0, _helpers.classify)(data.url));
1059
1026
 
1060
- if (this.link.getAttribute('xlink:href')) {
1061
- path = this.link.getAttribute('xlink:href');
1062
- }
1027
+ // animation promise stuff
1028
+ animationPromises = _this.getAnimationPromises('out');
1029
+ Promise.all(animationPromises).then(function () {
1030
+ _this.triggerEvent('animationOutDone');
1031
+ });
1063
1032
 
1064
- if (path[0] !== '/') {
1065
- path = '/' + path;
1033
+ // create history record if this is not a popstate call
1034
+ if (!popstate) {
1035
+ // create pop element with or without anchor
1036
+ var state = void 0;
1037
+ if (_this.scrollToElement != null) {
1038
+ state = data.url + _this.scrollToElement;
1039
+ } else {
1040
+ state = data.url;
1066
1041
  }
1067
- return path;
1042
+
1043
+ (0, _helpers.createHistoryRecord)(state);
1068
1044
  }
1069
- }, {
1070
- key: 'getHash',
1071
- value: function getHash() {
1072
- return this.link.hash;
1045
+ };
1046
+
1047
+ this.triggerEvent('transitionStart', popstate);
1048
+
1049
+ // set transition object
1050
+ if (data.customTransition != null) {
1051
+ this.updateTransition(window.location.pathname, data.url, data.customTransition);
1052
+ document.documentElement.classList.add('to-' + (0, _helpers.classify)(data.customTransition));
1053
+ } else {
1054
+ this.updateTransition(window.location.pathname, data.url);
1055
+ }
1056
+
1057
+ // start/skip animation
1058
+ if (!popstate || this.options.animateHistoryBrowsing) {
1059
+ animateOut();
1060
+ } else {
1061
+ this.triggerEvent('animationSkipped');
1062
+ }
1063
+
1064
+ // start/skip loading of page
1065
+ if (this.cache.exists(data.url)) {
1066
+ xhrPromise = new Promise(function (resolve) {
1067
+ resolve();
1068
+ });
1069
+ this.triggerEvent('pageRetrievedFromCache');
1070
+ } else {
1071
+ if (!this.preloadPromise || this.preloadPromise.route != data.url) {
1072
+ xhrPromise = new Promise(function (resolve, reject) {
1073
+ (0, _helpers.fetch)(_extends({}, data, { headers: _this.options.requestHeaders }), function (response) {
1074
+ if (response.status === 500) {
1075
+ _this.triggerEvent('serverError');
1076
+ reject(data.url);
1077
+ return;
1078
+ } else {
1079
+ // get json data
1080
+ var page = _this.getPageData(response);
1081
+ if (page != null) {
1082
+ page.url = data.url;
1083
+ } else {
1084
+ reject(data.url);
1085
+ return;
1086
+ }
1087
+ // render page
1088
+ _this.cache.cacheUrl(page);
1089
+ _this.triggerEvent('pageLoaded');
1090
+ }
1091
+ resolve();
1092
+ });
1093
+ });
1094
+ } else {
1095
+ xhrPromise = this.preloadPromise;
1073
1096
  }
1074
- }]);
1097
+ }
1075
1098
 
1076
- return Link;
1077
- }();
1099
+ // when everything is ready, handle the outcome
1100
+ Promise.all(animationPromises.concat([xhrPromise])).then(function () {
1101
+ // render page
1102
+ _this.renderPage(_this.cache.getPage(data.url), popstate);
1103
+ _this.preloadPromise = null;
1104
+ }).catch(function (errorUrl) {
1105
+ // rewrite the skipPopStateHandling function to redirect manually when the history.go is processed
1106
+ _this.options.skipPopStateHandling = function () {
1107
+ window.location = errorUrl;
1108
+ return true;
1109
+ };
1078
1110
 
1079
- exports.default = Link;
1111
+ // go back to the actual page were still at
1112
+ window.history.go(-1);
1113
+ });
1114
+ };
1115
+
1116
+ exports.default = loadPage;
1080
1117
 
1081
1118
  /***/ }),
1082
- /* 15 */
1119
+ /* 17 */
1083
1120
  /***/ (function(module, exports, __webpack_require__) {
1084
1121
 
1085
1122
  "use strict";
@@ -1091,9 +1128,7 @@ Object.defineProperty(exports, "__esModule", {
1091
1128
 
1092
1129
  var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };
1093
1130
 
1094
- var _utils = __webpack_require__(0);
1095
-
1096
- var _helpers = __webpack_require__(1);
1131
+ var _helpers = __webpack_require__(0);
1097
1132
 
1098
1133
  var renderPage = function renderPage(page, popstate) {
1099
1134
  var _this = this;
@@ -1101,16 +1136,16 @@ var renderPage = function renderPage(page, popstate) {
1101
1136
  document.documentElement.classList.remove('is-leaving');
1102
1137
 
1103
1138
  // replace state in case the url was redirected
1104
- var link = new _helpers.Link(page.responseURL);
1105
- if (window.location.pathname !== link.getPath()) {
1139
+ var url = new _helpers.Link(page.responseURL).getPath();
1140
+ if (window.location.pathname !== url) {
1106
1141
  window.history.replaceState({
1107
- url: link.getPath(),
1142
+ url: url,
1108
1143
  random: Math.random(),
1109
1144
  source: 'swup'
1110
- }, document.title, link.getPath());
1145
+ }, document.title, url);
1111
1146
 
1112
1147
  // save new record for redirected url
1113
- this.cache.cacheUrl(_extends({}, page, { url: link.getPath() }));
1148
+ this.cache.cacheUrl(_extends({}, page, { url: url }));
1114
1149
  }
1115
1150
 
1116
1151
  // only add for non-popstate transitions
@@ -1168,7 +1203,7 @@ var renderPage = function renderPage(page, popstate) {
1168
1203
  exports.default = renderPage;
1169
1204
 
1170
1205
  /***/ }),
1171
- /* 16 */
1206
+ /* 18 */
1172
1207
  /***/ (function(module, exports, __webpack_require__) {
1173
1208
 
1174
1209
  "use strict";
@@ -1195,7 +1230,7 @@ var triggerEvent = function triggerEvent(eventName, originalEvent) {
1195
1230
  exports.default = triggerEvent;
1196
1231
 
1197
1232
  /***/ }),
1198
- /* 17 */
1233
+ /* 19 */
1199
1234
  /***/ (function(module, exports, __webpack_require__) {
1200
1235
 
1201
1236
  "use strict";
@@ -1215,7 +1250,7 @@ var on = function on(event, handler) {
1215
1250
  exports.default = on;
1216
1251
 
1217
1252
  /***/ }),
1218
- /* 18 */
1253
+ /* 20 */
1219
1254
  /***/ (function(module, exports, __webpack_require__) {
1220
1255
 
1221
1256
  "use strict";
@@ -1255,7 +1290,7 @@ var off = function off(event, handler) {
1255
1290
  exports.default = off;
1256
1291
 
1257
1292
  /***/ }),
1258
- /* 19 */
1293
+ /* 21 */
1259
1294
  /***/ (function(module, exports, __webpack_require__) {
1260
1295
 
1261
1296
  "use strict";
@@ -1276,7 +1311,7 @@ var updateTransition = function updateTransition(from, to, custom) {
1276
1311
  exports.default = updateTransition;
1277
1312
 
1278
1313
  /***/ }),
1279
- /* 20 */
1314
+ /* 22 */
1280
1315
  /***/ (function(module, exports, __webpack_require__) {
1281
1316
 
1282
1317
  "use strict";
@@ -1286,7 +1321,7 @@ Object.defineProperty(exports, "__esModule", {
1286
1321
  value: true
1287
1322
  });
1288
1323
 
1289
- var _utils = __webpack_require__(0);
1324
+ var _utils = __webpack_require__(1);
1290
1325
 
1291
1326
  var getAnchorElement = function getAnchorElement(hash) {
1292
1327
  if (!hash) {
@@ -1307,7 +1342,7 @@ var getAnchorElement = function getAnchorElement(hash) {
1307
1342
  exports.default = getAnchorElement;
1308
1343
 
1309
1344
  /***/ }),
1310
- /* 21 */
1345
+ /* 23 */
1311
1346
  /***/ (function(module, exports, __webpack_require__) {
1312
1347
 
1313
1348
  "use strict";
@@ -1317,14 +1352,29 @@ Object.defineProperty(exports, "__esModule", {
1317
1352
  value: true
1318
1353
  });
1319
1354
 
1320
- var _utils = __webpack_require__(0);
1355
+ var _utils = __webpack_require__(1);
1321
1356
 
1322
- var _helpers = __webpack_require__(1);
1357
+ var _helpers = __webpack_require__(0);
1323
1358
 
1324
1359
  var getAnimationPromises = function getAnimationPromises() {
1360
+ var _this = this;
1361
+
1325
1362
  var promises = [];
1326
- var animatedElements = (0, _utils.queryAll)(this.options.animationSelector);
1363
+ var animatedElements = (0, _utils.queryAll)(this.options.animationSelector, document.body);
1364
+
1365
+ if (!animatedElements.length) {
1366
+ console.error('No animated elements found by selector ' + this.options.animationSelector);
1367
+ return [Promise.resolve()];
1368
+ }
1369
+
1327
1370
  animatedElements.forEach(function (element) {
1371
+ var transitionDuration = window.getComputedStyle(element)[(0, _helpers.transitionProperty)() + 'Duration'];
1372
+ // Resolve immediately if no transition defined
1373
+ if (!transitionDuration || transitionDuration == '0s') {
1374
+ console.error('No CSS transition duration defined for element of selector ' + _this.options.animationSelector);
1375
+ promises.push(Promise.resolve());
1376
+ return;
1377
+ }
1328
1378
  var promise = new Promise(function (resolve) {
1329
1379
  element.addEventListener((0, _helpers.transitionEnd)(), function (event) {
1330
1380
  if (element == event.target) {
@@ -1334,13 +1384,14 @@ var getAnimationPromises = function getAnimationPromises() {
1334
1384
  });
1335
1385
  promises.push(promise);
1336
1386
  });
1387
+
1337
1388
  return promises;
1338
1389
  };
1339
1390
 
1340
1391
  exports.default = getAnimationPromises;
1341
1392
 
1342
1393
  /***/ }),
1343
- /* 22 */
1394
+ /* 24 */
1344
1395
  /***/ (function(module, exports, __webpack_require__) {
1345
1396
 
1346
1397
  "use strict";
@@ -1350,7 +1401,7 @@ Object.defineProperty(exports, "__esModule", {
1350
1401
  value: true
1351
1402
  });
1352
1403
 
1353
- var _helpers = __webpack_require__(1);
1404
+ var _helpers = __webpack_require__(0);
1354
1405
 
1355
1406
  var getPageData = function getPageData(request) {
1356
1407
  // this method can be replaced in case other content than html is expected to be received from server
@@ -1372,7 +1423,7 @@ var getPageData = function getPageData(request) {
1372
1423
  exports.default = getPageData;
1373
1424
 
1374
1425
  /***/ }),
1375
- /* 23 */
1426
+ /* 25 */
1376
1427
  /***/ (function(module, exports, __webpack_require__) {
1377
1428
 
1378
1429
  "use strict";