solid-panes 5.0.0-1 → 5.0.0

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.
Files changed (185) hide show
  1. package/dist/RDFXMLPane2.cjs.js.map +1 -1
  2. package/dist/RDFXMLPane2.esm.js.map +1 -1
  3. package/dist/_virtual/~icons/lucide/arrow-left.cjs.js.map +1 -1
  4. package/dist/_virtual/~icons/lucide/arrow-left.esm.js.map +1 -1
  5. package/dist/_virtual/~icons/lucide/ellipsis-vertical.cjs.js.map +1 -1
  6. package/dist/_virtual/~icons/lucide/ellipsis-vertical.esm.js.map +1 -1
  7. package/dist/_virtual/~icons/lucide/folder-open.cjs.js.map +1 -1
  8. package/dist/_virtual/~icons/lucide/folder-open.esm.js.map +1 -1
  9. package/dist/_virtual/~icons/lucide/folder.cjs.js.map +1 -1
  10. package/dist/_virtual/~icons/lucide/folder.esm.js.map +1 -1
  11. package/dist/_virtual/~icons/lucide/globe.cjs.js.map +1 -1
  12. package/dist/_virtual/~icons/lucide/globe.esm.js.map +1 -1
  13. package/dist/_virtual/~icons/lucide/help-circle.cjs.js.map +1 -1
  14. package/dist/_virtual/~icons/lucide/help-circle.esm.js.map +1 -1
  15. package/dist/_virtual/~icons/lucide/layout-dashboard.cjs.js.map +1 -1
  16. package/dist/_virtual/~icons/lucide/layout-dashboard.esm.js.map +1 -1
  17. package/dist/_virtual/~icons/lucide/lock-keyhole.cjs.js.map +1 -1
  18. package/dist/_virtual/~icons/lucide/lock-keyhole.esm.js.map +1 -1
  19. package/dist/_virtual/~icons/lucide/pencil.cjs.js.map +1 -1
  20. package/dist/_virtual/~icons/lucide/pencil.esm.js.map +1 -1
  21. package/dist/_virtual/~icons/lucide/settings-2.cjs.js.map +1 -1
  22. package/dist/_virtual/~icons/lucide/settings-2.esm.js.map +1 -1
  23. package/dist/_virtual/~icons/lucide/share-2.cjs.js.map +1 -1
  24. package/dist/_virtual/~icons/lucide/share-2.esm.js.map +1 -1
  25. package/dist/_virtual/~icons/lucide/user-round-cog.cjs.js.map +1 -1
  26. package/dist/_virtual/~icons/lucide/user-round-cog.esm.js.map +1 -1
  27. package/dist/_virtual/~icons/lucide/user.cjs.js.map +1 -1
  28. package/dist/_virtual/~icons/lucide/user.esm.js.map +1 -1
  29. package/dist/_virtual/~icons/lucide/users.cjs.js.map +1 -1
  30. package/dist/_virtual/~icons/lucide/users.esm.js.map +1 -1
  31. package/dist/audio/audioPane.cjs.js.map +1 -1
  32. package/dist/audio/audioPane.esm.js.map +1 -1
  33. package/dist/classInstancePane.cjs.js.map +1 -1
  34. package/dist/classInstancePane.esm.js.map +1 -1
  35. package/dist/components/editor-card/EditorCard.cjs.js.map +1 -1
  36. package/dist/components/editor-card/EditorCard.esm.js.map +1 -1
  37. package/dist/components/editor-card/EditorCard.styles.cjs.js.map +1 -1
  38. package/dist/components/editor-card/EditorCard.styles.esm.js.map +1 -1
  39. package/dist/components/file-explorer-header/FileExplorerHeader.cjs.js.map +1 -1
  40. package/dist/components/file-explorer-header/FileExplorerHeader.esm.js.map +1 -1
  41. package/dist/components/file-explorer-header/FileExplorerHeader.styles.cjs.js.map +1 -1
  42. package/dist/components/file-explorer-header/FileExplorerHeader.styles.esm.js.map +1 -1
  43. package/dist/components/file-explorer-header/FileExplorerHeaderControls.cjs.js +1 -1
  44. package/dist/components/file-explorer-header/FileExplorerHeaderControls.cjs.js.map +1 -1
  45. package/dist/components/file-explorer-header/FileExplorerHeaderControls.esm.js +1 -1
  46. package/dist/components/file-explorer-header/FileExplorerHeaderControls.esm.js.map +1 -1
  47. package/dist/components/file-explorer-header/FileExplorerHeaderControls.styles.cjs.js.map +1 -1
  48. package/dist/components/file-explorer-header/FileExplorerHeaderControls.styles.esm.js.map +1 -1
  49. package/dist/components/file-explorer-header/FileExplorerHeaderSummary.cjs.js.map +1 -1
  50. package/dist/components/file-explorer-header/FileExplorerHeaderSummary.esm.js.map +1 -1
  51. package/dist/components/file-explorer-header/FileExplorerHeaderSummary.styles.cjs.js.map +1 -1
  52. package/dist/components/file-explorer-header/FileExplorerHeaderSummary.styles.esm.js.map +1 -1
  53. package/dist/components/file-explorer-header/FileExplorerProvider.cjs.js.map +1 -1
  54. package/dist/components/file-explorer-header/FileExplorerProvider.esm.js.map +1 -1
  55. package/dist/components/file-explorer-header/FileExplorerProvider.styles.cjs.js.map +1 -1
  56. package/dist/components/file-explorer-header/FileExplorerProvider.styles.esm.js.map +1 -1
  57. package/dist/components/header/Header.cjs.js.map +1 -1
  58. package/dist/components/header/Header.esm.js.map +1 -1
  59. package/dist/components/header/Header.styles.cjs.js.map +1 -1
  60. package/dist/components/header/Header.styles.esm.js.map +1 -1
  61. package/dist/components/navbar/Navbar.cjs.js.map +1 -1
  62. package/dist/components/navbar/Navbar.esm.js.map +1 -1
  63. package/dist/components/navbar/Navbar.styles.cjs.js.map +1 -1
  64. package/dist/components/navbar/Navbar.styles.esm.js.map +1 -1
  65. package/dist/components/resource-actions-menu/ResourceActionsMenu.cjs.js.map +1 -1
  66. package/dist/components/resource-actions-menu/ResourceActionsMenu.esm.js.map +1 -1
  67. package/dist/components/resource-actions-menu/ResourceActionsMenu.styles.cjs.js.map +1 -1
  68. package/dist/components/resource-actions-menu/ResourceActionsMenu.styles.esm.js.map +1 -1
  69. package/dist/dashboard/basicPreferences.cjs.js.map +1 -1
  70. package/dist/dashboard/basicPreferences.esm.js.map +1 -1
  71. package/dist/dashboard/dashboardPane.cjs.js.map +1 -1
  72. package/dist/dashboard/dashboardPane.esm.js.map +1 -1
  73. package/dist/dashboard/homepage.cjs.js.map +1 -1
  74. package/dist/dashboard/homepage.esm.js.map +1 -1
  75. package/dist/dashboard/ontologyData.cjs.js.map +1 -1
  76. package/dist/dashboard/ontologyData.esm.js.map +1 -1
  77. package/dist/dashboard/preferencesFormText.cjs.js.map +1 -1
  78. package/dist/dashboard/preferencesFormText.esm.js.map +1 -1
  79. package/dist/dataContentPane2.cjs.js.map +1 -1
  80. package/dist/dataContentPane2.esm.js.map +1 -1
  81. package/dist/defaultPane2.cjs.js.map +1 -1
  82. package/dist/defaultPane2.esm.js.map +1 -1
  83. package/dist/dokieli/dokieliPane.cjs.js.map +1 -1
  84. package/dist/dokieli/dokieliPane.esm.js.map +1 -1
  85. package/dist/dokieli/new.cjs.js.map +1 -1
  86. package/dist/dokieli/new.esm.js.map +1 -1
  87. package/dist/form/pane.cjs.js.map +1 -1
  88. package/dist/form/pane.esm.js.map +1 -1
  89. package/dist/home/homePane.cjs.js.map +1 -1
  90. package/dist/home/homePane.esm.js.map +1 -1
  91. package/dist/humanReadablePane2.cjs.js.map +1 -1
  92. package/dist/humanReadablePane2.esm.js.map +1 -1
  93. package/dist/icons/folder.cjs.js.map +1 -1
  94. package/dist/icons/folder.esm.js.map +1 -1
  95. package/dist/icons/friends.cjs.js.map +1 -1
  96. package/dist/icons/friends.esm.js.map +1 -1
  97. package/dist/icons/person.cjs.js.map +1 -1
  98. package/dist/icons/person.esm.js.map +1 -1
  99. package/dist/imagePane2.cjs.js.map +1 -1
  100. package/dist/imagePane2.esm.js.map +1 -1
  101. package/dist/index.cjs.js.map +1 -1
  102. package/dist/index.esm.js.map +1 -1
  103. package/dist/internal/internalPane2.cjs.js.map +1 -1
  104. package/dist/internal/internalPane2.esm.js.map +1 -1
  105. package/dist/mainPage/header.cjs.js.map +1 -1
  106. package/dist/mainPage/header.esm.js.map +1 -1
  107. package/dist/mainPage/index.cjs.js.map +1 -1
  108. package/dist/mainPage/index.esm.js.map +1 -1
  109. package/dist/mainPage/navbar.cjs.js.map +1 -1
  110. package/dist/mainPage/navbar.esm.js.map +1 -1
  111. package/dist/n3Pane2.cjs.js.map +1 -1
  112. package/dist/n3Pane2.esm.js.map +1 -1
  113. package/dist/outline/context.cjs.js.map +1 -1
  114. package/dist/outline/context.esm.js.map +1 -1
  115. package/dist/outline/manager2.cjs.js +1 -1
  116. package/dist/outline/manager2.cjs.js.map +1 -1
  117. package/dist/outline/manager2.esm.js +1 -1
  118. package/dist/outline/manager2.esm.js.map +1 -1
  119. package/dist/outline/outlineIcons.cjs.js.map +1 -1
  120. package/dist/outline/outlineIcons.esm.js.map +1 -1
  121. package/dist/outline/propertyViews.cjs.js.map +1 -1
  122. package/dist/outline/propertyViews.esm.js.map +1 -1
  123. package/dist/outline/queryByExample.cjs.js.map +1 -1
  124. package/dist/outline/queryByExample.esm.js.map +1 -1
  125. package/dist/outline/userInput.cjs.js.map +1 -1
  126. package/dist/outline/userInput.esm.js.map +1 -1
  127. package/dist/outline/viewAsImage.cjs.js.map +1 -1
  128. package/dist/outline/viewAsImage.esm.js.map +1 -1
  129. package/dist/outline/viewAsMbox.cjs.js.map +1 -1
  130. package/dist/outline/viewAsMbox.esm.js.map +1 -1
  131. package/dist/pad/padPane2.cjs.js.map +1 -1
  132. package/dist/pad/padPane2.esm.js.map +1 -1
  133. package/dist/playlist/playlistPane.cjs.js.map +1 -1
  134. package/dist/playlist/playlistPane.esm.js.map +1 -1
  135. package/dist/registerPanes.cjs.js.map +1 -1
  136. package/dist/registerPanes.esm.js.map +1 -1
  137. package/dist/schedule/formsForSchedule.cjs.js.map +1 -1
  138. package/dist/schedule/formsForSchedule.esm.js.map +1 -1
  139. package/dist/schedule/schedulePane2.cjs.js.map +1 -1
  140. package/dist/schedule/schedulePane2.esm.js.map +1 -1
  141. package/dist/sharing/sharingPane.cjs.js.map +1 -1
  142. package/dist/sharing/sharingPane.esm.js.map +1 -1
  143. package/dist/slideshow/slideshowPane.cjs.js.map +1 -1
  144. package/dist/slideshow/slideshowPane.esm.js.map +1 -1
  145. package/dist/social/editProfileDetails.cjs.js.map +1 -1
  146. package/dist/social/editProfileDetails.esm.js.map +1 -1
  147. package/dist/social/icons.cjs.js.map +1 -1
  148. package/dist/social/icons.esm.js.map +1 -1
  149. package/dist/social/socialPane2.cjs.js.map +1 -1
  150. package/dist/social/socialPane2.esm.js.map +1 -1
  151. package/dist/social/socialSections.cjs.js.map +1 -1
  152. package/dist/social/socialSections.esm.js.map +1 -1
  153. package/dist/social/triage.cjs.js.map +1 -1
  154. package/dist/social/triage.esm.js.map +1 -1
  155. package/dist/tabbed/tabbedPane.cjs.js.map +1 -1
  156. package/dist/tabbed/tabbedPane.esm.js.map +1 -1
  157. package/dist/tableViewPane.cjs.js.map +1 -1
  158. package/dist/tableViewPane.esm.js.map +1 -1
  159. package/dist/transaction/pane.cjs.js.map +1 -1
  160. package/dist/transaction/pane.esm.js.map +1 -1
  161. package/dist/transaction/period.cjs.js.map +1 -1
  162. package/dist/transaction/period.esm.js.map +1 -1
  163. package/dist/trip/tripPane.cjs.js.map +1 -1
  164. package/dist/trip/tripPane.esm.js.map +1 -1
  165. package/dist/trustedApplications/trustedApplications.dom.cjs.js.map +1 -1
  166. package/dist/trustedApplications/trustedApplications.dom.esm.js.map +1 -1
  167. package/dist/trustedApplications/trustedApplications.utils.cjs.js.map +1 -1
  168. package/dist/trustedApplications/trustedApplications.utils.esm.js.map +1 -1
  169. package/dist/trustedApplications/trustedApplications.view.cjs.js.map +1 -1
  170. package/dist/trustedApplications/trustedApplications.view.esm.js.map +1 -1
  171. package/dist/ui/pane.cjs.js.map +1 -1
  172. package/dist/ui/pane.esm.js.map +1 -1
  173. package/dist/utils/paneUtils.cjs.js.map +1 -1
  174. package/dist/utils/paneUtils.esm.js.map +1 -1
  175. package/dist/utils/podUtils.cjs.js.map +1 -1
  176. package/dist/utils/podUtils.esm.js.map +1 -1
  177. package/dist/utils/webIdUtils.cjs.js.map +1 -1
  178. package/dist/utils/webIdUtils.esm.js.map +1 -1
  179. package/dist/versionInfo.cjs.js +1 -1
  180. package/dist/versionInfo.cjs.js.map +1 -1
  181. package/dist/versionInfo.esm.js +3 -3
  182. package/dist/versionInfo.esm.js.map +1 -1
  183. package/dist/video/videoPane.cjs.js.map +1 -1
  184. package/dist/video/videoPane.esm.js.map +1 -1
  185. package/package.json +13 -13
