solid-panes 3.5.31-eef22dd6 → 3.5.32-0fdc5067
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/README.md +3 -3
- package/SECURITY.md +47 -0
- package/lib/audio/audioPane.js +8 -1
- package/lib/audio/audioPane.js.map +1 -1
- package/lib/humanReadablePane.js +7 -2
- package/lib/humanReadablePane.js.map +1 -1
- package/lib/versionInfo.js +6 -6
- package/lib/versionInfo.js.map +1 -1
- package/lib/video/videoPane.js +9 -1
- package/lib/video/videoPane.js.map +1 -1
- package/package.json +16 -15
- package/src/audio/audioPane.js +10 -1
- package/src/humanReadablePane.js +4 -2
- package/src/versionInfo.ts +6 -6
- package/src/video/videoPane.js +11 -1
package/README.md
CHANGED
|
@@ -61,9 +61,9 @@ npm install
|
|
|
61
61
|
npm run start
|
|
62
62
|
```
|
|
63
63
|
2. a browser window should automatically open at http://localhost:9000, if for some reason it doesn't go ahead and manually navigate there.
|
|
64
|
-
3. edit `dev/
|
|
65
|
-
|
|
66
|
-
|
|
64
|
+
3. Once you arrive at the Solid Pane Tester page, the `profile-pane` will be loaded by default. Proceed to edit `solid-panes/dev/loader.ts` and, at line 5, you should see `import Pane from 'profile-pane'`. Simply change `'profile-pane'` to your preferred pane/directory containing the pane of choice; for example, you could choose `'source-pane'` and bam, it will load that pane. For those who are new, you can go to the `solid-panes/src` directory and manually navigate through each individual folder. In most folders, you simply look for any file that has `pane` in the title. Copy and paste the `pane.js` file of your choice into the `solid-panes/dev/pane` folder, or you can import directly from the `src` directory. For example, importing from `'../src/dokieli/dokieliPane'` will work just fine. Each time you save `solid-panes/dev/loader.ts` while importing a different pane, your browser at `http://localhost:9000/` should automatically refresh. It's a good idea to keep the developer console open in your web browser to ensure panes are loading and rendering properly.
|
|
65
|
+
|
|
66
|
+
4. Another tip: to ensure you arrive at the proper destination, look at lines 48–53 in `solid-panes/dev/loader.ts`. You should see an event listener that is ready for a string. `renderPane('https://solidos.solidcommunity.net/Team/SolidOs%20team%20chat/index.ttl#this')` will be the default. Depending on the `pane.js` that you chose in the earlier import statements, the `renderPane` function determines the way you will see DOMContent inside of that particular pane. If you have created an `index.html` in your provider pod storage area, you could use `'https://yoursolidname.solidcommunity.net/profile/index.html'` inside of the `renderPane()` function parameters. You can edit the string manually in `solid-panes/dev/loader.ts`, or you can go to your developer console and type `renderPane('https://yoursolidname.solidcommunity.net/profile/index.html')` — just point to a part of your account that is congruent to the pane that you wish to import! :)
|
|
67
67
|
|
|
68
68
|
## Contributing panes
|
|
69
69
|
When you created a pane, you can either add it as an npm dependency
|
package/SECURITY.md
ADDED
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
# Security policy
|
|
2
|
+
|
|
3
|
+
SolidOS is taking the security of our repositories seriously. This includes all source code repositories managed through our [GitHub organization](https://github.com/solidos). This being said, each member's contribution is on a volunteer basis and the skills we have at hand fluctuate with each member.
|
|
4
|
+
|
|
5
|
+
If you believe you have found a security vulnerability in any SolidOS repository, please report it to us as described below.
|
|
6
|
+
|
|
7
|
+
## About this repository
|
|
8
|
+
|
|
9
|
+
These repositories contribute to the frontend you see on each solidcommunity.net Pod. The repositories have different purposes and offer with different features.
|
|
10
|
+
|
|
11
|
+
- [**solid-logic**](https://github.com/solidos/solid-logic) — core business logic of SolidOS
|
|
12
|
+
- [**mashlib**](https://github.com/solidos/mashlib/) — a solid-compatible code library of application-level functionality for the world of Solid
|
|
13
|
+
- [**solid-panes**](https://github.com/solidos/solid-panes) — a set of core solid-compatible panes based on solid-ui
|
|
14
|
+
- [**solid-ui**](https://github.com/solidos/solid-ui) — User Interface widgets and utilities for Solid. Building blocks for solid-based apps
|
|
15
|
+
|
|
16
|
+
## Reporting a vulnerability
|
|
17
|
+
|
|
18
|
+
Please report any security vulnerabilities through the public GitHub issues of each repository you find the vulnerability in. In case of vulnerabilities which span multiple repos, please report them on [the SolidOS repo](https://github.com/SolidOS/solidos/issues/new) itself.
|
|
19
|
+
|
|
20
|
+
Please mention in your vulnerability issue the following:
|
|
21
|
+
|
|
22
|
+
### Impact
|
|
23
|
+
_What kind of vulnerability is it? Who is impacted?_
|
|
24
|
+
|
|
25
|
+
### Patches
|
|
26
|
+
_Has the problem been patched? What versions should users upgrade to?_
|
|
27
|
+
|
|
28
|
+
### Workarounds
|
|
29
|
+
_Is there a way for users to fix or remediate the vulnerability without upgrading?_
|
|
30
|
+
|
|
31
|
+
### References
|
|
32
|
+
_Are there any links users can visit to find out more?_
|
|
33
|
+
|
|
34
|
+
### Proposed solution
|
|
35
|
+
_Any suggested fix in the form of text or a PR are more than welcome_
|
|
36
|
+
|
|
37
|
+
As a volunteer based organization we appreciate any PR which also helps fix any vulnerability.
|
|
38
|
+
|
|
39
|
+
## Preferred Languages
|
|
40
|
+
|
|
41
|
+
We prefer all communications to be in English.
|
|
42
|
+
|
|
43
|
+
## Hall of Fame
|
|
44
|
+
|
|
45
|
+
Thank you to the following people for reporting vulnerabilities.
|
|
46
|
+
|
|
47
|
+
* Otto-AA
|
package/lib/audio/audioPane.js
CHANGED
|
@@ -151,7 +151,14 @@ var _default = {
|
|
|
151
151
|
var audioControl = function audioControl(song, autoplay) {
|
|
152
152
|
var audio = dom.createElement('audio');
|
|
153
153
|
audio.setAttribute('controls', 'yes');
|
|
154
|
-
audio
|
|
154
|
+
// get audio with authenticated fetch
|
|
155
|
+
kb.fetcher._fetch(song.uri).then(function (response) {
|
|
156
|
+
return response.blob();
|
|
157
|
+
}).then(function (myBlob) {
|
|
158
|
+
var objectURL = URL.createObjectURL(myBlob);
|
|
159
|
+
audio.setAttribute('src', objectURL); // w640 h480 //
|
|
160
|
+
});
|
|
161
|
+
|
|
155
162
|
if (autoplay) {
|
|
156
163
|
audio.setAttribute('autoplay', 'autoplay'); // Make this a personal preference
|
|
157
164
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"audioPane.js","names":["UI","_interopRequireWildcard","require","$rdf","_getRequireWildcardCache","nodeInterop","WeakMap","cacheBabelInterop","cacheNodeInterop","obj","__esModule","_typeof","cache","has","get","newObj","hasPropertyDescriptor","Object","defineProperty","getOwnPropertyDescriptor","key","prototype","hasOwnProperty","call","desc","set","ns","_default","icon","icons","iconBase","name","label","subject","context","kb","session","store","typeURIs","findTypeURIs","prefix","Util","mediaTypeClass","uri","split","t","startsWith","render","dom","options","autoplay","chain","chainAlbums","loop","removeExtension","str","dot","lastIndexOf","slash","slice","looksRedundant","x","folder","any","undefined","ldp","contents","each","length","thisName","k","otherName","endsWith","guessNames","a","decode","decodeURIComponent","e","artistRow","textContent","albumRow","trackRow","moveOn","current","level","Promise","resolve","dir","fetcher","load","then","_xhr","j","sort","i","folder2","console","log","endedListener","event","sym","target","getAttribute","tryNext","cur","next","controlRow","appendChild","audioControl","removeChild","song","audio","createElement","setAttribute","addEventListener","div","table","labelStyle","style","cssText","holds","exports"],"sources":["../../src/audio/audioPane.js"],"sourcesContent":["/* Single audio play Pane\n **\n */\n import * as UI from 'solid-ui'\n import * as $rdf from 'rdflib'\nconst ns = UI.ns\n\nexport default {\n icon: UI.icons.iconBase + 'noun_534313.svg',\n\n name: 'audio',\n\n // Does the subject deserve an audio play pane?\n label: function (subject, context) {\n const kb = context.session.store\n const typeURIs = kb.findTypeURIs(subject)\n\n const prefix = $rdf.Util.mediaTypeClass('audio/*').uri.split('*')[0]\n for (const t in typeURIs) {\n if (t.startsWith(prefix)) return 'Play audio'\n }\n return null\n },\n\n render: function (subject, context) {\n const kb = context.session.store\n const dom = context.dom\n const options = {\n autoplay: false,\n chain: true,\n chainAlbums: true,\n loop: false\n }\n\n const removeExtension = function (str) {\n const dot = str.lastIndexOf('.')\n if (dot < 0) return str // if any\n const slash = str.lastIndexOf('/')\n if (dot < slash) return str\n return str.slice(0, dot)\n }\n\n // True if there is another file like song.mp3 when this is \"song 1.mp3\"\n // or this is song.m4a\n //\n const looksRedundant = function (x) {\n const folder = kb.any(undefined, ns.ldp('contains'), x)\n if (!folder) return false\n const contents = kb.each(folder, ns.ldp('contains'))\n if (contents.length < 2) return false\n const thisName = x.uri\n for (let k = 0; k < contents.length; k++) {\n const otherName = contents[k].uri\n if (\n thisName.length > otherName.length &&\n thisName.startsWith(removeExtension(otherName))\n ) {\n return true\n }\n if (\n thisName.endsWith('.m4a') &&\n otherName.endsWith('.mp3') &&\n removeExtension(thisName) === removeExtension(otherName)\n ) {\n return true\n }\n }\n return false\n }\n\n // Alternative methods could include:\n // Accesing metadata in the audio contol, or paring the audio file\n const guessNames = function (x) {\n const a = x.uri.split('/').slice(-3) // Hope artist, album, track\n const decode = function (str) {\n try {\n return decodeURIComponent(str)\n } catch (e) {\n return str\n }\n }\n artistRow.textContent = decode(a[0])\n albumRow.textContent = decode(a[1])\n trackRow.textContent = decode(removeExtension(a[2]))\n }\n\n const moveOn = function (current, level) {\n return new Promise(function (resolve) {\n level = level || 0\n if (!options.chain) return resolve(null)\n // Ideally navigate graph else cheat with URI munging:\n const folder =\n kb.any(undefined, ns.ldp('contains'), current) || current.dir()\n if (!folder) return resolve(null)\n kb.fetcher.load(folder).then(function (_xhr) {\n const contents = kb.each(folder, ns.ldp('contains')) // @@ load if not loaded\n // if (contents.length < 2) return resolve(null) NO might move on from 1-track album\n let j\n contents.sort() // sort by URI which hopefully will get tracks in order\n for (let i = 0; i < contents.length; i++) {\n if (current.uri === contents[i].uri) {\n j = (i + 1) % contents.length\n if (j === 0) {\n if (!options.chainAlbums) {\n if (options.loop) {\n return resolve(contents[j])\n }\n return resolve(null) // No more music needed\n } else {\n // chain albums\n if (level === 1 || !options.chainAlbums) return resolve(null) // limit of navigating treee\n moveOn(folder, level + 1).then(function (folder2) {\n if (folder2) {\n kb.fetcher.load(folder2).then(function (_xhr) {\n const contents = kb.each(folder2, ns.ldp('contains'))\n if (contents.length === 0) return resolve(null)\n contents.sort()\n console.log('New Album: ' + folder2)\n return resolve(contents[0]) // Start off new album\n })\n }\n })\n }\n } else {\n return resolve(contents[j])\n }\n }\n } // for\n })\n })\n }\n const endedListener = function (event) {\n const current = kb.sym(event.target.getAttribute('src'))\n if (!options.chain) return\n const tryNext = function (cur) {\n const current = cur\n moveOn(current).then(function (next) {\n if (!next) {\n console.log('No successor to ' + current)\n return\n }\n if (!looksRedundant(next)) {\n console.log('Moving on to ' + next)\n guessNames(next)\n controlRow.appendChild(audioControl(next, true)) // Force autoplay\n controlRow.removeChild(event.target)\n } else {\n console.log('Ignoring redundant ' + next)\n tryNext(next)\n }\n })\n }\n tryNext(current)\n }\n\n const audioControl = function (song, autoplay) {\n const audio = dom.createElement('audio')\n audio.setAttribute('controls', 'yes')\n audio.setAttribute('src', song.uri)\n if (autoplay) {\n audio.setAttribute('autoplay', 'autoplay') // Make this a personal preference\n }\n audio.addEventListener('ended', endedListener, false)\n return audio\n }\n\n const div = dom.createElement('div')\n const table = div.appendChild(dom.createElement('table'))\n const labelStyle = 'padding: 0.3em; color:white; background-color: black;'\n const artistRow = table.appendChild(dom.createElement('tr'))\n artistRow.style.cssText = labelStyle\n const albumRow = table.appendChild(dom.createElement('tr'))\n albumRow.style.cssText = labelStyle\n const trackRow = table.appendChild(dom.createElement('tr'))\n trackRow.style.cssText = labelStyle\n const controlRow = table.appendChild(dom.createElement('tr'))\n guessNames(subject)\n controlRow.appendChild(audioControl(subject, options.autoplay))\n\n if (!kb.holds(undefined, ns.ldp('contains'), subject) && subject.dir()) {\n kb.fetcher.load(subject.dir()) // Prefetch enclosing @@ or playlist\n }\n\n return div\n }\n}\n\n// ends\n"],"mappings":";;;;;;;AAGC,IAAAA,EAAA,GAAAC,uBAAA,CAAAC,OAAA;AACA,IAAAC,IAAA,GAAAF,uBAAA,CAAAC,OAAA;AAA8B,SAAAE,yBAAAC,WAAA,eAAAC,OAAA,kCAAAC,iBAAA,OAAAD,OAAA,QAAAE,gBAAA,OAAAF,OAAA,YAAAF,wBAAA,YAAAA,yBAAAC,WAAA,WAAAA,WAAA,GAAAG,gBAAA,GAAAD,iBAAA,KAAAF,WAAA;AAAA,SAAAJ,wBAAAQ,GAAA,EAAAJ,WAAA,SAAAA,WAAA,IAAAI,GAAA,IAAAA,GAAA,CAAAC,UAAA,WAAAD,GAAA,QAAAA,GAAA,aAAAE,OAAA,CAAAF,GAAA,yBAAAA,GAAA,uCAAAA,GAAA,UAAAG,KAAA,GAAAR,wBAAA,CAAAC,WAAA,OAAAO,KAAA,IAAAA,KAAA,CAAAC,GAAA,CAAAJ,GAAA,YAAAG,KAAA,CAAAE,GAAA,CAAAL,GAAA,SAAAM,MAAA,WAAAC,qBAAA,GAAAC,MAAA,CAAAC,cAAA,IAAAD,MAAA,CAAAE,wBAAA,WAAAC,GAAA,IAAAX,GAAA,QAAAW,GAAA,kBAAAH,MAAA,CAAAI,SAAA,CAAAC,cAAA,CAAAC,IAAA,CAAAd,GAAA,EAAAW,GAAA,SAAAI,IAAA,GAAAR,qBAAA,GAAAC,MAAA,CAAAE,wBAAA,CAAAV,GAAA,EAAAW,GAAA,cAAAI,IAAA,KAAAA,IAAA,CAAAV,GAAA,IAAAU,IAAA,CAAAC,GAAA,KAAAR,MAAA,CAAAC,cAAA,CAAAH,MAAA,EAAAK,GAAA,EAAAI,IAAA,YAAAT,MAAA,CAAAK,GAAA,IAAAX,GAAA,CAAAW,GAAA,SAAAL,MAAA,cAAAN,GAAA,MAAAG,KAAA,IAAAA,KAAA,CAAAa,GAAA,CAAAhB,GAAA,EAAAM,MAAA,YAAAA,MAAA;AAJ/B;AACA;AACA;;AAGA,IAAMW,EAAE,GAAG1B,EAAE,CAAC0B,EAAE;AAAA,IAAAC,QAAA,GAED;EACbC,IAAI,EAAE5B,EAAE,CAAC6B,KAAK,CAACC,QAAQ,GAAG,iBAAiB;EAE3CC,IAAI,EAAE,OAAO;EAEb;EACAC,KAAK,EAAE,SAAAA,MAAUC,OAAO,EAAEC,OAAO,EAAE;IACjC,IAAMC,EAAE,GAAGD,OAAO,CAACE,OAAO,CAACC,KAAK;IAChC,IAAMC,QAAQ,GAAGH,EAAE,CAACI,YAAY,CAACN,OAAO,CAAC;IAEzC,IAAMO,MAAM,GAAGrC,IAAI,CAACsC,IAAI,CAACC,cAAc,CAAC,SAAS,CAAC,CAACC,GAAG,CAACC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IACpE,KAAK,IAAMC,CAAC,IAAIP,QAAQ,EAAE;MACxB,IAAIO,CAAC,CAACC,UAAU,CAACN,MAAM,CAAC,EAAE,OAAO,YAAY;IAC/C;IACA,OAAO,IAAI;EACb,CAAC;EAEDO,MAAM,EAAE,SAAAA,OAAUd,OAAO,EAAEC,OAAO,EAAE;IAClC,IAAMC,EAAE,GAAGD,OAAO,CAACE,OAAO,CAACC,KAAK;IAChC,IAAMW,GAAG,GAAGd,OAAO,CAACc,GAAG;IACvB,IAAMC,OAAO,GAAG;MACdC,QAAQ,EAAE,KAAK;MACfC,KAAK,EAAE,IAAI;MACXC,WAAW,EAAE,IAAI;MACjBC,IAAI,EAAE;IACR,CAAC;IAED,IAAMC,eAAe,GAAG,SAAlBA,eAAeA,CAAaC,GAAG,EAAE;MACrC,IAAMC,GAAG,GAAGD,GAAG,CAACE,WAAW,CAAC,GAAG,CAAC;MAChC,IAAID,GAAG,GAAG,CAAC,EAAE,OAAOD,GAAG,EAAC;MACxB,IAAMG,KAAK,GAAGH,GAAG,CAACE,WAAW,CAAC,GAAG,CAAC;MAClC,IAAID,GAAG,GAAGE,KAAK,EAAE,OAAOH,GAAG;MAC3B,OAAOA,GAAG,CAACI,KAAK,CAAC,CAAC,EAAEH,GAAG,CAAC;IAC1B,CAAC;;IAED;IACA;IACA;IACA,IAAMI,cAAc,GAAG,SAAjBA,cAAcA,CAAaC,CAAC,EAAE;MAClC,IAAMC,MAAM,GAAG3B,EAAE,CAAC4B,GAAG,CAACC,SAAS,EAAEtC,EAAE,CAACuC,GAAG,CAAC,UAAU,CAAC,EAAEJ,CAAC,CAAC;MACvD,IAAI,CAACC,MAAM,EAAE,OAAO,KAAK;MACzB,IAAMI,QAAQ,GAAG/B,EAAE,CAACgC,IAAI,CAACL,MAAM,EAAEpC,EAAE,CAACuC,GAAG,CAAC,UAAU,CAAC,CAAC;MACpD,IAAIC,QAAQ,CAACE,MAAM,GAAG,CAAC,EAAE,OAAO,KAAK;MACrC,IAAMC,QAAQ,GAAGR,CAAC,CAAClB,GAAG;MACtB,KAAK,IAAI2B,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGJ,QAAQ,CAACE,MAAM,EAAEE,CAAC,EAAE,EAAE;QACxC,IAAMC,SAAS,GAAGL,QAAQ,CAACI,CAAC,CAAC,CAAC3B,GAAG;QACjC,IACE0B,QAAQ,CAACD,MAAM,GAAGG,SAAS,CAACH,MAAM,IAClCC,QAAQ,CAACvB,UAAU,CAACQ,eAAe,CAACiB,SAAS,CAAC,CAAC,EAC/C;UACA,OAAO,IAAI;QACb;QACA,IACEF,QAAQ,CAACG,QAAQ,CAAC,MAAM,CAAC,IACzBD,SAAS,CAACC,QAAQ,CAAC,MAAM,CAAC,IAC1BlB,eAAe,CAACe,QAAQ,CAAC,KAAKf,eAAe,CAACiB,SAAS,CAAC,EACxD;UACA,OAAO,IAAI;QACb;MACF;MACA,OAAO,KAAK;IACd,CAAC;;IAED;IACA;IACA,IAAME,UAAU,GAAG,SAAbA,UAAUA,CAAaZ,CAAC,EAAE;MAC9B,IAAMa,CAAC,GAAGb,CAAC,CAAClB,GAAG,CAACC,KAAK,CAAC,GAAG,CAAC,CAACe,KAAK,CAAC,CAAC,CAAC,CAAC,EAAC;MACrC,IAAMgB,MAAM,GAAG,SAATA,MAAMA,CAAapB,GAAG,EAAE;QAC5B,IAAI;UACF,OAAOqB,kBAAkB,CAACrB,GAAG,CAAC;QAChC,CAAC,CAAC,OAAOsB,CAAC,EAAE;UACV,OAAOtB,GAAG;QACZ;MACF,CAAC;MACDuB,SAAS,CAACC,WAAW,GAAGJ,MAAM,CAACD,CAAC,CAAC,CAAC,CAAC,CAAC;MACpCM,QAAQ,CAACD,WAAW,GAAGJ,MAAM,CAACD,CAAC,CAAC,CAAC,CAAC,CAAC;MACnCO,QAAQ,CAACF,WAAW,GAAGJ,MAAM,CAACrB,eAAe,CAACoB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACtD,CAAC;IAED,IAAMQ,MAAM,GAAG,SAATA,MAAMA,CAAaC,OAAO,EAAEC,KAAK,EAAE;MACvC,OAAO,IAAIC,OAAO,CAAC,UAAUC,OAAO,EAAE;QACpCF,KAAK,GAAGA,KAAK,IAAI,CAAC;QAClB,IAAI,CAACnC,OAAO,CAACE,KAAK,EAAE,OAAOmC,OAAO,CAAC,IAAI,CAAC;QACxC;QACA,IAAMxB,MAAM,GACV3B,EAAE,CAAC4B,GAAG,CAACC,SAAS,EAAEtC,EAAE,CAACuC,GAAG,CAAC,UAAU,CAAC,EAAEkB,OAAO,CAAC,IAAIA,OAAO,CAACI,GAAG,EAAE;QACjE,IAAI,CAACzB,MAAM,EAAE,OAAOwB,OAAO,CAAC,IAAI,CAAC;QACjCnD,EAAE,CAACqD,OAAO,CAACC,IAAI,CAAC3B,MAAM,CAAC,CAAC4B,IAAI,CAAC,UAAUC,IAAI,EAAE;UAC3C,IAAMzB,QAAQ,GAAG/B,EAAE,CAACgC,IAAI,CAACL,MAAM,EAAEpC,EAAE,CAACuC,GAAG,CAAC,UAAU,CAAC,CAAC,EAAC;UACrD;UACA,IAAI2B,CAAC;UACL1B,QAAQ,CAAC2B,IAAI,EAAE,EAAC;UAChB,KAAK,IAAIC,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAG5B,QAAQ,CAACE,MAAM,EAAE0B,CAAC,EAAE,EAAE;YACxC,IAAIX,OAAO,CAACxC,GAAG,KAAKuB,QAAQ,CAAC4B,CAAC,CAAC,CAACnD,GAAG,EAAE;cACnCiD,CAAC,GAAG,CAACE,CAAC,GAAG,CAAC,IAAI5B,QAAQ,CAACE,MAAM;cAC7B,IAAIwB,CAAC,KAAK,CAAC,EAAE;gBACX,IAAI,CAAC3C,OAAO,CAACG,WAAW,EAAE;kBACxB,IAAIH,OAAO,CAACI,IAAI,EAAE;oBAChB,OAAOiC,OAAO,CAACpB,QAAQ,CAAC0B,CAAC,CAAC,CAAC;kBAC7B;kBACA,OAAON,OAAO,CAAC,IAAI,CAAC,EAAC;gBACvB,CAAC,MAAM;kBACL;kBACA,IAAIF,KAAK,KAAK,CAAC,IAAI,CAACnC,OAAO,CAACG,WAAW,EAAE,OAAOkC,OAAO,CAAC,IAAI,CAAC,EAAC;kBAC9DJ,MAAM,CAACpB,MAAM,EAAEsB,KAAK,GAAG,CAAC,CAAC,CAACM,IAAI,CAAC,UAAUK,OAAO,EAAE;oBAChD,IAAIA,OAAO,EAAE;sBACX5D,EAAE,CAACqD,OAAO,CAACC,IAAI,CAACM,OAAO,CAAC,CAACL,IAAI,CAAC,UAAUC,IAAI,EAAE;wBAC5C,IAAMzB,QAAQ,GAAG/B,EAAE,CAACgC,IAAI,CAAC4B,OAAO,EAAErE,EAAE,CAACuC,GAAG,CAAC,UAAU,CAAC,CAAC;wBACrD,IAAIC,QAAQ,CAACE,MAAM,KAAK,CAAC,EAAE,OAAOkB,OAAO,CAAC,IAAI,CAAC;wBAC/CpB,QAAQ,CAAC2B,IAAI,EAAE;wBACfG,OAAO,CAACC,GAAG,CAAC,aAAa,GAAGF,OAAO,CAAC;wBACpC,OAAOT,OAAO,CAACpB,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAC;sBAC9B,CAAC,CAAC;oBACJ;kBACF,CAAC,CAAC;gBACJ;cACF,CAAC,MAAM;gBACL,OAAOoB,OAAO,CAACpB,QAAQ,CAAC0B,CAAC,CAAC,CAAC;cAC7B;YACF;UACF,CAAC,CAAC;QACJ,CAAC,CAAC;MACJ,CAAC,CAAC;IACJ,CAAC;;IACD,IAAMM,aAAa,GAAG,SAAhBA,aAAaA,CAAaC,KAAK,EAAE;MACrC,IAAMhB,OAAO,GAAGhD,EAAE,CAACiE,GAAG,CAACD,KAAK,CAACE,MAAM,CAACC,YAAY,CAAC,KAAK,CAAC,CAAC;MACxD,IAAI,CAACrD,OAAO,CAACE,KAAK,EAAE;MACpB,IAAMoD,OAAO,GAAG,SAAVA,OAAOA,CAAaC,GAAG,EAAE;QAC7B,IAAMrB,OAAO,GAAGqB,GAAG;QACnBtB,MAAM,CAACC,OAAO,CAAC,CAACO,IAAI,CAAC,UAAUe,IAAI,EAAE;UACnC,IAAI,CAACA,IAAI,EAAE;YACTT,OAAO,CAACC,GAAG,CAAC,kBAAkB,GAAGd,OAAO,CAAC;YACzC;UACF;UACA,IAAI,CAACvB,cAAc,CAAC6C,IAAI,CAAC,EAAE;YACzBT,OAAO,CAACC,GAAG,CAAC,eAAe,GAAGQ,IAAI,CAAC;YACnChC,UAAU,CAACgC,IAAI,CAAC;YAChBC,UAAU,CAACC,WAAW,CAACC,YAAY,CAACH,IAAI,EAAE,IAAI,CAAC,CAAC,EAAC;YACjDC,UAAU,CAACG,WAAW,CAACV,KAAK,CAACE,MAAM,CAAC;UACtC,CAAC,MAAM;YACLL,OAAO,CAACC,GAAG,CAAC,qBAAqB,GAAGQ,IAAI,CAAC;YACzCF,OAAO,CAACE,IAAI,CAAC;UACf;QACF,CAAC,CAAC;MACJ,CAAC;MACDF,OAAO,CAACpB,OAAO,CAAC;IAClB,CAAC;IAED,IAAMyB,YAAY,GAAG,SAAfA,YAAYA,CAAaE,IAAI,EAAE5D,QAAQ,EAAE;MAC7C,IAAM6D,KAAK,GAAG/D,GAAG,CAACgE,aAAa,CAAC,OAAO,CAAC;MACxCD,KAAK,CAACE,YAAY,CAAC,UAAU,EAAE,KAAK,CAAC;MACrCF,KAAK,CAACE,YAAY,CAAC,KAAK,EAAEH,IAAI,CAACnE,GAAG,CAAC;MACnC,IAAIO,QAAQ,EAAE;QACZ6D,KAAK,CAACE,YAAY,CAAC,UAAU,EAAE,UAAU,CAAC,EAAC;MAC7C;;MACAF,KAAK,CAACG,gBAAgB,CAAC,OAAO,EAAEhB,aAAa,EAAE,KAAK,CAAC;MACrD,OAAOa,KAAK;IACd,CAAC;IAED,IAAMI,GAAG,GAAGnE,GAAG,CAACgE,aAAa,CAAC,KAAK,CAAC;IACpC,IAAMI,KAAK,GAAGD,GAAG,CAACR,WAAW,CAAC3D,GAAG,CAACgE,aAAa,CAAC,OAAO,CAAC,CAAC;IACzD,IAAMK,UAAU,GAAG,uDAAuD;IAC1E,IAAMvC,SAAS,GAAGsC,KAAK,CAACT,WAAW,CAAC3D,GAAG,CAACgE,aAAa,CAAC,IAAI,CAAC,CAAC;IAC5DlC,SAAS,CAACwC,KAAK,CAACC,OAAO,GAAGF,UAAU;IACpC,IAAMrC,QAAQ,GAAGoC,KAAK,CAACT,WAAW,CAAC3D,GAAG,CAACgE,aAAa,CAAC,IAAI,CAAC,CAAC;IAC3DhC,QAAQ,CAACsC,KAAK,CAACC,OAAO,GAAGF,UAAU;IACnC,IAAMpC,QAAQ,GAAGmC,KAAK,CAACT,WAAW,CAAC3D,GAAG,CAACgE,aAAa,CAAC,IAAI,CAAC,CAAC;IAC3D/B,QAAQ,CAACqC,KAAK,CAACC,OAAO,GAAGF,UAAU;IACnC,IAAMX,UAAU,GAAGU,KAAK,CAACT,WAAW,CAAC3D,GAAG,CAACgE,aAAa,CAAC,IAAI,CAAC,CAAC;IAC7DvC,UAAU,CAACxC,OAAO,CAAC;IACnByE,UAAU,CAACC,WAAW,CAACC,YAAY,CAAC3E,OAAO,EAAEgB,OAAO,CAACC,QAAQ,CAAC,CAAC;IAE/D,IAAI,CAACf,EAAE,CAACqF,KAAK,CAACxD,SAAS,EAAEtC,EAAE,CAACuC,GAAG,CAAC,UAAU,CAAC,EAAEhC,OAAO,CAAC,IAAIA,OAAO,CAACsD,GAAG,EAAE,EAAE;MACtEpD,EAAE,CAACqD,OAAO,CAACC,IAAI,CAACxD,OAAO,CAACsD,GAAG,EAAE,CAAC,EAAC;IACjC;;IAEA,OAAO4B,GAAG;EACZ;AACF,CAAC,EAED;AAAAM,OAAA,cAAA9F,QAAA"}
|
|
1
|
+
{"version":3,"file":"audioPane.js","names":["UI","_interopRequireWildcard","require","$rdf","_getRequireWildcardCache","nodeInterop","WeakMap","cacheBabelInterop","cacheNodeInterop","obj","__esModule","_typeof","cache","has","get","newObj","hasPropertyDescriptor","Object","defineProperty","getOwnPropertyDescriptor","key","prototype","hasOwnProperty","call","desc","set","ns","_default","icon","icons","iconBase","name","label","subject","context","kb","session","store","typeURIs","findTypeURIs","prefix","Util","mediaTypeClass","uri","split","t","startsWith","render","dom","options","autoplay","chain","chainAlbums","loop","removeExtension","str","dot","lastIndexOf","slash","slice","looksRedundant","x","folder","any","undefined","ldp","contents","each","length","thisName","k","otherName","endsWith","guessNames","a","decode","decodeURIComponent","e","artistRow","textContent","albumRow","trackRow","moveOn","current","level","Promise","resolve","dir","fetcher","load","then","_xhr","j","sort","i","folder2","console","log","endedListener","event","sym","target","getAttribute","tryNext","cur","next","controlRow","appendChild","audioControl","removeChild","song","audio","createElement","setAttribute","_fetch","response","blob","myBlob","objectURL","URL","createObjectURL","addEventListener","div","table","labelStyle","style","cssText","holds","exports"],"sources":["../../src/audio/audioPane.js"],"sourcesContent":["/* Single audio play Pane\n **\n */\n import * as UI from 'solid-ui'\n import * as $rdf from 'rdflib'\nconst ns = UI.ns\n\nexport default {\n icon: UI.icons.iconBase + 'noun_534313.svg',\n\n name: 'audio',\n\n // Does the subject deserve an audio play pane?\n label: function (subject, context) {\n const kb = context.session.store\n const typeURIs = kb.findTypeURIs(subject)\n\n const prefix = $rdf.Util.mediaTypeClass('audio/*').uri.split('*')[0]\n for (const t in typeURIs) {\n if (t.startsWith(prefix)) return 'Play audio'\n }\n return null\n },\n\n render: function (subject, context) {\n const kb = context.session.store\n const dom = context.dom\n const options = {\n autoplay: false,\n chain: true,\n chainAlbums: true,\n loop: false\n }\n\n const removeExtension = function (str) {\n const dot = str.lastIndexOf('.')\n if (dot < 0) return str // if any\n const slash = str.lastIndexOf('/')\n if (dot < slash) return str\n return str.slice(0, dot)\n }\n\n // True if there is another file like song.mp3 when this is \"song 1.mp3\"\n // or this is song.m4a\n //\n const looksRedundant = function (x) {\n const folder = kb.any(undefined, ns.ldp('contains'), x)\n if (!folder) return false\n const contents = kb.each(folder, ns.ldp('contains'))\n if (contents.length < 2) return false\n const thisName = x.uri\n for (let k = 0; k < contents.length; k++) {\n const otherName = contents[k].uri\n if (\n thisName.length > otherName.length &&\n thisName.startsWith(removeExtension(otherName))\n ) {\n return true\n }\n if (\n thisName.endsWith('.m4a') &&\n otherName.endsWith('.mp3') &&\n removeExtension(thisName) === removeExtension(otherName)\n ) {\n return true\n }\n }\n return false\n }\n\n // Alternative methods could include:\n // Accesing metadata in the audio contol, or paring the audio file\n const guessNames = function (x) {\n const a = x.uri.split('/').slice(-3) // Hope artist, album, track\n const decode = function (str) {\n try {\n return decodeURIComponent(str)\n } catch (e) {\n return str\n }\n }\n artistRow.textContent = decode(a[0])\n albumRow.textContent = decode(a[1])\n trackRow.textContent = decode(removeExtension(a[2]))\n }\n\n const moveOn = function (current, level) {\n return new Promise(function (resolve) {\n level = level || 0\n if (!options.chain) return resolve(null)\n // Ideally navigate graph else cheat with URI munging:\n const folder =\n kb.any(undefined, ns.ldp('contains'), current) || current.dir()\n if (!folder) return resolve(null)\n kb.fetcher.load(folder).then(function (_xhr) {\n const contents = kb.each(folder, ns.ldp('contains')) // @@ load if not loaded\n // if (contents.length < 2) return resolve(null) NO might move on from 1-track album\n let j\n contents.sort() // sort by URI which hopefully will get tracks in order\n for (let i = 0; i < contents.length; i++) {\n if (current.uri === contents[i].uri) {\n j = (i + 1) % contents.length\n if (j === 0) {\n if (!options.chainAlbums) {\n if (options.loop) {\n return resolve(contents[j])\n }\n return resolve(null) // No more music needed\n } else {\n // chain albums\n if (level === 1 || !options.chainAlbums) return resolve(null) // limit of navigating treee\n moveOn(folder, level + 1).then(function (folder2) {\n if (folder2) {\n kb.fetcher.load(folder2).then(function (_xhr) {\n const contents = kb.each(folder2, ns.ldp('contains'))\n if (contents.length === 0) return resolve(null)\n contents.sort()\n console.log('New Album: ' + folder2)\n return resolve(contents[0]) // Start off new album\n })\n }\n })\n }\n } else {\n return resolve(contents[j])\n }\n }\n } // for\n })\n })\n }\n const endedListener = function (event) {\n const current = kb.sym(event.target.getAttribute('src'))\n if (!options.chain) return\n const tryNext = function (cur) {\n const current = cur\n moveOn(current).then(function (next) {\n if (!next) {\n console.log('No successor to ' + current)\n return\n }\n if (!looksRedundant(next)) {\n console.log('Moving on to ' + next)\n guessNames(next)\n controlRow.appendChild(audioControl(next, true)) // Force autoplay\n controlRow.removeChild(event.target)\n } else {\n console.log('Ignoring redundant ' + next)\n tryNext(next)\n }\n })\n }\n tryNext(current)\n }\n\n const audioControl = function (song, autoplay) {\n const audio = dom.createElement('audio')\n audio.setAttribute('controls', 'yes')\n // get audio with authenticated fetch\n kb.fetcher._fetch(song.uri)\n .then(function(response) {\n return response.blob()\n })\n .then(function(myBlob) {\n const objectURL = URL.createObjectURL(myBlob)\n audio.setAttribute('src', objectURL) // w640 h480 //\n })\n\n if (autoplay) {\n audio.setAttribute('autoplay', 'autoplay') // Make this a personal preference\n }\n audio.addEventListener('ended', endedListener, false)\n return audio\n }\n\n const div = dom.createElement('div')\n const table = div.appendChild(dom.createElement('table'))\n const labelStyle = 'padding: 0.3em; color:white; background-color: black;'\n const artistRow = table.appendChild(dom.createElement('tr'))\n artistRow.style.cssText = labelStyle\n const albumRow = table.appendChild(dom.createElement('tr'))\n albumRow.style.cssText = labelStyle\n const trackRow = table.appendChild(dom.createElement('tr'))\n trackRow.style.cssText = labelStyle\n const controlRow = table.appendChild(dom.createElement('tr'))\n guessNames(subject)\n controlRow.appendChild(audioControl(subject, options.autoplay))\n\n if (!kb.holds(undefined, ns.ldp('contains'), subject) && subject.dir()) {\n kb.fetcher.load(subject.dir()) // Prefetch enclosing @@ or playlist\n }\n\n return div\n }\n}\n\n// ends\n"],"mappings":";;;;;;;AAGC,IAAAA,EAAA,GAAAC,uBAAA,CAAAC,OAAA;AACA,IAAAC,IAAA,GAAAF,uBAAA,CAAAC,OAAA;AAA8B,SAAAE,yBAAAC,WAAA,eAAAC,OAAA,kCAAAC,iBAAA,OAAAD,OAAA,QAAAE,gBAAA,OAAAF,OAAA,YAAAF,wBAAA,YAAAA,yBAAAC,WAAA,WAAAA,WAAA,GAAAG,gBAAA,GAAAD,iBAAA,KAAAF,WAAA;AAAA,SAAAJ,wBAAAQ,GAAA,EAAAJ,WAAA,SAAAA,WAAA,IAAAI,GAAA,IAAAA,GAAA,CAAAC,UAAA,WAAAD,GAAA,QAAAA,GAAA,aAAAE,OAAA,CAAAF,GAAA,yBAAAA,GAAA,uCAAAA,GAAA,UAAAG,KAAA,GAAAR,wBAAA,CAAAC,WAAA,OAAAO,KAAA,IAAAA,KAAA,CAAAC,GAAA,CAAAJ,GAAA,YAAAG,KAAA,CAAAE,GAAA,CAAAL,GAAA,SAAAM,MAAA,WAAAC,qBAAA,GAAAC,MAAA,CAAAC,cAAA,IAAAD,MAAA,CAAAE,wBAAA,WAAAC,GAAA,IAAAX,GAAA,QAAAW,GAAA,kBAAAH,MAAA,CAAAI,SAAA,CAAAC,cAAA,CAAAC,IAAA,CAAAd,GAAA,EAAAW,GAAA,SAAAI,IAAA,GAAAR,qBAAA,GAAAC,MAAA,CAAAE,wBAAA,CAAAV,GAAA,EAAAW,GAAA,cAAAI,IAAA,KAAAA,IAAA,CAAAV,GAAA,IAAAU,IAAA,CAAAC,GAAA,KAAAR,MAAA,CAAAC,cAAA,CAAAH,MAAA,EAAAK,GAAA,EAAAI,IAAA,YAAAT,MAAA,CAAAK,GAAA,IAAAX,GAAA,CAAAW,GAAA,SAAAL,MAAA,cAAAN,GAAA,MAAAG,KAAA,IAAAA,KAAA,CAAAa,GAAA,CAAAhB,GAAA,EAAAM,MAAA,YAAAA,MAAA;AAJ/B;AACA;AACA;;AAGA,IAAMW,EAAE,GAAG1B,EAAE,CAAC0B,EAAE;AAAA,IAAAC,QAAA,GAED;EACbC,IAAI,EAAE5B,EAAE,CAAC6B,KAAK,CAACC,QAAQ,GAAG,iBAAiB;EAE3CC,IAAI,EAAE,OAAO;EAEb;EACAC,KAAK,EAAE,SAAAA,MAAUC,OAAO,EAAEC,OAAO,EAAE;IACjC,IAAMC,EAAE,GAAGD,OAAO,CAACE,OAAO,CAACC,KAAK;IAChC,IAAMC,QAAQ,GAAGH,EAAE,CAACI,YAAY,CAACN,OAAO,CAAC;IAEzC,IAAMO,MAAM,GAAGrC,IAAI,CAACsC,IAAI,CAACC,cAAc,CAAC,SAAS,CAAC,CAACC,GAAG,CAACC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IACpE,KAAK,IAAMC,CAAC,IAAIP,QAAQ,EAAE;MACxB,IAAIO,CAAC,CAACC,UAAU,CAACN,MAAM,CAAC,EAAE,OAAO,YAAY;IAC/C;IACA,OAAO,IAAI;EACb,CAAC;EAEDO,MAAM,EAAE,SAAAA,OAAUd,OAAO,EAAEC,OAAO,EAAE;IAClC,IAAMC,EAAE,GAAGD,OAAO,CAACE,OAAO,CAACC,KAAK;IAChC,IAAMW,GAAG,GAAGd,OAAO,CAACc,GAAG;IACvB,IAAMC,OAAO,GAAG;MACdC,QAAQ,EAAE,KAAK;MACfC,KAAK,EAAE,IAAI;MACXC,WAAW,EAAE,IAAI;MACjBC,IAAI,EAAE;IACR,CAAC;IAED,IAAMC,eAAe,GAAG,SAAlBA,eAAeA,CAAaC,GAAG,EAAE;MACrC,IAAMC,GAAG,GAAGD,GAAG,CAACE,WAAW,CAAC,GAAG,CAAC;MAChC,IAAID,GAAG,GAAG,CAAC,EAAE,OAAOD,GAAG,EAAC;MACxB,IAAMG,KAAK,GAAGH,GAAG,CAACE,WAAW,CAAC,GAAG,CAAC;MAClC,IAAID,GAAG,GAAGE,KAAK,EAAE,OAAOH,GAAG;MAC3B,OAAOA,GAAG,CAACI,KAAK,CAAC,CAAC,EAAEH,GAAG,CAAC;IAC1B,CAAC;;IAED;IACA;IACA;IACA,IAAMI,cAAc,GAAG,SAAjBA,cAAcA,CAAaC,CAAC,EAAE;MAClC,IAAMC,MAAM,GAAG3B,EAAE,CAAC4B,GAAG,CAACC,SAAS,EAAEtC,EAAE,CAACuC,GAAG,CAAC,UAAU,CAAC,EAAEJ,CAAC,CAAC;MACvD,IAAI,CAACC,MAAM,EAAE,OAAO,KAAK;MACzB,IAAMI,QAAQ,GAAG/B,EAAE,CAACgC,IAAI,CAACL,MAAM,EAAEpC,EAAE,CAACuC,GAAG,CAAC,UAAU,CAAC,CAAC;MACpD,IAAIC,QAAQ,CAACE,MAAM,GAAG,CAAC,EAAE,OAAO,KAAK;MACrC,IAAMC,QAAQ,GAAGR,CAAC,CAAClB,GAAG;MACtB,KAAK,IAAI2B,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGJ,QAAQ,CAACE,MAAM,EAAEE,CAAC,EAAE,EAAE;QACxC,IAAMC,SAAS,GAAGL,QAAQ,CAACI,CAAC,CAAC,CAAC3B,GAAG;QACjC,IACE0B,QAAQ,CAACD,MAAM,GAAGG,SAAS,CAACH,MAAM,IAClCC,QAAQ,CAACvB,UAAU,CAACQ,eAAe,CAACiB,SAAS,CAAC,CAAC,EAC/C;UACA,OAAO,IAAI;QACb;QACA,IACEF,QAAQ,CAACG,QAAQ,CAAC,MAAM,CAAC,IACzBD,SAAS,CAACC,QAAQ,CAAC,MAAM,CAAC,IAC1BlB,eAAe,CAACe,QAAQ,CAAC,KAAKf,eAAe,CAACiB,SAAS,CAAC,EACxD;UACA,OAAO,IAAI;QACb;MACF;MACA,OAAO,KAAK;IACd,CAAC;;IAED;IACA;IACA,IAAME,UAAU,GAAG,SAAbA,UAAUA,CAAaZ,CAAC,EAAE;MAC9B,IAAMa,CAAC,GAAGb,CAAC,CAAClB,GAAG,CAACC,KAAK,CAAC,GAAG,CAAC,CAACe,KAAK,CAAC,CAAC,CAAC,CAAC,EAAC;MACrC,IAAMgB,MAAM,GAAG,SAATA,MAAMA,CAAapB,GAAG,EAAE;QAC5B,IAAI;UACF,OAAOqB,kBAAkB,CAACrB,GAAG,CAAC;QAChC,CAAC,CAAC,OAAOsB,CAAC,EAAE;UACV,OAAOtB,GAAG;QACZ;MACF,CAAC;MACDuB,SAAS,CAACC,WAAW,GAAGJ,MAAM,CAACD,CAAC,CAAC,CAAC,CAAC,CAAC;MACpCM,QAAQ,CAACD,WAAW,GAAGJ,MAAM,CAACD,CAAC,CAAC,CAAC,CAAC,CAAC;MACnCO,QAAQ,CAACF,WAAW,GAAGJ,MAAM,CAACrB,eAAe,CAACoB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACtD,CAAC;IAED,IAAMQ,MAAM,GAAG,SAATA,MAAMA,CAAaC,OAAO,EAAEC,KAAK,EAAE;MACvC,OAAO,IAAIC,OAAO,CAAC,UAAUC,OAAO,EAAE;QACpCF,KAAK,GAAGA,KAAK,IAAI,CAAC;QAClB,IAAI,CAACnC,OAAO,CAACE,KAAK,EAAE,OAAOmC,OAAO,CAAC,IAAI,CAAC;QACxC;QACA,IAAMxB,MAAM,GACV3B,EAAE,CAAC4B,GAAG,CAACC,SAAS,EAAEtC,EAAE,CAACuC,GAAG,CAAC,UAAU,CAAC,EAAEkB,OAAO,CAAC,IAAIA,OAAO,CAACI,GAAG,EAAE;QACjE,IAAI,CAACzB,MAAM,EAAE,OAAOwB,OAAO,CAAC,IAAI,CAAC;QACjCnD,EAAE,CAACqD,OAAO,CAACC,IAAI,CAAC3B,MAAM,CAAC,CAAC4B,IAAI,CAAC,UAAUC,IAAI,EAAE;UAC3C,IAAMzB,QAAQ,GAAG/B,EAAE,CAACgC,IAAI,CAACL,MAAM,EAAEpC,EAAE,CAACuC,GAAG,CAAC,UAAU,CAAC,CAAC,EAAC;UACrD;UACA,IAAI2B,CAAC;UACL1B,QAAQ,CAAC2B,IAAI,EAAE,EAAC;UAChB,KAAK,IAAIC,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAG5B,QAAQ,CAACE,MAAM,EAAE0B,CAAC,EAAE,EAAE;YACxC,IAAIX,OAAO,CAACxC,GAAG,KAAKuB,QAAQ,CAAC4B,CAAC,CAAC,CAACnD,GAAG,EAAE;cACnCiD,CAAC,GAAG,CAACE,CAAC,GAAG,CAAC,IAAI5B,QAAQ,CAACE,MAAM;cAC7B,IAAIwB,CAAC,KAAK,CAAC,EAAE;gBACX,IAAI,CAAC3C,OAAO,CAACG,WAAW,EAAE;kBACxB,IAAIH,OAAO,CAACI,IAAI,EAAE;oBAChB,OAAOiC,OAAO,CAACpB,QAAQ,CAAC0B,CAAC,CAAC,CAAC;kBAC7B;kBACA,OAAON,OAAO,CAAC,IAAI,CAAC,EAAC;gBACvB,CAAC,MAAM;kBACL;kBACA,IAAIF,KAAK,KAAK,CAAC,IAAI,CAACnC,OAAO,CAACG,WAAW,EAAE,OAAOkC,OAAO,CAAC,IAAI,CAAC,EAAC;kBAC9DJ,MAAM,CAACpB,MAAM,EAAEsB,KAAK,GAAG,CAAC,CAAC,CAACM,IAAI,CAAC,UAAUK,OAAO,EAAE;oBAChD,IAAIA,OAAO,EAAE;sBACX5D,EAAE,CAACqD,OAAO,CAACC,IAAI,CAACM,OAAO,CAAC,CAACL,IAAI,CAAC,UAAUC,IAAI,EAAE;wBAC5C,IAAMzB,QAAQ,GAAG/B,EAAE,CAACgC,IAAI,CAAC4B,OAAO,EAAErE,EAAE,CAACuC,GAAG,CAAC,UAAU,CAAC,CAAC;wBACrD,IAAIC,QAAQ,CAACE,MAAM,KAAK,CAAC,EAAE,OAAOkB,OAAO,CAAC,IAAI,CAAC;wBAC/CpB,QAAQ,CAAC2B,IAAI,EAAE;wBACfG,OAAO,CAACC,GAAG,CAAC,aAAa,GAAGF,OAAO,CAAC;wBACpC,OAAOT,OAAO,CAACpB,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAC;sBAC9B,CAAC,CAAC;oBACJ;kBACF,CAAC,CAAC;gBACJ;cACF,CAAC,MAAM;gBACL,OAAOoB,OAAO,CAACpB,QAAQ,CAAC0B,CAAC,CAAC,CAAC;cAC7B;YACF;UACF,CAAC,CAAC;QACJ,CAAC,CAAC;MACJ,CAAC,CAAC;IACJ,CAAC;;IACD,IAAMM,aAAa,GAAG,SAAhBA,aAAaA,CAAaC,KAAK,EAAE;MACrC,IAAMhB,OAAO,GAAGhD,EAAE,CAACiE,GAAG,CAACD,KAAK,CAACE,MAAM,CAACC,YAAY,CAAC,KAAK,CAAC,CAAC;MACxD,IAAI,CAACrD,OAAO,CAACE,KAAK,EAAE;MACpB,IAAMoD,OAAO,GAAG,SAAVA,OAAOA,CAAaC,GAAG,EAAE;QAC7B,IAAMrB,OAAO,GAAGqB,GAAG;QACnBtB,MAAM,CAACC,OAAO,CAAC,CAACO,IAAI,CAAC,UAAUe,IAAI,EAAE;UACnC,IAAI,CAACA,IAAI,EAAE;YACTT,OAAO,CAACC,GAAG,CAAC,kBAAkB,GAAGd,OAAO,CAAC;YACzC;UACF;UACA,IAAI,CAACvB,cAAc,CAAC6C,IAAI,CAAC,EAAE;YACzBT,OAAO,CAACC,GAAG,CAAC,eAAe,GAAGQ,IAAI,CAAC;YACnChC,UAAU,CAACgC,IAAI,CAAC;YAChBC,UAAU,CAACC,WAAW,CAACC,YAAY,CAACH,IAAI,EAAE,IAAI,CAAC,CAAC,EAAC;YACjDC,UAAU,CAACG,WAAW,CAACV,KAAK,CAACE,MAAM,CAAC;UACtC,CAAC,MAAM;YACLL,OAAO,CAACC,GAAG,CAAC,qBAAqB,GAAGQ,IAAI,CAAC;YACzCF,OAAO,CAACE,IAAI,CAAC;UACf;QACF,CAAC,CAAC;MACJ,CAAC;MACDF,OAAO,CAACpB,OAAO,CAAC;IAClB,CAAC;IAED,IAAMyB,YAAY,GAAG,SAAfA,YAAYA,CAAaE,IAAI,EAAE5D,QAAQ,EAAE;MAC7C,IAAM6D,KAAK,GAAG/D,GAAG,CAACgE,aAAa,CAAC,OAAO,CAAC;MACxCD,KAAK,CAACE,YAAY,CAAC,UAAU,EAAE,KAAK,CAAC;MACrC;MACA9E,EAAE,CAACqD,OAAO,CAAC0B,MAAM,CAACJ,IAAI,CAACnE,GAAG,CAAC,CACxB+C,IAAI,CAAC,UAASyB,QAAQ,EAAE;QACvB,OAAOA,QAAQ,CAACC,IAAI,EAAE;MACxB,CAAC,CAAC,CACD1B,IAAI,CAAC,UAAS2B,MAAM,EAAE;QACrB,IAAMC,SAAS,GAAGC,GAAG,CAACC,eAAe,CAACH,MAAM,CAAC;QAC7CN,KAAK,CAACE,YAAY,CAAC,KAAK,EAAEK,SAAS,CAAC,EAAC;MACvC,CAAC,CAAC;;MAEJ,IAAIpE,QAAQ,EAAE;QACZ6D,KAAK,CAACE,YAAY,CAAC,UAAU,EAAE,UAAU,CAAC,EAAC;MAC7C;;MACAF,KAAK,CAACU,gBAAgB,CAAC,OAAO,EAAEvB,aAAa,EAAE,KAAK,CAAC;MACrD,OAAOa,KAAK;IACd,CAAC;IAED,IAAMW,GAAG,GAAG1E,GAAG,CAACgE,aAAa,CAAC,KAAK,CAAC;IACpC,IAAMW,KAAK,GAAGD,GAAG,CAACf,WAAW,CAAC3D,GAAG,CAACgE,aAAa,CAAC,OAAO,CAAC,CAAC;IACzD,IAAMY,UAAU,GAAG,uDAAuD;IAC1E,IAAM9C,SAAS,GAAG6C,KAAK,CAAChB,WAAW,CAAC3D,GAAG,CAACgE,aAAa,CAAC,IAAI,CAAC,CAAC;IAC5DlC,SAAS,CAAC+C,KAAK,CAACC,OAAO,GAAGF,UAAU;IACpC,IAAM5C,QAAQ,GAAG2C,KAAK,CAAChB,WAAW,CAAC3D,GAAG,CAACgE,aAAa,CAAC,IAAI,CAAC,CAAC;IAC3DhC,QAAQ,CAAC6C,KAAK,CAACC,OAAO,GAAGF,UAAU;IACnC,IAAM3C,QAAQ,GAAG0C,KAAK,CAAChB,WAAW,CAAC3D,GAAG,CAACgE,aAAa,CAAC,IAAI,CAAC,CAAC;IAC3D/B,QAAQ,CAAC4C,KAAK,CAACC,OAAO,GAAGF,UAAU;IACnC,IAAMlB,UAAU,GAAGiB,KAAK,CAAChB,WAAW,CAAC3D,GAAG,CAACgE,aAAa,CAAC,IAAI,CAAC,CAAC;IAC7DvC,UAAU,CAACxC,OAAO,CAAC;IACnByE,UAAU,CAACC,WAAW,CAACC,YAAY,CAAC3E,OAAO,EAAEgB,OAAO,CAACC,QAAQ,CAAC,CAAC;IAE/D,IAAI,CAACf,EAAE,CAAC4F,KAAK,CAAC/D,SAAS,EAAEtC,EAAE,CAACuC,GAAG,CAAC,UAAU,CAAC,EAAEhC,OAAO,CAAC,IAAIA,OAAO,CAACsD,GAAG,EAAE,EAAE;MACtEpD,EAAE,CAACqD,OAAO,CAACC,IAAI,CAACxD,OAAO,CAACsD,GAAG,EAAE,CAAC,EAAC;IACjC;;IAEA,OAAOmC,GAAG;EACZ;AACF,CAAC,EAED;AAAAM,OAAA,cAAArG,QAAA"}
|
package/lib/humanReadablePane.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
+
function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); }
|
|
3
4
|
Object.defineProperty(exports, "__esModule", {
|
|
4
5
|
value: true
|
|
5
6
|
});
|
|
@@ -7,6 +8,9 @@ exports["default"] = void 0;
|
|
|
7
8
|
var _solidUi = require("solid-ui");
|
|
8
9
|
var _rdflib = require("rdflib");
|
|
9
10
|
var _marked = require("marked");
|
|
11
|
+
var DOMPurify = _interopRequireWildcard(require("dompurify"));
|
|
12
|
+
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
13
|
+
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
10
14
|
/* Human-readable Pane
|
|
11
15
|
**
|
|
12
16
|
** This outline pane contains the document contents for an HTML document
|
|
@@ -62,7 +66,7 @@ var humanReadablePane = {
|
|
|
62
66
|
var cts = kb.fetcher.getHeader(subject.doc(), 'content-type');
|
|
63
67
|
var ct = cts ? cts[0] : null;
|
|
64
68
|
if (ct) {
|
|
65
|
-
console.log('humanReadablePane: c-t:' + ct)
|
|
69
|
+
// console.log('humanReadablePane: c-t:' + ct)
|
|
66
70
|
} else {
|
|
67
71
|
console.log('humanReadablePane: unknown content-type?');
|
|
68
72
|
}
|
|
@@ -78,7 +82,8 @@ var humanReadablePane = {
|
|
|
78
82
|
var markdownText = response.responseText;
|
|
79
83
|
var lines = Math.min(30, markdownText.split(/\n/).length + 5);
|
|
80
84
|
var res = _marked.marked.parse(markdownText);
|
|
81
|
-
|
|
85
|
+
var clean = DOMPurify.sanitize(res);
|
|
86
|
+
frame.innerHTML = clean;
|
|
82
87
|
frame.setAttribute('class', 'doc');
|
|
83
88
|
frame.setAttribute('style', "border: 1px solid; padding: 1em; height: ".concat(lines, "em; width: 800px; resize: both; overflow: auto;"));
|
|
84
89
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"humanReadablePane.js","names":["_solidUi","require","_rdflib","_marked","humanReadablePane","icon","icons","originalIconBase","name","label","subject","context","kb","session","store","allowed","hasContentTypeIn","x","displayables","cts","fetcher","getHeader","j","length","k","indexOf","hasContentTypeIn2","t","findTypeURIs","Util","mediaTypeClass","uri","ns","link","render","myDocument","dom","div","createElement","doc","ct","console","log","setAttribute","element","frame","markdownHtml","webOperation","then","response","markdownText","responseText","lines","Math","min","split","res","marked","parse","innerHTML","concat","_fetch","blob","objectURL","URL","createObjectURL","tr","appendChild","_default","exports"],"sources":["../src/humanReadablePane.js"],"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'\n\nconst humanReadablePane = {\n icon: icons.originalIconBase + 'tango/22-text-x-generic.png',\n\n name: 'humanReadable',\n\n label: function (subject, context) {\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 (kb, x, displayables) {\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 (kb, x, displayables) {\n const t = kb.findTypeURIs(subject)\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 'view'\n\n if (\n hasContentTypeIn(kb, subject, allowed) ||\n hasContentTypeIn2(kb, subject, allowed)\n ) {\n return 'View'\n }\n\n return null\n },\n\n render: function (subject, context) {\n const myDocument = context.dom\n const div = myDocument.createElement('div')\n const kb = context.session.store\n\n const cts = kb.fetcher.getHeader(subject.doc(), 'content-type')\n const ct = cts ? cts[0] : null\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.setAttribute('class', 'docView')\n const element = ct === 'text/markdown' ? 'DIV' : 'IFRAME'\n const frame = myDocument.createElement(element)\n\n // render markdown to html\n const markdownHtml = function () {\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)\n frame.innerHTML = res\n frame.setAttribute('class', 'doc')\n frame.setAttribute('style', `border: 1px solid; padding: 1em; height: ${lines}em; width: 800px; resize: both; overflow: auto;`)\n })\n }\n\n if (ct === 'text/markdown') {\n markdownHtml()\n } else if (ct !== 'text/html') {\n // get with authenticated fetch\n kb.fetcher._fetch(subject.uri)\n .then(function(response) {\n return response.blob()\n })\n .then(function(blob) {\n const objectURL = URL.createObjectURL(blob)\n frame.setAttribute('src', objectURL) // w640 h480 //\n frame.setAttribute('class', 'doc')\n frame.setAttribute('style', `border: 1px solid; padding: 1em; height:120em; width:80em; resize: both; overflow: auto;`)\n })\n } else {\n frame.setAttribute('src', subject.uri) // allow-same-origin\n frame.setAttribute('class', 'doc')\n frame.setAttribute('style', 'resize = both; height:120em; width:80em;')\n }\n // @@ Note below - if we set ANY sandbox, then Chrome and Safari won't display it if it is PDF.\n // https://developer.mozilla.org/en-US/docs/Web/HTML/Element/iframe\n // You can't have any sandbox and allow plugins.\n // We could sandbox only HTML files I suppose.\n // HTML5 bug: https://lists.w3.org/Archives/Public/public-html/2011Jun/0330.html\n\n // iframe.setAttribute('sandbox', 'allow-same-origin allow-forms'); // allow-scripts ?? no documents should be static\n\n // iframe.setAttribute('height', '480')\n // iframe.setAttribute('width', '640')\n const tr = myDocument.createElement('TR')\n tr.appendChild(frame)\n div.appendChild(tr)\n return div\n }\n}\n\nexport default humanReadablePane\n// ends\n"],"mappings":";;;;;;AAKA,IAAAA,QAAA,GAAAC,OAAA;AACA,IAAAC,OAAA,GAAAD,OAAA;AACA,IAAAE,OAAA,GAAAF,OAAA;AAPA;AACA;AACA;AACA;AACA;;AAKA,IAAMG,iBAAiB,GAAG;EACxBC,IAAI,EAAEC,cAAK,CAACC,gBAAgB,GAAG,6BAA6B;EAE5DC,IAAI,EAAE,eAAe;EAErBC,KAAK,EAAE,SAAAA,MAAUC,OAAO,EAAEC,OAAO,EAAE;IACjC,IAAMC,EAAE,GAAGD,OAAO,CAACE,OAAO,CAACC,KAAK;;IAEhC;;IAEA,IAAMC,OAAO,GAAG,CACd,YAAY,EACZ,WAAW,EACX,eAAe,EACf,uBAAuB,EACvB,WAAW,EACX,YAAY,EACZ,iBAAiB,EACjB,WAAW,CACZ;IAED,IAAMC,gBAAgB,GAAG,SAAnBA,gBAAgBA,CAAaJ,EAAE,EAAEK,CAAC,EAAEC,YAAY,EAAE;MACtD,IAAMC,GAAG,GAAGP,EAAE,CAACQ,OAAO,CAACC,SAAS,CAACJ,CAAC,EAAE,cAAc,CAAC;MACnD,IAAIE,GAAG,EAAE;QACP,KAAK,IAAIG,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGH,GAAG,CAACI,MAAM,EAAED,CAAC,EAAE,EAAE;UACnC,KAAK,IAAIE,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGN,YAAY,CAACK,MAAM,EAAEC,CAAC,EAAE,EAAE;YAC5C,IAAIL,GAAG,CAACG,CAAC,CAAC,CAACG,OAAO,CAACP,YAAY,CAACM,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE;cACxC,OAAO,IAAI;YACb;UACF;QACF;MACF;MACA,OAAO,KAAK;IACd,CAAC;;IAED;IACA,IAAME,iBAAiB,GAAG,SAApBA,iBAAiBA,CAAad,EAAE,EAAEK,CAAC,EAAEC,YAAY,EAAE;MACvD,IAAMS,CAAC,GAAGf,EAAE,CAACgB,YAAY,CAAClB,OAAO,CAAC;MAClC,KAAK,IAAIc,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGN,YAAY,CAACK,MAAM,EAAEC,CAAC,EAAE,EAAE;QAC5C,IAAIK,YAAI,CAACC,cAAc,CAACZ,YAAY,CAACM,CAAC,CAAC,CAAC,CAACO,GAAG,IAAIJ,CAAC,EAAE;UACjD,OAAO,IAAI;QACb;MACF;MACA,OAAO,KAAK;IACd,CAAC;IAED,IAAI,CAACjB,OAAO,CAACqB,GAAG,EAAE,OAAO,IAAI,EAAC;;IAE9B,IAAMJ,CAAC,GAAGf,EAAE,CAACgB,YAAY,CAAClB,OAAO,CAAC;IAClC,IAAIiB,CAAC,CAACK,WAAE,CAACC,IAAI,CAAC,SAAS,CAAC,CAACF,GAAG,CAAC,EAAE,OAAO,MAAM;IAE5C,IACEf,gBAAgB,CAACJ,EAAE,EAAEF,OAAO,EAAEK,OAAO,CAAC,IACtCW,iBAAiB,CAACd,EAAE,EAAEF,OAAO,EAAEK,OAAO,CAAC,EACvC;MACA,OAAO,MAAM;IACf;IAEA,OAAO,IAAI;EACb,CAAC;EAEDmB,MAAM,EAAE,SAAAA,OAAUxB,OAAO,EAAEC,OAAO,EAAE;IAClC,IAAMwB,UAAU,GAAGxB,OAAO,CAACyB,GAAG;IAC9B,IAAMC,GAAG,GAAGF,UAAU,CAACG,aAAa,CAAC,KAAK,CAAC;IAC3C,IAAM1B,EAAE,GAAGD,OAAO,CAACE,OAAO,CAACC,KAAK;IAEhC,IAAMK,GAAG,GAAGP,EAAE,CAACQ,OAAO,CAACC,SAAS,CAACX,OAAO,CAAC6B,GAAG,EAAE,EAAE,cAAc,CAAC;IAC/D,IAAMC,EAAE,GAAGrB,GAAG,GAAGA,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI;IAC9B,IAAIqB,EAAE,EAAE;MACNC,OAAO,CAACC,GAAG,CAAC,yBAAyB,GAAGF,EAAE,CAAC;IAC7C,CAAC,MAAM;MACLC,OAAO,CAACC,GAAG,CAAC,0CAA0C,CAAC;IACzD;;IAEA;IACAL,GAAG,CAACM,YAAY,CAAC,OAAO,EAAE,SAAS,CAAC;IACpC,IAAMC,OAAO,GAAGJ,EAAE,KAAK,eAAe,GAAG,KAAK,GAAG,QAAQ;IACzD,IAAMK,KAAK,GAAGV,UAAU,CAACG,aAAa,CAACM,OAAO,CAAC;;IAE/C;IACA,IAAME,YAAY,GAAG,SAAfA,YAAYA,CAAA,EAAe;MAC/BlC,EAAE,CAACQ,OAAO,CAAC2B,YAAY,CAAC,KAAK,EAAErC,OAAO,CAACqB,GAAG,CAAC,CAACiB,IAAI,CAAC,UAAAC,QAAQ,EAAI;QAC3D,IAAMC,YAAY,GAAGD,QAAQ,CAACE,YAAY;QAC1C,IAAMC,KAAK,GAAGC,IAAI,CAACC,GAAG,CAAC,EAAE,EAAEJ,YAAY,CAACK,KAAK,CAAC,IAAI,CAAC,CAAChC,MAAM,GAAG,CAAC,CAAC;QAC/D,IAAMiC,GAAG,GAAGC,cAAM,CAACC,KAAK,CAACR,YAAY,CAAC;QACtCL,KAAK,CAACc,SAAS,GAAGH,GAAG;QACrBX,KAAK,CAACF,YAAY,CAAC,OAAO,EAAE,KAAK,CAAC;QAClCE,KAAK,CAACF,YAAY,CAAC,OAAO,8CAAAiB,MAAA,CAA8CR,KAAK,qDAAkD;MACjI,CAAC,CAAC;IACJ,CAAC;IAED,IAAIZ,EAAE,KAAK,eAAe,EAAE;MAC1BM,YAAY,EAAE;IAChB,CAAC,MAAM,IAAIN,EAAE,KAAK,WAAW,EAAE;MAC7B;MACA5B,EAAE,CAACQ,OAAO,CAACyC,MAAM,CAACnD,OAAO,CAACqB,GAAG,CAAC,CAC3BiB,IAAI,CAAC,UAASC,QAAQ,EAAE;QACvB,OAAOA,QAAQ,CAACa,IAAI,EAAE;MACxB,CAAC,CAAC,CACDd,IAAI,CAAC,UAASc,IAAI,EAAE;QACnB,IAAMC,SAAS,GAAGC,GAAG,CAACC,eAAe,CAACH,IAAI,CAAC;QAC3CjB,KAAK,CAACF,YAAY,CAAC,KAAK,EAAEoB,SAAS,CAAC,EAAC;QACrClB,KAAK,CAACF,YAAY,CAAC,OAAO,EAAE,KAAK,CAAC;QAClCE,KAAK,CAACF,YAAY,CAAC,OAAO,6FAA6F;MACzH,CAAC,CAAC;IACN,CAAC,MAAM;MACLE,KAAK,CAACF,YAAY,CAAC,KAAK,EAAEjC,OAAO,CAACqB,GAAG,CAAC,EAAC;MACvCc,KAAK,CAACF,YAAY,CAAC,OAAO,EAAE,KAAK,CAAC;MAClCE,KAAK,CAACF,YAAY,CAAC,OAAO,EAAE,0CAA0C,CAAC;IACzE;IACA;IACA;IACA;IACA;IACA;;IAEA;;IAEA;IACA;IACA,IAAMuB,EAAE,GAAG/B,UAAU,CAACG,aAAa,CAAC,IAAI,CAAC;IACzC4B,EAAE,CAACC,WAAW,CAACtB,KAAK,CAAC;IACrBR,GAAG,CAAC8B,WAAW,CAACD,EAAE,CAAC;IACnB,OAAO7B,GAAG;EACZ;AACF,CAAC;AAAA,IAAA+B,QAAA,GAEchE,iBAAiB,EAChC;AAAAiE,OAAA,cAAAD,QAAA"}
|
|
1
|
+
{"version":3,"file":"humanReadablePane.js","names":["_solidUi","require","_rdflib","_marked","DOMPurify","_interopRequireWildcard","_getRequireWildcardCache","nodeInterop","WeakMap","cacheBabelInterop","cacheNodeInterop","obj","__esModule","_typeof","cache","has","get","newObj","hasPropertyDescriptor","Object","defineProperty","getOwnPropertyDescriptor","key","prototype","hasOwnProperty","call","desc","set","humanReadablePane","icon","icons","originalIconBase","name","label","subject","context","kb","session","store","allowed","hasContentTypeIn","x","displayables","cts","fetcher","getHeader","j","length","k","indexOf","hasContentTypeIn2","t","findTypeURIs","Util","mediaTypeClass","uri","ns","link","render","myDocument","dom","div","createElement","doc","ct","console","log","setAttribute","element","frame","markdownHtml","webOperation","then","response","markdownText","responseText","lines","Math","min","split","res","marked","parse","clean","sanitize","innerHTML","concat","_fetch","blob","objectURL","URL","createObjectURL","tr","appendChild","_default","exports"],"sources":["../src/humanReadablePane.js"],"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 * as DOMPurify from 'dompurify'\n\nconst humanReadablePane = {\n icon: icons.originalIconBase + 'tango/22-text-x-generic.png',\n\n name: 'humanReadable',\n\n label: function (subject, context) {\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 (kb, x, displayables) {\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 (kb, x, displayables) {\n const t = kb.findTypeURIs(subject)\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 'view'\n\n if (\n hasContentTypeIn(kb, subject, allowed) ||\n hasContentTypeIn2(kb, subject, allowed)\n ) {\n return 'View'\n }\n\n return null\n },\n\n render: function (subject, context) {\n const myDocument = context.dom\n const div = myDocument.createElement('div')\n const kb = context.session.store\n\n const cts = kb.fetcher.getHeader(subject.doc(), 'content-type')\n const ct = cts ? cts[0] : null\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.setAttribute('class', 'docView')\n const element = ct === 'text/markdown' ? 'DIV' : 'IFRAME'\n const frame = myDocument.createElement(element)\n\n // render markdown to html\n const markdownHtml = function () {\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)\n const clean = DOMPurify.sanitize(res)\n frame.innerHTML = clean\n frame.setAttribute('class', 'doc')\n frame.setAttribute('style', `border: 1px solid; padding: 1em; height: ${lines}em; width: 800px; resize: both; overflow: auto;`)\n })\n }\n\n if (ct === 'text/markdown') {\n markdownHtml()\n } else if (ct !== 'text/html') {\n // get with authenticated fetch\n kb.fetcher._fetch(subject.uri)\n .then(function(response) {\n return response.blob()\n })\n .then(function(blob) {\n const objectURL = URL.createObjectURL(blob)\n frame.setAttribute('src', objectURL) // w640 h480 //\n frame.setAttribute('class', 'doc')\n frame.setAttribute('style', `border: 1px solid; padding: 1em; height:120em; width:80em; resize: both; overflow: auto;`)\n })\n } else {\n frame.setAttribute('src', subject.uri) // allow-same-origin\n frame.setAttribute('class', 'doc')\n frame.setAttribute('style', 'resize = both; height:120em; width:80em;')\n }\n // @@ Note below - if we set ANY sandbox, then Chrome and Safari won't display it if it is PDF.\n // https://developer.mozilla.org/en-US/docs/Web/HTML/Element/iframe\n // You can't have any sandbox and allow plugins.\n // We could sandbox only HTML files I suppose.\n // HTML5 bug: https://lists.w3.org/Archives/Public/public-html/2011Jun/0330.html\n\n // iframe.setAttribute('sandbox', 'allow-same-origin allow-forms'); // allow-scripts ?? no documents should be static\n\n // iframe.setAttribute('height', '480')\n // iframe.setAttribute('width', '640')\n const tr = myDocument.createElement('TR')\n tr.appendChild(frame)\n div.appendChild(tr)\n return div\n }\n}\n\nexport default humanReadablePane\n// ends\n"],"mappings":"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"}
|
package/lib/versionInfo.js
CHANGED
|
@@ -5,17 +5,17 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
5
5
|
});
|
|
6
6
|
exports["default"] = void 0;
|
|
7
7
|
var _default = {
|
|
8
|
-
buildTime: "2023-
|
|
9
|
-
commit: "
|
|
8
|
+
buildTime: "2023-04-13T19:40:59Z",
|
|
9
|
+
commit: "0fdc5067c7d84d2c875185f1014fe80afe06d7dc",
|
|
10
10
|
npmInfo: {
|
|
11
|
-
'solid-panes': '3.5.
|
|
11
|
+
'solid-panes': '3.5.32',
|
|
12
12
|
npm: '8.19.4',
|
|
13
|
-
node: '16.
|
|
14
|
-
v8: '9.4.146.26-node.
|
|
13
|
+
node: '16.20.0',
|
|
14
|
+
v8: '9.4.146.26-node.26',
|
|
15
15
|
uv: '1.43.0',
|
|
16
16
|
zlib: '1.2.11',
|
|
17
17
|
brotli: '1.0.9',
|
|
18
|
-
ares: '1.
|
|
18
|
+
ares: '1.19.0',
|
|
19
19
|
modules: '93',
|
|
20
20
|
nghttp2: '1.47.0',
|
|
21
21
|
napi: '8',
|
package/lib/versionInfo.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"versionInfo.js","names":["buildTime","commit","npmInfo","npm","node","v8","uv","zlib","brotli","ares","modules","nghttp2","napi","llhttp","openssl","cldr","icu","tz","unicode","ngtcp2","nghttp3","exports","_default"],"sources":["../src/versionInfo.ts"],"sourcesContent":["export default {\nbuildTime: \"2023-
|
|
1
|
+
{"version":3,"file":"versionInfo.js","names":["buildTime","commit","npmInfo","npm","node","v8","uv","zlib","brotli","ares","modules","nghttp2","napi","llhttp","openssl","cldr","icu","tz","unicode","ngtcp2","nghttp3","exports","_default"],"sources":["../src/versionInfo.ts"],"sourcesContent":["export default {\nbuildTime: \"2023-04-13T19:40:59Z\",\ncommit: \"0fdc5067c7d84d2c875185f1014fe80afe06d7dc\",\nnpmInfo:\n{\n 'solid-panes': '3.5.32',\n npm: '8.19.4',\n node: '16.20.0',\n v8: '9.4.146.26-node.26',\n uv: '1.43.0',\n zlib: '1.2.11',\n brotli: '1.0.9',\n ares: '1.19.0',\n modules: '93',\n nghttp2: '1.47.0',\n napi: '8',\n llhttp: '6.0.10',\n openssl: '1.1.1t+quic',\n cldr: '41.0',\n icu: '71.1',\n tz: '2022f',\n unicode: '14.0',\n ngtcp2: '0.8.1',\n nghttp3: '0.7.0'\n}\n};\n"],"mappings":";;;;;;eAAe;EACfA,SAAS,EAAE,sBAAsB;EACjCC,MAAM,EAAE,0CAA0C;EAClDC,OAAO,EACP;IACE,aAAa,EAAE,QAAQ;IACvBC,GAAG,EAAE,QAAQ;IACbC,IAAI,EAAE,SAAS;IACfC,EAAE,EAAE,oBAAoB;IACxBC,EAAE,EAAE,QAAQ;IACZC,IAAI,EAAE,QAAQ;IACdC,MAAM,EAAE,OAAO;IACfC,IAAI,EAAE,QAAQ;IACdC,OAAO,EAAE,IAAI;IACbC,OAAO,EAAE,QAAQ;IACjBC,IAAI,EAAE,GAAG;IACTC,MAAM,EAAE,QAAQ;IAChBC,OAAO,EAAE,aAAa;IACtBC,IAAI,EAAE,MAAM;IACZC,GAAG,EAAE,MAAM;IACXC,EAAE,EAAE,OAAO;IACXC,OAAO,EAAE,MAAM;IACfC,MAAM,EAAE,OAAO;IACfC,OAAO,EAAE;EACX;AACA,CAAC;AAAAC,OAAA,cAAAC,QAAA"}
|
package/lib/video/videoPane.js
CHANGED
|
@@ -26,11 +26,19 @@ var _default = {
|
|
|
26
26
|
return null;
|
|
27
27
|
},
|
|
28
28
|
render: function render(subject, context) {
|
|
29
|
+
var kb = context.session.store;
|
|
29
30
|
var dom = context.dom;
|
|
30
31
|
var div = dom.createElement('div');
|
|
31
32
|
var video = div.appendChild(dom.createElement('video'));
|
|
32
33
|
video.setAttribute('controls', 'yes');
|
|
33
|
-
video
|
|
34
|
+
// get video with authenticated fetch
|
|
35
|
+
kb.fetcher._fetch(subject.uri).then(function (response) {
|
|
36
|
+
return response.blob();
|
|
37
|
+
}).then(function (myBlob) {
|
|
38
|
+
var objectURL = URL.createObjectURL(myBlob);
|
|
39
|
+
video.setAttribute('src', objectURL); // w640 h480 //
|
|
40
|
+
});
|
|
41
|
+
|
|
34
42
|
video.setAttribute('width', '100%');
|
|
35
43
|
return div;
|
|
36
44
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"videoPane.js","names":["UI","_interopRequireWildcard","require","$rdf","_getRequireWildcardCache","nodeInterop","WeakMap","cacheBabelInterop","cacheNodeInterop","obj","__esModule","_typeof","cache","has","get","newObj","hasPropertyDescriptor","Object","defineProperty","getOwnPropertyDescriptor","key","prototype","hasOwnProperty","call","desc","set","_default","icon","icons","iconBase","name","label","subject","context","kb","session","store","typeURIs","findTypeURIs","prefix","Util","mediaTypeClass","uri","split","t","startsWith","render","dom","div","createElement","video","appendChild","setAttribute","exports"],"sources":["../../src/video/videoPane.js"],"sourcesContent":["/* Single video play Pane\n **\n */\nimport * as UI from 'solid-ui'\nimport * as $rdf from 'rdflib'\n\nexport default {\n icon: UI.icons.iconBase + 'noun_1619.svg',\n\n name: 'video',\n\n // Does the subject deserve an slideshow pane?\n label: function (subject, context) {\n const kb = context.session.store\n const typeURIs = kb.findTypeURIs(subject)\n const prefix = $rdf.Util.mediaTypeClass('video/*').uri.split('*')[0]\n for (const t in typeURIs) {\n if (t.startsWith(prefix)) return 'Play video'\n }\n\n return null\n },\n\n render: function (subject, context) {\n const dom = context.dom\n const div = dom.createElement('div')\n const video = div.appendChild(dom.createElement('video'))\n video.setAttribute('controls', 'yes')\n video.setAttribute('src',
|
|
1
|
+
{"version":3,"file":"videoPane.js","names":["UI","_interopRequireWildcard","require","$rdf","_getRequireWildcardCache","nodeInterop","WeakMap","cacheBabelInterop","cacheNodeInterop","obj","__esModule","_typeof","cache","has","get","newObj","hasPropertyDescriptor","Object","defineProperty","getOwnPropertyDescriptor","key","prototype","hasOwnProperty","call","desc","set","_default","icon","icons","iconBase","name","label","subject","context","kb","session","store","typeURIs","findTypeURIs","prefix","Util","mediaTypeClass","uri","split","t","startsWith","render","dom","div","createElement","video","appendChild","setAttribute","fetcher","_fetch","then","response","blob","myBlob","objectURL","URL","createObjectURL","exports"],"sources":["../../src/video/videoPane.js"],"sourcesContent":["/* Single video play Pane\n **\n */\nimport * as UI from 'solid-ui'\nimport * as $rdf from 'rdflib'\n\nexport default {\n icon: UI.icons.iconBase + 'noun_1619.svg',\n\n name: 'video',\n\n // Does the subject deserve an slideshow pane?\n label: function (subject, context) {\n const kb = context.session.store\n const typeURIs = kb.findTypeURIs(subject)\n const prefix = $rdf.Util.mediaTypeClass('video/*').uri.split('*')[0]\n for (const t in typeURIs) {\n if (t.startsWith(prefix)) return 'Play video'\n }\n\n return null\n },\n\n render: function (subject, context) {\n const kb = context.session.store\n const dom = context.dom\n const div = dom.createElement('div')\n const video = div.appendChild(dom.createElement('video'))\n video.setAttribute('controls', 'yes')\n // get video with authenticated fetch\n kb.fetcher._fetch(subject.uri)\n .then(function(response) {\n return response.blob()\n })\n .then(function(myBlob) {\n const objectURL = URL.createObjectURL(myBlob)\n video.setAttribute('src', objectURL) // w640 h480 //\n })\n\n video.setAttribute('width', '100%')\n return div\n }\n}\n// ends\n"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "solid-panes",
|
|
3
|
-
"version": "3.5.
|
|
3
|
+
"version": "3.5.32-0fdc5067",
|
|
4
4
|
"description": "Solid-compatible Panes: applets and views for the mashlib and databrowser",
|
|
5
5
|
"main": "lib/index.js",
|
|
6
6
|
"types": "lib/index.d.ts",
|
|
@@ -46,34 +46,35 @@
|
|
|
46
46
|
"homepage": "https://github.com/solidos/solid-panes",
|
|
47
47
|
"dependencies": {
|
|
48
48
|
"@solid/better-simple-slideshow": "^0.1.0",
|
|
49
|
-
"activitystreams-pane": "0.6.
|
|
50
|
-
"chat-pane": "2.4.
|
|
51
|
-
"contacts-pane": "^2.6.
|
|
52
|
-
"
|
|
53
|
-
"
|
|
49
|
+
"activitystreams-pane": "0.6.11",
|
|
50
|
+
"chat-pane": "2.4.23",
|
|
51
|
+
"contacts-pane": "^2.6.10",
|
|
52
|
+
"dompurify": "^3.0.1",
|
|
53
|
+
"folder-pane": "^2.4.25",
|
|
54
|
+
"issue-pane": "2.4.17",
|
|
54
55
|
"marked": "^4.2.12",
|
|
55
|
-
"meeting-pane": "^2.3.
|
|
56
|
+
"meeting-pane": "^2.3.17",
|
|
56
57
|
"mime-types": "^2.1.35",
|
|
57
58
|
"profile-pane": "^1.0.16",
|
|
58
59
|
"solid-namespace": "^0.5.2",
|
|
59
|
-
"solid-ui": "2.4.
|
|
60
|
-
"source-pane": "^2.2.
|
|
60
|
+
"solid-ui": "2.4.27",
|
|
61
|
+
"source-pane": "^2.2.24"
|
|
61
62
|
},
|
|
62
63
|
"devDependencies": {
|
|
63
64
|
"@babel/cli": "^7.21.0",
|
|
64
|
-
"@babel/core": "^7.21.
|
|
65
|
+
"@babel/core": "^7.21.3",
|
|
65
66
|
"@babel/preset-env": "^7.20.2",
|
|
66
67
|
"@babel/preset-typescript": "^7.21.0",
|
|
67
68
|
"@testing-library/dom": "^8.20.0",
|
|
68
69
|
"@testing-library/jest-dom": "^5.16.5",
|
|
69
70
|
"@types/jest": "^27.5.2",
|
|
70
71
|
"@types/webpack-env": "^1.18.0",
|
|
71
|
-
"@typescript-eslint/eslint-plugin": "^5.
|
|
72
|
-
"@typescript-eslint/parser": "^5.
|
|
72
|
+
"@typescript-eslint/eslint-plugin": "^5.55.0",
|
|
73
|
+
"@typescript-eslint/parser": "^5.55.0",
|
|
73
74
|
"babel-loader": "^8.3.0",
|
|
74
75
|
"babel-plugin-inline-import": "^3.0.0",
|
|
75
76
|
"buffer": "^6.0.3",
|
|
76
|
-
"eslint": "^8.
|
|
77
|
+
"eslint": "^8.36.0",
|
|
77
78
|
"html-webpack-plugin": "^5.5.0",
|
|
78
79
|
"husky": "^7.0.4",
|
|
79
80
|
"jest": "^27.5.1",
|
|
@@ -85,9 +86,9 @@
|
|
|
85
86
|
"react-dom": "^18.2.0",
|
|
86
87
|
"ts-jest": "^27.1.5",
|
|
87
88
|
"typescript": "^4.9.5",
|
|
88
|
-
"webpack": "^5.
|
|
89
|
+
"webpack": "^5.76.2",
|
|
89
90
|
"webpack-cli": "^4.10.0",
|
|
90
|
-
"webpack-dev-server": "^4.
|
|
91
|
+
"webpack-dev-server": "^4.12.0"
|
|
91
92
|
},
|
|
92
93
|
"husky": {
|
|
93
94
|
"hooks": {
|
package/src/audio/audioPane.js
CHANGED
|
@@ -156,7 +156,16 @@ export default {
|
|
|
156
156
|
const audioControl = function (song, autoplay) {
|
|
157
157
|
const audio = dom.createElement('audio')
|
|
158
158
|
audio.setAttribute('controls', 'yes')
|
|
159
|
-
audio
|
|
159
|
+
// get audio with authenticated fetch
|
|
160
|
+
kb.fetcher._fetch(song.uri)
|
|
161
|
+
.then(function(response) {
|
|
162
|
+
return response.blob()
|
|
163
|
+
})
|
|
164
|
+
.then(function(myBlob) {
|
|
165
|
+
const objectURL = URL.createObjectURL(myBlob)
|
|
166
|
+
audio.setAttribute('src', objectURL) // w640 h480 //
|
|
167
|
+
})
|
|
168
|
+
|
|
160
169
|
if (autoplay) {
|
|
161
170
|
audio.setAttribute('autoplay', 'autoplay') // Make this a personal preference
|
|
162
171
|
}
|
package/src/humanReadablePane.js
CHANGED
|
@@ -6,6 +6,7 @@
|
|
|
6
6
|
import { icons, ns } from 'solid-ui'
|
|
7
7
|
import { Util } from 'rdflib'
|
|
8
8
|
import { marked } from 'marked'
|
|
9
|
+
import * as DOMPurify from 'dompurify'
|
|
9
10
|
|
|
10
11
|
const humanReadablePane = {
|
|
11
12
|
icon: icons.originalIconBase + 'tango/22-text-x-generic.png',
|
|
@@ -76,7 +77,7 @@ const humanReadablePane = {
|
|
|
76
77
|
const cts = kb.fetcher.getHeader(subject.doc(), 'content-type')
|
|
77
78
|
const ct = cts ? cts[0] : null
|
|
78
79
|
if (ct) {
|
|
79
|
-
console.log('humanReadablePane: c-t:' + ct)
|
|
80
|
+
// console.log('humanReadablePane: c-t:' + ct)
|
|
80
81
|
} else {
|
|
81
82
|
console.log('humanReadablePane: unknown content-type?')
|
|
82
83
|
}
|
|
@@ -92,7 +93,8 @@ const humanReadablePane = {
|
|
|
92
93
|
const markdownText = response.responseText
|
|
93
94
|
const lines = Math.min(30, markdownText.split(/\n/).length + 5)
|
|
94
95
|
const res = marked.parse(markdownText)
|
|
95
|
-
|
|
96
|
+
const clean = DOMPurify.sanitize(res)
|
|
97
|
+
frame.innerHTML = clean
|
|
96
98
|
frame.setAttribute('class', 'doc')
|
|
97
99
|
frame.setAttribute('style', `border: 1px solid; padding: 1em; height: ${lines}em; width: 800px; resize: both; overflow: auto;`)
|
|
98
100
|
})
|
package/src/versionInfo.ts
CHANGED
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
export default {
|
|
2
|
-
buildTime: "2023-
|
|
3
|
-
commit: "
|
|
2
|
+
buildTime: "2023-04-13T19:40:59Z",
|
|
3
|
+
commit: "0fdc5067c7d84d2c875185f1014fe80afe06d7dc",
|
|
4
4
|
npmInfo:
|
|
5
5
|
{
|
|
6
|
-
'solid-panes': '3.5.
|
|
6
|
+
'solid-panes': '3.5.32',
|
|
7
7
|
npm: '8.19.4',
|
|
8
|
-
node: '16.
|
|
9
|
-
v8: '9.4.146.26-node.
|
|
8
|
+
node: '16.20.0',
|
|
9
|
+
v8: '9.4.146.26-node.26',
|
|
10
10
|
uv: '1.43.0',
|
|
11
11
|
zlib: '1.2.11',
|
|
12
12
|
brotli: '1.0.9',
|
|
13
|
-
ares: '1.
|
|
13
|
+
ares: '1.19.0',
|
|
14
14
|
modules: '93',
|
|
15
15
|
nghttp2: '1.47.0',
|
|
16
16
|
napi: '8',
|
package/src/video/videoPane.js
CHANGED
|
@@ -22,11 +22,21 @@ export default {
|
|
|
22
22
|
},
|
|
23
23
|
|
|
24
24
|
render: function (subject, context) {
|
|
25
|
+
const kb = context.session.store
|
|
25
26
|
const dom = context.dom
|
|
26
27
|
const div = dom.createElement('div')
|
|
27
28
|
const video = div.appendChild(dom.createElement('video'))
|
|
28
29
|
video.setAttribute('controls', 'yes')
|
|
29
|
-
video
|
|
30
|
+
// get video with authenticated fetch
|
|
31
|
+
kb.fetcher._fetch(subject.uri)
|
|
32
|
+
.then(function(response) {
|
|
33
|
+
return response.blob()
|
|
34
|
+
})
|
|
35
|
+
.then(function(myBlob) {
|
|
36
|
+
const objectURL = URL.createObjectURL(myBlob)
|
|
37
|
+
video.setAttribute('src', objectURL) // w640 h480 //
|
|
38
|
+
})
|
|
39
|
+
|
|
30
40
|
video.setAttribute('width', '100%')
|
|
31
41
|
return div
|
|
32
42
|
}
|