@glitchr/transparent 1.0.43 → 1.0.45
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/package.json +1 -1
- package/src/js/transparent.js +51 -20
package/package.json
CHANGED
package/src/js/transparent.js
CHANGED
|
@@ -419,6 +419,12 @@
|
|
|
419
419
|
Transparent.configure({'x-ajax-request': true});
|
|
420
420
|
Transparent.configure(options);
|
|
421
421
|
|
|
422
|
+
if(Settings.debug) {
|
|
423
|
+
|
|
424
|
+
if (Settings.disable) console.debug("Transparent is disabled..");
|
|
425
|
+
else console.debug("Transparent is running..");
|
|
426
|
+
}
|
|
427
|
+
|
|
422
428
|
isReady = true;
|
|
423
429
|
|
|
424
430
|
dispatchEvent(new Event('transparent:'+Transparent.state.READY));
|
|
@@ -522,10 +528,6 @@
|
|
|
522
528
|
|
|
523
529
|
if(el.target && el.target.tagName == "FORM") {
|
|
524
530
|
|
|
525
|
-
// Action must be prevented here
|
|
526
|
-
// This is specific to form submission
|
|
527
|
-
el.preventDefault();
|
|
528
|
-
|
|
529
531
|
var href = el.target.getAttribute("action");
|
|
530
532
|
if(!href) href = location.pathname + href;
|
|
531
533
|
|
|
@@ -1416,6 +1418,7 @@
|
|
|
1416
1418
|
return elementsXY;
|
|
1417
1419
|
}
|
|
1418
1420
|
|
|
1421
|
+
var formSubmission = false;
|
|
1419
1422
|
function __main__(e) {
|
|
1420
1423
|
|
|
1421
1424
|
// Disable transparent JS (e.g. during development..)
|
|
@@ -1434,7 +1437,15 @@
|
|
|
1434
1437
|
var target = Transparent.isElement(link[2]) ? link[2] : undefined;
|
|
1435
1438
|
var data = Transparent.isElement(link[2]) ? undefined : link[2];
|
|
1436
1439
|
|
|
1440
|
+
// Wait for transparent window event to be triggered
|
|
1441
|
+
if (!isReady) return;
|
|
1442
|
+
|
|
1443
|
+
if (e.type != Transparent.state.POPSTATE &&
|
|
1444
|
+
e.type != Transparent.state.HASHCHANGE && !$(this).find(Settings.identifier).length) return;
|
|
1445
|
+
|
|
1437
1446
|
var form = target != undefined && target.tagName == "FORM" ? target : undefined;
|
|
1447
|
+
formSubmission = false;
|
|
1448
|
+
|
|
1438
1449
|
if (form) {
|
|
1439
1450
|
|
|
1440
1451
|
data = new FormData();
|
|
@@ -1448,19 +1459,20 @@
|
|
|
1448
1459
|
} else if(this.type == "file") {
|
|
1449
1460
|
|
|
1450
1461
|
for(var i = 0; i < this.files.length; i++)
|
|
1451
|
-
data.append(this.name,
|
|
1462
|
+
data.append(this.name, this.files[i]);
|
|
1452
1463
|
|
|
1453
1464
|
} else data.append(this.name, this.value);
|
|
1454
1465
|
});
|
|
1455
1466
|
|
|
1456
|
-
|
|
1457
|
-
|
|
1467
|
+
// Force page reload
|
|
1468
|
+
formSubmission = true; // mark as form submission
|
|
1458
1469
|
|
|
1459
|
-
|
|
1460
|
-
|
|
1470
|
+
if ($(e.target).hasClass(Transparent.state.RELOAD)) return;
|
|
1471
|
+
if ($(form).hasClass(Transparent.state.RELOAD)) return;
|
|
1461
1472
|
|
|
1462
|
-
|
|
1463
|
-
|
|
1473
|
+
if(e.type == "submit")
|
|
1474
|
+
$(form).find(':submit').attr('disabled', 'disabled');
|
|
1475
|
+
}
|
|
1464
1476
|
|
|
1465
1477
|
// Specific page exception
|
|
1466
1478
|
for(i = 0; i < Settings.exceptions.length; i++) {
|
|
@@ -1680,12 +1692,16 @@
|
|
|
1680
1692
|
// Overload onpopstate
|
|
1681
1693
|
if(Settings.disable) {
|
|
1682
1694
|
|
|
1695
|
+
if(Settings.debug) console.debug("Transparent is disabled..");
|
|
1696
|
+
|
|
1683
1697
|
var states = Object.values(Transparent.state);
|
|
1684
1698
|
var htmlClass = Array.from(($("html").attr("class") || "").split(" ")).filter(x => !states.includes(x));
|
|
1685
1699
|
Transparent.html.removeClass(states).addClass(htmlClass.join(" ")+" "+Transparent.state.ROOT+" "+Transparent.state.READY+" "+Transparent.state.DISABLE);
|
|
1686
1700
|
|
|
1687
1701
|
} else {
|
|
1688
1702
|
|
|
1703
|
+
if(Settings.debug) console.debug("Transparent is running..");
|
|
1704
|
+
|
|
1689
1705
|
window.onpopstate = __main__; // Onpopstate pop out straight to previous page.. this creates a jump while changing pages with hash..
|
|
1690
1706
|
window.onhashchange = __main__;
|
|
1691
1707
|
|
|
@@ -1702,18 +1718,22 @@
|
|
|
1702
1718
|
if(this.type == "file") {
|
|
1703
1719
|
|
|
1704
1720
|
for(var i = 0; i < this.files.length; i++)
|
|
1705
|
-
formData.append(this.name,
|
|
1721
|
+
formData.append(this.name+"["+i+"]", this.files[i].name+";"+this.files[i].size+";"+this.files[i].lastModified);
|
|
1706
1722
|
|
|
1707
1723
|
} else formData.append(this.name, this.value);
|
|
1708
1724
|
});
|
|
1709
1725
|
|
|
1710
|
-
for (var [fieldName,fieldValue] of formData.entries())
|
|
1711
|
-
|
|
1726
|
+
for (var [fieldName,fieldValue] of formData.entries()) {
|
|
1727
|
+
|
|
1728
|
+
if(!fieldName.endsWith("[]") && fieldName != "undefined")
|
|
1729
|
+
formDataBefore[fieldName] = fieldValue;
|
|
1730
|
+
}
|
|
1712
1731
|
});
|
|
1713
1732
|
});
|
|
1714
1733
|
|
|
1715
|
-
window.onbeforeunload = function() {
|
|
1734
|
+
window.onbeforeunload = function(e) {
|
|
1716
1735
|
|
|
1736
|
+
if(formSubmission) return; // Do not display on form submission
|
|
1717
1737
|
if(Settings.disable) return;
|
|
1718
1738
|
|
|
1719
1739
|
var preventDefault = false;
|
|
@@ -1727,20 +1747,31 @@
|
|
|
1727
1747
|
if(this.type == "file") {
|
|
1728
1748
|
|
|
1729
1749
|
for(var i = 0; i < this.files.length; i++)
|
|
1730
|
-
formData.append(this.name,
|
|
1750
|
+
formData.append(this.name+"["+i+"]", this.files[i].name+";"+this.files[i].size+";"+this.files[i].lastModified);
|
|
1731
1751
|
|
|
1732
1752
|
} else formData.append(this.name, this.value);
|
|
1733
1753
|
});
|
|
1734
1754
|
|
|
1735
1755
|
for (var [fieldName,fieldValue] of formData.entries()) {
|
|
1736
|
-
|
|
1756
|
+
|
|
1757
|
+
if(!fieldName.endsWith("[]") && fieldName != "undefined")
|
|
1758
|
+
formDataAfter[fieldName] = fieldValue;
|
|
1737
1759
|
}
|
|
1738
1760
|
});
|
|
1739
1761
|
|
|
1740
|
-
var formDataBeforeKeys
|
|
1741
|
-
var formDataAfterKeys
|
|
1762
|
+
var formDataBeforeKeys = Object.keys(formDataBefore);
|
|
1763
|
+
var formDataAfterKeys = Object.keys(formDataAfter);
|
|
1764
|
+
var formDataBeforeEntries = Object.entries(formDataBefore);
|
|
1765
|
+
var formDataAfterEntries = Object.entries(formDataAfter);
|
|
1766
|
+
function compare(a, b) { return JSON.stringify(a) === JSON.stringify(b); }
|
|
1767
|
+
function compareKeys(a, b) {
|
|
1768
|
+
|
|
1769
|
+
var aKeys = Object.keys(a).sort();
|
|
1770
|
+
var bKeys = Object.keys(b).sort();
|
|
1771
|
+
return JSON.stringify(aKeys) === JSON.stringify(bKeys);
|
|
1772
|
+
}
|
|
1742
1773
|
|
|
1743
|
-
if(
|
|
1774
|
+
if(!compareKeys(formDataBeforeKeys, formDataAfterKeys)) preventDefault = true;
|
|
1744
1775
|
else {
|
|
1745
1776
|
|
|
1746
1777
|
for (var [fieldName,fieldValueAfter] of Object.entries(formDataAfter)) {
|