@@ -1 +1 @@
1
- {"version":3,"file":"humanReadablePane2.esm.js","names":[],"sources":["../src/humanReadablePane.ts"],"sourcesContent":["/* Human-readable Pane\n **\n ** This outline pane contains the document contents for an HTML document\n ** This is for peeking at a page, because the user might not want to leave the data browser.\n */\nimport { icons, ns } from 'solid-ui'\nimport { Util } from 'rdflib'\nimport { marked } from 'marked'\nimport DOMPurify from 'dompurify'\nimport type { DataBrowserContext, RenderEnvironment } from 'pane-registry'\nimport type { NamedNode } from 'rdflib'\nimport './humanReadablePane.css'\n\n// Helper function to check if a URI has a markdown file extension\ntype DokieliCacheValue = 'dokieli' | 'html'\n\ntype HumanReadableIcon = string | Promise<string>\n\ntype HumanReadablePaneDefinition = {\n icon: (subject: NamedNode, context: DataBrowserContext) => HumanReadableIcon\n name: string\n label: (subject: NamedNode, context: DataBrowserContext) => 'Webpage' | 'View' | null\n render: (subject: NamedNode, context: DataBrowserContext) => HTMLDivElement\n}\n\nconst isMarkdownFile = (uri?: string | null): boolean => {\n if (!uri) return false\n const path = uri.split('?')[0].split('#')[0] // Remove query string and fragment\n return /\\.(md|markdown|mdown|mkd|mkdn)$/i.test(path)\n}\n\n// Cache for dokieli detection results (keyed by subject URI)\nconst dokieliCache = new Map<string, DokieliCacheValue>()\n\nfunction applyFrameClasses (\n frame: HTMLElement,\n modifier: 'markdown' | 'plain-text' | 'iframe',\n lines: number\n): void {\n frame.className = ''\n frame.classList.add('human-readable-pane__frame')\n frame.classList.add(`human-readable-pane__frame--${modifier}`)\n frame.style.setProperty('--human-readable-pane-height', `${lines}em`)\n}\n\nconst humanReadablePane: HumanReadablePaneDefinition = {\n icon: function (subject: NamedNode, context: DataBrowserContext): HumanReadableIcon {\n // Markdown files detected by extension\n if (subject && isMarkdownFile(subject.uri)) {\n return icons.iconBase + 'markdown.svg'\n }\n\n // Dokieli files detected by content check\n if (subject) {\n const kb = context.session.store\n\n // Check cache from previous detection\n const cachedResult = dokieliCache.get(subject.uri)\n if (cachedResult === 'dokieli') {\n return icons.iconBase + 'dokieli-logo.png'\n } else if (cachedResult === 'html') {\n return icons.originalIconBase + 'tango/22-text-x-generic.png'\n }\n\n // Check if content already fetched (synchronous)\n const responseText = kb.fetcher.getHeader(subject.doc(), 'content')\n if (responseText && responseText.length > 0) {\n const text = responseText[0]\n const isDokieli = text.includes('<script src=\"https://dokie.li/scripts/dokieli.js\">') ||\n text.includes('dokieli.css')\n dokieliCache.set(subject.uri, isDokieli ? 'dokieli' : 'html')\n return isDokieli\n ? icons.iconBase + 'dokieli-logo.png'\n : icons.originalIconBase + 'tango/22-text-x-generic.png'\n }\n\n // Content not yet fetched - return a promise (async detection)\n const cts = kb.fetcher.getHeader(subject.doc(), 'content-type')\n const ct = cts ? cts[0].split(';', 1)[0].trim() : null\n\n if (ct === 'text/html') {\n return kb.fetcher._fetch(subject.uri)\n .then(response => response.text())\n .then(text => {\n const isDokieli = text.includes('<script src=\"https://dokie.li/scripts/dokieli.js\">') ||\n text.includes('dokieli.css')\n dokieliCache.set(subject.uri, isDokieli ? 'dokieli' : 'html')\n return isDokieli\n ? icons.iconBase + 'dokieli-logo.png'\n : icons.originalIconBase + 'tango/22-text-x-generic.png'\n })\n .catch(() => {\n dokieliCache.set(subject.uri, 'html')\n return icons.originalIconBase + 'tango/22-text-x-generic.png'\n })\n }\n }\n\n // Default for all other human-readable content\n return icons.originalIconBase + 'tango/22-text-x-generic.png'\n },\n\n name: 'humanReadable',\n\n label: function (\n subject: NamedNode,\n context: DataBrowserContext\n ): 'Webpage' | 'View' | null {\n const kb = context.session.store\n\n // See also the source pane, which has lower precedence.\n\n const allowed = [\n 'text/plain',\n 'text/html',\n 'text/markdown',\n 'application/xhtml+xml',\n 'image/png',\n 'image/jpeg',\n 'application/pdf',\n 'video/mp4'\n ]\n\n const hasContentTypeIn = function (\n kb: typeof context.session.store,\n x: NamedNode,\n displayables: string[]\n ): boolean {\n const cts = kb.fetcher.getHeader(x, 'content-type')\n if (cts) {\n for (let j = 0; j < cts.length; j++) {\n for (let k = 0; k < displayables.length; k++) {\n if (cts[j].indexOf(displayables[k]) >= 0) {\n return true\n }\n }\n }\n }\n return false\n }\n\n // This data could come from a fetch OR from ldp container\n const hasContentTypeIn2 = function (\n kb: typeof context.session.store,\n x: NamedNode,\n displayables: string[]\n ): boolean {\n const t = kb.findTypeURIs(x)\n for (let k = 0; k < displayables.length; k++) {\n if (Util.mediaTypeClass(displayables[k]).uri in t) {\n return true\n }\n }\n return false\n }\n\n if (!subject.uri) return null // no bnodes\n\n const t = kb.findTypeURIs(subject)\n if (t[ns.link('WebPage').uri]) return 'Webpage'\n\n // Check file extension for markdown files\n if (isMarkdownFile(subject.uri)) {\n return 'View'\n }\n\n if (\n hasContentTypeIn(kb, subject, allowed) ||\n hasContentTypeIn2(kb, subject, allowed)\n ) {\n // For HTML files, check if it's dokieli (async check, store result for later)\n const cts = kb.fetcher.getHeader(subject.doc(), 'content-type')\n const ct = cts ? cts[0].split(';', 1)[0].trim() : null\n\n if (ct === 'text/html' && !dokieliCache.has(subject.uri)) {\n // Async check for dokieli, don't wait for result\n kb.fetcher._fetch(subject.uri)\n .then(response => response.text())\n .then(text => {\n const isDokieli = text.includes('<script src=\"https://dokie.li/scripts/dokieli.js\">') ||\n text.includes('dokieli.css')\n dokieliCache.set(subject.uri, isDokieli ? 'dokieli' : 'html')\n })\n .catch(() => {\n dokieliCache.set(subject.uri, 'html')\n })\n }\n\n return 'View'\n }\n\n return null\n },\n\n render: function (\n subject: NamedNode,\n context: DataBrowserContext\n ): HTMLDivElement {\n const myDocument = context.dom\n const div = myDocument.createElement('div')\n const kb = context.session.store\n\n function applyEnvironmentAttributes (element: HTMLDivElement): void {\n const environment = (context.environment ?? {}) as Partial<RenderEnvironment>\n element.dataset.layout = environment.layout ?? 'desktop'\n }\n\n const cts = kb.fetcher.getHeader(subject.doc(), 'content-type')\n const ct = cts ? cts[0].split(';', 1)[0].trim() : null // remove content-type parameters\n\n // Fallback: detect markdown by file extension if content-type is not text/markdown\n const isMarkdown = ct === 'text/markdown' || isMarkdownFile(subject.uri)\n const isPlainText = ct === 'text/plain'\n\n if (ct) {\n // console.log('humanReadablePane: c-t:' + ct)\n } else {\n console.log('humanReadablePane: unknown content-type?')\n }\n\n // @@ When we can, use CSP to turn off scripts within the iframe\n div.classList.add('human-readable-pane')\n applyEnvironmentAttributes(div)\n\n // render markdown to html in a DIV element\n const renderMarkdownContent = function (frame: HTMLDivElement) {\n kb.fetcher.webOperation('GET', subject.uri).then(response => {\n const markdownText = response.responseText ?? ''\n const lines = Math.min(30, markdownText.split(/\\n/).length + 5)\n const res = marked.parse(markdownText, { async: false })\n const clean = DOMPurify.sanitize(res)\n frame.innerHTML = clean\n applyFrameClasses(frame, 'markdown', lines)\n }).catch(error => {\n console.error('Error fetching markdown content:', error)\n frame.innerHTML = '<p>Error loading content</p>'\n })\n }\n\n // render plain text in a PRE element\n const renderPlainTextContent = function (frame: HTMLPreElement) {\n kb.fetcher.webOperation('GET', subject.uri).then(response => {\n const plainText = response.responseText ?? ''\n const lines = Math.min(30, plainText.split(/\\n/).length + 5)\n frame.textContent = plainText\n applyFrameClasses(frame, 'plain-text', lines)\n }).catch(error => {\n console.error('Error fetching plain text content:', error)\n frame.textContent = 'Error loading content'\n })\n }\n\n const setIframeAttributes = (frame: HTMLIFrameElement, lines: number) => {\n frame.setAttribute('src', subject.uri)\n applyFrameClasses(frame, 'iframe', lines)\n }\n\n if (isMarkdown) {\n // For markdown, use a DIV element and render the content\n const frame = myDocument.createElement('div')\n renderMarkdownContent(frame)\n const frameContainer = myDocument.createElement('div')\n frameContainer.classList.add('human-readable-pane__container')\n frameContainer.appendChild(frame)\n div.appendChild(frameContainer)\n } else if (isPlainText) {\n // For plain text, use a PRE element and render the content\n const frame = myDocument.createElement('pre')\n renderPlainTextContent(frame)\n const frameContainer = myDocument.createElement('div')\n frameContainer.classList.add('human-readable-pane__container')\n frameContainer.appendChild(frame)\n div.appendChild(frameContainer)\n } else {\n // For other content types, use IFRAME\n const frame = myDocument.createElement('iframe')\n\n // Apply sandbox for HTML/XHTML\n if (ct === 'text/html' || ct === 'application/xhtml+xml') {\n frame.setAttribute('sandbox', 'allow-scripts allow-same-origin allow-forms')\n }\n\n // Fetch content to calculate lines dynamically\n kb.fetcher.webOperation('GET', subject.uri).then(response => {\n const blobText = response.responseText ?? ''\n const newLines = blobText.includes('<script src=\"https://dokie.li/scripts/dokieli.js\">') ? -10 : 5\n const lines = Math.min(30, blobText.split(/\\n/).length + newLines)\n\n // Cache dokieli detection result\n const isDokieli = blobText.includes('<script src=\"https://dokie.li/scripts/dokieli.js\">') ||\n blobText.includes('dokieli.css')\n dokieliCache.set(subject.uri, isDokieli ? 'dokieli' : 'html')\n\n setIframeAttributes(frame, lines)\n }).catch(error => {\n console.error('Error fetching content for line calculation:', error)\n // Fallback to default height\n setIframeAttributes(frame, 30)\n })\n\n const frameContainer = myDocument.createElement('div')\n frameContainer.classList.add('human-readable-pane__container')\n frameContainer.appendChild(frame)\n div.appendChild(frameContainer)\n }\n\n return div\n }\n}\n\nexport default humanReadablePane\n// ends\n"],"mappings":"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"}
1
+ {"version":3,"file":"humanReadablePane2.esm.js","names":["DOMPurify","isMarkdownFile","uri","path","dokieliCache","applyFrameClasses","frame","modifier","lines","humanReadablePane","subject","icons","kb","context","cachedResult","responseText","text","isDokieli","cts","response","allowed","hasContentTypeIn","x","j","k","displayables","hasContentTypeIn2","t","Util","ns","myDocument","div","applyEnvironmentAttributes","environment","ct","isMarkdown","isPlainText","renderMarkdownContent","markdownText","res","marked","error","renderPlainTextContent","plainText","setIframeAttributes","frameContainer","blobText","newLines"],"sources":["../src/humanReadablePane.ts"],"sourcesContent":["/* Human-readable Pane\n **\n ** This outline pane contains the document contents for an HTML document\n ** This is for peeking at a page, because the user might not want to leave the data browser.\n */\nimport { icons, ns } from 'solid-ui'\nimport { Util } from 'rdflib'\nimport { marked } from 'marked'\nimport DOMPurify from 'dompurify'\nimport type { DataBrowserContext, RenderEnvironment } from 'pane-registry'\nimport type { NamedNode } from 'rdflib'\nimport './humanReadablePane.css'\n\n// Helper function to check if a URI has a markdown file extension\ntype DokieliCacheValue = 'dokieli' | 'html'\n\ntype HumanReadableIcon = string | Promise<string>\n\ntype HumanReadablePaneDefinition = {\n icon: (subject: NamedNode, context: DataBrowserContext) => HumanReadableIcon\n name: string\n label: (subject: NamedNode, context: DataBrowserContext) => 'Webpage' | 'View' | null\n render: (subject: NamedNode, context: DataBrowserContext) => HTMLDivElement\n}\n\nconst isMarkdownFile = (uri?: string | null): boolean => {\n if (!uri) return false\n const path = uri.split('?')[0].split('#')[0] // Remove query string and fragment\n return /\\.(md|markdown|mdown|mkd|mkdn)$/i.test(path)\n}\n\n// Cache for dokieli detection results (keyed by subject URI)\nconst dokieliCache = new Map<string, DokieliCacheValue>()\n\nfunction applyFrameClasses (\n frame: HTMLElement,\n modifier: 'markdown' | 'plain-text' | 'iframe',\n lines: number\n): void {\n frame.className = ''\n frame.classList.add('human-readable-pane__frame')\n frame.classList.add(`human-readable-pane__frame--${modifier}`)\n frame.style.setProperty('--human-readable-pane-height', `${lines}em`)\n}\n\nconst humanReadablePane: HumanReadablePaneDefinition = {\n icon: function (subject: NamedNode, context: DataBrowserContext): HumanReadableIcon {\n // Markdown files detected by extension\n if (subject && isMarkdownFile(subject.uri)) {\n return icons.iconBase + 'markdown.svg'\n }\n\n // Dokieli files detected by content check\n if (subject) {\n const kb = context.session.store\n\n // Check cache from previous detection\n const cachedResult = dokieliCache.get(subject.uri)\n if (cachedResult === 'dokieli') {\n return icons.iconBase + 'dokieli-logo.png'\n } else if (cachedResult === 'html') {\n return icons.originalIconBase + 'tango/22-text-x-generic.png'\n }\n\n // Check if content already fetched (synchronous)\n const responseText = kb.fetcher.getHeader(subject.doc(), 'content')\n if (responseText && responseText.length > 0) {\n const text = responseText[0]\n const isDokieli = text.includes('<script src=\"https://dokie.li/scripts/dokieli.js\">') ||\n text.includes('dokieli.css')\n dokieliCache.set(subject.uri, isDokieli ? 'dokieli' : 'html')\n return isDokieli\n ? icons.iconBase + 'dokieli-logo.png'\n : icons.originalIconBase + 'tango/22-text-x-generic.png'\n }\n\n // Content not yet fetched - return a promise (async detection)\n const cts = kb.fetcher.getHeader(subject.doc(), 'content-type')\n const ct = cts ? cts[0].split(';', 1)[0].trim() : null\n\n if (ct === 'text/html') {\n return kb.fetcher._fetch(subject.uri)\n .then(response => response.text())\n .then(text => {\n const isDokieli = text.includes('<script src=\"https://dokie.li/scripts/dokieli.js\">') ||\n text.includes('dokieli.css')\n dokieliCache.set(subject.uri, isDokieli ? 'dokieli' : 'html')\n return isDokieli\n ? icons.iconBase + 'dokieli-logo.png'\n : icons.originalIconBase + 'tango/22-text-x-generic.png'\n })\n .catch(() => {\n dokieliCache.set(subject.uri, 'html')\n return icons.originalIconBase + 'tango/22-text-x-generic.png'\n })\n }\n }\n\n // Default for all other human-readable content\n return icons.originalIconBase + 'tango/22-text-x-generic.png'\n },\n\n name: 'humanReadable',\n\n label: function (\n subject: NamedNode,\n context: DataBrowserContext\n ): 'Webpage' | 'View' | null {\n const kb = context.session.store\n\n // See also the source pane, which has lower precedence.\n\n const allowed = [\n 'text/plain',\n 'text/html',\n 'text/markdown',\n 'application/xhtml+xml',\n 'image/png',\n 'image/jpeg',\n 'application/pdf',\n 'video/mp4'\n ]\n\n const hasContentTypeIn = function (\n kb: typeof context.session.store,\n x: NamedNode,\n displayables: string[]\n ): boolean {\n const cts = kb.fetcher.getHeader(x, 'content-type')\n if (cts) {\n for (let j = 0; j < cts.length; j++) {\n for (let k = 0; k < displayables.length; k++) {\n if (cts[j].indexOf(displayables[k]) >= 0) {\n return true\n }\n }\n }\n }\n return false\n }\n\n // This data could come from a fetch OR from ldp container\n const hasContentTypeIn2 = function (\n kb: typeof context.session.store,\n x: NamedNode,\n displayables: string[]\n ): boolean {\n const t = kb.findTypeURIs(x)\n for (let k = 0; k < displayables.length; k++) {\n if (Util.mediaTypeClass(displayables[k]).uri in t) {\n return true\n }\n }\n return false\n }\n\n if (!subject.uri) return null // no bnodes\n\n const t = kb.findTypeURIs(subject)\n if (t[ns.link('WebPage').uri]) return 'Webpage'\n\n // Check file extension for markdown files\n if (isMarkdownFile(subject.uri)) {\n return 'View'\n }\n\n if (\n hasContentTypeIn(kb, subject, allowed) ||\n hasContentTypeIn2(kb, subject, allowed)\n ) {\n // For HTML files, check if it's dokieli (async check, store result for later)\n const cts = kb.fetcher.getHeader(subject.doc(), 'content-type')\n const ct = cts ? cts[0].split(';', 1)[0].trim() : null\n\n if (ct === 'text/html' && !dokieliCache.has(subject.uri)) {\n // Async check for dokieli, don't wait for result\n kb.fetcher._fetch(subject.uri)\n .then(response => response.text())\n .then(text => {\n const isDokieli = text.includes('<script src=\"https://dokie.li/scripts/dokieli.js\">') ||\n text.includes('dokieli.css')\n dokieliCache.set(subject.uri, isDokieli ? 'dokieli' : 'html')\n })\n .catch(() => {\n dokieliCache.set(subject.uri, 'html')\n })\n }\n\n return 'View'\n }\n\n return null\n },\n\n render: function (\n subject: NamedNode,\n context: DataBrowserContext\n ): HTMLDivElement {\n const myDocument = context.dom\n const div = myDocument.createElement('div')\n const kb = context.session.store\n\n function applyEnvironmentAttributes (element: HTMLDivElement): void {\n const environment = (context.environment ?? {}) as Partial<RenderEnvironment>\n element.dataset.layout = environment.layout ?? 'desktop'\n }\n\n const cts = kb.fetcher.getHeader(subject.doc(), 'content-type')\n const ct = cts ? cts[0].split(';', 1)[0].trim() : null // remove content-type parameters\n\n // Fallback: detect markdown by file extension if content-type is not text/markdown\n const isMarkdown = ct === 'text/markdown' || isMarkdownFile(subject.uri)\n const isPlainText = ct === 'text/plain'\n\n if (ct) {\n // console.log('humanReadablePane: c-t:' + ct)\n } else {\n console.log('humanReadablePane: unknown content-type?')\n }\n\n // @@ When we can, use CSP to turn off scripts within the iframe\n div.classList.add('human-readable-pane')\n applyEnvironmentAttributes(div)\n\n // render markdown to html in a DIV element\n const renderMarkdownContent = function (frame: HTMLDivElement) {\n kb.fetcher.webOperation('GET', subject.uri).then(response => {\n const markdownText = response.responseText ?? ''\n const lines = Math.min(30, markdownText.split(/\\n/).length + 5)\n const res = marked.parse(markdownText, { async: false })\n const clean = DOMPurify.sanitize(res)\n frame.innerHTML = clean\n applyFrameClasses(frame, 'markdown', lines)\n }).catch(error => {\n console.error('Error fetching markdown content:', error)\n frame.innerHTML = '<p>Error loading content</p>'\n })\n }\n\n // render plain text in a PRE element\n const renderPlainTextContent = function (frame: HTMLPreElement) {\n kb.fetcher.webOperation('GET', subject.uri).then(response => {\n const plainText = response.responseText ?? ''\n const lines = Math.min(30, plainText.split(/\\n/).length + 5)\n frame.textContent = plainText\n applyFrameClasses(frame, 'plain-text', lines)\n }).catch(error => {\n console.error('Error fetching plain text content:', error)\n frame.textContent = 'Error loading content'\n })\n }\n\n const setIframeAttributes = (frame: HTMLIFrameElement, lines: number) => {\n frame.setAttribute('src', subject.uri)\n applyFrameClasses(frame, 'iframe', lines)\n }\n\n if (isMarkdown) {\n // For markdown, use a DIV element and render the content\n const frame = myDocument.createElement('div')\n renderMarkdownContent(frame)\n const frameContainer = myDocument.createElement('div')\n frameContainer.classList.add('human-readable-pane__container')\n frameContainer.appendChild(frame)\n div.appendChild(frameContainer)\n } else if (isPlainText) {\n // For plain text, use a PRE element and render the content\n const frame = myDocument.createElement('pre')\n renderPlainTextContent(frame)\n const frameContainer = myDocument.createElement('div')\n frameContainer.classList.add('human-readable-pane__container')\n frameContainer.appendChild(frame)\n div.appendChild(frameContainer)\n } else {\n // For other content types, use IFRAME\n const frame = myDocument.createElement('iframe')\n\n // Apply sandbox for HTML/XHTML\n if (ct === 'text/html' || ct === 'application/xhtml+xml') {\n frame.setAttribute('sandbox', 'allow-scripts allow-same-origin allow-forms')\n }\n\n // Fetch content to calculate lines dynamically\n kb.fetcher.webOperation('GET', subject.uri).then(response => {\n const blobText = response.responseText ?? ''\n const newLines = blobText.includes('<script src=\"https://dokie.li/scripts/dokieli.js\">') ? -10 : 5\n const lines = Math.min(30, blobText.split(/\\n/).length + newLines)\n\n // Cache dokieli detection result\n const isDokieli = blobText.includes('<script src=\"https://dokie.li/scripts/dokieli.js\">') ||\n blobText.includes('dokieli.css')\n dokieliCache.set(subject.uri, isDokieli ? 'dokieli' : 'html')\n\n setIframeAttributes(frame, lines)\n }).catch(error => {\n console.error('Error fetching content for line calculation:', error)\n // Fallback to default height\n setIframeAttributes(frame, 30)\n })\n\n const frameContainer = myDocument.createElement('div')\n frameContainer.classList.add('human-readable-pane__container')\n frameContainer.appendChild(frame)\n div.appendChild(frameContainer)\n }\n\n return div\n }\n}\n\nexport default humanReadablePane\n// ends\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"folder.cjs.js","names":[],"sources":["../../src/icons/folder.svg"],"sourcesContent":["export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2016%2016'%20fill='none'%20%3e%3cpath%20d='M13.334%2013.3333C13.6876%2013.3333%2014.0267%2013.1929%2014.2768%2012.9428C14.5268%2012.6928%2014.6673%2012.3536%2014.6673%2012V5.33333C14.6673%204.97971%2014.5268%204.64057%2014.2768%204.39052C14.0267%204.14048%2013.6876%204%2013.334%204H8.06732C7.84433%204.00219%207.62435%203.94841%207.42752%203.84359C7.23069%203.73877%207.06329%203.58625%206.94065%203.4L6.40065%202.6C6.27924%202.41565%206.11397%202.26432%205.91965%202.1596C5.72533%202.05488%205.50806%202.00004%205.28732%202H2.66732C2.3137%202%201.97456%202.14048%201.72451%202.39052C1.47446%202.64057%201.33398%202.97971%201.33398%203.33333V12C1.33398%2012.3536%201.47446%2012.6928%201.72451%2012.9428C1.97456%2013.1929%202.3137%2013.3333%202.66732%2013.3333H13.334Z'%20stroke='currentColor'%20stroke-width='1.33333'%20stroke-linecap='round'%20stroke-linejoin='round'/%3e%3c/svg%3e\""],"mappings":"AAAA,IAAA,EAAe"}
1
+ {"version":3,"file":"folder.cjs.js","names":["folder_default"],"sources":["../../src/icons/folder.svg"],"sourcesContent":["export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2016%2016'%20fill='none'%20%3e%3cpath%20d='M13.334%2013.3333C13.6876%2013.3333%2014.0267%2013.1929%2014.2768%2012.9428C14.5268%2012.6928%2014.6673%2012.3536%2014.6673%2012V5.33333C14.6673%204.97971%2014.5268%204.64057%2014.2768%204.39052C14.0267%204.14048%2013.6876%204%2013.334%204H8.06732C7.84433%204.00219%207.62435%203.94841%207.42752%203.84359C7.23069%203.73877%207.06329%203.58625%206.94065%203.4L6.40065%202.6C6.27924%202.41565%206.11397%202.26432%205.91965%202.1596C5.72533%202.05488%205.50806%202.00004%205.28732%202H2.66732C2.3137%202%201.97456%202.14048%201.72451%202.39052C1.47446%202.64057%201.33398%202.97971%201.33398%203.33333V12C1.33398%2012.3536%201.47446%2012.6928%201.72451%2012.9428C1.97456%2013.1929%202.3137%2013.3333%202.66732%2013.3333H13.334Z'%20stroke='currentColor'%20stroke-width='1.33333'%20stroke-linecap='round'%20stroke-linejoin='round'/%3e%3c/svg%3e\""],"mappings":"AAAA,IAAAA,EAAe"}
@@ -1 +1 @@
1
- {"version":3,"file":"folder.esm.js","names":[],"sources":["../../src/icons/folder.svg"],"sourcesContent":["export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2016%2016'%20fill='none'%20%3e%3cpath%20d='M13.334%2013.3333C13.6876%2013.3333%2014.0267%2013.1929%2014.2768%2012.9428C14.5268%2012.6928%2014.6673%2012.3536%2014.6673%2012V5.33333C14.6673%204.97971%2014.5268%204.64057%2014.2768%204.39052C14.0267%204.14048%2013.6876%204%2013.334%204H8.06732C7.84433%204.00219%207.62435%203.94841%207.42752%203.84359C7.23069%203.73877%207.06329%203.58625%206.94065%203.4L6.40065%202.6C6.27924%202.41565%206.11397%202.26432%205.91965%202.1596C5.72533%202.05488%205.50806%202.00004%205.28732%202H2.66732C2.3137%202%201.97456%202.14048%201.72451%202.39052C1.47446%202.64057%201.33398%202.97971%201.33398%203.33333V12C1.33398%2012.3536%201.47446%2012.6928%201.72451%2012.9428C1.97456%2013.1929%202.3137%2013.3333%202.66732%2013.3333H13.334Z'%20stroke='currentColor'%20stroke-width='1.33333'%20stroke-linecap='round'%20stroke-linejoin='round'/%3e%3c/svg%3e\""],"mappings":";AAAA,IAAA,IAAe"}
1
+ {"version":3,"file":"folder.esm.js","names":["folder_default"],"sources":["../../src/icons/folder.svg"],"sourcesContent":["export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2016%2016'%20fill='none'%20%3e%3cpath%20d='M13.334%2013.3333C13.6876%2013.3333%2014.0267%2013.1929%2014.2768%2012.9428C14.5268%2012.6928%2014.6673%2012.3536%2014.6673%2012V5.33333C14.6673%204.97971%2014.5268%204.64057%2014.2768%204.39052C14.0267%204.14048%2013.6876%204%2013.334%204H8.06732C7.84433%204.00219%207.62435%203.94841%207.42752%203.84359C7.23069%203.73877%207.06329%203.58625%206.94065%203.4L6.40065%202.6C6.27924%202.41565%206.11397%202.26432%205.91965%202.1596C5.72533%202.05488%205.50806%202.00004%205.28732%202H2.66732C2.3137%202%201.97456%202.14048%201.72451%202.39052C1.47446%202.64057%201.33398%202.97971%201.33398%203.33333V12C1.33398%2012.3536%201.47446%2012.6928%201.72451%2012.9428C1.97456%2013.1929%202.3137%2013.3333%202.66732%2013.3333H13.334Z'%20stroke='currentColor'%20stroke-width='1.33333'%20stroke-linecap='round'%20stroke-linejoin='round'/%3e%3c/svg%3e\""],"mappings":";AAAA,IAAAA,IAAe"}
@@ -1 +1 @@
1
- {"version":3,"file":"friends.cjs.js","names":[],"sources":["../../src/icons/friends.svg"],"sourcesContent":["export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2020%2020'%20fill='none'%20%3e%3cpath%20d='M13.3327%2017.5V15.8333C13.3327%2014.9493%2012.9815%2014.1014%2012.3564%2013.4763C11.7313%2012.8512%2010.8834%2012.5%209.99935%2012.5H4.99935C4.11529%2012.5%203.26745%2012.8512%202.64233%2013.4763C2.01721%2014.1014%201.66602%2014.9493%201.66602%2015.8333V17.5'%20stroke='currentColor'%20stroke-width='1.66667'%20stroke-linecap='round'%20stroke-linejoin='round'/%3e%3cpath%20d='M13.334%202.60669C14.0488%202.792%2014.6818%203.20941%2015.1337%203.79341C15.5856%204.37741%2015.8308%205.09493%2015.8308%205.83336C15.8308%206.57178%2015.5856%207.28931%2015.1337%207.8733C14.6818%208.4573%2014.0488%208.87471%2013.334%209.06002'%20stroke='currentColor'%20stroke-width='1.66667'%20stroke-linecap='round'%20stroke-linejoin='round'/%3e%3cpath%20d='M18.334%2017.5001V15.8334C18.3334%2015.0948%2018.0876%2014.3774%2017.6351%2013.7937C17.1826%2013.2099%2016.5491%2012.793%2015.834%2012.6084'%20stroke='currentColor'%20stroke-width='1.66667'%20stroke-linecap='round'%20stroke-linejoin='round'/%3e%3cpath%20d='M7.49935%209.16667C9.3403%209.16667%2010.8327%207.67428%2010.8327%205.83333C10.8327%203.99238%209.3403%202.5%207.49935%202.5C5.6584%202.5%204.16602%203.99238%204.16602%205.83333C4.16602%207.67428%205.6584%209.16667%207.49935%209.16667Z'%20stroke='currentColor'%20stroke-width='1.66667'%20stroke-linecap='round'%20stroke-linejoin='round'/%3e%3c/svg%3e\""],"mappings":"AAAA,IAAA,EAAe"}
1
+ {"version":3,"file":"friends.cjs.js","names":["friends_default"],"sources":["../../src/icons/friends.svg"],"sourcesContent":["export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2020%2020'%20fill='none'%20%3e%3cpath%20d='M13.3327%2017.5V15.8333C13.3327%2014.9493%2012.9815%2014.1014%2012.3564%2013.4763C11.7313%2012.8512%2010.8834%2012.5%209.99935%2012.5H4.99935C4.11529%2012.5%203.26745%2012.8512%202.64233%2013.4763C2.01721%2014.1014%201.66602%2014.9493%201.66602%2015.8333V17.5'%20stroke='currentColor'%20stroke-width='1.66667'%20stroke-linecap='round'%20stroke-linejoin='round'/%3e%3cpath%20d='M13.334%202.60669C14.0488%202.792%2014.6818%203.20941%2015.1337%203.79341C15.5856%204.37741%2015.8308%205.09493%2015.8308%205.83336C15.8308%206.57178%2015.5856%207.28931%2015.1337%207.8733C14.6818%208.4573%2014.0488%208.87471%2013.334%209.06002'%20stroke='currentColor'%20stroke-width='1.66667'%20stroke-linecap='round'%20stroke-linejoin='round'/%3e%3cpath%20d='M18.334%2017.5001V15.8334C18.3334%2015.0948%2018.0876%2014.3774%2017.6351%2013.7937C17.1826%2013.2099%2016.5491%2012.793%2015.834%2012.6084'%20stroke='currentColor'%20stroke-width='1.66667'%20stroke-linecap='round'%20stroke-linejoin='round'/%3e%3cpath%20d='M7.49935%209.16667C9.3403%209.16667%2010.8327%207.67428%2010.8327%205.83333C10.8327%203.99238%209.3403%202.5%207.49935%202.5C5.6584%202.5%204.16602%203.99238%204.16602%205.83333C4.16602%207.67428%205.6584%209.16667%207.49935%209.16667Z'%20stroke='currentColor'%20stroke-width='1.66667'%20stroke-linecap='round'%20stroke-linejoin='round'/%3e%3c/svg%3e\""],"mappings":"AAAA,IAAAA,EAAe"}
@@ -1 +1 @@
1
- {"version":3,"file":"friends.esm.js","names":[],"sources":["../../src/icons/friends.svg"],"sourcesContent":["export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2020%2020'%20fill='none'%20%3e%3cpath%20d='M13.3327%2017.5V15.8333C13.3327%2014.9493%2012.9815%2014.1014%2012.3564%2013.4763C11.7313%2012.8512%2010.8834%2012.5%209.99935%2012.5H4.99935C4.11529%2012.5%203.26745%2012.8512%202.64233%2013.4763C2.01721%2014.1014%201.66602%2014.9493%201.66602%2015.8333V17.5'%20stroke='currentColor'%20stroke-width='1.66667'%20stroke-linecap='round'%20stroke-linejoin='round'/%3e%3cpath%20d='M13.334%202.60669C14.0488%202.792%2014.6818%203.20941%2015.1337%203.79341C15.5856%204.37741%2015.8308%205.09493%2015.8308%205.83336C15.8308%206.57178%2015.5856%207.28931%2015.1337%207.8733C14.6818%208.4573%2014.0488%208.87471%2013.334%209.06002'%20stroke='currentColor'%20stroke-width='1.66667'%20stroke-linecap='round'%20stroke-linejoin='round'/%3e%3cpath%20d='M18.334%2017.5001V15.8334C18.3334%2015.0948%2018.0876%2014.3774%2017.6351%2013.7937C17.1826%2013.2099%2016.5491%2012.793%2015.834%2012.6084'%20stroke='currentColor'%20stroke-width='1.66667'%20stroke-linecap='round'%20stroke-linejoin='round'/%3e%3cpath%20d='M7.49935%209.16667C9.3403%209.16667%2010.8327%207.67428%2010.8327%205.83333C10.8327%203.99238%209.3403%202.5%207.49935%202.5C5.6584%202.5%204.16602%203.99238%204.16602%205.83333C4.16602%207.67428%205.6584%209.16667%207.49935%209.16667Z'%20stroke='currentColor'%20stroke-width='1.66667'%20stroke-linecap='round'%20stroke-linejoin='round'/%3e%3c/svg%3e\""],"mappings":";AAAA,IAAA,IAAe"}
1
+ {"version":3,"file":"friends.esm.js","names":["friends_default"],"sources":["../../src/icons/friends.svg"],"sourcesContent":["export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2020%2020'%20fill='none'%20%3e%3cpath%20d='M13.3327%2017.5V15.8333C13.3327%2014.9493%2012.9815%2014.1014%2012.3564%2013.4763C11.7313%2012.8512%2010.8834%2012.5%209.99935%2012.5H4.99935C4.11529%2012.5%203.26745%2012.8512%202.64233%2013.4763C2.01721%2014.1014%201.66602%2014.9493%201.66602%2015.8333V17.5'%20stroke='currentColor'%20stroke-width='1.66667'%20stroke-linecap='round'%20stroke-linejoin='round'/%3e%3cpath%20d='M13.334%202.60669C14.0488%202.792%2014.6818%203.20941%2015.1337%203.79341C15.5856%204.37741%2015.8308%205.09493%2015.8308%205.83336C15.8308%206.57178%2015.5856%207.28931%2015.1337%207.8733C14.6818%208.4573%2014.0488%208.87471%2013.334%209.06002'%20stroke='currentColor'%20stroke-width='1.66667'%20stroke-linecap='round'%20stroke-linejoin='round'/%3e%3cpath%20d='M18.334%2017.5001V15.8334C18.3334%2015.0948%2018.0876%2014.3774%2017.6351%2013.7937C17.1826%2013.2099%2016.5491%2012.793%2015.834%2012.6084'%20stroke='currentColor'%20stroke-width='1.66667'%20stroke-linecap='round'%20stroke-linejoin='round'/%3e%3cpath%20d='M7.49935%209.16667C9.3403%209.16667%2010.8327%207.67428%2010.8327%205.83333C10.8327%203.99238%209.3403%202.5%207.49935%202.5C5.6584%202.5%204.16602%203.99238%204.16602%205.83333C4.16602%207.67428%205.6584%209.16667%207.49935%209.16667Z'%20stroke='currentColor'%20stroke-width='1.66667'%20stroke-linecap='round'%20stroke-linejoin='round'/%3e%3c/svg%3e\""],"mappings":";AAAA,IAAAA,IAAe"}
@@ -1 +1 @@
1
- {"version":3,"file":"person.cjs.js","names":[],"sources":["../../src/icons/person.svg"],"sourcesContent":["export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2020%2020'%20fill='none'%20%3e%3cpath%20d='M13.0151%209.27363C14.2948%208.34031%2015.1282%206.82984%2015.1282%205.1282C15.1282%202.30051%2012.8277%200%209.99998%200C7.17228%200%204.87177%202.30051%204.87177%205.1282C4.87177%206.82984%205.70509%208.34031%206.98486%209.27363C3.80361%2010.491%201.53845%2013.5754%201.53845%2017.1795C1.53845%2018.7347%202.80373%2020%204.35896%2020H15.641C17.1962%2020%2018.4615%2018.7347%2018.4615%2017.1795C18.4615%2013.5754%2016.1963%2010.491%2013.0151%209.27363ZM6.41025%205.1282C6.41025%203.14883%208.0206%201.53848%209.99998%201.53848C11.9794%201.53848%2013.5897%203.14883%2013.5897%205.1282C13.5897%207.10758%2011.9794%208.71797%209.99998%208.71797C8.0206%208.71797%206.41025%207.10758%206.41025%205.1282ZM15.641%2018.4615H4.35896C3.65205%2018.4615%203.07693%2017.8864%203.07693%2017.1795C3.07693%2013.362%206.18255%2010.2564%2010%2010.2564C13.8175%2010.2564%2016.9231%2013.362%2016.9231%2017.1795C16.9231%2017.8864%2016.3479%2018.4615%2015.641%2018.4615Z'%20fill='currentColor'/%3e%3c/svg%3e\""],"mappings":"AAAA,IAAA,EAAe"}
1
+ {"version":3,"file":"person.cjs.js","names":["person_default"],"sources":["../../src/icons/person.svg"],"sourcesContent":["export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2020%2020'%20fill='none'%20%3e%3cpath%20d='M13.0151%209.27363C14.2948%208.34031%2015.1282%206.82984%2015.1282%205.1282C15.1282%202.30051%2012.8277%200%209.99998%200C7.17228%200%204.87177%202.30051%204.87177%205.1282C4.87177%206.82984%205.70509%208.34031%206.98486%209.27363C3.80361%2010.491%201.53845%2013.5754%201.53845%2017.1795C1.53845%2018.7347%202.80373%2020%204.35896%2020H15.641C17.1962%2020%2018.4615%2018.7347%2018.4615%2017.1795C18.4615%2013.5754%2016.1963%2010.491%2013.0151%209.27363ZM6.41025%205.1282C6.41025%203.14883%208.0206%201.53848%209.99998%201.53848C11.9794%201.53848%2013.5897%203.14883%2013.5897%205.1282C13.5897%207.10758%2011.9794%208.71797%209.99998%208.71797C8.0206%208.71797%206.41025%207.10758%206.41025%205.1282ZM15.641%2018.4615H4.35896C3.65205%2018.4615%203.07693%2017.8864%203.07693%2017.1795C3.07693%2013.362%206.18255%2010.2564%2010%2010.2564C13.8175%2010.2564%2016.9231%2013.362%2016.9231%2017.1795C16.9231%2017.8864%2016.3479%2018.4615%2015.641%2018.4615Z'%20fill='currentColor'/%3e%3c/svg%3e\""],"mappings":"AAAA,IAAAA,EAAe"}
@@ -1 +1 @@
1
- {"version":3,"file":"person.esm.js","names":[],"sources":["../../src/icons/person.svg"],"sourcesContent":["export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2020%2020'%20fill='none'%20%3e%3cpath%20d='M13.0151%209.27363C14.2948%208.34031%2015.1282%206.82984%2015.1282%205.1282C15.1282%202.30051%2012.8277%200%209.99998%200C7.17228%200%204.87177%202.30051%204.87177%205.1282C4.87177%206.82984%205.70509%208.34031%206.98486%209.27363C3.80361%2010.491%201.53845%2013.5754%201.53845%2017.1795C1.53845%2018.7347%202.80373%2020%204.35896%2020H15.641C17.1962%2020%2018.4615%2018.7347%2018.4615%2017.1795C18.4615%2013.5754%2016.1963%2010.491%2013.0151%209.27363ZM6.41025%205.1282C6.41025%203.14883%208.0206%201.53848%209.99998%201.53848C11.9794%201.53848%2013.5897%203.14883%2013.5897%205.1282C13.5897%207.10758%2011.9794%208.71797%209.99998%208.71797C8.0206%208.71797%206.41025%207.10758%206.41025%205.1282ZM15.641%2018.4615H4.35896C3.65205%2018.4615%203.07693%2017.8864%203.07693%2017.1795C3.07693%2013.362%206.18255%2010.2564%2010%2010.2564C13.8175%2010.2564%2016.9231%2013.362%2016.9231%2017.1795C16.9231%2017.8864%2016.3479%2018.4615%2015.641%2018.4615Z'%20fill='currentColor'/%3e%3c/svg%3e\""],"mappings":";AAAA,IAAA,IAAe"}
1
+ {"version":3,"file":"person.esm.js","names":["person_default"],"sources":["../../src/icons/person.svg"],"sourcesContent":["export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2020%2020'%20fill='none'%20%3e%3cpath%20d='M13.0151%209.27363C14.2948%208.34031%2015.1282%206.82984%2015.1282%205.1282C15.1282%202.30051%2012.8277%200%209.99998%200C7.17228%200%204.87177%202.30051%204.87177%205.1282C4.87177%206.82984%205.70509%208.34031%206.98486%209.27363C3.80361%2010.491%201.53845%2013.5754%201.53845%2017.1795C1.53845%2018.7347%202.80373%2020%204.35896%2020H15.641C17.1962%2020%2018.4615%2018.7347%2018.4615%2017.1795C18.4615%2013.5754%2016.1963%2010.491%2013.0151%209.27363ZM6.41025%205.1282C6.41025%203.14883%208.0206%201.53848%209.99998%201.53848C11.9794%201.53848%2013.5897%203.14883%2013.5897%205.1282C13.5897%207.10758%2011.9794%208.71797%209.99998%208.71797C8.0206%208.71797%206.41025%207.10758%206.41025%205.1282ZM15.641%2018.4615H4.35896C3.65205%2018.4615%203.07693%2017.8864%203.07693%2017.1795C3.07693%2013.362%206.18255%2010.2564%2010%2010.2564C13.8175%2010.2564%2016.9231%2013.362%2016.9231%2017.1795C16.9231%2017.8864%2016.3479%2018.4615%2015.641%2018.4615Z'%20fill='currentColor'/%3e%3c/svg%3e\""],"mappings":";AAAA,IAAAA,IAAe"}
@@ -1 +1 @@
1
- {"version":3,"file":"imagePane2.cjs.js","names":[],"sources":["../src/imagePane.ts"],"sourcesContent":["/* Image Pane\n **\n ** This outline pane contains the document contents for an Image document\n */\nimport * as UI from 'solid-ui'\nimport type { DataBrowserContext } from 'pane-registry'\nimport type { NamedNode } from 'rdflib'\nimport './imagePane.css'\n\ntype FetcherLike = {\n getHeader: (subject: NamedNode, header: string) => string[] | undefined\n _fetch: (uri: string) => Promise<Response>\n}\n\ntype ImageStore = DataBrowserContext['session']['store'] & {\n fetcher: FetcherLike\n}\n\ntype ImagePane = {\n icon: string\n name: string\n label: (subject: NamedNode, context: DataBrowserContext) => string | null\n render: (subject: NamedNode, context: DataBrowserContext) => HTMLDivElement\n}\n\nfunction contentTypeMatch (\n store: ImageStore,\n subject: NamedNode,\n contentTypes: string[]\n): boolean {\n const contentTypesForSubject = store.fetcher.getHeader(subject, 'content-type')\n if (!contentTypesForSubject) {\n return false\n }\n\n for (const contentType of contentTypesForSubject) {\n for (const candidate of contentTypes) {\n if (contentType.includes(candidate)) {\n return true\n }\n }\n }\n\n return false\n}\n\nexport const imagePane: ImagePane = {\n icon: UI.icons.originalIconBase + 'tango/22-image-x-generic.png',\n\n name: 'image',\n\n label: function (subject: NamedNode, context: DataBrowserContext): string | null {\n const store = context.session.store as ImageStore\n if (\n !store.anyStatementMatching(\n subject,\n UI.ns.rdf('type'),\n store.sym('http://purl.org/dc/terms/Image')\n )\n ) {\n // NB: Not dc: namespace!\n return null\n }\n\n // See also the source pane, which has lower precedence.\n\n const suppressed = ['application/pdf']\n if (contentTypeMatch(store, subject, suppressed)) {\n return null\n }\n return 'Image'\n },\n\n render: function (subject: NamedNode, context: DataBrowserContext): HTMLDivElement {\n const myDocument = context.dom\n const store = context.session.store as ImageStore\n const div = myDocument.createElement('div')\n div.setAttribute('class', 'image-pane')\n const img = myDocument.createElement('img')\n\n // get image with authenticated fetch\n store.fetcher._fetch(subject.uri)\n .then(function (response: Response) {\n return response.blob()\n })\n .then(function (myBlob: Blob) {\n const objectURL = URL.createObjectURL(myBlob)\n img.setAttribute('src', objectURL) // w640 h480 //\n })\n img.classList.add('image-pane__image')\n div.appendChild(img)\n return div\n }\n}\n\n// ends\n"],"mappings":"8HAyBA,SAAS,EACP,EACA,EACA,EACS,CACT,IAAM,EAAyB,EAAM,QAAQ,UAAU,EAAS,cAAc,EAC9E,GAAI,CAAC,EACH,MAAO,GAGT,IAAK,IAAM,KAAe,EACxB,IAAK,IAAM,KAAa,EACtB,GAAI,EAAY,SAAS,CAAS,EAChC,MAAO,GAKb,MAAO,EACT,CAEA,IAAa,EAAuB,CAClC,KAAM,EAAG,MAAM,iBAAmB,+BAElC,KAAM,QAEN,MAAO,SAAU,EAAoB,EAA4C,CAC/E,IAAM,EAAQ,EAAQ,QAAQ,MAkB9B,MAhBE,CAAC,EAAM,qBACL,EACA,EAAG,GAAG,IAAI,MAAM,EAChB,EAAM,IAAI,gCAAgC,CAC5C,GASE,EAAiB,EAAO,EAAS,CADjB,iBACiB,CAAU,EACtC,KAEF,OACT,EAEA,OAAQ,SAAU,EAAoB,EAA6C,CACjF,IAAM,EAAa,EAAQ,IACrB,EAAQ,EAAQ,QAAQ,MACxB,EAAM,EAAW,cAAc,KAAK,EAC1C,EAAI,aAAa,QAAS,YAAY,EACtC,IAAM,EAAM,EAAW,cAAc,KAAK,EAa1C,OAVA,EAAM,QAAQ,OAAO,EAAQ,GAAG,CAAC,CAC9B,KAAK,SAAU,EAAoB,CAClC,OAAO,EAAS,KAAK,CACvB,CAAC,CAAC,CACD,KAAK,SAAU,EAAc,CAC5B,IAAM,EAAY,IAAI,gBAAgB,CAAM,EAC5C,EAAI,aAAa,MAAO,CAAS,CACnC,CAAC,EACH,EAAI,UAAU,IAAI,mBAAmB,EACrC,EAAI,YAAY,CAAG,EACZ,CACT,CACF"}
1
+ {"version":3,"file":"imagePane2.cjs.js","names":["UI","require_runtime","solid_ui","contentTypeMatch","contentTypesForSubject","store","subject","contentType","candidate","contentTypes","imagePane","context","myDocument","div","img","response","objectURL","myBlob"],"sources":["../src/imagePane.ts"],"sourcesContent":["/* Image Pane\n **\n ** This outline pane contains the document contents for an Image document\n */\nimport * as UI from 'solid-ui'\nimport type { DataBrowserContext } from 'pane-registry'\nimport type { NamedNode } from 'rdflib'\nimport './imagePane.css'\n\ntype FetcherLike = {\n getHeader: (subject: NamedNode, header: string) => string[] | undefined\n _fetch: (uri: string) => Promise<Response>\n}\n\ntype ImageStore = DataBrowserContext['session']['store'] & {\n fetcher: FetcherLike\n}\n\ntype ImagePane = {\n icon: string\n name: string\n label: (subject: NamedNode, context: DataBrowserContext) => string | null\n render: (subject: NamedNode, context: DataBrowserContext) => HTMLDivElement\n}\n\nfunction contentTypeMatch (\n store: ImageStore,\n subject: NamedNode,\n contentTypes: string[]\n): boolean {\n const contentTypesForSubject = store.fetcher.getHeader(subject, 'content-type')\n if (!contentTypesForSubject) {\n return false\n }\n\n for (const contentType of contentTypesForSubject) {\n for (const candidate of contentTypes) {\n if (contentType.includes(candidate)) {\n return true\n }\n }\n }\n\n return false\n}\n\nexport const imagePane: ImagePane = {\n icon: UI.icons.originalIconBase + 'tango/22-image-x-generic.png',\n\n name: 'image',\n\n label: function (subject: NamedNode, context: DataBrowserContext): string | null {\n const store = context.session.store as ImageStore\n if (\n !store.anyStatementMatching(\n subject,\n UI.ns.rdf('type'),\n store.sym('http://purl.org/dc/terms/Image')\n )\n ) {\n // NB: Not dc: namespace!\n return null\n }\n\n // See also the source pane, which has lower precedence.\n\n const suppressed = ['application/pdf']\n if (contentTypeMatch(store, subject, suppressed)) {\n return null\n }\n return 'Image'\n },\n\n render: function (subject: NamedNode, context: DataBrowserContext): HTMLDivElement {\n const myDocument = context.dom\n const store = context.session.store as ImageStore\n const div = myDocument.createElement('div')\n div.setAttribute('class', 'image-pane')\n const img = myDocument.createElement('img')\n\n // get image with authenticated fetch\n store.fetcher._fetch(subject.uri)\n .then(function (response: Response) {\n return response.blob()\n })\n .then(function (myBlob: Blob) {\n const objectURL = URL.createObjectURL(myBlob)\n img.setAttribute('src', objectURL) // w640 h480 //\n })\n img.classList.add('image-pane__image')\n div.appendChild(img)\n return div\n }\n}\n\n// ends\n"],"mappings":"8HAyBA,SAASG,EACP,EACA,EACA,EACS,CACT,IAAMC,EAAyBC,EAAM,QAAQ,UAAUC,EAAS,cAAc,EAC9E,GAAI,CAACF,EACH,MAAO,GAGT,IAAK,IAAMG,KAAeH,EACxB,IAAK,IAAMI,KAAaC,EACtB,GAAIF,EAAY,SAASC,CAAS,EAChC,MAAO,GAKb,MAAO,EACT,CAEA,IAAaE,EAAuB,CAClC,KAAMV,EAAG,MAAM,iBAAmB,+BAElC,KAAM,QAEN,MAAO,SAAU,EAAoB,EAA4C,CAC/E,IAAMK,EAAQM,EAAQ,QAAQ,MAkB9B,MAhBE,CAACN,EAAM,qBACLC,EACAN,EAAG,GAAG,IAAI,MAAM,EAChBK,EAAM,IAAI,gCAAgC,CAC5C,GASEF,EAAiBE,EAAOC,EAAS,CADjB,iBACiB,CAAU,EACtC,KAEF,OACT,EAEA,OAAQ,SAAU,EAAoB,EAA6C,CACjF,IAAMM,EAAaD,EAAQ,IACrBN,EAAQM,EAAQ,QAAQ,MACxBE,EAAMD,EAAW,cAAc,KAAK,EAC1CC,EAAI,aAAa,QAAS,YAAY,EACtC,IAAMC,EAAMF,EAAW,cAAc,KAAK,EAa1C,OAVAP,EAAM,QAAQ,OAAOC,EAAQ,GAAG,CAAC,CAC9B,KAAK,SAAU,EAAoB,CAClC,OAAOS,EAAS,KAAK,CACvB,CAAC,CAAC,CACD,KAAK,SAAU,EAAc,CAC5B,IAAMC,EAAY,IAAI,gBAAgBC,CAAM,EAC5CH,EAAI,aAAa,MAAOE,CAAS,CACnC,CAAC,EACHF,EAAI,UAAU,IAAI,mBAAmB,EACrCD,EAAI,YAAYC,CAAG,EACZD,CACT,CACF"}
@@ -1 +1 @@
1
- {"version":3,"file":"imagePane2.esm.js","names":[],"sources":["../src/imagePane.ts"],"sourcesContent":["/* Image Pane\n **\n ** This outline pane contains the document contents for an Image document\n */\nimport * as UI from 'solid-ui'\nimport type { DataBrowserContext } from 'pane-registry'\nimport type { NamedNode } from 'rdflib'\nimport './imagePane.css'\n\ntype FetcherLike = {\n getHeader: (subject: NamedNode, header: string) => string[] | undefined\n _fetch: (uri: string) => Promise<Response>\n}\n\ntype ImageStore = DataBrowserContext['session']['store'] & {\n fetcher: FetcherLike\n}\n\ntype ImagePane = {\n icon: string\n name: string\n label: (subject: NamedNode, context: DataBrowserContext) => string | null\n render: (subject: NamedNode, context: DataBrowserContext) => HTMLDivElement\n}\n\nfunction contentTypeMatch (\n store: ImageStore,\n subject: NamedNode,\n contentTypes: string[]\n): boolean {\n const contentTypesForSubject = store.fetcher.getHeader(subject, 'content-type')\n if (!contentTypesForSubject) {\n return false\n }\n\n for (const contentType of contentTypesForSubject) {\n for (const candidate of contentTypes) {\n if (contentType.includes(candidate)) {\n return true\n }\n }\n }\n\n return false\n}\n\nexport const imagePane: ImagePane = {\n icon: UI.icons.originalIconBase + 'tango/22-image-x-generic.png',\n\n name: 'image',\n\n label: function (subject: NamedNode, context: DataBrowserContext): string | null {\n const store = context.session.store as ImageStore\n if (\n !store.anyStatementMatching(\n subject,\n UI.ns.rdf('type'),\n store.sym('http://purl.org/dc/terms/Image')\n )\n ) {\n // NB: Not dc: namespace!\n return null\n }\n\n // See also the source pane, which has lower precedence.\n\n const suppressed = ['application/pdf']\n if (contentTypeMatch(store, subject, suppressed)) {\n return null\n }\n return 'Image'\n },\n\n render: function (subject: NamedNode, context: DataBrowserContext): HTMLDivElement {\n const myDocument = context.dom\n const store = context.session.store as ImageStore\n const div = myDocument.createElement('div')\n div.setAttribute('class', 'image-pane')\n const img = myDocument.createElement('img')\n\n // get image with authenticated fetch\n store.fetcher._fetch(subject.uri)\n .then(function (response: Response) {\n return response.blob()\n })\n .then(function (myBlob: Blob) {\n const objectURL = URL.createObjectURL(myBlob)\n img.setAttribute('src', objectURL) // w640 h480 //\n })\n img.classList.add('image-pane__image')\n div.appendChild(img)\n return div\n }\n}\n\n// ends\n"],"mappings":";;;AAyBA,SAAS,EACP,GACA,GACA,GACS;CACT,IAAM,IAAyB,EAAM,QAAQ,UAAU,GAAS,cAAc;CAC9E,IAAI,CAAC,GACH,OAAO;CAGT,KAAK,IAAM,KAAe,GACxB,KAAK,IAAM,KAAa,GACtB,IAAI,EAAY,SAAS,CAAS,GAChC,OAAO;CAKb,OAAO;AACT;AAEA,IAAa,IAAuB;CAClC,MAAM,EAAG,MAAM,mBAAmB;CAElC,MAAM;CAEN,OAAO,SAAU,GAAoB,GAA4C;EAC/E,IAAM,IAAQ,EAAQ,QAAQ;EAkB9B,OAhBE,CAAC,EAAM,qBACL,GACA,EAAG,GAAG,IAAI,MAAM,GAChB,EAAM,IAAI,gCAAgC,CAC5C,KASE,EAAiB,GAAO,GAAS,CADjB,iBACiB,CAAU,IACtC,OAEF;CACT;CAEA,QAAQ,SAAU,GAAoB,GAA6C;EACjF,IAAM,IAAa,EAAQ,KACrB,IAAQ,EAAQ,QAAQ,OACxB,IAAM,EAAW,cAAc,KAAK;EAC1C,EAAI,aAAa,SAAS,YAAY;EACtC,IAAM,IAAM,EAAW,cAAc,KAAK;EAa1C,OAVA,EAAM,QAAQ,OAAO,EAAQ,GAAG,CAAC,CAC9B,KAAK,SAAU,GAAoB;GAClC,OAAO,EAAS,KAAK;EACvB,CAAC,CAAC,CACD,KAAK,SAAU,GAAc;GAC5B,IAAM,IAAY,IAAI,gBAAgB,CAAM;GAC5C,EAAI,aAAa,OAAO,CAAS;EACnC,CAAC,GACH,EAAI,UAAU,IAAI,mBAAmB,GACrC,EAAI,YAAY,CAAG,GACZ;CACT;AACF"}
1
+ {"version":3,"file":"imagePane2.esm.js","names":["UI","contentTypeMatch","contentTypesForSubject","store","subject","contentType","candidate","contentTypes","imagePane","context","myDocument","div","img","response","objectURL","myBlob"],"sources":["../src/imagePane.ts"],"sourcesContent":["/* Image Pane\n **\n ** This outline pane contains the document contents for an Image document\n */\nimport * as UI from 'solid-ui'\nimport type { DataBrowserContext } from 'pane-registry'\nimport type { NamedNode } from 'rdflib'\nimport './imagePane.css'\n\ntype FetcherLike = {\n getHeader: (subject: NamedNode, header: string) => string[] | undefined\n _fetch: (uri: string) => Promise<Response>\n}\n\ntype ImageStore = DataBrowserContext['session']['store'] & {\n fetcher: FetcherLike\n}\n\ntype ImagePane = {\n icon: string\n name: string\n label: (subject: NamedNode, context: DataBrowserContext) => string | null\n render: (subject: NamedNode, context: DataBrowserContext) => HTMLDivElement\n}\n\nfunction contentTypeMatch (\n store: ImageStore,\n subject: NamedNode,\n contentTypes: string[]\n): boolean {\n const contentTypesForSubject = store.fetcher.getHeader(subject, 'content-type')\n if (!contentTypesForSubject) {\n return false\n }\n\n for (const contentType of contentTypesForSubject) {\n for (const candidate of contentTypes) {\n if (contentType.includes(candidate)) {\n return true\n }\n }\n }\n\n return false\n}\n\nexport const imagePane: ImagePane = {\n icon: UI.icons.originalIconBase + 'tango/22-image-x-generic.png',\n\n name: 'image',\n\n label: function (subject: NamedNode, context: DataBrowserContext): string | null {\n const store = context.session.store as ImageStore\n if (\n !store.anyStatementMatching(\n subject,\n UI.ns.rdf('type'),\n store.sym('http://purl.org/dc/terms/Image')\n )\n ) {\n // NB: Not dc: namespace!\n return null\n }\n\n // See also the source pane, which has lower precedence.\n\n const suppressed = ['application/pdf']\n if (contentTypeMatch(store, subject, suppressed)) {\n return null\n }\n return 'Image'\n },\n\n render: function (subject: NamedNode, context: DataBrowserContext): HTMLDivElement {\n const myDocument = context.dom\n const store = context.session.store as ImageStore\n const div = myDocument.createElement('div')\n div.setAttribute('class', 'image-pane')\n const img = myDocument.createElement('img')\n\n // get image with authenticated fetch\n store.fetcher._fetch(subject.uri)\n .then(function (response: Response) {\n return response.blob()\n })\n .then(function (myBlob: Blob) {\n const objectURL = URL.createObjectURL(myBlob)\n img.setAttribute('src', objectURL) // w640 h480 //\n })\n img.classList.add('image-pane__image')\n div.appendChild(img)\n return div\n }\n}\n\n// ends\n"],"mappings":";;;AAyBA,SAASC,EACP,GACA,GACA,GACS;CACT,IAAMC,IAAyBC,EAAM,QAAQ,UAAUC,GAAS,cAAc;CAC9E,IAAI,CAACF,GACH,OAAO;CAGT,KAAK,IAAMG,KAAeH,GACxB,KAAK,IAAMI,KAAaC,GACtB,IAAIF,EAAY,SAASC,CAAS,GAChC,OAAO;CAKb,OAAO;AACT;AAEA,IAAaE,IAAuB;CAClC,MAAMR,EAAG,MAAM,mBAAmB;CAElC,MAAM;CAEN,OAAO,SAAU,GAAoB,GAA4C;EAC/E,IAAMG,IAAQM,EAAQ,QAAQ;EAkB9B,OAhBE,CAACN,EAAM,qBACLC,GACAJ,EAAG,GAAG,IAAI,MAAM,GAChBG,EAAM,IAAI,gCAAgC,CAC5C,KASEF,EAAiBE,GAAOC,GAAS,CADjB,iBACiB,CAAU,IACtC,OAEF;CACT;CAEA,QAAQ,SAAU,GAAoB,GAA6C;EACjF,IAAMM,IAAaD,EAAQ,KACrBN,IAAQM,EAAQ,QAAQ,OACxBE,IAAMD,EAAW,cAAc,KAAK;EAC1C,EAAI,aAAa,SAAS,YAAY;EACtC,IAAME,IAAMF,EAAW,cAAc,KAAK;EAa1C,OAVAP,EAAM,QAAQ,OAAOC,EAAQ,GAAG,CAAC,CAC9B,KAAK,SAAU,GAAoB;GAClC,OAAOS,EAAS,KAAK;EACvB,CAAC,CAAC,CACD,KAAK,SAAU,GAAc;GAC5B,IAAMC,IAAY,IAAI,gBAAgBC,CAAM;GAC5C,EAAI,aAAa,OAAOD,CAAS;EACnC,CAAC,GACHF,EAAI,UAAU,IAAI,mBAAmB,GACrCD,EAAI,YAAYC,CAAG,GACZD;CACT;AACF"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs.js","names":[],"sources":["../src/index.ts"],"sourcesContent":["/* SOLID PANES\n **\n ** Panes are regions of the outline view in which a particular subject is\n ** displayed in a particular way.\n ** Different panes about the same subject are typically stacked vertically.\n ** Panes may be used naked or with a pane selection header.\n **\n ** The label() method has two functions: it determines whether the pane is\n ** relevant to a given subject, returning null if not.\n ** If it is relevant, then it returns a suitable tooltip for a control which selects the pane\n */\n\nimport versionInfo from './versionInfo'\nimport * as UI from 'solid-ui'\nimport { LiveStore } from 'rdflib'\nimport { solidLogicSingleton, store } from 'solid-logic'\nimport OutlineManager from './outline/manager.js'\nimport { registerPanes } from './registerPanes.js'\nimport {\n list,\n paneForIcon,\n paneForPredicate,\n register,\n byName,\n RenderEnvironment\n} from 'pane-registry'\nimport { createContext } from './outline/context'\nimport { initMainPage, refreshUI } from './mainPage'\n\nfunction getOutliner (dom, environment?: RenderEnvironment): OutlineManager {\n if (!dom.outlineManager) {\n const context = createContext(\n dom,\n { list, paneForIcon, paneForPredicate, register, byName },\n store as LiveStore,\n solidLogicSingleton,\n environment\n )\n dom.outlineManager = new OutlineManager(context)\n } else if (environment) {\n dom.outlineManager.context = dom.outlineManager.context || {}\n dom.outlineManager.context.environment = environment\n }\n return dom.outlineManager\n}\n\nfunction updateEnvironment (outliner: OutlineManager, environment: RenderEnvironment) {\n if (!outliner) return\n outliner.context = outliner.context || {}\n outliner.context.environment = environment\n}\n\nif (typeof window !== 'undefined') {\n getOutliner(window.document)\n}\n\nregisterPanes((cjsOrEsModule: any) => register(cjsOrEsModule.default || cjsOrEsModule))\n\n// This has common outline mode functionality for the default and other other panes\n// A separate outline manager is required per DOM in cases like a browser extension\n// where there are many occurrences of window and of window.document\n// But each DOM should have just one outline manager.\n\nexport {\n OutlineManager,\n getOutliner,\n updateEnvironment,\n UI,\n versionInfo,\n initMainPage,\n refreshUI,\n list, // from paneRegistry\n paneForIcon, // from paneRegistry\n paneForPredicate, // from paneRegistry\n register, // from paneRegistry\n byName // from paneRegistry\n}\n\n// export for simpler access by non-node scripts\nif (typeof window !== 'undefined') {\n ;(<any>window).panes = {\n getOutliner\n }\n}\n"],"mappings":"mZA6BA,SAAS,EAAa,EAAK,EAAiD,CAC1E,GAAK,EAAI,eASE,IACT,EAAI,eAAe,QAAU,EAAI,eAAe,SAAW,CAAC,EAC5D,EAAI,eAAe,QAAQ,YAAc,OAXlB,CACvB,IAAM,EAAU,EAAA,cACd,EACA,CAAE,KAAA,EAAA,KAAM,YAAA,EAAA,YAAa,iBAAA,EAAA,iBAAkB,SAAA,EAAA,SAAU,OAAA,EAAA,MAAO,EACxD,EAAA,MACA,EAAA,oBACA,CACF,EACA,EAAI,eAAiB,IAAI,EAAA,QAAe,CAAO,CACjD,CAIA,OAAO,EAAI,cACb,CAEA,SAAS,EAAmB,EAA0B,EAAgC,CAC/E,IACL,EAAS,QAAU,EAAS,SAAW,CAAC,EACxC,EAAS,QAAQ,YAAc,EACjC,CAEI,OAAO,OAAW,KACpB,EAAY,OAAO,QAAQ,EAG7B,EAAA,cAAe,IAAA,EAAuB,EAAA,SAAA,CAAS,EAAc,SAAW,CAAa,CAAC,EAuBlF,OAAO,OAAW,MACnB,OAAc,MAAQ,CACrB,aACF"}
1
+ {"version":3,"file":"index.cjs.js","names":["createContext","store","solidLogicSingleton","OutlineManager","registerPanes","register","require_runtime","require_versionInfo","require_manager","require_registerPanes","require_context","require_index","solid_ui","solid_logic","pane_registry","getOutliner","dom","environment","context","updateEnvironment","outliner","cjsOrEsModule"],"sources":["../src/index.ts"],"sourcesContent":["/* SOLID PANES\n **\n ** Panes are regions of the outline view in which a particular subject is\n ** displayed in a particular way.\n ** Different panes about the same subject are typically stacked vertically.\n ** Panes may be used naked or with a pane selection header.\n **\n ** The label() method has two functions: it determines whether the pane is\n ** relevant to a given subject, returning null if not.\n ** If it is relevant, then it returns a suitable tooltip for a control which selects the pane\n */\n\nimport versionInfo from './versionInfo'\nimport * as UI from 'solid-ui'\nimport { LiveStore } from 'rdflib'\nimport { solidLogicSingleton, store } from 'solid-logic'\nimport OutlineManager from './outline/manager.js'\nimport { registerPanes } from './registerPanes.js'\nimport {\n list,\n paneForIcon,\n paneForPredicate,\n register,\n byName,\n RenderEnvironment\n} from 'pane-registry'\nimport { createContext } from './outline/context'\nimport { initMainPage, refreshUI } from './mainPage'\n\nfunction getOutliner (dom, environment?: RenderEnvironment): OutlineManager {\n if (!dom.outlineManager) {\n const context = createContext(\n dom,\n { list, paneForIcon, paneForPredicate, register, byName },\n store as LiveStore,\n solidLogicSingleton,\n environment\n )\n dom.outlineManager = new OutlineManager(context)\n } else if (environment) {\n dom.outlineManager.context = dom.outlineManager.context || {}\n dom.outlineManager.context.environment = environment\n }\n return dom.outlineManager\n}\n\nfunction updateEnvironment (outliner: OutlineManager, environment: RenderEnvironment) {\n if (!outliner) return\n outliner.context = outliner.context || {}\n outliner.context.environment = environment\n}\n\nif (typeof window !== 'undefined') {\n getOutliner(window.document)\n}\n\nregisterPanes((cjsOrEsModule: any) => register(cjsOrEsModule.default || cjsOrEsModule))\n\n// This has common outline mode functionality for the default and other other panes\n// A separate outline manager is required per DOM in cases like a browser extension\n// where there are many occurrences of window and of window.document\n// But each DOM should have just one outline manager.\n\nexport {\n OutlineManager,\n getOutliner,\n updateEnvironment,\n UI,\n versionInfo,\n initMainPage,\n refreshUI,\n list, // from paneRegistry\n paneForIcon, // from paneRegistry\n paneForPredicate, // from paneRegistry\n register, // from paneRegistry\n byName // from paneRegistry\n}\n\n// export for simpler access by non-node scripts\nif (typeof window !== 'undefined') {\n ;(<any>window).panes = {\n getOutliner\n }\n}\n"],"mappings":"mZA6BA,SAASe,EAAa,EAAK,EAAiD,CAC1E,GAAKC,EAAI,eASEC,IACT,EAAI,eAAe,QAAUD,EAAI,eAAe,SAAW,CAAC,EAC5D,EAAI,eAAe,QAAQ,YAAcC,OAXlB,CACvB,IAAMC,EAAUlB,EAAAA,cACdgB,EACA,CAAE,KAAAF,EAAA,KAAM,YAAAA,EAAA,YAAa,iBAAAA,EAAA,iBAAkB,SAAAA,EAAA,SAAU,OAAAA,EAAA,MAAO,EACxDb,EAAAA,MACAC,EAAAA,oBACAe,CACF,EACA,EAAI,eAAiB,IAAId,EAAAA,QAAee,CAAO,CACjD,CAIA,OAAOF,EAAI,cACb,CAEA,SAASG,EAAmB,EAA0B,EAAgC,CAC/EC,IACL,EAAS,QAAUA,EAAS,SAAW,CAAC,EACxC,EAAS,QAAQ,YAAcH,EACjC,CAEI,OAAO,OAAW,KACpBF,EAAY,OAAO,QAAQ,EAG7BX,EAAAA,cAAe,IAAA,EAAuBC,EAAAA,SAAAA,CAASgB,EAAc,SAAWA,CAAa,CAAC,EAuBlF,OAAO,OAAW,MACnB,OAAc,MAAQ,CACrB,aACF"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.esm.js","names":[],"sources":["../src/index.ts"],"sourcesContent":["/* SOLID PANES\n **\n ** Panes are regions of the outline view in which a particular subject is\n ** displayed in a particular way.\n ** Different panes about the same subject are typically stacked vertically.\n ** Panes may be used naked or with a pane selection header.\n **\n ** The label() method has two functions: it determines whether the pane is\n ** relevant to a given subject, returning null if not.\n ** If it is relevant, then it returns a suitable tooltip for a control which selects the pane\n */\n\nimport versionInfo from './versionInfo'\nimport * as UI from 'solid-ui'\nimport { LiveStore } from 'rdflib'\nimport { solidLogicSingleton, store } from 'solid-logic'\nimport OutlineManager from './outline/manager.js'\nimport { registerPanes } from './registerPanes.js'\nimport {\n list,\n paneForIcon,\n paneForPredicate,\n register,\n byName,\n RenderEnvironment\n} from 'pane-registry'\nimport { createContext } from './outline/context'\nimport { initMainPage, refreshUI } from './mainPage'\n\nfunction getOutliner (dom, environment?: RenderEnvironment): OutlineManager {\n if (!dom.outlineManager) {\n const context = createContext(\n dom,\n { list, paneForIcon, paneForPredicate, register, byName },\n store as LiveStore,\n solidLogicSingleton,\n environment\n )\n dom.outlineManager = new OutlineManager(context)\n } else if (environment) {\n dom.outlineManager.context = dom.outlineManager.context || {}\n dom.outlineManager.context.environment = environment\n }\n return dom.outlineManager\n}\n\nfunction updateEnvironment (outliner: OutlineManager, environment: RenderEnvironment) {\n if (!outliner) return\n outliner.context = outliner.context || {}\n outliner.context.environment = environment\n}\n\nif (typeof window !== 'undefined') {\n getOutliner(window.document)\n}\n\nregisterPanes((cjsOrEsModule: any) => register(cjsOrEsModule.default || cjsOrEsModule))\n\n// This has common outline mode functionality for the default and other other panes\n// A separate outline manager is required per DOM in cases like a browser extension\n// where there are many occurrences of window and of window.document\n// But each DOM should have just one outline manager.\n\nexport {\n OutlineManager,\n getOutliner,\n updateEnvironment,\n UI,\n versionInfo,\n initMainPage,\n refreshUI,\n list, // from paneRegistry\n paneForIcon, // from paneRegistry\n paneForPredicate, // from paneRegistry\n register, // from paneRegistry\n byName // from paneRegistry\n}\n\n// export for simpler access by non-node scripts\nif (typeof window !== 'undefined') {\n ;(<any>window).panes = {\n getOutliner\n }\n}\n"],"mappings":";;;;;;;;;AA6BA,SAAS,EAAa,GAAK,GAAiD;CAC1E,IAAK,EAAI,gBASF,AAAI,MACT,EAAI,eAAe,UAAU,EAAI,eAAe,WAAW,CAAC,GAC5D,EAAI,eAAe,QAAQ,cAAc;MAXlB;EACvB,IAAM,IAAU,EACd,GACA;GAAE;GAAM;GAAa;GAAkB;GAAU;EAAO,GACxD,GACA,GACA,CACF;EACA,EAAI,iBAAiB,IAAI,EAAe,CAAO;CACjD;CAIA,OAAO,EAAI;AACb;AAEA,SAAS,EAAmB,GAA0B,GAAgC;CAC/E,MACL,EAAS,UAAU,EAAS,WAAW,CAAC,GACxC,EAAS,QAAQ,cAAc;AACjC;AAEI,OAAO,SAAW,OACpB,EAAY,OAAO,QAAQ,GAG7B,GAAe,MAAuB,EAAS,EAAc,WAAW,CAAa,CAAC,GAuBlF,OAAO,SAAW,QACnB,OAAc,QAAQ,EACrB,eACF"}
1
+ {"version":3,"file":"index.esm.js","names":["OutlineManager","versionInfo_default","manager_default","UI","getOutliner","dom","environment","context","createContext","store","solidLogicSingleton","updateEnvironment","outliner","registerPanes","register","cjsOrEsModule","byName","initMainPage","list","paneForIcon","paneForPredicate","refreshUI"],"sources":["../src/index.ts"],"sourcesContent":["/* SOLID PANES\n **\n ** Panes are regions of the outline view in which a particular subject is\n ** displayed in a particular way.\n ** Different panes about the same subject are typically stacked vertically.\n ** Panes may be used naked or with a pane selection header.\n **\n ** The label() method has two functions: it determines whether the pane is\n ** relevant to a given subject, returning null if not.\n ** If it is relevant, then it returns a suitable tooltip for a control which selects the pane\n */\n\nimport versionInfo from './versionInfo'\nimport * as UI from 'solid-ui'\nimport { LiveStore } from 'rdflib'\nimport { solidLogicSingleton, store } from 'solid-logic'\nimport OutlineManager from './outline/manager.js'\nimport { registerPanes } from './registerPanes.js'\nimport {\n list,\n paneForIcon,\n paneForPredicate,\n register,\n byName,\n RenderEnvironment\n} from 'pane-registry'\nimport { createContext } from './outline/context'\nimport { initMainPage, refreshUI } from './mainPage'\n\nfunction getOutliner (dom, environment?: RenderEnvironment): OutlineManager {\n if (!dom.outlineManager) {\n const context = createContext(\n dom,\n { list, paneForIcon, paneForPredicate, register, byName },\n store as LiveStore,\n solidLogicSingleton,\n environment\n )\n dom.outlineManager = new OutlineManager(context)\n } else if (environment) {\n dom.outlineManager.context = dom.outlineManager.context || {}\n dom.outlineManager.context.environment = environment\n }\n return dom.outlineManager\n}\n\nfunction updateEnvironment (outliner: OutlineManager, environment: RenderEnvironment) {\n if (!outliner) return\n outliner.context = outliner.context || {}\n outliner.context.environment = environment\n}\n\nif (typeof window !== 'undefined') {\n getOutliner(window.document)\n}\n\nregisterPanes((cjsOrEsModule: any) => register(cjsOrEsModule.default || cjsOrEsModule))\n\n// This has common outline mode functionality for the default and other other panes\n// A separate outline manager is required per DOM in cases like a browser extension\n// where there are many occurrences of window and of window.document\n// But each DOM should have just one outline manager.\n\nexport {\n OutlineManager,\n getOutliner,\n updateEnvironment,\n UI,\n versionInfo,\n initMainPage,\n refreshUI,\n list, // from paneRegistry\n paneForIcon, // from paneRegistry\n paneForPredicate, // from paneRegistry\n register, // from paneRegistry\n byName // from paneRegistry\n}\n\n// export for simpler access by non-node scripts\nif (typeof window !== 'undefined') {\n ;(<any>window).panes = {\n getOutliner\n }\n}\n"],"mappings":";;;;;;;;;AA6BA,SAASI,EAAa,GAAK,GAAiD;CAC1E,IAAKC,EAAI,gBASF,AAAIC,MACT,EAAI,eAAe,UAAUD,EAAI,eAAe,WAAW,CAAC,GAC5D,EAAI,eAAe,QAAQ,cAAcC;MAXlB;EACvB,IAAMC,IAAUC,EACdH,GACA;GAAE;GAAM;GAAa;GAAkB;GAAU;EAAO,GACxDI,GACAC,GACAJ,CACF;EACA,EAAI,iBAAiB,IAAIN,EAAeO,CAAO;CACjD;CAIA,OAAOF,EAAI;AACb;AAEA,SAASM,EAAmB,GAA0B,GAAgC;CACpF,AAAKC,MACL,EAAS,UAAUA,EAAS,WAAW,CAAC,GACxC,EAAS,QAAQ,cAAcN;AACjC;AAEI,OAAO,SAAW,OACpBF,EAAY,OAAO,QAAQ,GAG7BS,GAAe,MAAuBC,EAASC,EAAc,WAAWA,CAAa,CAAC,GAuBlF,OAAO,SAAW,QACnB,OAAc,QAAQ,EACrB,eACF"}
@@ -1 +1 @@
1
- {"version":3,"file":"internalPane2.cjs.js","names":[],"sources":["../../src/internal/internalPane.ts"],"sourcesContent":["/* Internal Pane\n **\n ** This outline pane contains the properties which are\n ** internal to the user's interaction with the web, and are not normally displayed\n */\n/* global alert confirm */\n\nimport { icons, ns, widgets } from 'solid-ui'\nimport { BlankNode, IndexedFormula, literal, NamedNode, st, sym, Variable, Store } from 'rdflib'\nimport { PaneDefinition } from 'pane-registry'\nimport './internalPane.css'\n\nconst pane: PaneDefinition = {\n icon: icons.originalIconBase + 'tango/22-emblem-system.png',\n\n name: 'internal',\n\n label: function () {\n return 'Under The Hood' // There is often a URI even of no statements\n },\n\n render: function (subject, context) {\n const dom = context.dom\n // @ts-ignore\n const store = context.session.store as Store\n const canonizedSubject = store.canon(subject) as BlankNode | NamedNode | Variable\n const types = store.findTypeURIs(canonizedSubject)\n\n function filter (pred: NamedNode) {\n if (types['http://www.w3.org/2007/ont/link#ProtocolEvent']) return true // display everything for them\n const view = context.session.paneRegistry.byName('internal')\n return (\n view &&\n view.predicates &&\n !!(typeof view.predicates[pred.uri] !== 'undefined')\n )\n }\n\n const div = dom.createElement('div')\n div.classList.add('internalPane', 'internalPaneContent')\n\n function deleteRecursive (kb: IndexedFormula, folder: NamedNode) {\n const fetcher = (kb as any).fetcher\n if (!fetcher) {\n console.error('No fetcher available')\n return\n }\n return new Promise(function (resolve, reject) {\n fetcher.load(folder).then(function () {\n const promises = kb.each(folder, ns.ldp('contains')).map(file => {\n if (kb.holds(file, ns.rdf('type'), ns.ldp('BasicContainer'))) {\n return deleteRecursive(kb, file as NamedNode)\n } else {\n console.log('deleteRecursive leaf file: ' + file)\n return fetcher.webOperation('DELETE', (file as NamedNode).uri)\n }\n })\n Promise.all(promises).then(\n () => {\n console.log('deleteRecursive empty folder: ' + folder)\n fetcher\n .webOperation('DELETE', folder.uri)\n .then(() => {\n console.log('Deleted Ok: ' + folder)\n resolve(undefined)\n })\n .catch((err: string) => {\n const str = 'Unable to delete ' + folder + ': ' + err\n console.log(str)\n reject(new Error(str))\n })\n resolve(undefined)\n },\n err => {\n alert(err)\n reject(err)\n }\n )\n })\n })\n }\n\n const isDocument = subject.uri && !subject.uri.includes('#')\n if (isDocument) {\n const controls = div.appendChild(dom.createElement('table'))\n controls.classList.add('internalPaneControls')\n const controlRow = controls.appendChild(dom.createElement('tr'))\n\n const deleteCell = controlRow.appendChild(dom.createElement('td'))\n const isFolder =\n (subject.uri && subject.uri.endsWith('/')) ||\n store.holds(subject, ns.rdf('type'), ns.ldp('Container'))\n const noun = isFolder ? 'folder' : 'file'\n if (!isProtectedUri(subject)) {\n console.log(subject)\n const deleteButton = widgets.deleteButtonWithCheck(\n dom,\n deleteCell,\n noun,\n function () {\n if (\n !confirm(\n `Are you sure you want to delete ${subject}? This cannot be undone.`\n )\n ) {\n return\n }\n // @@ TODO Remove casing of store.fetcher\n if (!store.fetcher) {\n throw new Error('Store has no fetcher')\n }\n const promise = isFolder\n ? (deleteRecursive(store, subject) || Promise.resolve())\n : store.fetcher.webOperation('DELETE', subject.uri) || Promise.resolve()\n promise\n .then(() => {\n const str = 'Deleted: ' + subject\n console.log(str)\n })\n .catch((err: any) => {\n const str = 'Unable to delete ' + subject + ': ' + err\n console.log(str)\n alert(str)\n })\n }\n )\n\n deleteButton.removeAttribute('class') // Remove hover hide\n deleteButton.classList.add('internalPaneDeleteButton')\n deleteCell.appendChild(deleteButton)\n }\n\n const refreshCell = controlRow.appendChild(dom.createElement('td'))\n const refreshButton = widgets.button(\n dom,\n icons.iconBase + 'noun_479395.svg',\n 'refresh'\n )\n refreshCell.appendChild(refreshButton)\n refreshButton.addEventListener('click', () => {\n if (!store.fetcher) {\n throw new Error('Store has no fetcher')\n }\n store.fetcher.refresh(subject, function (\n ok,\n errm\n ) {\n let str\n if (ok) {\n str = 'Refreshed OK: ' + subject\n } else {\n str = 'Error refreshing: ' + subject + ': ' + errm\n }\n console.log(str)\n alert(str)\n })\n })\n }\n\n let plist = store.statementsMatching(subject)\n let docURI = ''\n if (!store.fetcher) {\n throw new Error('Store has no fetcher')\n }\n\n if (subject.uri) {\n plist.push(\n st(\n subject,\n sym('http://www.w3.org/2007/ont/link#uri'),\n subject.uri as any, // @@ TODO Remove casting\n store.fetcher.appNode\n )\n )\n if (subject.uri.indexOf('#') >= 0) {\n docURI = subject.uri.split('#')[0]\n plist.push(\n st(\n subject,\n sym('http://www.w3.org/2007/ont/link#documentURI'),\n subject.uri.split('#')[0] as any, // @@ TODO Remove casting\n store.fetcher.appNode\n )\n )\n plist.push(\n st(\n subject,\n sym('http://www.w3.org/2007/ont/link#document'),\n sym(subject.uri.split('#')[0]),\n store.fetcher.appNode\n )\n )\n } else {\n docURI = subject.uri\n }\n }\n if (docURI) {\n if (!store.updater) {\n throw new Error('Store has no updater')\n }\n\n const ed = store.updater.editable(docURI)\n if (ed) {\n plist.push(\n st(\n subject,\n sym('http://www.w3.org/ns/rww#editable'),\n literal(ed.toString()),\n store.fetcher.appNode\n )\n )\n }\n }\n // @@ TODO get a proper type\n const outliner: any = context.getOutliner(dom)\n outliner.appendPropertyTRs(div, plist, false, filter)\n plist = store.statementsMatching(undefined, undefined, subject)\n outliner.appendPropertyTRs(div, plist, true, filter)\n return div\n },\n\n predicates: {\n // Predicates used for inner workings. Under the hood\n 'http://www.w3.org/2007/ont/link#request': 1,\n 'http://www.w3.org/2007/ont/link#requestedBy': 1,\n 'http://www.w3.org/2007/ont/link#source': 1,\n 'http://www.w3.org/2007/ont/link#session': 2, // 2= test neg but display\n 'http://www.w3.org/2007/ont/link#uri': 1,\n 'http://www.w3.org/2007/ont/link#documentURI': 1,\n 'http://www.w3.org/2007/ont/link#document': 1,\n 'http://www.w3.org/2007/ont/link#all': 1, // From userinput.js\n 'http://www.w3.org/2007/ont/link#Document': 1,\n 'http://www.w3.org/ns/rww#editable': 1,\n 'http://www.w3.org/2000/01/rdf-schema#seeAlso': 1,\n 'http://www.w3.org/2002/07/owl#': 1\n },\n\n classes: {\n // Things which are inherently already undercover\n 'http://www.w3.org/2007/ont/link#ProtocolEvent': 1\n }\n}\n\nfunction isProtectedUri (subject: NamedNode): boolean {\n // TODO: Could make the code below smarter by removing some of the redundancy by creating a recursive function, but did not bother now\n const siteUri = subject.site().uri\n return (\n subject.uri === siteUri ||\n subject.uri === siteUri + 'profile/' ||\n subject.uri === siteUri + 'profile/card' ||\n subject.uri === siteUri + 'settings/' ||\n subject.uri === siteUri + 'settings/prefs.ttl' ||\n subject.uri === siteUri + 'settings/privateTypeIndex.ttl' ||\n subject.uri === siteUri + 'settings/publicTypeIndex.ttl' ||\n subject.uri === siteUri + 'settings/serverSide.ttl'\n )\n}\n\nexport default pane\n\n// ends\n"],"mappings":"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"}
1
+ {"version":3,"file":"internalPane2.cjs.js","names":["icons","ns","widgets","st","sym","literal","solid_ui","rdflib","pane","dom","context","store","canonizedSubject","subject","types","filter","view","pred","div","deleteRecursive","fetcher","kb","folder","promises","file","resolve","str","err","reject","controls","controlRow","deleteCell","isFolder","noun","isProtectedUri","deleteButton","refreshCell","refreshButton","ok","errm","plist","docURI","ed","outliner","siteUri"],"sources":["../../src/internal/internalPane.ts"],"sourcesContent":["/* Internal Pane\n **\n ** This outline pane contains the properties which are\n ** internal to the user's interaction with the web, and are not normally displayed\n */\n/* global alert confirm */\n\nimport { icons, ns, widgets } from 'solid-ui'\nimport { BlankNode, IndexedFormula, literal, NamedNode, st, sym, Variable, Store } from 'rdflib'\nimport { PaneDefinition } from 'pane-registry'\nimport './internalPane.css'\n\nconst pane: PaneDefinition = {\n icon: icons.originalIconBase + 'tango/22-emblem-system.png',\n\n name: 'internal',\n\n label: function () {\n return 'Under The Hood' // There is often a URI even of no statements\n },\n\n render: function (subject, context) {\n const dom = context.dom\n // @ts-ignore\n const store = context.session.store as Store\n const canonizedSubject = store.canon(subject) as BlankNode | NamedNode | Variable\n const types = store.findTypeURIs(canonizedSubject)\n\n function filter (pred: NamedNode) {\n if (types['http://www.w3.org/2007/ont/link#ProtocolEvent']) return true // display everything for them\n const view = context.session.paneRegistry.byName('internal')\n return (\n view &&\n view.predicates &&\n !!(typeof view.predicates[pred.uri] !== 'undefined')\n )\n }\n\n const div = dom.createElement('div')\n div.classList.add('internalPane', 'internalPaneContent')\n\n function deleteRecursive (kb: IndexedFormula, folder: NamedNode) {\n const fetcher = (kb as any).fetcher\n if (!fetcher) {\n console.error('No fetcher available')\n return\n }\n return new Promise(function (resolve, reject) {\n fetcher.load(folder).then(function () {\n const promises = kb.each(folder, ns.ldp('contains')).map(file => {\n if (kb.holds(file, ns.rdf('type'), ns.ldp('BasicContainer'))) {\n return deleteRecursive(kb, file as NamedNode)\n } else {\n console.log('deleteRecursive leaf file: ' + file)\n return fetcher.webOperation('DELETE', (file as NamedNode).uri)\n }\n })\n Promise.all(promises).then(\n () => {\n console.log('deleteRecursive empty folder: ' + folder)\n fetcher\n .webOperation('DELETE', folder.uri)\n .then(() => {\n console.log('Deleted Ok: ' + folder)\n resolve(undefined)\n })\n .catch((err: string) => {\n const str = 'Unable to delete ' + folder + ': ' + err\n console.log(str)\n reject(new Error(str))\n })\n resolve(undefined)\n },\n err => {\n alert(err)\n reject(err)\n }\n )\n })\n })\n }\n\n const isDocument = subject.uri && !subject.uri.includes('#')\n if (isDocument) {\n const controls = div.appendChild(dom.createElement('table'))\n controls.classList.add('internalPaneControls')\n const controlRow = controls.appendChild(dom.createElement('tr'))\n\n const deleteCell = controlRow.appendChild(dom.createElement('td'))\n const isFolder =\n (subject.uri && subject.uri.endsWith('/')) ||\n store.holds(subject, ns.rdf('type'), ns.ldp('Container'))\n const noun = isFolder ? 'folder' : 'file'\n if (!isProtectedUri(subject)) {\n console.log(subject)\n const deleteButton = widgets.deleteButtonWithCheck(\n dom,\n deleteCell,\n noun,\n function () {\n if (\n !confirm(\n `Are you sure you want to delete ${subject}? This cannot be undone.`\n )\n ) {\n return\n }\n // @@ TODO Remove casing of store.fetcher\n if (!store.fetcher) {\n throw new Error('Store has no fetcher')\n }\n const promise = isFolder\n ? (deleteRecursive(store, subject) || Promise.resolve())\n : store.fetcher.webOperation('DELETE', subject.uri) || Promise.resolve()\n promise\n .then(() => {\n const str = 'Deleted: ' + subject\n console.log(str)\n })\n .catch((err: any) => {\n const str = 'Unable to delete ' + subject + ': ' + err\n console.log(str)\n alert(str)\n })\n }\n )\n\n deleteButton.removeAttribute('class') // Remove hover hide\n deleteButton.classList.add('internalPaneDeleteButton')\n deleteCell.appendChild(deleteButton)\n }\n\n const refreshCell = controlRow.appendChild(dom.createElement('td'))\n const refreshButton = widgets.button(\n dom,\n icons.iconBase + 'noun_479395.svg',\n 'refresh'\n )\n refreshCell.appendChild(refreshButton)\n refreshButton.addEventListener('click', () => {\n if (!store.fetcher) {\n throw new Error('Store has no fetcher')\n }\n store.fetcher.refresh(subject, function (\n ok,\n errm\n ) {\n let str\n if (ok) {\n str = 'Refreshed OK: ' + subject\n } else {\n str = 'Error refreshing: ' + subject + ': ' + errm\n }\n console.log(str)\n alert(str)\n })\n })\n }\n\n let plist = store.statementsMatching(subject)\n let docURI = ''\n if (!store.fetcher) {\n throw new Error('Store has no fetcher')\n }\n\n if (subject.uri) {\n plist.push(\n st(\n subject,\n sym('http://www.w3.org/2007/ont/link#uri'),\n subject.uri as any, // @@ TODO Remove casting\n store.fetcher.appNode\n )\n )\n if (subject.uri.indexOf('#') >= 0) {\n docURI = subject.uri.split('#')[0]\n plist.push(\n st(\n subject,\n sym('http://www.w3.org/2007/ont/link#documentURI'),\n subject.uri.split('#')[0] as any, // @@ TODO Remove casting\n store.fetcher.appNode\n )\n )\n plist.push(\n st(\n subject,\n sym('http://www.w3.org/2007/ont/link#document'),\n sym(subject.uri.split('#')[0]),\n store.fetcher.appNode\n )\n )\n } else {\n docURI = subject.uri\n }\n }\n if (docURI) {\n if (!store.updater) {\n throw new Error('Store has no updater')\n }\n\n const ed = store.updater.editable(docURI)\n if (ed) {\n plist.push(\n st(\n subject,\n sym('http://www.w3.org/ns/rww#editable'),\n literal(ed.toString()),\n store.fetcher.appNode\n )\n )\n }\n }\n // @@ TODO get a proper type\n const outliner: any = context.getOutliner(dom)\n outliner.appendPropertyTRs(div, plist, false, filter)\n plist = store.statementsMatching(undefined, undefined, subject)\n outliner.appendPropertyTRs(div, plist, true, filter)\n return div\n },\n\n predicates: {\n // Predicates used for inner workings. Under the hood\n 'http://www.w3.org/2007/ont/link#request': 1,\n 'http://www.w3.org/2007/ont/link#requestedBy': 1,\n 'http://www.w3.org/2007/ont/link#source': 1,\n 'http://www.w3.org/2007/ont/link#session': 2, // 2= test neg but display\n 'http://www.w3.org/2007/ont/link#uri': 1,\n 'http://www.w3.org/2007/ont/link#documentURI': 1,\n 'http://www.w3.org/2007/ont/link#document': 1,\n 'http://www.w3.org/2007/ont/link#all': 1, // From userinput.js\n 'http://www.w3.org/2007/ont/link#Document': 1,\n 'http://www.w3.org/ns/rww#editable': 1,\n 'http://www.w3.org/2000/01/rdf-schema#seeAlso': 1,\n 'http://www.w3.org/2002/07/owl#': 1\n },\n\n classes: {\n // Things which are inherently already undercover\n 'http://www.w3.org/2007/ont/link#ProtocolEvent': 1\n }\n}\n\nfunction isProtectedUri (subject: NamedNode): boolean {\n // TODO: Could make the code below smarter by removing some of the redundancy by creating a recursive function, but did not bother now\n const siteUri = subject.site().uri\n return (\n subject.uri === siteUri ||\n subject.uri === siteUri + 'profile/' ||\n subject.uri === siteUri + 'profile/card' ||\n subject.uri === siteUri + 'settings/' ||\n subject.uri === siteUri + 'settings/prefs.ttl' ||\n subject.uri === siteUri + 'settings/privateTypeIndex.ttl' ||\n subject.uri === siteUri + 'settings/publicTypeIndex.ttl' ||\n subject.uri === siteUri + 'settings/serverSide.ttl'\n )\n}\n\nexport default pane\n\n// ends\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"internalPane2.esm.js","names":[],"sources":["../../src/internal/internalPane.ts"],"sourcesContent":["/* Internal Pane\n **\n ** This outline pane contains the properties which are\n ** internal to the user's interaction with the web, and are not normally displayed\n */\n/* global alert confirm */\n\nimport { icons, ns, widgets } from 'solid-ui'\nimport { BlankNode, IndexedFormula, literal, NamedNode, st, sym, Variable, Store } from 'rdflib'\nimport { PaneDefinition } from 'pane-registry'\nimport './internalPane.css'\n\nconst pane: PaneDefinition = {\n icon: icons.originalIconBase + 'tango/22-emblem-system.png',\n\n name: 'internal',\n\n label: function () {\n return 'Under The Hood' // There is often a URI even of no statements\n },\n\n render: function (subject, context) {\n const dom = context.dom\n // @ts-ignore\n const store = context.session.store as Store\n const canonizedSubject = store.canon(subject) as BlankNode | NamedNode | Variable\n const types = store.findTypeURIs(canonizedSubject)\n\n function filter (pred: NamedNode) {\n if (types['http://www.w3.org/2007/ont/link#ProtocolEvent']) return true // display everything for them\n const view = context.session.paneRegistry.byName('internal')\n return (\n view &&\n view.predicates &&\n !!(typeof view.predicates[pred.uri] !== 'undefined')\n )\n }\n\n const div = dom.createElement('div')\n div.classList.add('internalPane', 'internalPaneContent')\n\n function deleteRecursive (kb: IndexedFormula, folder: NamedNode) {\n const fetcher = (kb as any).fetcher\n if (!fetcher) {\n console.error('No fetcher available')\n return\n }\n return new Promise(function (resolve, reject) {\n fetcher.load(folder).then(function () {\n const promises = kb.each(folder, ns.ldp('contains')).map(file => {\n if (kb.holds(file, ns.rdf('type'), ns.ldp('BasicContainer'))) {\n return deleteRecursive(kb, file as NamedNode)\n } else {\n console.log('deleteRecursive leaf file: ' + file)\n return fetcher.webOperation('DELETE', (file as NamedNode).uri)\n }\n })\n Promise.all(promises).then(\n () => {\n console.log('deleteRecursive empty folder: ' + folder)\n fetcher\n .webOperation('DELETE', folder.uri)\n .then(() => {\n console.log('Deleted Ok: ' + folder)\n resolve(undefined)\n })\n .catch((err: string) => {\n const str = 'Unable to delete ' + folder + ': ' + err\n console.log(str)\n reject(new Error(str))\n })\n resolve(undefined)\n },\n err => {\n alert(err)\n reject(err)\n }\n )\n })\n })\n }\n\n const isDocument = subject.uri && !subject.uri.includes('#')\n if (isDocument) {\n const controls = div.appendChild(dom.createElement('table'))\n controls.classList.add('internalPaneControls')\n const controlRow = controls.appendChild(dom.createElement('tr'))\n\n const deleteCell = controlRow.appendChild(dom.createElement('td'))\n const isFolder =\n (subject.uri && subject.uri.endsWith('/')) ||\n store.holds(subject, ns.rdf('type'), ns.ldp('Container'))\n const noun = isFolder ? 'folder' : 'file'\n if (!isProtectedUri(subject)) {\n console.log(subject)\n const deleteButton = widgets.deleteButtonWithCheck(\n dom,\n deleteCell,\n noun,\n function () {\n if (\n !confirm(\n `Are you sure you want to delete ${subject}? This cannot be undone.`\n )\n ) {\n return\n }\n // @@ TODO Remove casing of store.fetcher\n if (!store.fetcher) {\n throw new Error('Store has no fetcher')\n }\n const promise = isFolder\n ? (deleteRecursive(store, subject) || Promise.resolve())\n : store.fetcher.webOperation('DELETE', subject.uri) || Promise.resolve()\n promise\n .then(() => {\n const str = 'Deleted: ' + subject\n console.log(str)\n })\n .catch((err: any) => {\n const str = 'Unable to delete ' + subject + ': ' + err\n console.log(str)\n alert(str)\n })\n }\n )\n\n deleteButton.removeAttribute('class') // Remove hover hide\n deleteButton.classList.add('internalPaneDeleteButton')\n deleteCell.appendChild(deleteButton)\n }\n\n const refreshCell = controlRow.appendChild(dom.createElement('td'))\n const refreshButton = widgets.button(\n dom,\n icons.iconBase + 'noun_479395.svg',\n 'refresh'\n )\n refreshCell.appendChild(refreshButton)\n refreshButton.addEventListener('click', () => {\n if (!store.fetcher) {\n throw new Error('Store has no fetcher')\n }\n store.fetcher.refresh(subject, function (\n ok,\n errm\n ) {\n let str\n if (ok) {\n str = 'Refreshed OK: ' + subject\n } else {\n str = 'Error refreshing: ' + subject + ': ' + errm\n }\n console.log(str)\n alert(str)\n })\n })\n }\n\n let plist = store.statementsMatching(subject)\n let docURI = ''\n if (!store.fetcher) {\n throw new Error('Store has no fetcher')\n }\n\n if (subject.uri) {\n plist.push(\n st(\n subject,\n sym('http://www.w3.org/2007/ont/link#uri'),\n subject.uri as any, // @@ TODO Remove casting\n store.fetcher.appNode\n )\n )\n if (subject.uri.indexOf('#') >= 0) {\n docURI = subject.uri.split('#')[0]\n plist.push(\n st(\n subject,\n sym('http://www.w3.org/2007/ont/link#documentURI'),\n subject.uri.split('#')[0] as any, // @@ TODO Remove casting\n store.fetcher.appNode\n )\n )\n plist.push(\n st(\n subject,\n sym('http://www.w3.org/2007/ont/link#document'),\n sym(subject.uri.split('#')[0]),\n store.fetcher.appNode\n )\n )\n } else {\n docURI = subject.uri\n }\n }\n if (docURI) {\n if (!store.updater) {\n throw new Error('Store has no updater')\n }\n\n const ed = store.updater.editable(docURI)\n if (ed) {\n plist.push(\n st(\n subject,\n sym('http://www.w3.org/ns/rww#editable'),\n literal(ed.toString()),\n store.fetcher.appNode\n )\n )\n }\n }\n // @@ TODO get a proper type\n const outliner: any = context.getOutliner(dom)\n outliner.appendPropertyTRs(div, plist, false, filter)\n plist = store.statementsMatching(undefined, undefined, subject)\n outliner.appendPropertyTRs(div, plist, true, filter)\n return div\n },\n\n predicates: {\n // Predicates used for inner workings. Under the hood\n 'http://www.w3.org/2007/ont/link#request': 1,\n 'http://www.w3.org/2007/ont/link#requestedBy': 1,\n 'http://www.w3.org/2007/ont/link#source': 1,\n 'http://www.w3.org/2007/ont/link#session': 2, // 2= test neg but display\n 'http://www.w3.org/2007/ont/link#uri': 1,\n 'http://www.w3.org/2007/ont/link#documentURI': 1,\n 'http://www.w3.org/2007/ont/link#document': 1,\n 'http://www.w3.org/2007/ont/link#all': 1, // From userinput.js\n 'http://www.w3.org/2007/ont/link#Document': 1,\n 'http://www.w3.org/ns/rww#editable': 1,\n 'http://www.w3.org/2000/01/rdf-schema#seeAlso': 1,\n 'http://www.w3.org/2002/07/owl#': 1\n },\n\n classes: {\n // Things which are inherently already undercover\n 'http://www.w3.org/2007/ont/link#ProtocolEvent': 1\n }\n}\n\nfunction isProtectedUri (subject: NamedNode): boolean {\n // TODO: Could make the code below smarter by removing some of the redundancy by creating a recursive function, but did not bother now\n const siteUri = subject.site().uri\n return (\n subject.uri === siteUri ||\n subject.uri === siteUri + 'profile/' ||\n subject.uri === siteUri + 'profile/card' ||\n subject.uri === siteUri + 'settings/' ||\n subject.uri === siteUri + 'settings/prefs.ttl' ||\n subject.uri === siteUri + 'settings/privateTypeIndex.ttl' ||\n subject.uri === siteUri + 'settings/publicTypeIndex.ttl' ||\n subject.uri === siteUri + 'settings/serverSide.ttl'\n )\n}\n\nexport default pane\n\n// ends\n"],"mappings":"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"}
1
+ {"version":3,"file":"internalPane2.esm.js","names":["pane","icons","dom","context","store","canonizedSubject","subject","types","filter","view","pred","div","deleteRecursive","fetcher","kb","folder","promises","ns","file","resolve","str","err","reject","controls","controlRow","deleteCell","isFolder","noun","isProtectedUri","deleteButton","widgets","refreshCell","refreshButton","ok","errm","plist","docURI","st","sym","ed","literal","outliner","siteUri"],"sources":["../../src/internal/internalPane.ts"],"sourcesContent":["/* Internal Pane\n **\n ** This outline pane contains the properties which are\n ** internal to the user's interaction with the web, and are not normally displayed\n */\n/* global alert confirm */\n\nimport { icons, ns, widgets } from 'solid-ui'\nimport { BlankNode, IndexedFormula, literal, NamedNode, st, sym, Variable, Store } from 'rdflib'\nimport { PaneDefinition } from 'pane-registry'\nimport './internalPane.css'\n\nconst pane: PaneDefinition = {\n icon: icons.originalIconBase + 'tango/22-emblem-system.png',\n\n name: 'internal',\n\n label: function () {\n return 'Under The Hood' // There is often a URI even of no statements\n },\n\n render: function (subject, context) {\n const dom = context.dom\n // @ts-ignore\n const store = context.session.store as Store\n const canonizedSubject = store.canon(subject) as BlankNode | NamedNode | Variable\n const types = store.findTypeURIs(canonizedSubject)\n\n function filter (pred: NamedNode) {\n if (types['http://www.w3.org/2007/ont/link#ProtocolEvent']) return true // display everything for them\n const view = context.session.paneRegistry.byName('internal')\n return (\n view &&\n view.predicates &&\n !!(typeof view.predicates[pred.uri] !== 'undefined')\n )\n }\n\n const div = dom.createElement('div')\n div.classList.add('internalPane', 'internalPaneContent')\n\n function deleteRecursive (kb: IndexedFormula, folder: NamedNode) {\n const fetcher = (kb as any).fetcher\n if (!fetcher) {\n console.error('No fetcher available')\n return\n }\n return new Promise(function (resolve, reject) {\n fetcher.load(folder).then(function () {\n const promises = kb.each(folder, ns.ldp('contains')).map(file => {\n if (kb.holds(file, ns.rdf('type'), ns.ldp('BasicContainer'))) {\n return deleteRecursive(kb, file as NamedNode)\n } else {\n console.log('deleteRecursive leaf file: ' + file)\n return fetcher.webOperation('DELETE', (file as NamedNode).uri)\n }\n })\n Promise.all(promises).then(\n () => {\n console.log('deleteRecursive empty folder: ' + folder)\n fetcher\n .webOperation('DELETE', folder.uri)\n .then(() => {\n console.log('Deleted Ok: ' + folder)\n resolve(undefined)\n })\n .catch((err: string) => {\n const str = 'Unable to delete ' + folder + ': ' + err\n console.log(str)\n reject(new Error(str))\n })\n resolve(undefined)\n },\n err => {\n alert(err)\n reject(err)\n }\n )\n })\n })\n }\n\n const isDocument = subject.uri && !subject.uri.includes('#')\n if (isDocument) {\n const controls = div.appendChild(dom.createElement('table'))\n controls.classList.add('internalPaneControls')\n const controlRow = controls.appendChild(dom.createElement('tr'))\n\n const deleteCell = controlRow.appendChild(dom.createElement('td'))\n const isFolder =\n (subject.uri && subject.uri.endsWith('/')) ||\n store.holds(subject, ns.rdf('type'), ns.ldp('Container'))\n const noun = isFolder ? 'folder' : 'file'\n if (!isProtectedUri(subject)) {\n console.log(subject)\n const deleteButton = widgets.deleteButtonWithCheck(\n dom,\n deleteCell,\n noun,\n function () {\n if (\n !confirm(\n `Are you sure you want to delete ${subject}? This cannot be undone.`\n )\n ) {\n return\n }\n // @@ TODO Remove casing of store.fetcher\n if (!store.fetcher) {\n throw new Error('Store has no fetcher')\n }\n const promise = isFolder\n ? (deleteRecursive(store, subject) || Promise.resolve())\n : store.fetcher.webOperation('DELETE', subject.uri) || Promise.resolve()\n promise\n .then(() => {\n const str = 'Deleted: ' + subject\n console.log(str)\n })\n .catch((err: any) => {\n const str = 'Unable to delete ' + subject + ': ' + err\n console.log(str)\n alert(str)\n })\n }\n )\n\n deleteButton.removeAttribute('class') // Remove hover hide\n deleteButton.classList.add('internalPaneDeleteButton')\n deleteCell.appendChild(deleteButton)\n }\n\n const refreshCell = controlRow.appendChild(dom.createElement('td'))\n const refreshButton = widgets.button(\n dom,\n icons.iconBase + 'noun_479395.svg',\n 'refresh'\n )\n refreshCell.appendChild(refreshButton)\n refreshButton.addEventListener('click', () => {\n if (!store.fetcher) {\n throw new Error('Store has no fetcher')\n }\n store.fetcher.refresh(subject, function (\n ok,\n errm\n ) {\n let str\n if (ok) {\n str = 'Refreshed OK: ' + subject\n } else {\n str = 'Error refreshing: ' + subject + ': ' + errm\n }\n console.log(str)\n alert(str)\n })\n })\n }\n\n let plist = store.statementsMatching(subject)\n let docURI = ''\n if (!store.fetcher) {\n throw new Error('Store has no fetcher')\n }\n\n if (subject.uri) {\n plist.push(\n st(\n subject,\n sym('http://www.w3.org/2007/ont/link#uri'),\n subject.uri as any, // @@ TODO Remove casting\n store.fetcher.appNode\n )\n )\n if (subject.uri.indexOf('#') >= 0) {\n docURI = subject.uri.split('#')[0]\n plist.push(\n st(\n subject,\n sym('http://www.w3.org/2007/ont/link#documentURI'),\n subject.uri.split('#')[0] as any, // @@ TODO Remove casting\n store.fetcher.appNode\n )\n )\n plist.push(\n st(\n subject,\n sym('http://www.w3.org/2007/ont/link#document'),\n sym(subject.uri.split('#')[0]),\n store.fetcher.appNode\n )\n )\n } else {\n docURI = subject.uri\n }\n }\n if (docURI) {\n if (!store.updater) {\n throw new Error('Store has no updater')\n }\n\n const ed = store.updater.editable(docURI)\n if (ed) {\n plist.push(\n st(\n subject,\n sym('http://www.w3.org/ns/rww#editable'),\n literal(ed.toString()),\n store.fetcher.appNode\n )\n )\n }\n }\n // @@ TODO get a proper type\n const outliner: any = context.getOutliner(dom)\n outliner.appendPropertyTRs(div, plist, false, filter)\n plist = store.statementsMatching(undefined, undefined, subject)\n outliner.appendPropertyTRs(div, plist, true, filter)\n return div\n },\n\n predicates: {\n // Predicates used for inner workings. Under the hood\n 'http://www.w3.org/2007/ont/link#request': 1,\n 'http://www.w3.org/2007/ont/link#requestedBy': 1,\n 'http://www.w3.org/2007/ont/link#source': 1,\n 'http://www.w3.org/2007/ont/link#session': 2, // 2= test neg but display\n 'http://www.w3.org/2007/ont/link#uri': 1,\n 'http://www.w3.org/2007/ont/link#documentURI': 1,\n 'http://www.w3.org/2007/ont/link#document': 1,\n 'http://www.w3.org/2007/ont/link#all': 1, // From userinput.js\n 'http://www.w3.org/2007/ont/link#Document': 1,\n 'http://www.w3.org/ns/rww#editable': 1,\n 'http://www.w3.org/2000/01/rdf-schema#seeAlso': 1,\n 'http://www.w3.org/2002/07/owl#': 1\n },\n\n classes: {\n // Things which are inherently already undercover\n 'http://www.w3.org/2007/ont/link#ProtocolEvent': 1\n }\n}\n\nfunction isProtectedUri (subject: NamedNode): boolean {\n // TODO: Could make the code below smarter by removing some of the redundancy by creating a recursive function, but did not bother now\n const siteUri = subject.site().uri\n return (\n subject.uri === siteUri ||\n subject.uri === siteUri + 'profile/' ||\n subject.uri === siteUri + 'profile/card' ||\n subject.uri === siteUri + 'settings/' ||\n subject.uri === siteUri + 'settings/prefs.ttl' ||\n subject.uri === siteUri + 'settings/privateTypeIndex.ttl' ||\n subject.uri === siteUri + 'settings/publicTypeIndex.ttl' ||\n subject.uri === siteUri + 'settings/serverSide.ttl'\n )\n}\n\nexport default pane\n\n// ends\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"header.cjs.js","names":[],"sources":["../../src/mainPage/header.ts"],"sourcesContent":["import { authn } from 'solid-logic'\nimport { html, render } from 'lit-html'\nimport type { AccountMenuItem } from 'solid-ui/components/account'\nimport type { OutlineManager } from '../outline/manager'\n\nimport '~icons/lucide/user'\nimport '~icons/lucide/users'\nimport '~icons/lucide/folder-open'\nimport '~icons/lucide/layout-dashboard'\nimport '~icons/lucide/settings-2'\nimport '../components/header'\nimport { getProfilePaneFromURI, getSocialPaneFromURI, getFolderPanesFromURI } from '../utils/paneUtils'\nimport { sym } from 'rdflib'\n\nexport async function createHeader (outliner: OutlineManager) {\n const existingHeader = document.querySelector('solid-panes-header')\n\n if (existingHeader) {\n return existingHeader\n }\n\n const me = authn.currentUser()\n\n const main = document.getElementById('MainContent')\n const outlineView = document.getElementById('OutlineView')\n const tmpContainer = document.createElement('div')\n\n function hideNavbar () {\n const navbar = document.querySelector<HTMLElement>('solid-panes-navbar')\n if (navbar) {\n navbar.classList.add('navbar--hidden')\n }\n }\n\n const storagePanes = me ? await getFolderPanesFromURI(me) : []\n const storageMenuItems: AccountMenuItem[] = storagePanes.map(pane => ({\n label: html`<icon-lucide-folder-open slot=\"left-icon\"></icon-lucide-folder-open> ${pane.label()}`,\n async onSelected () {\n hideNavbar()\n if (me) {\n outliner.GotoSubject(sym(window.location.href), true, pane, true, undefined, outlineView, false)\n }\n }\n }))\n const menuItems: AccountMenuItem[] = [\n {\n label: html`<icon-lucide-user slot=\"left-icon\"></icon-lucide-user> Profile`,\n async onSelected () {\n hideNavbar()\n if (me) {\n const profilePane = await getProfilePaneFromURI(me)\n outliner.GotoSubject(sym(window.location.href), true, profilePane, true, undefined, outlineView, false)\n }\n }\n },\n {\n label: html`<icon-lucide-users slot=\"left-icon\"></icon-lucide-users> Friends`,\n async onSelected () {\n hideNavbar()\n if (me) {\n const socialPane = await getSocialPaneFromURI(me)\n outliner.GotoSubject(sym(window.location.href), true, socialPane, true, undefined, outlineView, false)\n }\n }\n },\n ...storageMenuItems,\n {\n label: html`<icon-lucide-layout-dashboard slot=\"left-icon\"></icon-lucide-layout-dashboard> Dashboard`,\n onSelected () {\n hideNavbar()\n if (me) {\n const pane = outliner.context.session.paneRegistry.byName('home')\n if (pane) {\n outliner.GotoSubject(sym(window.location.href), true, pane, true, undefined, outlineView, false)\n }\n }\n }\n },\n {\n label: html`<icon-lucide-settings-2 slot=\"left-icon\"></icon-lucide-settings-2> Preferences`,\n onSelected () {\n hideNavbar()\n if (me) {\n const pane = outliner.context.session.paneRegistry.byName('basicPreferences')\n if (pane) {\n outliner.GotoSubject(sym(window.location.href), true, pane, true, undefined, outlineView, false)\n }\n }\n }\n },\n ]\n\n render(\n html`<solid-panes-header .menuItems=${menuItems}></solid-panes-header>`,\n tmpContainer\n )\n\n const header = tmpContainer.firstElementChild\n\n if (!header) {\n throw new Error('Failed to create header')\n }\n\n // ensure it is in DOM (before MainContent for consistency)\n if (main && main.parentNode) {\n main.parentNode.insertBefore(header, main)\n } else {\n document.body.prepend(header)\n }\n\n return header\n}\n"],"mappings":"gbAcA,eAAsB,EAAc,EAA0B,CAC5D,IAAM,EAAiB,SAAS,cAAc,oBAAoB,EAElE,GAAI,EACF,OAAO,EAGT,IAAM,EAAK,EAAA,MAAM,YAAY,EAEvB,EAAO,SAAS,eAAe,aAAa,EAC5C,EAAc,SAAS,eAAe,aAAa,EACnD,EAAe,SAAS,cAAc,KAAK,EAEjD,SAAS,GAAc,CACrB,IAAM,EAAS,SAAS,cAA2B,oBAAoB,EACnE,GACF,EAAO,UAAU,IAAI,gBAAgB,CAEzC,CAGA,IAAM,GADe,EAAK,MAAM,EAAA,sBAAsB,CAAE,EAAI,CAAC,EAAA,CACJ,IAAI,IAAS,CACpE,MAAO,EAAA,IAAI,wEAAwE,EAAK,MAAM,IAC9F,MAAM,YAAc,CAClB,EAAW,EACP,GACF,EAAS,aAAA,EAAY,EAAA,IAAA,CAAI,OAAO,SAAS,IAAI,EAAG,GAAM,EAAM,GAAM,IAAA,GAAW,EAAa,EAAK,CAEnG,CACF,EAAE,EACI,EAA+B,CACnC,CACE,MAAO,EAAA,IAAI,iEACX,MAAM,YAAc,CAElB,GADA,EAAW,EACP,EAAI,CACN,IAAM,EAAc,MAAM,EAAA,sBAAsB,CAAE,EAClD,EAAS,aAAA,EAAY,EAAA,IAAA,CAAI,OAAO,SAAS,IAAI,EAAG,GAAM,EAAa,GAAM,IAAA,GAAW,EAAa,EAAK,CACxG,CACF,CACF,EACA,CACE,MAAO,EAAA,IAAI,mEACX,MAAM,YAAc,CAElB,GADA,EAAW,EACP,EAAI,CACN,IAAM,EAAa,MAAM,EAAA,qBAAqB,CAAE,EAChD,EAAS,aAAA,EAAY,EAAA,IAAA,CAAI,OAAO,SAAS,IAAI,EAAG,GAAM,EAAY,GAAM,IAAA,GAAW,EAAa,EAAK,CACvG,CACF,CACF,EACA,GAAG,EACH,CACE,MAAO,EAAA,IAAI,2FACX,YAAc,CAEZ,GADA,EAAW,EACP,EAAI,CACN,IAAM,EAAO,EAAS,QAAQ,QAAQ,aAAa,OAAO,MAAM,EAC5D,GACF,EAAS,aAAA,EAAY,EAAA,IAAA,CAAI,OAAO,SAAS,IAAI,EAAG,GAAM,EAAM,GAAM,IAAA,GAAW,EAAa,EAAK,CAEnG,CACF,CACF,EACA,CACE,MAAO,EAAA,IAAI,iFACX,YAAc,CAEZ,GADA,EAAW,EACP,EAAI,CACN,IAAM,EAAO,EAAS,QAAQ,QAAQ,aAAa,OAAO,kBAAkB,EACxE,GACF,EAAS,aAAA,EAAY,EAAA,IAAA,CAAI,OAAO,SAAS,IAAI,EAAG,GAAM,EAAM,GAAM,IAAA,GAAW,EAAa,EAAK,CAEnG,CACF,CACF,CACF,GAEA,EAAA,EAAA,OAAA,CACE,EAAA,IAAI,kCAAkC,EAAU,wBAChD,CACF,EAEA,IAAM,EAAS,EAAa,kBAE5B,GAAI,CAAC,EACH,MAAU,MAAM,yBAAyB,EAU3C,OANI,GAAQ,EAAK,WACf,EAAK,WAAW,aAAa,EAAQ,CAAI,EAEzC,SAAS,KAAK,QAAQ,CAAM,EAGvB,CACT"}
1
+ {"version":3,"file":"header.cjs.js","names":["authn","getFolderPanesFromURI","sym","getProfilePaneFromURI","getSocialPaneFromURI","require_paneUtils","solid_logic","rdflib","lit_html","createHeader","existingHeader","me","main","outlineView","tmpContainer","hideNavbar","navbar","storageMenuItems","pane","outliner","menuItems","profilePane","socialPane","header"],"sources":["../../src/mainPage/header.ts"],"sourcesContent":["import { authn } from 'solid-logic'\nimport { html, render } from 'lit-html'\nimport type { AccountMenuItem } from 'solid-ui/components/account'\nimport type { OutlineManager } from '../outline/manager'\n\nimport '~icons/lucide/user'\nimport '~icons/lucide/users'\nimport '~icons/lucide/folder-open'\nimport '~icons/lucide/layout-dashboard'\nimport '~icons/lucide/settings-2'\nimport '../components/header'\nimport { getProfilePaneFromURI, getSocialPaneFromURI, getFolderPanesFromURI } from '../utils/paneUtils'\nimport { sym } from 'rdflib'\n\nexport async function createHeader (outliner: OutlineManager) {\n const existingHeader = document.querySelector('solid-panes-header')\n\n if (existingHeader) {\n return existingHeader\n }\n\n const me = authn.currentUser()\n\n const main = document.getElementById('MainContent')\n const outlineView = document.getElementById('OutlineView')\n const tmpContainer = document.createElement('div')\n\n function hideNavbar () {\n const navbar = document.querySelector<HTMLElement>('solid-panes-navbar')\n if (navbar) {\n navbar.classList.add('navbar--hidden')\n }\n }\n\n const storagePanes = me ? await getFolderPanesFromURI(me) : []\n const storageMenuItems: AccountMenuItem[] = storagePanes.map(pane => ({\n label: html`<icon-lucide-folder-open slot=\"left-icon\"></icon-lucide-folder-open> ${pane.label()}`,\n async onSelected () {\n hideNavbar()\n if (me) {\n outliner.GotoSubject(sym(window.location.href), true, pane, true, undefined, outlineView, false)\n }\n }\n }))\n const menuItems: AccountMenuItem[] = [\n {\n label: html`<icon-lucide-user slot=\"left-icon\"></icon-lucide-user> Profile`,\n async onSelected () {\n hideNavbar()\n if (me) {\n const profilePane = await getProfilePaneFromURI(me)\n outliner.GotoSubject(sym(window.location.href), true, profilePane, true, undefined, outlineView, false)\n }\n }\n },\n {\n label: html`<icon-lucide-users slot=\"left-icon\"></icon-lucide-users> Friends`,\n async onSelected () {\n hideNavbar()\n if (me) {\n const socialPane = await getSocialPaneFromURI(me)\n outliner.GotoSubject(sym(window.location.href), true, socialPane, true, undefined, outlineView, false)\n }\n }\n },\n ...storageMenuItems,\n {\n label: html`<icon-lucide-layout-dashboard slot=\"left-icon\"></icon-lucide-layout-dashboard> Dashboard`,\n onSelected () {\n hideNavbar()\n if (me) {\n const pane = outliner.context.session.paneRegistry.byName('home')\n if (pane) {\n outliner.GotoSubject(sym(window.location.href), true, pane, true, undefined, outlineView, false)\n }\n }\n }\n },\n {\n label: html`<icon-lucide-settings-2 slot=\"left-icon\"></icon-lucide-settings-2> Preferences`,\n onSelected () {\n hideNavbar()\n if (me) {\n const pane = outliner.context.session.paneRegistry.byName('basicPreferences')\n if (pane) {\n outliner.GotoSubject(sym(window.location.href), true, pane, true, undefined, outlineView, false)\n }\n }\n }\n },\n ]\n\n render(\n html`<solid-panes-header .menuItems=${menuItems}></solid-panes-header>`,\n tmpContainer\n )\n\n const header = tmpContainer.firstElementChild\n\n if (!header) {\n throw new Error('Failed to create header')\n }\n\n // ensure it is in DOM (before MainContent for consistency)\n if (main && main.parentNode) {\n main.parentNode.insertBefore(header, main)\n } else {\n document.body.prepend(header)\n }\n\n return header\n}\n"],"mappings":"gbAcA,eAAsBS,EAAc,EAA0B,CAC5D,IAAMC,EAAiB,SAAS,cAAc,oBAAoB,EAElE,GAAIA,EACF,OAAOA,EAGT,IAAMC,EAAKX,EAAAA,MAAM,YAAY,EAEvBY,EAAO,SAAS,eAAe,aAAa,EAC5CC,EAAc,SAAS,eAAe,aAAa,EACnDC,EAAe,SAAS,cAAc,KAAK,EAEjD,SAASC,GAAc,CACrB,IAAMC,EAAS,SAAS,cAA2B,oBAAoB,EACnEA,GACFA,EAAO,UAAU,IAAI,gBAAgB,CAEzC,CAGA,IAAMC,GADeN,EAAK,MAAMV,EAAAA,sBAAsBU,CAAE,EAAI,CAAC,EAAA,CACJ,IAAI,IAAS,CACpE,MAAO,EAAA,IAAI,wEAAwEO,EAAK,MAAM,IAC9F,MAAM,YAAc,CAClBH,EAAW,EACPJ,GACFQ,EAAS,aAAA,EAAYjB,EAAAA,IAAAA,CAAI,OAAO,SAAS,IAAI,EAAG,GAAMgB,EAAM,GAAM,IAAA,GAAWL,EAAa,EAAK,CAEnG,CACF,EAAE,EACIO,EAA+B,CACnC,CACE,MAAO,EAAA,IAAI,iEACX,MAAM,YAAc,CAElB,GADAL,EAAW,EACPJ,EAAI,CACN,IAAMU,EAAc,MAAMlB,EAAAA,sBAAsBQ,CAAE,EAClDQ,EAAS,aAAA,EAAYjB,EAAAA,IAAAA,CAAI,OAAO,SAAS,IAAI,EAAG,GAAMmB,EAAa,GAAM,IAAA,GAAWR,EAAa,EAAK,CACxG,CACF,CACF,EACA,CACE,MAAO,EAAA,IAAI,mEACX,MAAM,YAAc,CAElB,GADAE,EAAW,EACPJ,EAAI,CACN,IAAMW,EAAa,MAAMlB,EAAAA,qBAAqBO,CAAE,EAChDQ,EAAS,aAAA,EAAYjB,EAAAA,IAAAA,CAAI,OAAO,SAAS,IAAI,EAAG,GAAMoB,EAAY,GAAM,IAAA,GAAWT,EAAa,EAAK,CACvG,CACF,CACF,EACA,GAAGI,EACH,CACE,MAAO,EAAA,IAAI,2FACX,YAAc,CAEZ,GADAF,EAAW,EACPJ,EAAI,CACN,IAAMO,EAAOC,EAAS,QAAQ,QAAQ,aAAa,OAAO,MAAM,EAC5DD,GACFC,EAAS,aAAA,EAAYjB,EAAAA,IAAAA,CAAI,OAAO,SAAS,IAAI,EAAG,GAAMgB,EAAM,GAAM,IAAA,GAAWL,EAAa,EAAK,CAEnG,CACF,CACF,EACA,CACE,MAAO,EAAA,IAAI,iFACX,YAAc,CAEZ,GADAE,EAAW,EACPJ,EAAI,CACN,IAAMO,EAAOC,EAAS,QAAQ,QAAQ,aAAa,OAAO,kBAAkB,EACxED,GACFC,EAAS,aAAA,EAAYjB,EAAAA,IAAAA,CAAI,OAAO,SAAS,IAAI,EAAG,GAAMgB,EAAM,GAAM,IAAA,GAAWL,EAAa,EAAK,CAEnG,CACF,CACF,CACF,GAEA,EAAAL,EAAA,OAAA,CACE,EAAA,IAAI,kCAAkCY,EAAU,wBAChDN,CACF,EAEA,IAAMS,EAAST,EAAa,kBAE5B,GAAI,CAACS,EACH,MAAU,MAAM,yBAAyB,EAU3C,OANIX,GAAQA,EAAK,WACfA,EAAK,WAAW,aAAaW,EAAQX,CAAI,EAEzC,SAAS,KAAK,QAAQW,CAAM,EAGvBA,CACT"}
@@ -1 +1 @@
1
- {"version":3,"file":"header.esm.js","names":[],"sources":["../../src/mainPage/header.ts"],"sourcesContent":["import { authn } from 'solid-logic'\nimport { html, render } from 'lit-html'\nimport type { AccountMenuItem } from 'solid-ui/components/account'\nimport type { OutlineManager } from '../outline/manager'\n\nimport '~icons/lucide/user'\nimport '~icons/lucide/users'\nimport '~icons/lucide/folder-open'\nimport '~icons/lucide/layout-dashboard'\nimport '~icons/lucide/settings-2'\nimport '../components/header'\nimport { getProfilePaneFromURI, getSocialPaneFromURI, getFolderPanesFromURI } from '../utils/paneUtils'\nimport { sym } from 'rdflib'\n\nexport async function createHeader (outliner: OutlineManager) {\n const existingHeader = document.querySelector('solid-panes-header')\n\n if (existingHeader) {\n return existingHeader\n }\n\n const me = authn.currentUser()\n\n const main = document.getElementById('MainContent')\n const outlineView = document.getElementById('OutlineView')\n const tmpContainer = document.createElement('div')\n\n function hideNavbar () {\n const navbar = document.querySelector<HTMLElement>('solid-panes-navbar')\n if (navbar) {\n navbar.classList.add('navbar--hidden')\n }\n }\n\n const storagePanes = me ? await getFolderPanesFromURI(me) : []\n const storageMenuItems: AccountMenuItem[] = storagePanes.map(pane => ({\n label: html`<icon-lucide-folder-open slot=\"left-icon\"></icon-lucide-folder-open> ${pane.label()}`,\n async onSelected () {\n hideNavbar()\n if (me) {\n outliner.GotoSubject(sym(window.location.href), true, pane, true, undefined, outlineView, false)\n }\n }\n }))\n const menuItems: AccountMenuItem[] = [\n {\n label: html`<icon-lucide-user slot=\"left-icon\"></icon-lucide-user> Profile`,\n async onSelected () {\n hideNavbar()\n if (me) {\n const profilePane = await getProfilePaneFromURI(me)\n outliner.GotoSubject(sym(window.location.href), true, profilePane, true, undefined, outlineView, false)\n }\n }\n },\n {\n label: html`<icon-lucide-users slot=\"left-icon\"></icon-lucide-users> Friends`,\n async onSelected () {\n hideNavbar()\n if (me) {\n const socialPane = await getSocialPaneFromURI(me)\n outliner.GotoSubject(sym(window.location.href), true, socialPane, true, undefined, outlineView, false)\n }\n }\n },\n ...storageMenuItems,\n {\n label: html`<icon-lucide-layout-dashboard slot=\"left-icon\"></icon-lucide-layout-dashboard> Dashboard`,\n onSelected () {\n hideNavbar()\n if (me) {\n const pane = outliner.context.session.paneRegistry.byName('home')\n if (pane) {\n outliner.GotoSubject(sym(window.location.href), true, pane, true, undefined, outlineView, false)\n }\n }\n }\n },\n {\n label: html`<icon-lucide-settings-2 slot=\"left-icon\"></icon-lucide-settings-2> Preferences`,\n onSelected () {\n hideNavbar()\n if (me) {\n const pane = outliner.context.session.paneRegistry.byName('basicPreferences')\n if (pane) {\n outliner.GotoSubject(sym(window.location.href), true, pane, true, undefined, outlineView, false)\n }\n }\n }\n },\n ]\n\n render(\n html`<solid-panes-header .menuItems=${menuItems}></solid-panes-header>`,\n tmpContainer\n )\n\n const header = tmpContainer.firstElementChild\n\n if (!header) {\n throw new Error('Failed to create header')\n }\n\n // ensure it is in DOM (before MainContent for consistency)\n if (main && main.parentNode) {\n main.parentNode.insertBefore(header, main)\n } else {\n document.body.prepend(header)\n }\n\n return header\n}\n"],"mappings":";;;;;;;;;;;AAcA,eAAsB,EAAc,GAA0B;CAC5D,IAAM,IAAiB,SAAS,cAAc,oBAAoB;CAElE,IAAI,GACF,OAAO;CAGT,IAAM,IAAK,EAAM,YAAY,GAEvB,IAAO,SAAS,eAAe,aAAa,GAC5C,IAAc,SAAS,eAAe,aAAa,GACnD,IAAe,SAAS,cAAc,KAAK;CAEjD,SAAS,IAAc;EACrB,IAAM,IAAS,SAAS,cAA2B,oBAAoB;EACvE,AAAI,KACF,EAAO,UAAU,IAAI,gBAAgB;CAEzC;CAGA,IAAM,KADe,IAAK,MAAM,EAAsB,CAAE,IAAI,CAAC,EAAA,CACJ,KAAI,OAAS;EACpE,OAAO,CAAI,wEAAwE,EAAK,MAAM;EAC9F,MAAM,aAAc;GAElB,AADA,EAAW,GACP,KACF,EAAS,YAAY,EAAI,OAAO,SAAS,IAAI,GAAG,IAAM,GAAM,IAAM,KAAA,GAAW,GAAa,EAAK;EAEnG;CACF,EAAE,GACI,IAA+B;EACnC;GACE,OAAO,CAAI;GACX,MAAM,aAAc;IAElB,IADA,EAAW,GACP,GAAI;KACN,IAAM,IAAc,MAAM,EAAsB,CAAE;KAClD,EAAS,YAAY,EAAI,OAAO,SAAS,IAAI,GAAG,IAAM,GAAa,IAAM,KAAA,GAAW,GAAa,EAAK;IACxG;GACF;EACF;EACA;GACE,OAAO,CAAI;GACX,MAAM,aAAc;IAElB,IADA,EAAW,GACP,GAAI;KACN,IAAM,IAAa,MAAM,EAAqB,CAAE;KAChD,EAAS,YAAY,EAAI,OAAO,SAAS,IAAI,GAAG,IAAM,GAAY,IAAM,KAAA,GAAW,GAAa,EAAK;IACvG;GACF;EACF;EACA,GAAG;EACH;GACE,OAAO,CAAI;GACX,aAAc;IAEZ,IADA,EAAW,GACP,GAAI;KACN,IAAM,IAAO,EAAS,QAAQ,QAAQ,aAAa,OAAO,MAAM;KAChE,AAAI,KACF,EAAS,YAAY,EAAI,OAAO,SAAS,IAAI,GAAG,IAAM,GAAM,IAAM,KAAA,GAAW,GAAa,EAAK;IAEnG;GACF;EACF;EACA;GACE,OAAO,CAAI;GACX,aAAc;IAEZ,IADA,EAAW,GACP,GAAI;KACN,IAAM,IAAO,EAAS,QAAQ,QAAQ,aAAa,OAAO,kBAAkB;KAC5E,AAAI,KACF,EAAS,YAAY,EAAI,OAAO,SAAS,IAAI,GAAG,IAAM,GAAM,IAAM,KAAA,GAAW,GAAa,EAAK;IAEnG;GACF;EACF;CACF;CAEA,EACE,CAAI,kCAAkC,EAAU,yBAChD,CACF;CAEA,IAAM,IAAS,EAAa;CAE5B,IAAI,CAAC,GACH,MAAU,MAAM,yBAAyB;CAU3C,OANI,KAAQ,EAAK,aACf,EAAK,WAAW,aAAa,GAAQ,CAAI,IAEzC,SAAS,KAAK,QAAQ,CAAM,GAGvB;AACT"}
1
+ {"version":3,"file":"header.esm.js","names":["createHeader","existingHeader","me","authn","main","outlineView","tmpContainer","hideNavbar","navbar","storageMenuItems","getFolderPanesFromURI","pane","outliner","sym","menuItems","profilePane","getProfilePaneFromURI","socialPane","getSocialPaneFromURI","header"],"sources":["../../src/mainPage/header.ts"],"sourcesContent":["import { authn } from 'solid-logic'\nimport { html, render } from 'lit-html'\nimport type { AccountMenuItem } from 'solid-ui/components/account'\nimport type { OutlineManager } from '../outline/manager'\n\nimport '~icons/lucide/user'\nimport '~icons/lucide/users'\nimport '~icons/lucide/folder-open'\nimport '~icons/lucide/layout-dashboard'\nimport '~icons/lucide/settings-2'\nimport '../components/header'\nimport { getProfilePaneFromURI, getSocialPaneFromURI, getFolderPanesFromURI } from '../utils/paneUtils'\nimport { sym } from 'rdflib'\n\nexport async function createHeader (outliner: OutlineManager) {\n const existingHeader = document.querySelector('solid-panes-header')\n\n if (existingHeader) {\n return existingHeader\n }\n\n const me = authn.currentUser()\n\n const main = document.getElementById('MainContent')\n const outlineView = document.getElementById('OutlineView')\n const tmpContainer = document.createElement('div')\n\n function hideNavbar () {\n const navbar = document.querySelector<HTMLElement>('solid-panes-navbar')\n if (navbar) {\n navbar.classList.add('navbar--hidden')\n }\n }\n\n const storagePanes = me ? await getFolderPanesFromURI(me) : []\n const storageMenuItems: AccountMenuItem[] = storagePanes.map(pane => ({\n label: html`<icon-lucide-folder-open slot=\"left-icon\"></icon-lucide-folder-open> ${pane.label()}`,\n async onSelected () {\n hideNavbar()\n if (me) {\n outliner.GotoSubject(sym(window.location.href), true, pane, true, undefined, outlineView, false)\n }\n }\n }))\n const menuItems: AccountMenuItem[] = [\n {\n label: html`<icon-lucide-user slot=\"left-icon\"></icon-lucide-user> Profile`,\n async onSelected () {\n hideNavbar()\n if (me) {\n const profilePane = await getProfilePaneFromURI(me)\n outliner.GotoSubject(sym(window.location.href), true, profilePane, true, undefined, outlineView, false)\n }\n }\n },\n {\n label: html`<icon-lucide-users slot=\"left-icon\"></icon-lucide-users> Friends`,\n async onSelected () {\n hideNavbar()\n if (me) {\n const socialPane = await getSocialPaneFromURI(me)\n outliner.GotoSubject(sym(window.location.href), true, socialPane, true, undefined, outlineView, false)\n }\n }\n },\n ...storageMenuItems,\n {\n label: html`<icon-lucide-layout-dashboard slot=\"left-icon\"></icon-lucide-layout-dashboard> Dashboard`,\n onSelected () {\n hideNavbar()\n if (me) {\n const pane = outliner.context.session.paneRegistry.byName('home')\n if (pane) {\n outliner.GotoSubject(sym(window.location.href), true, pane, true, undefined, outlineView, false)\n }\n }\n }\n },\n {\n label: html`<icon-lucide-settings-2 slot=\"left-icon\"></icon-lucide-settings-2> Preferences`,\n onSelected () {\n hideNavbar()\n if (me) {\n const pane = outliner.context.session.paneRegistry.byName('basicPreferences')\n if (pane) {\n outliner.GotoSubject(sym(window.location.href), true, pane, true, undefined, outlineView, false)\n }\n }\n }\n },\n ]\n\n render(\n html`<solid-panes-header .menuItems=${menuItems}></solid-panes-header>`,\n tmpContainer\n )\n\n const header = tmpContainer.firstElementChild\n\n if (!header) {\n throw new Error('Failed to create header')\n }\n\n // ensure it is in DOM (before MainContent for consistency)\n if (main && main.parentNode) {\n main.parentNode.insertBefore(header, main)\n } else {\n document.body.prepend(header)\n }\n\n return header\n}\n"],"mappings":";;;;;;;;;;;AAcA,eAAsBA,EAAc,GAA0B;CAC5D,IAAMC,IAAiB,SAAS,cAAc,oBAAoB;CAElE,IAAIA,GACF,OAAOA;CAGT,IAAMC,IAAKC,EAAM,YAAY,GAEvBC,IAAO,SAAS,eAAe,aAAa,GAC5CC,IAAc,SAAS,eAAe,aAAa,GACnDC,IAAe,SAAS,cAAc,KAAK;CAEjD,SAASC,IAAc;EACrB,IAAMC,IAAS,SAAS,cAA2B,oBAAoB;EACvE,AAAIA,KACFA,EAAO,UAAU,IAAI,gBAAgB;CAEzC;CAGA,IAAMC,KADeP,IAAK,MAAMQ,EAAsBR,CAAE,IAAI,CAAC,EAAA,CACJ,KAAI,OAAS;EACpE,OAAO,CAAI,wEAAwES,EAAK,MAAM;EAC9F,MAAM,aAAc;GAElB,AADAJ,EAAW,GACPL,KACFU,EAAS,YAAYC,EAAI,OAAO,SAAS,IAAI,GAAG,IAAMF,GAAM,IAAM,KAAA,GAAWN,GAAa,EAAK;EAEnG;CACF,EAAE,GACIS,IAA+B;EACnC;GACE,OAAO,CAAI;GACX,MAAM,aAAc;IAElB,IADAP,EAAW,GACPL,GAAI;KACN,IAAMa,IAAc,MAAMC,EAAsBd,CAAE;KAClD,EAAS,YAAYW,EAAI,OAAO,SAAS,IAAI,GAAG,IAAME,GAAa,IAAM,KAAA,GAAWV,GAAa,EAAK;IACxG;GACF;EACF;EACA;GACE,OAAO,CAAI;GACX,MAAM,aAAc;IAElB,IADAE,EAAW,GACPL,GAAI;KACN,IAAMe,IAAa,MAAMC,EAAqBhB,CAAE;KAChD,EAAS,YAAYW,EAAI,OAAO,SAAS,IAAI,GAAG,IAAMI,GAAY,IAAM,KAAA,GAAWZ,GAAa,EAAK;IACvG;GACF;EACF;EACA,GAAGI;EACH;GACE,OAAO,CAAI;GACX,aAAc;IAEZ,IADAF,EAAW,GACPL,GAAI;KACN,IAAMS,IAAOC,EAAS,QAAQ,QAAQ,aAAa,OAAO,MAAM;KAChE,AAAID,KACFC,EAAS,YAAYC,EAAI,OAAO,SAAS,IAAI,GAAG,IAAMF,GAAM,IAAM,KAAA,GAAWN,GAAa,EAAK;IAEnG;GACF;EACF;EACA;GACE,OAAO,CAAI;GACX,aAAc;IAEZ,IADAE,EAAW,GACPL,GAAI;KACN,IAAMS,IAAOC,EAAS,QAAQ,QAAQ,aAAa,OAAO,kBAAkB;KAC5E,AAAID,KACFC,EAAS,YAAYC,EAAI,OAAO,SAAS,IAAI,GAAG,IAAMF,GAAM,IAAM,KAAA,GAAWN,GAAa,EAAK;IAEnG;GACF;EACF;CACF;CAEA,EACE,CAAI,kCAAkCS,EAAU,yBAChDR,CACF;CAEA,IAAMa,IAASb,EAAa;CAE5B,IAAI,CAACa,GACH,MAAU,MAAM,yBAAyB;CAU3C,OANIf,KAAQA,EAAK,aACfA,EAAK,WAAW,aAAae,GAAQf,CAAI,IAEzC,SAAS,KAAK,QAAQe,CAAM,GAGvBA;AACT"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs.js","names":[],"sources":["../../src/mainPage/index.ts"],"sourcesContent":["/* Main Page\n **\n ** This code is called in mashlib and renders the header and left side menu of the Databrowser.\n */\n\nimport { LiveStore, NamedNode } from 'rdflib'\nimport type { RenderEnvironment } from 'pane-registry'\nimport * as paneRegistry from 'pane-registry'\nimport { getOutliner, OutlineManager } from '../index'\nimport { createHeader } from './header'\nimport { createNavbar } from './navbar'\nimport { getProfilePaneFromURI } from '../utils/paneUtils'\nimport { isWebIdUri } from '../utils/webIdUtils'\n\n// Symbol used to stash the last render-relevant env snapshot on the outliner\n// so refreshUI can skip a full GotoSubject re-render when nothing changed.\nconst LAST_RENDER_ENV_KEY = '__lastRenderEnvSignature'\n\nfunction renderEnvSignature (env?: RenderEnvironment): string {\n if (!env) return ''\n return [env.layout, env.theme, env.inputMode].join('|')\n}\n\nfunction ensureMainContent () {\n let main = document.getElementById('MainContent') as HTMLElement | null\n if (!main) {\n main = document.createElement('main')\n main.id = 'MainContent'\n main.setAttribute('role', 'main')\n main.setAttribute('tabindex', '-1')\n main.setAttribute('aria-live', 'polite')\n document.body.appendChild(main)\n }\n return main\n}\n\nexport async function initMainPage (\n store: LiveStore,\n uri?: string | NamedNode | null,\n environment?: RenderEnvironment\n) {\n ensureMainContent()\n const outliner = getOutliner(document, environment)\n ;(outliner as any)[LAST_RENDER_ENV_KEY] = renderEnvSignature(environment)\n uri = uri || window.location.href\n const subject: NamedNode = typeof uri === 'string' ? store.sym(uri) : uri\n const historyPaneName = window.history.state?.paneName\n const historyPane = historyPaneName\n ? paneRegistry.byName(historyPaneName)\n : undefined\n const initialPane = historyPane ??\n (!historyPaneName && isWebIdUri(subject)\n ? await getProfilePaneFromURI(subject)\n : undefined)\n\n outliner.GotoSubject(subject, true, initialPane, true, undefined, undefined, true, false)\n\n const header = await createHeader(outliner)\n const navbar = await createNavbar(outliner)\n return Promise.all([header, navbar])\n}\n\nexport async function refreshUI (outliner: OutlineManager) {\n const store = outliner?.context?.session?.store\n const paneRegistry = outliner?.context?.session?.paneRegistry\n const paneName = window.history.state?.paneName\n const paneUri = window.history.state?.paneUri\n // Panes rendered for a subject other than the page URL (storage/profile/social)\n // must be restored from paneUri, since byName() returns the pane without that subject.\n const usesOwnSubject = paneName === 'profile' || paneName === 'social' || paneName === 'folder'\n const subjectUri = paneUri && usesOwnSubject\n ? paneUri\n : window.document.location.href\n const pane = paneName ? paneRegistry?.byName?.(paneName) : undefined\n\n // Only re-run GotoSubject (full pane re-render) when render-relevant\n // environment fields actually changed since the last render.\n const currentSignature = renderEnvSignature(outliner?.context?.environment)\n const previousSignature = (outliner as any)?.[LAST_RENDER_ENV_KEY] ?? ''\n const envChanged = currentSignature !== previousSignature\n\n if (envChanged && store && typeof outliner?.GotoSubject === 'function') {\n outliner.GotoSubject(store.sym(subjectUri), true, pane, true, undefined, undefined, true, false)\n ;(outliner as any)[LAST_RENDER_ENV_KEY] = currentSignature\n }\n}\n"],"mappings":"4QAgBA,IAAM,EAAsB,2BAE5B,SAAS,EAAoB,EAAiC,CAE5D,OADK,EACE,CAAC,EAAI,OAAQ,EAAI,MAAO,EAAI,SAAS,CAAC,CAAC,KAAK,GAAG,EADrC,EAEnB,CAEA,SAAS,GAAqB,CAC5B,IAAI,EAAO,SAAS,eAAe,aAAa,EAShD,OARK,IACH,EAAO,SAAS,cAAc,MAAM,EACpC,EAAK,GAAK,cACV,EAAK,aAAa,OAAQ,MAAM,EAChC,EAAK,aAAa,WAAY,IAAI,EAClC,EAAK,aAAa,YAAa,QAAQ,EACvC,SAAS,KAAK,YAAY,CAAI,GAEzB,CACT,CAEA,eAAsB,EACpB,EACA,EACA,EACA,CACA,EAAkB,EAClB,IAAM,EAAW,EAAA,YAAY,SAAU,CAAW,EACjD,EAAkB,GAAuB,EAAmB,CAAW,EACxE,IAAa,OAAO,SAAS,KAC7B,IAAM,EAAqB,OAAO,GAAQ,SAAW,EAAM,IAAI,CAAG,EAAI,EAChE,EAAkB,OAAO,QAAQ,OAAO,SAIxC,GAHc,EAChB,EAAa,OAAO,CAAe,EACnC,IAAA,MAED,CAAC,GAAmB,EAAA,WAAW,CAAO,EACnC,MAAM,EAAA,sBAAsB,CAAO,EACnC,IAAA,IAEN,EAAS,YAAY,EAAS,GAAM,EAAa,GAAM,IAAA,GAAW,IAAA,GAAW,GAAM,EAAK,EAExF,IAAM,EAAS,MAAM,EAAA,aAAa,CAAQ,EACpC,EAAS,MAAM,EAAA,aAAa,CAAQ,EAC1C,OAAO,QAAQ,IAAI,CAAC,EAAQ,CAAM,CAAC,CACrC,CAEA,eAAsB,EAAW,EAA0B,CACzD,IAAM,EAAQ,GAAU,SAAS,SAAS,MACpC,EAAe,GAAU,SAAS,SAAS,aAC3C,EAAW,OAAO,QAAQ,OAAO,SACjC,EAAU,OAAO,QAAQ,OAAO,QAIhC,EAAa,IADI,IAAa,WAAa,IAAa,UAAY,IAAa,UAEnF,EACA,OAAO,SAAS,SAAS,KACvB,EAAO,EAAW,GAAc,SAAS,CAAQ,EAAI,IAAA,GAIrD,EAAmB,EAAmB,GAAU,SAAS,WAAW,EAEvD,KADQ,IAAmB,IAAwB,KAGpD,GAAS,OAAO,GAAU,aAAgB,aAC1D,EAAS,YAAY,EAAM,IAAI,CAAU,EAAG,GAAM,EAAM,GAAM,IAAA,GAAW,IAAA,GAAW,GAAM,EAAK,EAC9F,EAAkB,GAAuB,EAE9C"}
1
+ {"version":3,"file":"index.cjs.js","names":["getOutliner","paneRegistry","isWebIdUri","getProfilePaneFromURI","createHeader","createNavbar","require_runtime","require_webIdUtils","require_paneUtils","require_header","require_navbar","require_index","pane_registry","LAST_RENDER_ENV_KEY","renderEnvSignature","env","ensureMainContent","main","initMainPage","outliner","environment","subject","uri","store","historyPaneName","initialPane","header","navbar","refreshUI","paneRegistry","paneName","paneUri","subjectUri","pane","currentSignature"],"sources":["../../src/mainPage/index.ts"],"sourcesContent":["/* Main Page\n **\n ** This code is called in mashlib and renders the header and left side menu of the Databrowser.\n */\n\nimport { LiveStore, NamedNode } from 'rdflib'\nimport type { RenderEnvironment } from 'pane-registry'\nimport * as paneRegistry from 'pane-registry'\nimport { getOutliner, OutlineManager } from '../index'\nimport { createHeader } from './header'\nimport { createNavbar } from './navbar'\nimport { getProfilePaneFromURI } from '../utils/paneUtils'\nimport { isWebIdUri } from '../utils/webIdUtils'\n\n// Symbol used to stash the last render-relevant env snapshot on the outliner\n// so refreshUI can skip a full GotoSubject re-render when nothing changed.\nconst LAST_RENDER_ENV_KEY = '__lastRenderEnvSignature'\n\nfunction renderEnvSignature (env?: RenderEnvironment): string {\n if (!env) return ''\n return [env.layout, env.theme, env.inputMode].join('|')\n}\n\nfunction ensureMainContent () {\n let main = document.getElementById('MainContent') as HTMLElement | null\n if (!main) {\n main = document.createElement('main')\n main.id = 'MainContent'\n main.setAttribute('role', 'main')\n main.setAttribute('tabindex', '-1')\n main.setAttribute('aria-live', 'polite')\n document.body.appendChild(main)\n }\n return main\n}\n\nexport async function initMainPage (\n store: LiveStore,\n uri?: string | NamedNode | null,\n environment?: RenderEnvironment\n) {\n ensureMainContent()\n const outliner = getOutliner(document, environment)\n ;(outliner as any)[LAST_RENDER_ENV_KEY] = renderEnvSignature(environment)\n uri = uri || window.location.href\n const subject: NamedNode = typeof uri === 'string' ? store.sym(uri) : uri\n const historyPaneName = window.history.state?.paneName\n const historyPane = historyPaneName\n ? paneRegistry.byName(historyPaneName)\n : undefined\n const initialPane = historyPane ??\n (!historyPaneName && isWebIdUri(subject)\n ? await getProfilePaneFromURI(subject)\n : undefined)\n\n outliner.GotoSubject(subject, true, initialPane, true, undefined, undefined, true, false)\n\n const header = await createHeader(outliner)\n const navbar = await createNavbar(outliner)\n return Promise.all([header, navbar])\n}\n\nexport async function refreshUI (outliner: OutlineManager) {\n const store = outliner?.context?.session?.store\n const paneRegistry = outliner?.context?.session?.paneRegistry\n const paneName = window.history.state?.paneName\n const paneUri = window.history.state?.paneUri\n // Panes rendered for a subject other than the page URL (storage/profile/social)\n // must be restored from paneUri, since byName() returns the pane without that subject.\n const usesOwnSubject = paneName === 'profile' || paneName === 'social' || paneName === 'folder'\n const subjectUri = paneUri && usesOwnSubject\n ? paneUri\n : window.document.location.href\n const pane = paneName ? paneRegistry?.byName?.(paneName) : undefined\n\n // Only re-run GotoSubject (full pane re-render) when render-relevant\n // environment fields actually changed since the last render.\n const currentSignature = renderEnvSignature(outliner?.context?.environment)\n const previousSignature = (outliner as any)?.[LAST_RENDER_ENV_KEY] ?? ''\n const envChanged = currentSignature !== previousSignature\n\n if (envChanged && store && typeof outliner?.GotoSubject === 'function') {\n outliner.GotoSubject(store.sym(subjectUri), true, pane, true, undefined, undefined, true, false)\n ;(outliner as any)[LAST_RENDER_ENV_KEY] = currentSignature\n }\n}\n"],"mappings":"4QAgBA,IAAMa,EAAsB,2BAE5B,SAASC,EAAoB,EAAiC,CAE5D,OADKC,EACE,CAACA,EAAI,OAAQA,EAAI,MAAOA,EAAI,SAAS,CAAC,CAAC,KAAK,GAAG,EADrC,EAEnB,CAEA,SAASC,GAAqB,CAC5B,IAAIC,EAAO,SAAS,eAAe,aAAa,EAShD,OARKA,IACH,EAAO,SAAS,cAAc,MAAM,EACpC,EAAK,GAAK,cACVA,EAAK,aAAa,OAAQ,MAAM,EAChCA,EAAK,aAAa,WAAY,IAAI,EAClCA,EAAK,aAAa,YAAa,QAAQ,EACvC,SAAS,KAAK,YAAYA,CAAI,GAEzBA,CACT,CAEA,eAAsBC,EACpB,EACA,EACA,EACA,CACAF,EAAkB,EAClB,IAAMG,EAAWnB,EAAAA,YAAY,SAAUoB,CAAW,EACjD,EAAkBP,GAAuBC,EAAmBM,CAAW,EACxE,IAAa,OAAO,SAAS,KAC7B,IAAMC,EAAqB,OAAOC,GAAQ,SAAWC,EAAM,IAAID,CAAG,EAAIA,EAChEE,EAAkB,OAAO,QAAQ,OAAO,SAIxCC,GAHcD,EAChBvB,EAAa,OAAOuB,CAAe,EACnC,IAAA,MAED,CAACA,GAAmBtB,EAAAA,WAAWmB,CAAO,EACnC,MAAMlB,EAAAA,sBAAsBkB,CAAO,EACnC,IAAA,IAENF,EAAS,YAAYE,EAAS,GAAMI,EAAa,GAAM,IAAA,GAAW,IAAA,GAAW,GAAM,EAAK,EAExF,IAAMC,EAAS,MAAMtB,EAAAA,aAAae,CAAQ,EACpCQ,EAAS,MAAMtB,EAAAA,aAAac,CAAQ,EAC1C,OAAO,QAAQ,IAAI,CAACO,EAAQC,CAAM,CAAC,CACrC,CAEA,eAAsBC,EAAW,EAA0B,CACzD,IAAML,EAAQJ,GAAU,SAAS,SAAS,MACpCU,EAAeV,GAAU,SAAS,SAAS,aAC3CW,EAAW,OAAO,QAAQ,OAAO,SACjCC,EAAU,OAAO,QAAQ,OAAO,QAIhCC,EAAaD,IADID,IAAa,WAAaA,IAAa,UAAYA,IAAa,UAEnFC,EACA,OAAO,SAAS,SAAS,KACvBE,EAAOH,EAAWD,GAAc,SAASC,CAAQ,EAAI,IAAA,GAIrDI,EAAmBpB,EAAmBK,GAAU,SAAS,WAAW,EAEvDe,KADQf,IAAmBN,IAAwB,KAGpDU,GAAS,OAAOJ,GAAU,aAAgB,aAC1DA,EAAS,YAAYI,EAAM,IAAIS,CAAU,EAAG,GAAMC,EAAM,GAAM,IAAA,GAAW,IAAA,GAAW,GAAM,EAAK,EAC9F,EAAkBpB,GAAuBqB,EAE9C"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.esm.js","names":[],"sources":["../../src/mainPage/index.ts"],"sourcesContent":["/* Main Page\n **\n ** This code is called in mashlib and renders the header and left side menu of the Databrowser.\n */\n\nimport { LiveStore, NamedNode } from 'rdflib'\nimport type { RenderEnvironment } from 'pane-registry'\nimport * as paneRegistry from 'pane-registry'\nimport { getOutliner, OutlineManager } from '../index'\nimport { createHeader } from './header'\nimport { createNavbar } from './navbar'\nimport { getProfilePaneFromURI } from '../utils/paneUtils'\nimport { isWebIdUri } from '../utils/webIdUtils'\n\n// Symbol used to stash the last render-relevant env snapshot on the outliner\n// so refreshUI can skip a full GotoSubject re-render when nothing changed.\nconst LAST_RENDER_ENV_KEY = '__lastRenderEnvSignature'\n\nfunction renderEnvSignature (env?: RenderEnvironment): string {\n if (!env) return ''\n return [env.layout, env.theme, env.inputMode].join('|')\n}\n\nfunction ensureMainContent () {\n let main = document.getElementById('MainContent') as HTMLElement | null\n if (!main) {\n main = document.createElement('main')\n main.id = 'MainContent'\n main.setAttribute('role', 'main')\n main.setAttribute('tabindex', '-1')\n main.setAttribute('aria-live', 'polite')\n document.body.appendChild(main)\n }\n return main\n}\n\nexport async function initMainPage (\n store: LiveStore,\n uri?: string | NamedNode | null,\n environment?: RenderEnvironment\n) {\n ensureMainContent()\n const outliner = getOutliner(document, environment)\n ;(outliner as any)[LAST_RENDER_ENV_KEY] = renderEnvSignature(environment)\n uri = uri || window.location.href\n const subject: NamedNode = typeof uri === 'string' ? store.sym(uri) : uri\n const historyPaneName = window.history.state?.paneName\n const historyPane = historyPaneName\n ? paneRegistry.byName(historyPaneName)\n : undefined\n const initialPane = historyPane ??\n (!historyPaneName && isWebIdUri(subject)\n ? await getProfilePaneFromURI(subject)\n : undefined)\n\n outliner.GotoSubject(subject, true, initialPane, true, undefined, undefined, true, false)\n\n const header = await createHeader(outliner)\n const navbar = await createNavbar(outliner)\n return Promise.all([header, navbar])\n}\n\nexport async function refreshUI (outliner: OutlineManager) {\n const store = outliner?.context?.session?.store\n const paneRegistry = outliner?.context?.session?.paneRegistry\n const paneName = window.history.state?.paneName\n const paneUri = window.history.state?.paneUri\n // Panes rendered for a subject other than the page URL (storage/profile/social)\n // must be restored from paneUri, since byName() returns the pane without that subject.\n const usesOwnSubject = paneName === 'profile' || paneName === 'social' || paneName === 'folder'\n const subjectUri = paneUri && usesOwnSubject\n ? paneUri\n : window.document.location.href\n const pane = paneName ? paneRegistry?.byName?.(paneName) : undefined\n\n // Only re-run GotoSubject (full pane re-render) when render-relevant\n // environment fields actually changed since the last render.\n const currentSignature = renderEnvSignature(outliner?.context?.environment)\n const previousSignature = (outliner as any)?.[LAST_RENDER_ENV_KEY] ?? ''\n const envChanged = currentSignature !== previousSignature\n\n if (envChanged && store && typeof outliner?.GotoSubject === 'function') {\n outliner.GotoSubject(store.sym(subjectUri), true, pane, true, undefined, undefined, true, false)\n ;(outliner as any)[LAST_RENDER_ENV_KEY] = currentSignature\n }\n}\n"],"mappings":";;;;;;;AAgBA,IAAM,IAAsB;AAE5B,SAAS,EAAoB,GAAiC;CAE5D,OADK,IACE;EAAC,EAAI;EAAQ,EAAI;EAAO,EAAI;CAAS,CAAC,CAAC,KAAK,GAAG,IADrC;AAEnB;AAEA,SAAS,IAAqB;CAC5B,IAAI,IAAO,SAAS,eAAe,aAAa;CAShD,OARK,MACH,IAAO,SAAS,cAAc,MAAM,GACpC,EAAK,KAAK,eACV,EAAK,aAAa,QAAQ,MAAM,GAChC,EAAK,aAAa,YAAY,IAAI,GAClC,EAAK,aAAa,aAAa,QAAQ,GACvC,SAAS,KAAK,YAAY,CAAI,IAEzB;AACT;AAEA,eAAsB,EACpB,GACA,GACA,GACA;CACA,EAAkB;CAClB,IAAM,IAAW,EAAY,UAAU,CAAW;CAElD,AADC,EAAkB,KAAuB,EAAmB,CAAW,GACxE,MAAa,OAAO,SAAS;CAC7B,IAAM,IAAqB,OAAO,KAAQ,WAAW,EAAM,IAAI,CAAG,IAAI,GAChE,IAAkB,OAAO,QAAQ,OAAO,UAIxC,KAHc,IAChB,EAAa,OAAO,CAAe,IACnC,KAAA,OAED,CAAC,KAAmB,EAAW,CAAO,IACnC,MAAM,EAAsB,CAAO,IACnC,KAAA;CAEN,EAAS,YAAY,GAAS,IAAM,GAAa,IAAM,KAAA,GAAW,KAAA,GAAW,IAAM,EAAK;CAExF,IAAM,IAAS,MAAM,EAAa,CAAQ,GACpC,IAAS,MAAM,EAAa,CAAQ;CAC1C,OAAO,QAAQ,IAAI,CAAC,GAAQ,CAAM,CAAC;AACrC;AAEA,eAAsB,EAAW,GAA0B;CACzD,IAAM,IAAQ,GAAU,SAAS,SAAS,OACpC,IAAe,GAAU,SAAS,SAAS,cAC3C,IAAW,OAAO,QAAQ,OAAO,UACjC,IAAU,OAAO,QAAQ,OAAO,SAIhC,IAAa,MADI,MAAa,aAAa,MAAa,YAAY,MAAa,YAEnF,IACA,OAAO,SAAS,SAAS,MACvB,IAAO,IAAW,GAAc,SAAS,CAAQ,IAAI,KAAA,GAIrD,IAAmB,EAAmB,GAAU,SAAS,WAAW;CAI1E,AAFmB,OADQ,IAAmB,MAAwB,OAGpD,KAAS,OAAO,GAAU,eAAgB,eAC1D,EAAS,YAAY,EAAM,IAAI,CAAU,GAAG,IAAM,GAAM,IAAM,KAAA,GAAW,KAAA,GAAW,IAAM,EAAK,GAC9F,EAAkB,KAAuB;AAE9C"}
1
+ {"version":3,"file":"index.esm.js","names":["paneRegistry","LAST_RENDER_ENV_KEY","renderEnvSignature","env","ensureMainContent","main","initMainPage","outliner","getOutliner","environment","subject","uri","store","historyPaneName","initialPane","isWebIdUri","getProfilePaneFromURI","header","createHeader","navbar","createNavbar","refreshUI","paneName","paneUri","subjectUri","pane","currentSignature"],"sources":["../../src/mainPage/index.ts"],"sourcesContent":["/* Main Page\n **\n ** This code is called in mashlib and renders the header and left side menu of the Databrowser.\n */\n\nimport { LiveStore, NamedNode } from 'rdflib'\nimport type { RenderEnvironment } from 'pane-registry'\nimport * as paneRegistry from 'pane-registry'\nimport { getOutliner, OutlineManager } from '../index'\nimport { createHeader } from './header'\nimport { createNavbar } from './navbar'\nimport { getProfilePaneFromURI } from '../utils/paneUtils'\nimport { isWebIdUri } from '../utils/webIdUtils'\n\n// Symbol used to stash the last render-relevant env snapshot on the outliner\n// so refreshUI can skip a full GotoSubject re-render when nothing changed.\nconst LAST_RENDER_ENV_KEY = '__lastRenderEnvSignature'\n\nfunction renderEnvSignature (env?: RenderEnvironment): string {\n if (!env) return ''\n return [env.layout, env.theme, env.inputMode].join('|')\n}\n\nfunction ensureMainContent () {\n let main = document.getElementById('MainContent') as HTMLElement | null\n if (!main) {\n main = document.createElement('main')\n main.id = 'MainContent'\n main.setAttribute('role', 'main')\n main.setAttribute('tabindex', '-1')\n main.setAttribute('aria-live', 'polite')\n document.body.appendChild(main)\n }\n return main\n}\n\nexport async function initMainPage (\n store: LiveStore,\n uri?: string | NamedNode | null,\n environment?: RenderEnvironment\n) {\n ensureMainContent()\n const outliner = getOutliner(document, environment)\n ;(outliner as any)[LAST_RENDER_ENV_KEY] = renderEnvSignature(environment)\n uri = uri || window.location.href\n const subject: NamedNode = typeof uri === 'string' ? store.sym(uri) : uri\n const historyPaneName = window.history.state?.paneName\n const historyPane = historyPaneName\n ? paneRegistry.byName(historyPaneName)\n : undefined\n const initialPane = historyPane ??\n (!historyPaneName && isWebIdUri(subject)\n ? await getProfilePaneFromURI(subject)\n : undefined)\n\n outliner.GotoSubject(subject, true, initialPane, true, undefined, undefined, true, false)\n\n const header = await createHeader(outliner)\n const navbar = await createNavbar(outliner)\n return Promise.all([header, navbar])\n}\n\nexport async function refreshUI (outliner: OutlineManager) {\n const store = outliner?.context?.session?.store\n const paneRegistry = outliner?.context?.session?.paneRegistry\n const paneName = window.history.state?.paneName\n const paneUri = window.history.state?.paneUri\n // Panes rendered for a subject other than the page URL (storage/profile/social)\n // must be restored from paneUri, since byName() returns the pane without that subject.\n const usesOwnSubject = paneName === 'profile' || paneName === 'social' || paneName === 'folder'\n const subjectUri = paneUri && usesOwnSubject\n ? paneUri\n : window.document.location.href\n const pane = paneName ? paneRegistry?.byName?.(paneName) : undefined\n\n // Only re-run GotoSubject (full pane re-render) when render-relevant\n // environment fields actually changed since the last render.\n const currentSignature = renderEnvSignature(outliner?.context?.environment)\n const previousSignature = (outliner as any)?.[LAST_RENDER_ENV_KEY] ?? ''\n const envChanged = currentSignature !== previousSignature\n\n if (envChanged && store && typeof outliner?.GotoSubject === 'function') {\n outliner.GotoSubject(store.sym(subjectUri), true, pane, true, undefined, undefined, true, false)\n ;(outliner as any)[LAST_RENDER_ENV_KEY] = currentSignature\n }\n}\n"],"mappings":";;;;;;;AAgBA,IAAMC,IAAsB;AAE5B,SAASC,EAAoB,GAAiC;CAE5D,OADKC,IACE;EAACA,EAAI;EAAQA,EAAI;EAAOA,EAAI;CAAS,CAAC,CAAC,KAAK,GAAG,IADrC;AAEnB;AAEA,SAASC,IAAqB;CAC5B,IAAIC,IAAO,SAAS,eAAe,aAAa;CAShD,OARKA,MACH,IAAO,SAAS,cAAc,MAAM,GACpC,EAAK,KAAK,eACVA,EAAK,aAAa,QAAQ,MAAM,GAChCA,EAAK,aAAa,YAAY,IAAI,GAClCA,EAAK,aAAa,aAAa,QAAQ,GACvC,SAAS,KAAK,YAAYA,CAAI,IAEzBA;AACT;AAEA,eAAsBC,EACpB,GACA,GACA,GACA;CACA,EAAkB;CAClB,IAAMC,IAAWC,EAAY,UAAUC,CAAW;CAElD,AADC,EAAkBR,KAAuBC,EAAmBO,CAAW,GACxE,MAAa,OAAO,SAAS;CAC7B,IAAMC,IAAqB,OAAOC,KAAQ,WAAWC,EAAM,IAAID,CAAG,IAAIA,GAChEE,IAAkB,OAAO,QAAQ,OAAO,UAIxCC,KAHcD,IAChBb,EAAa,OAAOa,CAAe,IACnC,KAAA,OAED,CAACA,KAAmBE,EAAWL,CAAO,IACnC,MAAMM,EAAsBN,CAAO,IACnC,KAAA;CAEN,EAAS,YAAYA,GAAS,IAAMI,GAAa,IAAM,KAAA,GAAW,KAAA,GAAW,IAAM,EAAK;CAExF,IAAMG,IAAS,MAAMC,EAAaX,CAAQ,GACpCY,IAAS,MAAMC,EAAab,CAAQ;CAC1C,OAAO,QAAQ,IAAI,CAACU,GAAQE,CAAM,CAAC;AACrC;AAEA,eAAsBE,EAAW,GAA0B;CACzD,IAAMT,IAAQL,GAAU,SAAS,SAAS,OACpCP,IAAeO,GAAU,SAAS,SAAS,cAC3Ce,IAAW,OAAO,QAAQ,OAAO,UACjCC,IAAU,OAAO,QAAQ,OAAO,SAIhCC,IAAaD,MADID,MAAa,aAAaA,MAAa,YAAYA,MAAa,YAEnFC,IACA,OAAO,SAAS,SAAS,MACvBE,IAAOH,IAAWtB,GAAc,SAASsB,CAAQ,IAAI,KAAA,GAIrDI,IAAmBxB,EAAmBK,GAAU,SAAS,WAAW;CAI1E,AAFmBmB,OADQnB,IAAmBN,MAAwB,OAGpDW,KAAS,OAAOL,GAAU,eAAgB,eAC1DA,EAAS,YAAYK,EAAM,IAAIY,CAAU,GAAG,IAAMC,GAAM,IAAM,KAAA,GAAW,KAAA,GAAW,IAAM,EAAK,GAC9F,EAAkBxB,KAAuByB;AAE9C"}
@@ -1 +1 @@
1
- {"version":3,"file":"navbar.cjs.js","names":[],"sources":["../../src/mainPage/navbar.ts"],"sourcesContent":["import { store } from 'solid-logic'\nimport { NamedNode } from 'rdflib'\nimport { getSocialPaneFromURI, getProfilePaneFromURI, getFolderPanesFromURI } from '../utils/paneUtils'\nimport { html, render } from 'lit-html'\nimport type { OutlineManager } from '../outline/manager'\nimport { isWebIdUri, loadProfileFromURI } from '../utils/webIdUtils'\n\nimport '~icons/lucide/user'\nimport '~icons/lucide/users'\nimport '~icons/lucide/folder-open'\nimport '../components/navbar'\n\nimport type { NavbarMenuItem } from '../components/navbar/Navbar'\n\nfunction showNavbar () {\n const navbar = document.querySelector<HTMLElement>('solid-panes-navbar')\n if (navbar) {\n navbar.classList.remove('navbar--hidden')\n }\n}\n\nfunction createNavItem (\n label: string,\n onSelected: () => void,\n selected = false\n): NavbarMenuItem {\n return {\n label,\n onSelected () {\n showNavbar()\n return onSelected()\n },\n selected\n }\n}\n\nasync function createNavbarMenuItems (\n outliner: OutlineManager,\n subject: NamedNode,\n outlineView: HTMLElement | null,\n selectedPaneName?: string,\n selectedPaneUri?: string\n): Promise<NavbarMenuItem[]> {\n const webId = await loadProfileFromURI(subject)\n const selectedPane = selectedPaneName || (isWebIdUri(subject) ? 'profile' : undefined)\n\n const menuItems: NavbarMenuItem[] = []\n\n if (webId) {\n menuItems.push(\n createNavItem('Profile', async () => {\n const profilePane = await getProfilePaneFromURI(webId)\n outliner.GotoSubject(subject, true, profilePane, true, undefined, outlineView)\n }, selectedPane === 'profile'),\n createNavItem('Friends', async () => {\n const socialPane = await getSocialPaneFromURI(webId)\n outliner.GotoSubject(subject, true, socialPane, true, undefined, outlineView)\n }, selectedPane === 'social')\n )\n }\n\n const storagePanes = await getFolderPanesFromURI(subject)\n storagePanes.forEach(pane => {\n menuItems.push(\n createNavItem(\n pane.label(),\n async () => {\n outliner.GotoSubject(subject, true, pane, true, undefined, outlineView)\n },\n selectedPane === pane.paneName &&\n (selectedPaneUri ? selectedPaneUri === pane.subject.value : storagePanes.length === 1)\n )\n )\n })\n\n return menuItems\n}\n\nexport async function createNavbar (outliner: OutlineManager) {\n const existingNavbar = document.querySelector<HTMLElement>('solid-panes-navbar')\n\n if (existingNavbar) {\n existingNavbar.classList.remove('navbar--hidden')\n return existingNavbar\n }\n\n const OutlineView = document.getElementById('OutlineView')\n const mainContent = document.getElementById('MainContent')\n const tmpContainer = document.createElement('div')\n const uri = window.location.href\n const subject: NamedNode = typeof uri === 'string' ? store.sym(uri) : uri\n const selectedPaneName = window.history.state?.paneName\n const selectedPaneUri = window.history.state?.paneUri\n let menuItems = await createNavbarMenuItems(outliner, subject, OutlineView, selectedPaneName, selectedPaneUri).catch((err) => {\n console.error('Failed to build navbar menu items:', err)\n return []\n })\n\n function setSelectedItem (selectedItem: NavbarMenuItem) {\n menuItems = menuItems.map((menuItem) => ({\n ...menuItem,\n selected: menuItem === selectedItem\n }))\n }\n\n function handleSelectionChanged (event: Event) {\n const { detail: selectedItem } = event as CustomEvent<NavbarMenuItem>\n setSelectedItem(selectedItem)\n\n Promise.resolve(selectedItem.onSelected?.()).catch((error) => {\n console.error('Navbar menu item selection failed:', error)\n })\n\n renderNavbar()\n }\n\n function renderNavbar () {\n render(\n html`<solid-panes-navbar .navbarItems=${menuItems} @solid-ui-select=${handleSelectionChanged}></solid-panes-navbar>`,\n tmpContainer\n )\n }\n\n renderNavbar()\n\n const navbar = tmpContainer.firstElementChild as HTMLElement | null\n\n if (!navbar) {\n throw new Error('Failed to create nav bar')\n }\n\n if (mainContent) {\n mainContent.insertBefore(navbar, mainContent.firstChild)\n } else {\n document.body.prepend(navbar)\n }\n\n return navbar\n}\n"],"mappings":"sVAcA,SAAS,GAAc,CACrB,IAAM,EAAS,SAAS,cAA2B,oBAAoB,EACnE,GACF,EAAO,UAAU,OAAO,gBAAgB,CAE5C,CAEA,SAAS,EACP,EACA,EACA,EAAW,GACK,CAChB,MAAO,CACL,QACA,YAAc,CAEZ,OADA,EAAW,EACJ,EAAW,CACpB,EACA,UACF,CACF,CAEA,eAAe,EACb,EACA,EACA,EACA,EACA,EAC2B,CAC3B,IAAM,EAAQ,MAAM,EAAA,mBAAmB,CAAO,EACxC,EAAe,IAAqB,EAAA,WAAW,CAAO,EAAI,UAAY,IAAA,IAEtE,EAA8B,CAAC,EAEjC,GACF,EAAU,KACR,EAAc,UAAW,SAAY,CACnC,IAAM,EAAc,MAAM,EAAA,sBAAsB,CAAK,EACrD,EAAS,YAAY,EAAS,GAAM,EAAa,GAAM,IAAA,GAAW,CAAW,CAC/E,EAAG,IAAiB,SAAS,EAC7B,EAAc,UAAW,SAAY,CACnC,IAAM,EAAa,MAAM,EAAA,qBAAqB,CAAK,EACnD,EAAS,YAAY,EAAS,GAAM,EAAY,GAAM,IAAA,GAAW,CAAW,CAC9E,EAAG,IAAiB,QAAQ,CAC9B,EAGF,IAAM,EAAe,MAAM,EAAA,sBAAsB,CAAO,EAcxD,OAbA,EAAa,QAAQ,GAAQ,CAC3B,EAAU,KACR,EACE,EAAK,MAAM,EACX,SAAY,CACV,EAAS,YAAY,EAAS,GAAM,EAAM,GAAM,IAAA,GAAW,CAAW,CACxE,EACA,IAAiB,EAAK,WACnB,EAAkB,IAAoB,EAAK,QAAQ,MAAQ,EAAa,SAAW,EACxF,CACF,CACF,CAAC,EAEM,CACT,CAEA,eAAsB,EAAc,EAA0B,CAC5D,IAAM,EAAiB,SAAS,cAA2B,oBAAoB,EAE/E,GAAI,EAEF,OADA,EAAe,UAAU,OAAO,gBAAgB,EACzC,EAGT,IAAM,EAAc,SAAS,eAAe,aAAa,EACnD,EAAc,SAAS,eAAe,aAAa,EACnD,EAAe,SAAS,cAAc,KAAK,EAC3C,EAAM,OAAO,SAAS,KACtB,EAAqB,OAAO,GAAQ,SAAW,EAAA,MAAM,IAAI,CAAG,EAAI,EAChE,EAAmB,OAAO,QAAQ,OAAO,SACzC,EAAkB,OAAO,QAAQ,OAAO,QAC1C,EAAY,MAAM,EAAsB,EAAU,EAAS,EAAa,EAAkB,CAAe,CAAC,CAAC,MAAO,IACpH,QAAQ,MAAM,qCAAsC,CAAG,EAChD,CAAC,EACT,EAED,SAAS,EAAiB,EAA8B,CACtD,EAAY,EAAU,IAAK,IAAc,CACvC,GAAG,EACH,SAAU,IAAa,CACzB,EAAE,CACJ,CAEA,SAAS,EAAwB,EAAc,CAC7C,GAAM,CAAE,OAAQ,GAAiB,EACjC,EAAgB,CAAY,EAE5B,QAAQ,QAAQ,EAAa,aAAa,CAAC,CAAC,CAAC,MAAO,GAAU,CAC5D,QAAQ,MAAM,qCAAsC,CAAK,CAC3D,CAAC,EAED,EAAa,CACf,CAEA,SAAS,GAAgB,EACvB,EAAA,EAAA,OAAA,CACE,EAAA,IAAI,oCAAoC,EAAU,oBAAoB,EAAuB,wBAC7F,CACF,CACF,CAEA,EAAa,EAEb,IAAM,EAAS,EAAa,kBAE5B,GAAI,CAAC,EACH,MAAU,MAAM,0BAA0B,EAS5C,OANI,EACF,EAAY,aAAa,EAAQ,EAAY,UAAU,EAEvD,SAAS,KAAK,QAAQ,CAAM,EAGvB,CACT"}
1
+ {"version":3,"file":"navbar.cjs.js","names":["loadProfileFromURI","isWebIdUri","getProfilePaneFromURI","getSocialPaneFromURI","getFolderPanesFromURI","store","require_webIdUtils","require_paneUtils","solid_logic","lit_html","showNavbar","navbar","createNavItem","onSelected","createNavbarMenuItems","webId","subject","selectedPane","selectedPaneName","menuItems","profilePane","outliner","outlineView","socialPane","storagePanes","pane","selectedPaneUri","createNavbar","existingNavbar","OutlineView","mainContent","tmpContainer","uri","err","setSelectedItem","menuItem","selectedItem","handleSelectionChanged","event","error","renderNavbar"],"sources":["../../src/mainPage/navbar.ts"],"sourcesContent":["import { store } from 'solid-logic'\nimport { NamedNode } from 'rdflib'\nimport { getSocialPaneFromURI, getProfilePaneFromURI, getFolderPanesFromURI } from '../utils/paneUtils'\nimport { html, render } from 'lit-html'\nimport type { OutlineManager } from '../outline/manager'\nimport { isWebIdUri, loadProfileFromURI } from '../utils/webIdUtils'\n\nimport '~icons/lucide/user'\nimport '~icons/lucide/users'\nimport '~icons/lucide/folder-open'\nimport '../components/navbar'\n\nimport type { NavbarMenuItem } from '../components/navbar/Navbar'\n\nfunction showNavbar () {\n const navbar = document.querySelector<HTMLElement>('solid-panes-navbar')\n if (navbar) {\n navbar.classList.remove('navbar--hidden')\n }\n}\n\nfunction createNavItem (\n label: string,\n onSelected: () => void,\n selected = false\n): NavbarMenuItem {\n return {\n label,\n onSelected () {\n showNavbar()\n return onSelected()\n },\n selected\n }\n}\n\nasync function createNavbarMenuItems (\n outliner: OutlineManager,\n subject: NamedNode,\n outlineView: HTMLElement | null,\n selectedPaneName?: string,\n selectedPaneUri?: string\n): Promise<NavbarMenuItem[]> {\n const webId = await loadProfileFromURI(subject)\n const selectedPane = selectedPaneName || (isWebIdUri(subject) ? 'profile' : undefined)\n\n const menuItems: NavbarMenuItem[] = []\n\n if (webId) {\n menuItems.push(\n createNavItem('Profile', async () => {\n const profilePane = await getProfilePaneFromURI(webId)\n outliner.GotoSubject(subject, true, profilePane, true, undefined, outlineView)\n }, selectedPane === 'profile'),\n createNavItem('Friends', async () => {\n const socialPane = await getSocialPaneFromURI(webId)\n outliner.GotoSubject(subject, true, socialPane, true, undefined, outlineView)\n }, selectedPane === 'social')\n )\n }\n\n const storagePanes = await getFolderPanesFromURI(subject)\n storagePanes.forEach(pane => {\n menuItems.push(\n createNavItem(\n pane.label(),\n async () => {\n outliner.GotoSubject(subject, true, pane, true, undefined, outlineView)\n },\n selectedPane === pane.paneName &&\n (selectedPaneUri ? selectedPaneUri === pane.subject.value : storagePanes.length === 1)\n )\n )\n })\n\n return menuItems\n}\n\nexport async function createNavbar (outliner: OutlineManager) {\n const existingNavbar = document.querySelector<HTMLElement>('solid-panes-navbar')\n\n if (existingNavbar) {\n existingNavbar.classList.remove('navbar--hidden')\n return existingNavbar\n }\n\n const OutlineView = document.getElementById('OutlineView')\n const mainContent = document.getElementById('MainContent')\n const tmpContainer = document.createElement('div')\n const uri = window.location.href\n const subject: NamedNode = typeof uri === 'string' ? store.sym(uri) : uri\n const selectedPaneName = window.history.state?.paneName\n const selectedPaneUri = window.history.state?.paneUri\n let menuItems = await createNavbarMenuItems(outliner, subject, OutlineView, selectedPaneName, selectedPaneUri).catch((err) => {\n console.error('Failed to build navbar menu items:', err)\n return []\n })\n\n function setSelectedItem (selectedItem: NavbarMenuItem) {\n menuItems = menuItems.map((menuItem) => ({\n ...menuItem,\n selected: menuItem === selectedItem\n }))\n }\n\n function handleSelectionChanged (event: Event) {\n const { detail: selectedItem } = event as CustomEvent<NavbarMenuItem>\n setSelectedItem(selectedItem)\n\n Promise.resolve(selectedItem.onSelected?.()).catch((error) => {\n console.error('Navbar menu item selection failed:', error)\n })\n\n renderNavbar()\n }\n\n function renderNavbar () {\n render(\n html`<solid-panes-navbar .navbarItems=${menuItems} @solid-ui-select=${handleSelectionChanged}></solid-panes-navbar>`,\n tmpContainer\n )\n }\n\n renderNavbar()\n\n const navbar = tmpContainer.firstElementChild as HTMLElement | null\n\n if (!navbar) {\n throw new Error('Failed to create nav bar')\n }\n\n if (mainContent) {\n mainContent.insertBefore(navbar, mainContent.firstChild)\n } else {\n document.body.prepend(navbar)\n }\n\n return navbar\n}\n"],"mappings":"sVAcA,SAASU,GAAc,CACrB,IAAMC,EAAS,SAAS,cAA2B,oBAAoB,EACnEA,GACFA,EAAO,UAAU,OAAO,gBAAgB,CAE5C,CAEA,SAASC,EACP,EACA,EACA,EAAW,GACK,CAChB,MAAO,CACL,QACA,YAAc,CAEZ,OADAF,EAAW,EACJG,EAAW,CACpB,EACA,UACF,CACF,CAEA,eAAeC,EACb,EACA,EACA,EACA,EACA,EAC2B,CAC3B,IAAMC,EAAQ,MAAMf,EAAAA,mBAAmBgB,CAAO,EACxCC,EAAeC,IAAqBjB,EAAAA,WAAWe,CAAO,EAAI,UAAY,IAAA,IAEtEG,EAA8B,CAAC,EAEjCJ,GACFI,EAAU,KACRP,EAAc,UAAW,SAAY,CACnC,IAAMQ,EAAc,MAAMlB,EAAAA,sBAAsBa,CAAK,EACrDM,EAAS,YAAYL,EAAS,GAAMI,EAAa,GAAM,IAAA,GAAWE,CAAW,CAC/E,EAAGL,IAAiB,SAAS,EAC7BL,EAAc,UAAW,SAAY,CACnC,IAAMW,EAAa,MAAMpB,EAAAA,qBAAqBY,CAAK,EACnDM,EAAS,YAAYL,EAAS,GAAMO,EAAY,GAAM,IAAA,GAAWD,CAAW,CAC9E,EAAGL,IAAiB,QAAQ,CAC9B,EAGF,IAAMO,EAAe,MAAMpB,EAAAA,sBAAsBY,CAAO,EAcxD,OAbAQ,EAAa,QAAQ,GAAQ,CAC3BL,EAAU,KACRP,EACEa,EAAK,MAAM,EACX,SAAY,CACVJ,EAAS,YAAYL,EAAS,GAAMS,EAAM,GAAM,IAAA,GAAWH,CAAW,CACxE,EACAL,IAAiBQ,EAAK,WACnBC,EAAkBA,IAAoBD,EAAK,QAAQ,MAAQD,EAAa,SAAW,EACxF,CACF,CACF,CAAC,EAEML,CACT,CAEA,eAAsBQ,EAAc,EAA0B,CAC5D,IAAMC,EAAiB,SAAS,cAA2B,oBAAoB,EAE/E,GAAIA,EAEF,OADAA,EAAe,UAAU,OAAO,gBAAgB,EACzCA,EAGT,IAAMC,EAAc,SAAS,eAAe,aAAa,EACnDC,EAAc,SAAS,eAAe,aAAa,EACnDC,EAAe,SAAS,cAAc,KAAK,EAC3CC,EAAM,OAAO,SAAS,KACtBhB,EAAqB,OAAOgB,GAAQ,SAAW3B,EAAAA,MAAM,IAAI2B,CAAG,EAAIA,EAChEd,EAAmB,OAAO,QAAQ,OAAO,SACzCQ,EAAkB,OAAO,QAAQ,OAAO,QAC1CP,EAAY,MAAML,EAAsBO,EAAUL,EAASa,EAAaX,EAAkBQ,CAAe,CAAC,CAAC,MAAO,IACpH,QAAQ,MAAM,qCAAsCO,CAAG,EAChD,CAAC,EACT,EAED,SAASC,EAAiB,EAA8B,CACtD,EAAYf,EAAU,IAAK,IAAc,CACvC,GAAGgB,EACH,SAAUA,IAAaC,CACzB,EAAE,CACJ,CAEA,SAASC,EAAwB,EAAc,CAC7C,GAAM,CAAE,OAAQD,GAAiBE,EACjCJ,EAAgBE,CAAY,EAE5B,QAAQ,QAAQA,EAAa,aAAa,CAAC,CAAC,CAAC,MAAO,GAAU,CAC5D,QAAQ,MAAM,qCAAsCG,CAAK,CAC3D,CAAC,EAEDC,EAAa,CACf,CAEA,SAASA,GAAgB,EACvB,EAAA/B,EAAA,OAAA,CACE,EAAA,IAAI,oCAAoCU,EAAU,oBAAoBkB,EAAuB,wBAC7FN,CACF,CACF,CAEAS,EAAa,EAEb,IAAM7B,EAASoB,EAAa,kBAE5B,GAAI,CAACpB,EACH,MAAU,MAAM,0BAA0B,EAS5C,OANImB,EACFA,EAAY,aAAanB,EAAQmB,EAAY,UAAU,EAEvD,SAAS,KAAK,QAAQnB,CAAM,EAGvBA,CACT"}