folder-pane 3.2.0 → 4.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.
- package/dist/_virtual/_rolldown/runtime.cjs.js +1 -0
- package/dist/folderPane.cjs.js +3 -0
- package/dist/folderPane.cjs.js.map +1 -0
- package/{lib → dist}/folderPane.d.ts +0 -2
- package/{lib → dist}/folderPane.d.ts.map +1 -1
- package/dist/folderPane.esm.js +70 -0
- package/dist/folderPane.esm.js.map +1 -0
- package/dist/index.cjs.js +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.esm.js +2 -0
- package/package.json +34 -28
- package/lib/folder-pane.js +0 -852
- package/lib/folder-pane.js.map +0 -1
- package/lib/folder-pane.min.js +0 -2
- package/lib/folder-pane.min.js.map +0 -1
- package/lib/styles/folderPane.css +0 -107
- package/lib/styles/utilities.css +0 -4
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var e=Object.create,t=Object.defineProperty,n=Object.getOwnPropertyDescriptor,r=Object.getOwnPropertyNames,i=Object.getPrototypeOf,a=Object.prototype.hasOwnProperty,o=(e,i,o,s)=>{if(i&&typeof i==`object`||typeof i==`function`)for(var c=r(i),l=0,u=c.length,d;l<u;l++)d=c[l],!a.call(e,d)&&d!==o&&t(e,d,{get:(e=>i[e]).bind(null,d),enumerable:!(s=n(i,d))||s.enumerable});return e},s=(n,r,s)=>(s=n==null?{}:e(i(n)),o(r||!n||!n.__esModule||!a.call(n,`default`)?t(s,`default`,{value:n,enumerable:!0}):s,n));exports.__toESM=s;
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
(function(){try{if(typeof document<`u`){var e=document.createElement(`style`);e.appendChild(document.createTextNode(`.folderPaneInstancePane{box-sizing:border-box;text-align:left;-webkit-overflow-scrolling:touch;align-self:stretch;width:100%;max-width:none;margin-left:0;margin-right:0;padding-top:5px;overflow-x:auto}.folderPanePackageDiv{text-align:left;width:100%;max-width:none;margin-left:0;margin-right:0;display:block;overflow-x:auto}.folderPaneMainTable{table-layout:auto;text-align:left;width:100%;max-width:none;margin-left:0;margin-right:auto;margin-bottom:var(--spacing-lg,1.5625rem);display:table}.folderPaneMainTable td,.folderPaneMainTable th{text-align:left;vertical-align:top;overflow-wrap:anywhere;word-break:break-word}.folderPaneMainTable>tr>td.obj,.folderPaneMainTable>tbody>tr>td.obj{padding-left:var(--spacing-lg,1.5625rem)!important}.folderPanePredicateCell{width:0;min-width:0;max-width:0;overflow:hidden;border:0!important;margin:0!important;padding:0!important}.folderPaneCreationDiv{text-align:left;justify-content:flex-start;align-items:flex-start;width:100%;max-width:none;margin-left:0;margin-right:0;display:flex}.folderPaneDropZone{min-height:calc(var(--icon-base,2em) + 1rem);box-sizing:border-box;padding:.5rem .25rem}.folderPaneDropTarget{width:var(--icon-base,2em);min-width:var(--icon-base,2em);max-width:var(--icon-base,2em);height:var(--icon-base,2em);min-height:var(--icon-base,2em);max-height:var(--icon-base,2em);box-sizing:content-box;flex:0 0 var(--icon-base,2em);display:inline-block;margin:0!important;padding:0!important}.folderPaneExplicitDropIcon{width:var(--icon-base,2em);height:var(--icon-base,2em)}@media (width<=700px){.folderPaneExplicitDropIcon{width:var(--icon-sm,1.5em);height:var(--icon-sm,1.5em)}.folderPaneMainTable>tr>td.obj,.folderPaneMainTable>tbody>tr>td.obj{padding-left:5px!important}}
|
|
2
|
+
:root{--icon-base:2em}`)),document.head.appendChild(e)}}catch(e){console.error(`vite-plugin-css-injected-by-js`,e)}})();const e=require("./_virtual/_rolldown/runtime.cjs.js");;let t=require("solid-logic"),n=require("solid-ui");n=e.__toESM(n);var r={icon:n.icons.iconBase+`noun_973694_expanded.svg`,name:`folder`,mintNew:function(e,t){let n=e.session.store,r=t.newInstance||n.sym(t.newBase),i=r.uri;return i.endsWith(`/`)&&(i=i.slice(0,-1)),t.newInstance=n.sym(i+`/`),n.fetcher.webOperation(`PUT`,r.uri).then(function(){return console.log(`New container created: `+r.uri),t})},label:function(e,t){let r=t.session.store,i=r.each(e,n.ns.ldp(`contains`)).length;return i>0?`Contents (`+i+`)`:r.holds(e,n.ns.rdf(`type`),n.ns.ldp(`Container`))?`Container (0)`:null},render:function(e,r){function i(e){let t=e.uri.slice(e.dir().uri.length);return!(t.startsWith(`.`)||t.endsWith(`.acl`)||t.endsWith(`~`))}function a(){let t=c.each(e,n.ns.ldp(`contains`)).filter(i);t=t.map(e=>[n.utils.label(e).toLowerCase(),e]),t.sort(),t=t.map(e=>e[1]),n.utils.syncTableToArray(l,t,function(t){let r=c.statementsMatching(e,n.ns.ldp(`contains`),t)[0],i=s.VIEWAS_boring_default,a=s.propertyTR(o,r,!1),l=a.firstChild;return l.textContent=``,l.classList.add(`folderPanePredicateCell`),a.appendChild(s.outlineObjectTD(t,i,void 0,r)),a})}let o=r.dom,s=r.getOutliner(o),c=r.session.store,l,u=o.createElement(`div`);u.classList.add(`instancePane`,`folderPaneInstancePane`);let d=e.uri.endsWith(`/`)?e.uri:e.uri+`/`,f=c.sym(d+`index.ttl#this`);if(c.holds(e,n.ns.ldp(`contains`),f.doc())){console.log(`View of folder will be view of indexThing. Loading `+f);let e=u.appendChild(o.createElement(`div`));return e.classList.add(`folderPanePackageDiv`),c.fetcher.load(f.doc()).then(function(){l=e.appendChild(o.createElement(`table`)),l.classList.add(`folderPaneMainTable`),r.getOutliner(o).GotoSubject(f,!0,void 0,!1,void 0,l)}),u}l=u.appendChild(o.createElement(`table`)),l.classList.add(`folderPaneMainTable`),l.refresh=a,a(),c.updater.addDownstreamChangeListener(e,a);let p=u.appendChild(o.createElement(`div`));p.classList.add(`folderPaneCreationDiv`);let m=t.authn.currentUser();if(!m)return u;let h={folder:e,div:p,dom:o,statusArea:p,me:m};return h.refreshTarget=l,n.login.filterAvailablePanes(r.session.paneRegistry.list).then(function(e){n.create.newThingUI(h,r,e),n.aclControl.preventBrowserDropEvents(o);let t;t=p.firstChild,t instanceof HTMLElement&&t.classList.add(`folderPaneDropTarget`),p.classList.add(`folderPaneDropZone`),n.widgets.makeDropTarget(p,null,g)}),u;function g(t){n.widgets.uploadFiles(c.fetcher,t,e.uri,e.uri,function(t,r){let i=c.sym(r);console.log(` Upload: put OK: `+i),c.add(e,n.ns.ldp(`contains`),i,e.doc()),l.refresh()})}}};exports.default=r;
|
|
3
|
+
//# sourceMappingURL=folderPane.cjs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"folderPane.cjs.js","names":["UI","authn","require_runtime","solid_logic","solid_ui","folderPane_default","kb","context","newInstance","newPaneOptions","u","n","subject","noHiddenFiles","pathEnd","obj","refresh","objs","pair","mainTable","st","defaultpropview","outliner","tr","dom","predicateCell","div","thisDir","indexThing","packageDiv","creationDiv","me","creationContext","relevantPanes","target","droppedFileHandler","files","destination","uri"],"sources":["../src/folderPane.ts"],"sourcesContent":["/* Folder pane\n **\n ** This outline pane lists the members of a folder\n */\n\nimport { authn } from 'solid-logic'\nimport * as UI from 'solid-ui'\nimport './styles/folderPane.css'\nimport './styles/utilities.css'\n\nexport default {\n icon: UI.icons.iconBase + 'noun_973694_expanded.svg',\n name: 'folder',\n\n // Create a new folder in a Solid system,\n mintNew: function (context, newPaneOptions) {\n const kb = context.session.store\n const newInstance =\n newPaneOptions.newInstance || kb.sym(newPaneOptions.newBase)\n let u = newInstance.uri\n if (u.endsWith('/')) {\n u = u.slice(0, -1) // chop off trailer\n } // { throw new Error('URI of new folder must end in \"/\" :' + u) }\n newPaneOptions.newInstance = kb.sym(u + '/')\n\n return kb.fetcher\n .webOperation('PUT', newInstance.uri)\n .then(function () {\n console.log('New container created: ' + newInstance.uri)\n return newPaneOptions\n })\n },\n\n label: function (subject, context) {\n const kb = context.session.store\n const n = kb.each(subject, UI.ns.ldp('contains')).length\n if (n > 0) {\n return 'Contents (' + n + ')' // Show how many in hover text\n }\n if (kb.holds(subject, UI.ns.rdf('type'), UI.ns.ldp('Container'))) {\n // It is declared as being a container\n return 'Container (0)'\n }\n return null // Suppress pane otherwise\n },\n\n // Render a file folder in a LDP/solid system\n render: function (subject, context) {\n function noHiddenFiles (obj) {\n // @@ This hiddenness should actually be server defined\n const pathEnd = obj.uri.slice(obj.dir().uri.length)\n return !(\n pathEnd.startsWith('.') ||\n pathEnd.endsWith('.acl') ||\n pathEnd.endsWith('~')\n )\n }\n\n function refresh () {\n let objs = kb.each(subject, UI.ns.ldp('contains')).filter(noHiddenFiles)\n objs = objs.map(obj => [UI.utils.label(obj).toLowerCase(), obj])\n objs.sort() // Sort by label case-insensitive\n objs = objs.map(pair => pair[1])\n UI.utils.syncTableToArray(mainTable, objs, function (obj) {\n const st = kb.statementsMatching(subject, UI.ns.ldp('contains'), obj)[0]\n const defaultpropview = outliner.VIEWAS_boring_default\n const tr = outliner.propertyTR(dom, st, false)\n const predicateCell = tr.firstChild as HTMLElement\n predicateCell.textContent = '' // Was initialized to 'Contains'\n predicateCell.classList.add('folderPanePredicateCell')\n tr.appendChild(\n outliner.outlineObjectTD(obj, defaultpropview, undefined, st)\n )\n // UI.widgets.makeDraggable(tr, obj)\n return tr\n })\n }\n\n const dom = context.dom\n const outliner = context.getOutliner(dom)\n const kb = context.session.store\n let mainTable // This is a live synced table\n const div = dom.createElement('div')\n div.classList.add('instancePane', 'folderPaneInstancePane')\n \n const thisDir = subject.uri.endsWith('/') ? subject.uri : subject.uri + '/'\n const indexThing = kb.sym(thisDir + 'index.ttl#this')\n if (kb.holds(subject, UI.ns.ldp('contains'), indexThing.doc())) {\n console.log(\n 'View of folder will be view of indexThing. Loading ' + indexThing\n )\n const packageDiv = div.appendChild(dom.createElement('div'))\n packageDiv.classList.add('folderPanePackageDiv')\n kb.fetcher.load(indexThing.doc()).then(function () {\n mainTable = packageDiv.appendChild(dom.createElement('table'))\n mainTable.classList.add('folderPaneMainTable')\n context\n .getOutliner(dom)\n .GotoSubject(indexThing, true, undefined, false, undefined, mainTable)\n })\n return div\n } else {\n mainTable = div.appendChild(dom.createElement('table'))\n mainTable.classList.add('folderPaneMainTable')\n mainTable.refresh = refresh\n refresh()\n // addDownstreamChangeListener is a high level function which when someone else changes the resource,\n // reloads it into the kb, then must call addDownstreamChangeListener to be able to update the folder pane.\n kb.updater.addDownstreamChangeListener(subject, refresh) // Update store and call me if folder changes\n }\n\n // Allow user to create new things within the folder\n const creationDiv = div.appendChild(dom.createElement('div'))\n creationDiv.classList.add('folderPaneCreationDiv')\n const me = authn.currentUser() // @@ respond to login events\n if (!me) {\n return div // Cannot create new things without being logged in\n }\n const creationContext: UI.createTypes.CreateContext = {\n folder: subject,\n div: creationDiv,\n dom: dom,\n statusArea: creationDiv,\n me: me\n }\n creationContext.refreshTarget = mainTable\n UI.login\n .filterAvailablePanes(context.session.paneRegistry.list)\n .then(function (relevantPanes) {\n UI.create.newThingUI(creationContext, context, relevantPanes) // Have to pass panes down newUI\n\n UI.aclControl.preventBrowserDropEvents(dom)\n\n const explicitDropIcon = false\n let target\n if (explicitDropIcon) {\n target = creationDiv.insertBefore(\n dom.createElement('img'),\n creationDiv.firstChild\n )\n target.classList.add('folderPaneExplicitDropIcon')\n target.setAttribute('src', UI.icons.iconBase + 'noun_748003.svg')\n } else {\n target = creationDiv.firstChild // Overload drop target semantics onto the plus sign\n }\n\n if (target instanceof HTMLElement) {\n target.classList.add('folderPaneDropTarget')\n }\n\n creationDiv.classList.add('folderPaneDropZone')\n\n // /////////// Allow new file to be Uploaded\n UI.widgets.makeDropTarget(creationDiv, null, droppedFileHandler)\n })\n\n return div\n\n function droppedFileHandler (files) {\n UI.widgets.uploadFiles(\n kb.fetcher,\n files,\n subject.uri,\n subject.uri,\n function (file, uri) {\n // A file has been uploaded\n const destination = kb.sym(uri)\n console.log(' Upload: put OK: ' + destination)\n kb.add(subject, UI.ns.ldp('contains'), destination, subject.doc())\n mainTable.refresh()\n }\n )\n }\n }\n}\n// ends\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"folderPane.d.ts","sourceRoot":"","sources":["../src/folderPane.ts"],"names":[],"mappings":"AAOA,OAAO,yBAAyB,CAAA;AAChC,OAAO,wBAAwB,CAAA;;;;;;;;AAE/B,
|
|
1
|
+
{"version":3,"file":"folderPane.d.ts","sourceRoot":"","sources":["../src/folderPane.ts"],"names":[],"mappings":"AAOA,OAAO,yBAAyB,CAAA;AAChC,OAAO,wBAAwB,CAAA;;;;;;;;AAE/B,wBAoKC"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
(function(){try{if(typeof document<`u`){var e=document.createElement(`style`);e.appendChild(document.createTextNode(`.folderPaneInstancePane{box-sizing:border-box;text-align:left;-webkit-overflow-scrolling:touch;align-self:stretch;width:100%;max-width:none;margin-left:0;margin-right:0;padding-top:5px;overflow-x:auto}.folderPanePackageDiv{text-align:left;width:100%;max-width:none;margin-left:0;margin-right:0;display:block;overflow-x:auto}.folderPaneMainTable{table-layout:auto;text-align:left;width:100%;max-width:none;margin-left:0;margin-right:auto;margin-bottom:var(--spacing-lg,1.5625rem);display:table}.folderPaneMainTable td,.folderPaneMainTable th{text-align:left;vertical-align:top;overflow-wrap:anywhere;word-break:break-word}.folderPaneMainTable>tr>td.obj,.folderPaneMainTable>tbody>tr>td.obj{padding-left:var(--spacing-lg,1.5625rem)!important}.folderPanePredicateCell{width:0;min-width:0;max-width:0;overflow:hidden;border:0!important;margin:0!important;padding:0!important}.folderPaneCreationDiv{text-align:left;justify-content:flex-start;align-items:flex-start;width:100%;max-width:none;margin-left:0;margin-right:0;display:flex}.folderPaneDropZone{min-height:calc(var(--icon-base,2em) + 1rem);box-sizing:border-box;padding:.5rem .25rem}.folderPaneDropTarget{width:var(--icon-base,2em);min-width:var(--icon-base,2em);max-width:var(--icon-base,2em);height:var(--icon-base,2em);min-height:var(--icon-base,2em);max-height:var(--icon-base,2em);box-sizing:content-box;flex:0 0 var(--icon-base,2em);display:inline-block;margin:0!important;padding:0!important}.folderPaneExplicitDropIcon{width:var(--icon-base,2em);height:var(--icon-base,2em)}@media (width<=700px){.folderPaneExplicitDropIcon{width:var(--icon-sm,1.5em);height:var(--icon-sm,1.5em)}.folderPaneMainTable>tr>td.obj,.folderPaneMainTable>tbody>tr>td.obj{padding-left:5px!important}}
|
|
2
|
+
:root{--icon-base:2em}`)),document.head.appendChild(e)}}catch(e){console.error(`vite-plugin-css-injected-by-js`,e)}})();
|
|
3
|
+
|
|
4
|
+
import { authn as e } from "solid-logic";
|
|
5
|
+
import * as t from "solid-ui";
|
|
6
|
+
//#region src/folderPane.ts
|
|
7
|
+
var n = {
|
|
8
|
+
icon: t.icons.iconBase + "noun_973694_expanded.svg",
|
|
9
|
+
name: "folder",
|
|
10
|
+
mintNew: function(e, t) {
|
|
11
|
+
let n = e.session.store, r = t.newInstance || n.sym(t.newBase), i = r.uri;
|
|
12
|
+
return i.endsWith("/") && (i = i.slice(0, -1)), t.newInstance = n.sym(i + "/"), n.fetcher.webOperation("PUT", r.uri).then(function() {
|
|
13
|
+
return console.log("New container created: " + r.uri), t;
|
|
14
|
+
});
|
|
15
|
+
},
|
|
16
|
+
label: function(e, n) {
|
|
17
|
+
let r = n.session.store, i = r.each(e, t.ns.ldp("contains")).length;
|
|
18
|
+
return i > 0 ? "Contents (" + i + ")" : r.holds(e, t.ns.rdf("type"), t.ns.ldp("Container")) ? "Container (0)" : null;
|
|
19
|
+
},
|
|
20
|
+
render: function(n, r) {
|
|
21
|
+
function i(e) {
|
|
22
|
+
let t = e.uri.slice(e.dir().uri.length);
|
|
23
|
+
return !(t.startsWith(".") || t.endsWith(".acl") || t.endsWith("~"));
|
|
24
|
+
}
|
|
25
|
+
function a() {
|
|
26
|
+
let e = c.each(n, t.ns.ldp("contains")).filter(i);
|
|
27
|
+
e = e.map((e) => [t.utils.label(e).toLowerCase(), e]), e.sort(), e = e.map((e) => e[1]), t.utils.syncTableToArray(l, e, function(e) {
|
|
28
|
+
let r = c.statementsMatching(n, t.ns.ldp("contains"), e)[0], i = s.VIEWAS_boring_default, a = s.propertyTR(o, r, !1), l = a.firstChild;
|
|
29
|
+
return l.textContent = "", l.classList.add("folderPanePredicateCell"), a.appendChild(s.outlineObjectTD(e, i, void 0, r)), a;
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
let o = r.dom, s = r.getOutliner(o), c = r.session.store, l, u = o.createElement("div");
|
|
33
|
+
u.classList.add("instancePane", "folderPaneInstancePane");
|
|
34
|
+
let d = n.uri.endsWith("/") ? n.uri : n.uri + "/", f = c.sym(d + "index.ttl#this");
|
|
35
|
+
if (c.holds(n, t.ns.ldp("contains"), f.doc())) {
|
|
36
|
+
console.log("View of folder will be view of indexThing. Loading " + f);
|
|
37
|
+
let e = u.appendChild(o.createElement("div"));
|
|
38
|
+
return e.classList.add("folderPanePackageDiv"), c.fetcher.load(f.doc()).then(function() {
|
|
39
|
+
l = e.appendChild(o.createElement("table")), l.classList.add("folderPaneMainTable"), r.getOutliner(o).GotoSubject(f, !0, void 0, !1, void 0, l);
|
|
40
|
+
}), u;
|
|
41
|
+
}
|
|
42
|
+
l = u.appendChild(o.createElement("table")), l.classList.add("folderPaneMainTable"), l.refresh = a, a(), c.updater.addDownstreamChangeListener(n, a);
|
|
43
|
+
let p = u.appendChild(o.createElement("div"));
|
|
44
|
+
p.classList.add("folderPaneCreationDiv");
|
|
45
|
+
let m = e.currentUser();
|
|
46
|
+
if (!m) return u;
|
|
47
|
+
let h = {
|
|
48
|
+
folder: n,
|
|
49
|
+
div: p,
|
|
50
|
+
dom: o,
|
|
51
|
+
statusArea: p,
|
|
52
|
+
me: m
|
|
53
|
+
};
|
|
54
|
+
return h.refreshTarget = l, t.login.filterAvailablePanes(r.session.paneRegistry.list).then(function(e) {
|
|
55
|
+
t.create.newThingUI(h, r, e), t.aclControl.preventBrowserDropEvents(o);
|
|
56
|
+
let n;
|
|
57
|
+
n = p.firstChild, n instanceof HTMLElement && n.classList.add("folderPaneDropTarget"), p.classList.add("folderPaneDropZone"), t.widgets.makeDropTarget(p, null, g);
|
|
58
|
+
}), u;
|
|
59
|
+
function g(e) {
|
|
60
|
+
t.widgets.uploadFiles(c.fetcher, e, n.uri, n.uri, function(e, r) {
|
|
61
|
+
let i = c.sym(r);
|
|
62
|
+
console.log(" Upload: put OK: " + i), c.add(n, t.ns.ldp("contains"), i, n.doc()), l.refresh();
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
};
|
|
67
|
+
//#endregion
|
|
68
|
+
export { n as default };
|
|
69
|
+
|
|
70
|
+
//# sourceMappingURL=folderPane.esm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"folderPane.esm.js","names":["UI","folderPane_default","kb","context","newInstance","newPaneOptions","u","n","subject","noHiddenFiles","pathEnd","obj","refresh","objs","pair","mainTable","st","defaultpropview","outliner","tr","dom","predicateCell","div","thisDir","indexThing","packageDiv","creationDiv","me","authn","creationContext","relevantPanes","target","droppedFileHandler","files","destination","uri"],"sources":["../src/folderPane.ts"],"sourcesContent":["/* Folder pane\n **\n ** This outline pane lists the members of a folder\n */\n\nimport { authn } from 'solid-logic'\nimport * as UI from 'solid-ui'\nimport './styles/folderPane.css'\nimport './styles/utilities.css'\n\nexport default {\n icon: UI.icons.iconBase + 'noun_973694_expanded.svg',\n name: 'folder',\n\n // Create a new folder in a Solid system,\n mintNew: function (context, newPaneOptions) {\n const kb = context.session.store\n const newInstance =\n newPaneOptions.newInstance || kb.sym(newPaneOptions.newBase)\n let u = newInstance.uri\n if (u.endsWith('/')) {\n u = u.slice(0, -1) // chop off trailer\n } // { throw new Error('URI of new folder must end in \"/\" :' + u) }\n newPaneOptions.newInstance = kb.sym(u + '/')\n\n return kb.fetcher\n .webOperation('PUT', newInstance.uri)\n .then(function () {\n console.log('New container created: ' + newInstance.uri)\n return newPaneOptions\n })\n },\n\n label: function (subject, context) {\n const kb = context.session.store\n const n = kb.each(subject, UI.ns.ldp('contains')).length\n if (n > 0) {\n return 'Contents (' + n + ')' // Show how many in hover text\n }\n if (kb.holds(subject, UI.ns.rdf('type'), UI.ns.ldp('Container'))) {\n // It is declared as being a container\n return 'Container (0)'\n }\n return null // Suppress pane otherwise\n },\n\n // Render a file folder in a LDP/solid system\n render: function (subject, context) {\n function noHiddenFiles (obj) {\n // @@ This hiddenness should actually be server defined\n const pathEnd = obj.uri.slice(obj.dir().uri.length)\n return !(\n pathEnd.startsWith('.') ||\n pathEnd.endsWith('.acl') ||\n pathEnd.endsWith('~')\n )\n }\n\n function refresh () {\n let objs = kb.each(subject, UI.ns.ldp('contains')).filter(noHiddenFiles)\n objs = objs.map(obj => [UI.utils.label(obj).toLowerCase(), obj])\n objs.sort() // Sort by label case-insensitive\n objs = objs.map(pair => pair[1])\n UI.utils.syncTableToArray(mainTable, objs, function (obj) {\n const st = kb.statementsMatching(subject, UI.ns.ldp('contains'), obj)[0]\n const defaultpropview = outliner.VIEWAS_boring_default\n const tr = outliner.propertyTR(dom, st, false)\n const predicateCell = tr.firstChild as HTMLElement\n predicateCell.textContent = '' // Was initialized to 'Contains'\n predicateCell.classList.add('folderPanePredicateCell')\n tr.appendChild(\n outliner.outlineObjectTD(obj, defaultpropview, undefined, st)\n )\n // UI.widgets.makeDraggable(tr, obj)\n return tr\n })\n }\n\n const dom = context.dom\n const outliner = context.getOutliner(dom)\n const kb = context.session.store\n let mainTable // This is a live synced table\n const div = dom.createElement('div')\n div.classList.add('instancePane', 'folderPaneInstancePane')\n \n const thisDir = subject.uri.endsWith('/') ? subject.uri : subject.uri + '/'\n const indexThing = kb.sym(thisDir + 'index.ttl#this')\n if (kb.holds(subject, UI.ns.ldp('contains'), indexThing.doc())) {\n console.log(\n 'View of folder will be view of indexThing. Loading ' + indexThing\n )\n const packageDiv = div.appendChild(dom.createElement('div'))\n packageDiv.classList.add('folderPanePackageDiv')\n kb.fetcher.load(indexThing.doc()).then(function () {\n mainTable = packageDiv.appendChild(dom.createElement('table'))\n mainTable.classList.add('folderPaneMainTable')\n context\n .getOutliner(dom)\n .GotoSubject(indexThing, true, undefined, false, undefined, mainTable)\n })\n return div\n } else {\n mainTable = div.appendChild(dom.createElement('table'))\n mainTable.classList.add('folderPaneMainTable')\n mainTable.refresh = refresh\n refresh()\n // addDownstreamChangeListener is a high level function which when someone else changes the resource,\n // reloads it into the kb, then must call addDownstreamChangeListener to be able to update the folder pane.\n kb.updater.addDownstreamChangeListener(subject, refresh) // Update store and call me if folder changes\n }\n\n // Allow user to create new things within the folder\n const creationDiv = div.appendChild(dom.createElement('div'))\n creationDiv.classList.add('folderPaneCreationDiv')\n const me = authn.currentUser() // @@ respond to login events\n if (!me) {\n return div // Cannot create new things without being logged in\n }\n const creationContext: UI.createTypes.CreateContext = {\n folder: subject,\n div: creationDiv,\n dom: dom,\n statusArea: creationDiv,\n me: me\n }\n creationContext.refreshTarget = mainTable\n UI.login\n .filterAvailablePanes(context.session.paneRegistry.list)\n .then(function (relevantPanes) {\n UI.create.newThingUI(creationContext, context, relevantPanes) // Have to pass panes down newUI\n\n UI.aclControl.preventBrowserDropEvents(dom)\n\n const explicitDropIcon = false\n let target\n if (explicitDropIcon) {\n target = creationDiv.insertBefore(\n dom.createElement('img'),\n creationDiv.firstChild\n )\n target.classList.add('folderPaneExplicitDropIcon')\n target.setAttribute('src', UI.icons.iconBase + 'noun_748003.svg')\n } else {\n target = creationDiv.firstChild // Overload drop target semantics onto the plus sign\n }\n\n if (target instanceof HTMLElement) {\n target.classList.add('folderPaneDropTarget')\n }\n\n creationDiv.classList.add('folderPaneDropZone')\n\n // /////////// Allow new file to be Uploaded\n UI.widgets.makeDropTarget(creationDiv, null, droppedFileHandler)\n })\n\n return div\n\n function droppedFileHandler (files) {\n UI.widgets.uploadFiles(\n kb.fetcher,\n files,\n subject.uri,\n subject.uri,\n function (file, uri) {\n // A file has been uploaded\n const destination = kb.sym(uri)\n console.log(' Upload: put OK: ' + destination)\n kb.add(subject, UI.ns.ldp('contains'), destination, subject.doc())\n mainTable.refresh()\n }\n )\n }\n }\n}\n// ends\n"],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
const e=require("./folderPane.cjs.js");module.exports=e.default;
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA"}
|
package/package.json
CHANGED
|
@@ -1,26 +1,34 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "folder-pane",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "4.0.0",
|
|
4
4
|
"description": "Solid-compatible Panes: File browser",
|
|
5
|
-
"main": "
|
|
6
|
-
"types": "
|
|
5
|
+
"main": "dist/index.cjs.js",
|
|
6
|
+
"types": "dist/index.d.ts",
|
|
7
|
+
"exports": {
|
|
8
|
+
".": {
|
|
9
|
+
"types": "./dist/index.d.ts",
|
|
10
|
+
"import": "./dist/index.esm.js",
|
|
11
|
+
"require": "./dist/index.cjs.js"
|
|
12
|
+
}
|
|
13
|
+
},
|
|
7
14
|
"sideEffects": [
|
|
8
15
|
"**/*.css"
|
|
9
16
|
],
|
|
10
17
|
"scripts": {
|
|
11
|
-
"clean": "rm -rf
|
|
12
|
-
"build": "npm run clean && npm run typecheck &&
|
|
18
|
+
"clean": "rm -rf dist",
|
|
19
|
+
"build": "npm run clean && npm run typecheck && vite build",
|
|
20
|
+
"watch": "vite build --watch",
|
|
13
21
|
"lint": "eslint",
|
|
14
22
|
"lint-fix": "eslint --fix",
|
|
15
23
|
"typecheck": "tsc --noEmit",
|
|
16
24
|
"test": "echo \"No tests specified\" && exit 0",
|
|
17
25
|
"ignore:prepublishOnly": "npm run build && npm run lint",
|
|
18
26
|
"preversion": "npm run typecheck && npm run lint",
|
|
19
|
-
"ignore:postpublish": "git push origin
|
|
20
|
-
"start": "
|
|
27
|
+
"ignore:postpublish": "git push origin staging",
|
|
28
|
+
"start": "vite"
|
|
21
29
|
},
|
|
22
30
|
"files": [
|
|
23
|
-
"
|
|
31
|
+
"dist/",
|
|
24
32
|
"declarations.d.ts",
|
|
25
33
|
"README.md",
|
|
26
34
|
"LICENSE"
|
|
@@ -47,33 +55,31 @@
|
|
|
47
55
|
"url": "https://github.com/SolidOS/folder-pane/issues"
|
|
48
56
|
},
|
|
49
57
|
"homepage": "https://github.com/SolidOS/folder-pane",
|
|
50
|
-
"peerDependencies": {
|
|
51
|
-
"solid-logic": "^5.0.0",
|
|
52
|
-
"solid-ui": "^4.0.0"
|
|
53
|
-
},
|
|
54
58
|
"devDependencies": {
|
|
55
|
-
"@babel/core": "^7.28.6",
|
|
56
|
-
"@babel/preset-env": "^7.28.6",
|
|
57
|
-
"@babel/preset-typescript": "^7.28.5",
|
|
58
59
|
"@eslint/eslintrc": "^3.3.3",
|
|
59
60
|
"@eslint/js": "^10.0.1",
|
|
60
|
-
"@types/node": "^
|
|
61
|
+
"@types/node": "^24.13.3",
|
|
61
62
|
"@typescript-eslint/parser": "^8.53.1",
|
|
62
|
-
"
|
|
63
|
-
"copy-webpack-plugin": "^14.0.0",
|
|
64
|
-
"css-loader": "^7.1.4",
|
|
63
|
+
"@vitest/coverage-v8": "^4.0.18",
|
|
65
64
|
"eslint": "^10.0.1",
|
|
66
65
|
"globals": "^17.1.0",
|
|
67
|
-
"
|
|
68
|
-
"
|
|
69
|
-
"style-loader": "^4.0.0",
|
|
70
|
-
"terser-webpack-plugin": "^5.4.0",
|
|
71
|
-
"typescript": "^5.9.3",
|
|
72
|
-
"webpack": "^5.96.1",
|
|
73
|
-
"webpack-cli": "^6.0.1",
|
|
74
|
-
"webpack-dev-server": "^5.2.3"
|
|
66
|
+
"solidos-toolkit": "dev",
|
|
67
|
+
"typescript": "^5.9.3"
|
|
75
68
|
},
|
|
76
69
|
"dependencies": {
|
|
77
|
-
"rdflib": "
|
|
70
|
+
"rdflib": "2.4.1",
|
|
71
|
+
"solid-logic": "6.0.0",
|
|
72
|
+
"solid-ui": "5.0.1",
|
|
73
|
+
"vite": "^8.0.16",
|
|
74
|
+
"vitest": "^4.0.18",
|
|
75
|
+
"vitest-axe": "^0.1.0"
|
|
76
|
+
},
|
|
77
|
+
"solidosDependencies": [
|
|
78
|
+
"rdflib",
|
|
79
|
+
"solid-logic",
|
|
80
|
+
"solid-ui"
|
|
81
|
+
],
|
|
82
|
+
"allowScripts": {
|
|
83
|
+
"fsevents@2.3.3": true
|
|
78
84
|
}
|
|
79
85
|
}
|