From 0229bd92aa39a6aa02b663f1967de5eab1d1b255 Mon Sep 17 00:00:00 2001 From: Mitra Ardron Date: Fri, 13 Sep 2019 15:03:34 +1000 Subject: [PATCH] Push script loading into Transports --- TransportGUN.js | 3 +++ TransportHTTP.js | 3 +-- TransportIPFS.js | 5 +++-- TransportWEBTORRENT.js | 1 + TransportWOLK.js | 1 + TransportYJS.js | 1 + Transports.js | 35 +++++++++++++++++++++++++++-------- 7 files changed, 37 insertions(+), 12 deletions(-) diff --git a/TransportGUN.js b/TransportGUN.js index 64a4e02..f60a803 100644 --- a/TransportGUN.js +++ b/TransportGUN.js @@ -392,4 +392,7 @@ class TransportGUN extends Transport { } } Transports._transportclasses["GUN"] = TransportGUN; +TransportGUN.requires = ['gun/gun.js', 'gun/lib/path.js', 'gun/nts', 'gun/lib/wire', 'gun/lib/multicast', 'gun/lib/radix.js', + 'gun/lib/radisk.js', 'gun/lib/store.js', 'gun/lib/rindexed.js'] + .map(s => 'https://cdn.jsdelivr.net/npm/' + s); exports = module.exports = TransportGUN; diff --git a/TransportHTTP.js b/TransportHTTP.js index 1116120..d8bb975 100644 --- a/TransportHTTP.js +++ b/TransportHTTP.js @@ -55,8 +55,6 @@ class TransportHTTP extends Transport { this.status = Transport.STATUS_LOADED; } - //TODO-SPLIT define load() - static setup0(options) { let combinedoptions = Transport.mergeoptions(defaulthttpoptions, options.http); try { @@ -393,5 +391,6 @@ class TransportHTTP extends Transport { } Transports._transportclasses["HTTP"] = TransportHTTP; +TransportHTTP.requires = []; // Nothing to load exports = module.exports = TransportHTTP; diff --git a/TransportIPFS.js b/TransportIPFS.js index 1177e11..4d082f1 100644 --- a/TransportIPFS.js +++ b/TransportIPFS.js @@ -141,8 +141,6 @@ class TransportIPFS extends Transport { } */ - //TODO-SPLIT define load() - static setup0(options) { /* First part of setup, create obj, add to Transports but dont attempt to connect, typically called instead of p_setup if want to parallelize connections. @@ -507,6 +505,9 @@ class TransportIPFS extends Transport { } } +TransportIPFS.requires=['https://unpkg.com/ipfs/dist/index.min.js']; // 2.3Mb + + Transports._transportclasses["IPFS"] = TransportIPFS; // noinspection JSUndefinedPropertyAssignment exports = module.exports = TransportIPFS; diff --git a/TransportWEBTORRENT.js b/TransportWEBTORRENT.js index 0656547..0303eca 100644 --- a/TransportWEBTORRENT.js +++ b/TransportWEBTORRENT.js @@ -398,5 +398,6 @@ class TransportWEBTORRENT extends Transport { } Transports._transportclasses["WEBTORRENT"] = TransportWEBTORRENT; +TransportWEBTORRENT.requires = ['https://cdn.jsdelivr.net/npm/webtorrent@latest/webtorrent.min.js']; exports = module.exports = TransportWEBTORRENT; diff --git a/TransportWOLK.js b/TransportWOLK.js index 586e136..da5da67 100644 --- a/TransportWOLK.js +++ b/TransportWOLK.js @@ -269,4 +269,5 @@ class TransportWOLK extends Transport { } } Transports._transportclasses["WOLK"] = TransportWOLK; +TransportWOLK.requires = []; //TODO-SPLIT correct this exports = module.exports = TransportWOLK; diff --git a/TransportYJS.js b/TransportYJS.js index 73410ac..eaba125 100644 --- a/TransportYJS.js +++ b/TransportYJS.js @@ -368,4 +368,5 @@ class TransportYJS extends Transport { } TransportYJS.Y = Y; // Allow node tests to find it Transports._transportclasses["YJS"] = TransportYJS; +TransportYJS.requires = []; //TODO-SPLIT correct this exports = module.exports = TransportYJS; diff --git a/Transports.js b/Transports.js index 47ba30f..922d185 100644 --- a/Transports.js +++ b/Transports.js @@ -712,10 +712,36 @@ class Transports { } } + static _tabbrevs(options) { + // options = {transports, defaulttransports, ... } + // returns [ABBREVIATION] e.g. ["IPFS","HTTP"] + let tabbrevs = options.transports; // Array of transport abbreviations + if (!(tabbrevs && tabbrevs.length)) { tabbrevs = options.defaulttransports || [] } + // WOLK is currently working (I think) + // GUN is turned off by default because it fills up localstorage on browser and stops working, https://github.com/internetarchive/dweb-archive/issues/106 + //if (! tabbrevs.length) { tabbrevs = ["HTTP", "YJS", "IPFS", "WEBTORRENT", "GUN", "WOLK"]; } // SEE-OTHER-ADDTRANSPORT + if (! tabbrevs.length) { tabbrevs = ["HTTP", "IPFS", "WEBTORRENT", "WOLK"]; } // SEE-OTHER-ADDTRANSPORT + tabbrevs = tabbrevs.map(n => n.toUpperCase()); + return tabbrevs; + } + /** + * Load required javascript into an html page + * This is tricky - order is significant, (see dweb-archive/archive.html for a hopefully working example) + */ + static loadIntoHtmlPage(options) { + this._tabbrevs(options).forEach(t => { + this._transportclasses[t].requires.map(s => { + debug("Loading %s %s", t, s); + document.write('