diff --git a/src/app.js b/src/app.js index bcdb8fd08c..22ff2aec10 100644 --- a/src/app.js +++ b/src/app.js @@ -201,10 +201,9 @@ function run () { if (provider && provider.exists(url)) { return provider.get(url, cb) } - handleImports.import(url, (error, content, cleanUrl, type) => { + handleImports.import(url, (error, content, cleanUrl, type, url) => { if (!error) { - // FIXME: at some point we should invalidate the browser cache - filesProviders[type].addReadOnly(cleanUrl, content) + filesProviders[type].addReadOnly(cleanUrl, content, url) cb(null, content) } else { cb(error) diff --git a/src/app/compiler/compiler-imports.js b/src/app/compiler/compiler-imports.js index 23e728fb6d..4cfca7e5a7 100644 --- a/src/app/compiler/compiler-imports.js +++ b/src/app/compiler/compiler-imports.js @@ -39,12 +39,16 @@ module.exports = { }) }, - import: function (url, cb) { - var handlers = [ + handlers: function () { + return [ { type: 'github', match: /^(https?:\/\/)?(www.)?github.com\/([^/]*\/[^/]*)\/(.*)/, handler: (match, cb) => { this.handleGithubCall(match[3], match[4], cb) } }, { type: 'swarm', match: /^(bzz[ri]?:\/\/?.*)$/, handler: (match, cb) => { this.handleSwarmImport(match[1], cb) } }, { type: 'ipfs', match: /^(ipfs:\/\/?.+)/, handler: (match, cb) => { this.handleIPFS(match[1], cb) } } ] + }, + + import: function (url, cb) { + var handlers = this.handlers() var found = false handlers.forEach(function (handler) { @@ -63,7 +67,7 @@ module.exports = { return } - cb(null, content, cleanUrl, handler.type) + cb(null, content, cleanUrl, handler.type, url) }) } }) diff --git a/src/app/files/basicReadOnlyExplorer.js b/src/app/files/basicReadOnlyExplorer.js index fa8f49d81f..882b14cb5a 100644 --- a/src/app/files/basicReadOnlyExplorer.js +++ b/src/app/files/basicReadOnlyExplorer.js @@ -5,6 +5,7 @@ class BasicReadOnlyExplorer { constructor (type) { this.event = new EventManager() this.files = {} + this.normalizedNames = {} // contains the raw url associated with the displayed path this.type = type this.readonly = true } @@ -25,6 +26,9 @@ class BasicReadOnlyExplorer { get (path, cb) { var content = this.files[path] + if (!content) { + content = this.files[this.type + '/' + this.normalizedNames[path]] + } if (cb) { cb(null, content) } @@ -37,12 +41,13 @@ class BasicReadOnlyExplorer { return true } - addReadOnly (path, content) { + addReadOnly (path, content, rawPath) { var unprefixedPath = this.removePrefix(path) try { // lazy try to format JSON content = JSON.stringify(JSON.parse(content), null, '\t') } catch (e) {} this.files[this.type + '/' + unprefixedPath] = content + this.normalizedNames[rawPath] = path this.event.trigger('fileAdded', [this.type + '/' + unprefixedPath, true]) return true }