diff --git a/package-lock.json b/package-lock.json index 178c2678..27363679 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "solid-panes", - "version": "4.2.1", + "version": "4.2.2", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "solid-panes", - "version": "4.2.1", + "version": "4.2.2", "license": "MIT", "dependencies": { "@solid/better-simple-slideshow": "^0.1.0", diff --git a/package.json b/package.json index 05368c76..8923c81c 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "solid-panes", - "version": "4.2.1", + "version": "4.2.2", "description": "Solid-compatible Panes: applets and views for the mashlib and databrowser", "main": "dist/index.js", "types": "dist/index.d.ts", diff --git a/src/outline/manager.js b/src/outline/manager.js index d47ecabd..767a832e 100644 --- a/src/outline/manager.js +++ b/src/outline/manager.js @@ -2100,8 +2100,24 @@ export default function (context) { !UI.widgets.isAudio(subject) && !UI.widgets.isVideo(subject) ) { + const docUri = (subject.doc() && subject.doc().uri) ? subject.doc().uri : '' + subject.doc() + const appendOutlineError = function (detail, errObj) { + if (p.querySelector && docUri) { + const existing = p.querySelector('[data-outline-error-for="' + docUri + '"]') + if (existing) return + } + const message = UI.widgets.errorMessageBlock( + dom, + detail, + '#fee', + errObj instanceof Error ? errObj : undefined + ) + if (docUri) message.setAttribute('data-outline-error-for', docUri) + p.appendChild(message) + } // Wait till at least the main URI is loaded before expanding: - sf.nowOrWhenFetched(subject.doc(), undefined, function (ok, body) { + let errorReported = false + const fetchPromise = sf.nowOrWhenFetched(subject.doc(), undefined, function (ok, body) { if (ok) { sf.lookUpThing(subject) render() // inital open, or else full if re-open @@ -2111,14 +2127,17 @@ export default function (context) { setUrlBarAndTitle(subject) } } else { - const message = dom.createElement('pre') - message.textContent = body - message.setAttribute('style', 'background-color: #fee;') - message.textContent = - 'Outline.expand: Unable to fetch ' + subject.doc() + ': ' + body - p.appendChild(message) + errorReported = true + appendOutlineError(body, undefined) } }) + if (fetchPromise && typeof fetchPromise.catch === 'function') { + fetchPromise.catch(function (err) { + if (errorReported) return + errorReported = true + appendOutlineError(err, err) + }) + } } else { render() }