2019-02-11 23:17:28 -05:00
|
|
|
|
var forEachEls = require("./foreach-els");
|
2014-10-14 08:19:44 +02:00
|
|
|
|
|
2019-02-11 23:17:28 -05:00
|
|
|
|
var defaultSwitches = require("./switches");
|
2014-10-14 08:19:44 +02:00
|
|
|
|
|
2019-02-11 23:17:28 -05:00
|
|
|
|
module.exports = function(
|
|
|
|
|
|
switches,
|
|
|
|
|
|
switchesOptions,
|
|
|
|
|
|
selectors,
|
|
|
|
|
|
fromEl,
|
|
|
|
|
|
toEl,
|
|
|
|
|
|
options
|
|
|
|
|
|
) {
|
|
|
|
|
|
var switchesQueue = [];
|
2018-01-22 10:55:29 -05:00
|
|
|
|
|
2014-10-14 08:19:44 +02:00
|
|
|
|
selectors.forEach(function(selector) {
|
2019-02-11 23:17:28 -05:00
|
|
|
|
var newEls = fromEl.querySelectorAll(selector);
|
|
|
|
|
|
var oldEls = toEl.querySelectorAll(selector);
|
2014-10-14 08:19:44 +02:00
|
|
|
|
if (this.log) {
|
2019-02-11 23:17:28 -05:00
|
|
|
|
this.log("Pjax switch", selector, newEls, oldEls);
|
2014-10-14 08:19:44 +02:00
|
|
|
|
}
|
|
|
|
|
|
if (newEls.length !== oldEls.length) {
|
2019-02-11 23:17:28 -05:00
|
|
|
|
throw "DOM doesn’t look the same on new loaded page: ’" +
|
|
|
|
|
|
selector +
|
|
|
|
|
|
"’ - new " +
|
|
|
|
|
|
newEls.length +
|
|
|
|
|
|
", old " +
|
|
|
|
|
|
oldEls.length;
|
2014-10-14 08:19:44 +02:00
|
|
|
|
}
|
|
|
|
|
|
|
2019-02-11 23:17:28 -05:00
|
|
|
|
forEachEls(
|
|
|
|
|
|
newEls,
|
|
|
|
|
|
function(newEl, i) {
|
|
|
|
|
|
var oldEl = oldEls[i];
|
|
|
|
|
|
if (this.log) {
|
|
|
|
|
|
this.log("newEl", newEl, "oldEl", oldEl);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
var callback = switches[selector]
|
|
|
|
|
|
? switches[selector].bind(
|
|
|
|
|
|
this,
|
|
|
|
|
|
oldEl,
|
|
|
|
|
|
newEl,
|
|
|
|
|
|
options,
|
|
|
|
|
|
switchesOptions[selector]
|
|
|
|
|
|
)
|
|
|
|
|
|
: defaultSwitches.outerHTML.bind(this, oldEl, newEl, options);
|
|
|
|
|
|
|
|
|
|
|
|
switchesQueue.push(callback);
|
|
|
|
|
|
},
|
|
|
|
|
|
this
|
|
|
|
|
|
);
|
|
|
|
|
|
}, this);
|
|
|
|
|
|
|
|
|
|
|
|
this.state.numPendingSwitches = switchesQueue.length;
|
2018-01-22 10:55:29 -05:00
|
|
|
|
|
|
|
|
|
|
switchesQueue.forEach(function(queuedSwitch) {
|
2019-02-11 23:17:28 -05:00
|
|
|
|
queuedSwitch();
|
|
|
|
|
|
});
|
|
|
|
|
|
};
|