From 89c0c6157b541b18b8081776283a6f73e2b2e42d Mon Sep 17 00:00:00 2001 From: John Duhamel Date: Tue, 11 Aug 2020 01:02:28 +0530 Subject: [PATCH] Add saver for Hyperdrive protocol used in Beaker 1.x (#4777) --- core/modules/savers/hyperdrive.js | 64 +++++++++++++++++++++++++++++++ 1 file changed, 64 insertions(+) create mode 100644 core/modules/savers/hyperdrive.js diff --git a/core/modules/savers/hyperdrive.js b/core/modules/savers/hyperdrive.js new file mode 100644 index 000000000..232392672 --- /dev/null +++ b/core/modules/savers/hyperdrive.js @@ -0,0 +1,64 @@ +/*\ +title: $:/core/modules/savers/hyperdrive.js +type: application/javascript +module-type: saver + +Saves files using the Hyperdrive Protocol (https://hypercore-protocol.org/#hyperdrive) Beaker browser beta-1.0 and later (https://beakerbrowser.com) +Compatible with beaker >= V1.0.0 + +\*/ +(function(){ + +/*jslint node: true, browser: true */ +/*global $tw: false */ +"use strict"; + +/* +Set up the saver +*/ +var HyperdriveSaver = function(wiki) { + this.wiki = wiki; +}; + +HyperdriveSaver.prototype.save = function(text,method,callback) { + var dat = beaker.hyperdrive.drive("" + window.location), + pathname = ("" + window.location.pathname).split("#")[0]; + dat.stat(pathname).then(function(value) { + if(value.isDirectory()) { + pathname = pathname + "/index.html"; + } + dat.writeFile(pathname,text,"utf8").then(function(value) { + callback(null); + },function(reason) { + callback("Hyperdrive Saver Write Error: " + reason); + }); + },function(reason) { + callback("Hyperdrive Saver Stat Error: " + reason); + }); + return true; +}; + +/* +Information about this saver +*/ +HyperdriveSaver.prototype.info = { + name: "beaker-1.x", + priority: 3000, + capabilities: ["save", "autosave"] +}; + +/* +Static method that returns true if this saver is capable of working +*/ +exports.canSave = function(wiki) { + return !!window.beaker && !!beaker.hyperdrive && location.protocol==="hyper:"; +}; + +/* +Create an instance of this saver +*/ +exports.create = function(wiki) { + return new HyperdriveSaver(wiki); +}; + +})();