60 lines
1.3 KiB
JavaScript
60 lines
1.3 KiB
JavaScript
var forEachEls = require("./foreach-els");
|
||
|
||
var defaultSwitches = require("./switches");
|
||
|
||
module.exports = function(
|
||
switches,
|
||
switchesOptions,
|
||
selectors,
|
||
fromEl,
|
||
toEl,
|
||
options
|
||
) {
|
||
var switchesQueue = [];
|
||
|
||
selectors.forEach(function(selector) {
|
||
var newEls = fromEl.querySelectorAll(selector);
|
||
var oldEls = toEl.querySelectorAll(selector);
|
||
if (this.log) {
|
||
this.log("Pjax switch", selector, newEls, oldEls);
|
||
}
|
||
if (newEls.length !== oldEls.length) {
|
||
throw "DOM doesn’t look the same on new loaded page: ’" +
|
||
selector +
|
||
"’ - new " +
|
||
newEls.length +
|
||
", old " +
|
||
oldEls.length;
|
||
}
|
||
|
||
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;
|
||
|
||
switchesQueue.forEach(function(queuedSwitch) {
|
||
queuedSwitch();
|
||
});
|
||
};
|