solid-panes 3.5.28-alpha → 3.5.29-alpha

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (119) hide show
  1. package/README.md +0 -2
  2. package/lib/RDFXMLPane.js +6 -8
  3. package/lib/RDFXMLPane.js.map +1 -1
  4. package/lib/argument/argumentPane.js +10 -11
  5. package/lib/argument/argumentPane.js.map +1 -1
  6. package/lib/attach/attachPane.js +47 -85
  7. package/lib/attach/attachPane.js.map +1 -1
  8. package/lib/audio/audioPane.js +11 -36
  9. package/lib/audio/audioPane.js.map +1 -1
  10. package/lib/classInstancePane.js +11 -20
  11. package/lib/classInstancePane.js.map +1 -1
  12. package/lib/dashboard/basicPreferences.js +3 -53
  13. package/lib/dashboard/basicPreferences.js.map +1 -1
  14. package/lib/dashboard/dashboardPane.js +2 -18
  15. package/lib/dashboard/dashboardPane.js.map +1 -1
  16. package/lib/dashboard/homepage.js +1 -19
  17. package/lib/dashboard/homepage.js.map +1 -1
  18. package/lib/dataContentPane.js +15 -58
  19. package/lib/dataContentPane.js.map +1 -1
  20. package/lib/defaultPane.js +13 -21
  21. package/lib/defaultPane.js.map +1 -1
  22. package/lib/dokieli/dokieliPane.js +19 -28
  23. package/lib/dokieli/dokieliPane.js.map +1 -1
  24. package/lib/dokieli/new.js.map +1 -1
  25. package/lib/form/pane.js +26 -40
  26. package/lib/form/pane.js.map +1 -1
  27. package/lib/home/homePane.js +7 -23
  28. package/lib/home/homePane.js.map +1 -1
  29. package/lib/humanReadablePane.js +14 -28
  30. package/lib/humanReadablePane.js.map +1 -1
  31. package/lib/imagePane.js +9 -13
  32. package/lib/imagePane.js.map +1 -1
  33. package/lib/index.js +4 -18
  34. package/lib/index.js.map +1 -1
  35. package/lib/internal/internalPane.js +10 -41
  36. package/lib/internal/internalPane.js.map +1 -1
  37. package/lib/mainPage/footer.js +0 -4
  38. package/lib/mainPage/footer.js.map +1 -1
  39. package/lib/mainPage/header.js +2 -28
  40. package/lib/mainPage/header.js.map +1 -1
  41. package/lib/mainPage/index.js +1 -12
  42. package/lib/mainPage/index.js.map +1 -1
  43. package/lib/microblogPane/microblogPane.js +100 -237
  44. package/lib/microblogPane/microblogPane.js.map +1 -1
  45. package/lib/n3Pane.js +2 -7
  46. package/lib/n3Pane.js.map +1 -1
  47. package/lib/outline/context.js +0 -2
  48. package/lib/outline/context.js.map +1 -1
  49. package/lib/outline/licenseOptions.js +9 -25
  50. package/lib/outline/licenseOptions.js.map +1 -1
  51. package/lib/outline/manager.js +178 -580
  52. package/lib/outline/manager.js.map +1 -1
  53. package/lib/outline/manager.test.js +1 -11
  54. package/lib/outline/manager.test.js.map +1 -1
  55. package/lib/outline/outlineIcons.js +30 -25
  56. package/lib/outline/outlineIcons.js.map +1 -1
  57. package/lib/outline/propertyViews.js +0 -10
  58. package/lib/outline/propertyViews.js.map +1 -1
  59. package/lib/outline/propertyViews.test.js +1 -3
  60. package/lib/outline/propertyViews.test.js.map +1 -1
  61. package/lib/outline/queryByExample.js +24 -76
  62. package/lib/outline/queryByExample.js.map +1 -1
  63. package/lib/outline/userInput.js +214 -454
  64. package/lib/outline/userInput.js.map +1 -1
  65. package/lib/outline/viewAsImage.js +0 -6
  66. package/lib/outline/viewAsImage.js.map +1 -1
  67. package/lib/outline/viewAsMbox.js +3 -4
  68. package/lib/outline/viewAsMbox.js.map +1 -1
  69. package/lib/pad/padPane.js +45 -93
  70. package/lib/pad/padPane.js.map +1 -1
  71. package/lib/playlist/playlistPane.js +3 -20
  72. package/lib/playlist/playlistPane.js.map +1 -1
  73. package/lib/profile/editProfile.view.js +7 -24
  74. package/lib/profile/editProfile.view.js.map +1 -1
  75. package/lib/profile/profile.dom.js +0 -3
  76. package/lib/profile/profile.dom.js.map +1 -1
  77. package/lib/registerPanes.js +29 -27
  78. package/lib/registerPanes.js.map +1 -1
  79. package/lib/schedule/formsForSchedule.js.map +1 -1
  80. package/lib/schedule/schedulePane.js +62 -122
  81. package/lib/schedule/schedulePane.js.map +1 -1
  82. package/lib/sharing/sharingPane.js +2 -10
  83. package/lib/sharing/sharingPane.js.map +1 -1
  84. package/lib/slideshow/slideshowPane.js +9 -14
  85. package/lib/slideshow/slideshowPane.js.map +1 -1
  86. package/lib/socialPane.js +43 -124
  87. package/lib/socialPane.js.map +1 -1
  88. package/lib/tabbed/tabbedPane.js +1 -15
  89. package/lib/tabbed/tabbedPane.js.map +1 -1
  90. package/lib/tableViewPane.js +4 -7
  91. package/lib/tableViewPane.js.map +1 -1
  92. package/lib/test-import-export/common.js +2 -1
  93. package/lib/test-import-export/common.js.map +1 -1
  94. package/lib/test-import-export/edit-importer.js +7 -9
  95. package/lib/test-import-export/edit-importer.js.map +1 -1
  96. package/lib/transaction/pane.js +31 -90
  97. package/lib/transaction/pane.js.map +1 -1
  98. package/lib/transaction/period.js +20 -71
  99. package/lib/transaction/period.js.map +1 -1
  100. package/lib/trip/tripPane.js +30 -34
  101. package/lib/trip/tripPane.js.map +1 -1
  102. package/lib/trustedApplications/trustedApplications.dom.js +8 -34
  103. package/lib/trustedApplications/trustedApplications.dom.js.map +1 -1
  104. package/lib/trustedApplications/trustedApplications.test.js +3 -8
  105. package/lib/trustedApplications/trustedApplications.test.js.map +1 -1
  106. package/lib/trustedApplications/trustedApplications.utils.js +0 -10
  107. package/lib/trustedApplications/trustedApplications.utils.js.map +1 -1
  108. package/lib/trustedApplications/trustedApplications.view.js +1 -22
  109. package/lib/trustedApplications/trustedApplications.view.js.map +1 -1
  110. package/lib/ui/pane.js +22 -28
  111. package/lib/ui/pane.js.map +1 -1
  112. package/lib/versionInfo.d.ts +2 -0
  113. package/lib/versionInfo.d.ts.map +1 -1
  114. package/lib/versionInfo.js +18 -16
  115. package/lib/versionInfo.js.map +1 -1
  116. package/lib/video/videoPane.js +2 -5
  117. package/lib/video/videoPane.js.map +1 -1
  118. package/package.json +24 -24
  119. package/src/versionInfo.ts +18 -16
@@ -1 +1 @@
1
- {"version":3,"file":"attachPane.js","names":["UI","require","$rdf","module","exports","icon","icons","iconBase","name","label","subject","context","kb","session","store","t","findTypeURIs","QU","Namespace","WF","uri","findSuperClassesNT","holds","render","dom","complain","message","pre","createElement","setAttribute","div","appendChild","createTextNode","findStore","updater","editable","doc","any","esc","utils","escapeForXML","innerHTML","predicate","range","subjects","multi","options","currentMode","currentSubject","currentObject","objectType","getSortKeySimple","_c","uriMap","sym","ns","ui","getSortKey","c","k","sup","cl","fromNT","undefined","getMembersAndSort","sortBy","u","x","key","uriHash","findMemberURIs","pairs","hasOwnProperty","value","push","sort","reverse","i","length","objects","deselectObject","preview","showFiltered","mode","filtered","getFiltered","widgets","selectorPanelRefresh","objectList","showObject","linkClicked","filter","y","each","setAttachment","refresh","verb","linkDone3","ok","body","sts","st","update","event","inverse","s","o","showSubject","selected","subjectList","selectorPanel","fetcher","load","then","outliner","getOutliner","display","propertyTable","err","textContent","e","headerButtons","labels","intial","callback","head","current","tr","style0","style1","setStyles","buttons","b","listen","addEventListener","_e","setMode","wrapper","stores","storeURI","mintBox","storeLab","_event","thisForm","promptForNew","_body","insertBefore","nextSibling"],"sources":["../../src/attach/attachPane.js"],"sourcesContent":["/* Attachment Pane\n **\n ** - Attach a document to a thing\n ** - View attachments\n ** - Look at all unattached Supporting Documents.\n ** - Drag a document onto the pane to attach it @@\n **\n **\n */\n\nconst UI = require('solid-ui')\nconst $rdf = require('rdflib')\n\nmodule.exports = {\n icon: UI.icons.iconBase + 'noun_25830.svg', // noun_25830\n\n name: 'attachments',\n\n // Does the subject deserve an attachments pane?\n //\n // In this case we will render any thing which is in any subclass of\n // certain classes, or also the certain classes themselves, as a\n // triage tool for correlating many attachees with attachments.\n // We also offer the pane for anything of any class which just has an attachment already.\n //\n label: function (subject, context) {\n const kb = context.session.store\n const t = kb.findTypeURIs(subject)\n const QU = $rdf.Namespace('http://www.w3.org/2000/10/swap/pim/qif#')\n const WF = $rdf.Namespace('http://www.w3.org/2005/01/wf/flow#')\n if (\n t['http://www.w3.org/ns/pim/trip#Trip'] || // If in any subclass\n subject.uri === 'http://www.w3.org/ns/pim/trip#Trip' ||\n t['http://www.w3.org/2005/01/wf/flow#Task'] ||\n t['http://www.w3.org/2000/10/swap/pim/qif#Transaction'] ||\n // subject.uri == 'http://www.w3.org/2000/10/swap/pim/qif#Transaction' ||\n QU('Transaction') in kb.findSuperClassesNT(subject) ||\n kb.holds(subject, WF('attachment'))\n ) {\n return 'attachments'\n }\n return null\n },\n\n render: function (subject, context) {\n const dom = context.dom\n const kb = context.session.store\n const WF = $rdf.Namespace('http://www.w3.org/2005/01/wf/flow#')\n const QU = $rdf.Namespace('http://www.w3.org/2000/10/swap/pim/qif#')\n\n // ////////////////////////////////////////////////////////////////////////////\n\n const complain = function complain (message) {\n const pre = dom.createElement('pre')\n pre.setAttribute('style', 'background-color: pink')\n div.appendChild(pre)\n pre.appendChild(dom.createTextNode(message))\n }\n\n // Where can we write about this thing?\n //\n // Returns term for document or null\n const findStore = function (kb, subject) {\n if (kb.updater.editable(subject.doc(), kb)) return subject.doc()\n const store = kb.any(subject.doc(), QU('annotationStore'))\n return store\n }\n\n const div = dom.createElement('div')\n const esc = UI.utils.escapeForXML\n div.setAttribute('class', 'attachPane')\n div.innerHTML =\n '<h1>' + esc(UI.utils.label(subject, true)) + ' attachments</h1>' //\n\n const predicate = WF('attachment')\n const range = QU('SupportingDocument')\n\n let subjects, multi\n const options = {}\n let currentMode = 0 // 0 -> Show all; 1 -> Attached; 2 -> unattached\n let currentSubject = null\n let currentObject = null\n const objectType = QU('SupportingDocument')\n\n // Find all members of the class which we know about\n // and sort them by an appropriate property. @@ Move to library\n //\n\n const getSortKeySimple = function (_c) {\n const uriMap = {\n 'http://www.w3.org/2005/01/wf/flow#Task': 'http://purl.org/dc/elements/1.1/created',\n 'http://www.w3.org/ns/pim/trip#Trip': 'http://www.w3.org/2002/12/cal/ical#dtstart',\n 'http://www.w3.org/2000/10/swap/pim/qif#Transaction': 'http://www.w3.org/2000/10/swap/pim/qif#date',\n 'http://www.w3.org/2000/10/swap/pim/qif#SupportingDocument': 'http://purl.org/dc/elements/1.1/date'\n }\n const uri = uriMap[subject.uri]\n return uri ? kb.sym(uri) : kb.any(subject, UI.ns.ui('sortBy'))\n }\n\n const getSortKey = function (c) {\n let k = getSortKeySimple(c.uri)\n if (k) return k\n const sup = kb.findSuperClassesNT(c)\n for (const cl in sup) {\n // note unordered -- could be closest first\n k = getSortKeySimple(kb.fromNT(cl).uri)\n if (k) return k\n }\n return undefined // failure\n }\n\n const getMembersAndSort = function (subject) {\n const sortBy = getSortKey(subject)\n let u, x, key\n const uriHash = kb.findMemberURIs(subject)\n const pairs = []\n const subjects = []\n for (u in uriHash) {\n // @@ TODO: Write away the need for exception on next line\n // eslint-disable-next-line no-prototype-builtins\n if (uriHash.hasOwnProperty(u)) {\n x = kb.sym(u)\n if (sortBy) {\n key = kb.any(x, sortBy)\n if (!key) {\n // complain(\"No key \"+key+\" sortby \"+sortBy+\" for \"+x)\n key = '8888-12-31'\n } else {\n key = key.value\n }\n } else {\n complain('No sortby ' + sortBy + ' for ' + x)\n key = '9999-12-31'\n }\n // key = (sortBy && kb.any(x, sortBy)) || kb.literal(\"9999-12-31\") // Undated appear future\n // if (!key) complain(\"Sort: '\"+key+\"' No \"+sortBy+\" for \"+x) // Assume just not in this year\n pairs.push([key, x])\n }\n }\n pairs.sort()\n pairs.reverse() // @@ Descending order .. made a toggle?\n for (let i = 0; i < pairs.length; i++) {\n subjects.push(pairs[i][1])\n }\n return subjects\n }\n\n // Set up a triage of many class members against documents or just one\n if (\n subject.uri === 'http://www.w3.org/ns/pim/trip#Trip' ||\n QU('Transaction') in kb.findSuperClassesNT(subject)\n // subject.uri == 'http://www.w3.org/2000/10/swap/pim/qif#Transaction'\n ) {\n multi = true\n subjects = getMembersAndSort(subject)\n } else {\n currentSubject = subject\n currentMode = 1 // Show attached only.\n subjects = [subject]\n multi = false\n }\n\n // var store = findStore(kb, subject)\n // if (!store) complain(\"There is no annotation store for: \"+subject.uri)\n\n // var objects = kb.each(undefined, ns.rdf('type'), range)\n const objects = getMembersAndSort(range)\n if (!objects) complain('objects:' + objects.length)\n\n const deselectObject = function () {\n currentObject = null\n preview.innerHTML = ''\n }\n\n const showFiltered = function (mode) {\n const filtered = mode === 0 ? objects : getFiltered()\n // eslint-enable\n UI.widgets.selectorPanelRefresh(\n objectList,\n dom,\n kb,\n objectType,\n predicate,\n true,\n filtered,\n options,\n showObject,\n linkClicked\n )\n if (filtered.length === 1) {\n currentObject = filtered[0]\n showObject(currentObject, null, true) // @@ (Sure?) if only one select it.\n } else {\n deselectObject()\n }\n\n function getFiltered () {\n return mode === 1\n ? currentSubject === null\n ? objects.filter(y => !!kb.holds(undefined, predicate, y))\n : objects.filter(y => !!kb.holds(currentSubject, predicate, y))\n : objects.filter(y => kb.each(undefined, predicate, y).length === 0)\n }\n }\n\n const setAttachment = function (x, y, value, refresh) {\n if (kb.holds(x, predicate, y) === value) return\n const verb = value ? 'attach' : 'detach'\n // complain(\"Info: starting to \"+verb+\" \" + y.uri + \" to \"+x.uri+ \":\\n\")\n const linkDone3 = function (uri, ok, body) {\n if (ok) {\n // complain(\"Success \"+verb+\" \"+y.uri+\" to \"+x.uri+ \":\\n\"+ body)\n refresh()\n } else {\n complain(\n 'Error: Unable to ' +\n verb +\n ' ' +\n y.uri +\n ' to ' +\n x.uri +\n ':\\n' +\n body\n )\n }\n }\n\n const store = findStore(kb, x)\n if (!store) {\n complain('There is no annotation store for: ' + x.uri)\n } else {\n const sts = [$rdf.st(x, predicate, y, store)]\n if (value) {\n kb.updater.update([], sts, linkDone3)\n } else {\n kb.updater.update(sts, [], linkDone3)\n }\n }\n }\n\n const linkClicked = function (x, event, inverse, refresh) {\n let s, o\n if (inverse) {\n // Objectlist\n if (!currentSubject) {\n complain('No subject for the link has been selected')\n return\n } else {\n s = currentSubject\n o = x\n }\n } else {\n // Subjectlist\n if (!currentObject) {\n complain('No object for the link has been selected')\n return\n } else {\n s = x\n o = currentObject\n }\n }\n setAttachment(s, o, !kb.holds(s, predicate, o), refresh) // @@ toggle\n }\n\n // When you click on a subject, filter the objects connected to the subject in Mode 1\n const showSubject = function (x, event, selected) {\n if (selected) {\n currentSubject = x\n } else {\n currentSubject = null\n if (currentMode === 1) deselectObject()\n } // If all are displayed, refresh would just annoy:\n if (currentMode !== 0) showFiltered(currentMode) // Refresh the objects\n }\n\n if (multi) {\n const subjectList = UI.widgets.selectorPanel(\n dom,\n kb,\n subject,\n predicate,\n false,\n subjects,\n options,\n showSubject,\n linkClicked\n )\n subjectList.setAttribute(\n 'style',\n 'background-color: white; width: 25em; height: 100%; padding: 0 em; overflow:scroll; float:left'\n )\n div.appendChild(subjectList)\n }\n\n const showObject = function (x, event, selected) {\n if (!selected) {\n deselectObject()\n preview.innerHTML = '' // Clean out what is there\n // complain(\"Show object \"+x.uri)\n return\n }\n currentObject = x\n try {\n /*\n var dispalyable = function (kb, x) {\n var cts = kb.fetcher.getHeader(x, 'content-type')\n if (cts) {\n var displayables = ['text/html', 'image/png', 'application/pdf']\n for (var j = 0; j < cts.length; j++) {\n for (var 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 preview.innerHTML = 'Loading ....'\n if (x.uri) {\n kb.fetcher\n .load(x.uri)\n .then(() => {\n const outliner = context.getOutliner(dom)\n const display = outliner.propertyTable(x) // ,table, pane\n preview.innerHTML = ''\n preview.appendChild(display)\n })\n .catch(err => {\n preview.textContent = 'Error loading ' + x.uri + ': ' + err\n })\n }\n /*\n if (dispalyable(kb, x) || x.uri.slice(-4) == \".pdf\" || x.uri.slice(-4) == \".png\" || x.uri.slice(-5) == \".html\" ||\n x.uri.slice(-5) == \".jpeg\") { // @@@@@@ MAJOR KLUDGE! use metadata after HEAD\n preview.innerHTML = '<iframe height=\"100%\" width=\"100%\"src=\"'\n + x.uri + '\">' + x.uri + '</iframe>'\n } else {\n }\n */\n } catch (e) {\n preview.innerHTML =\n '<span style=\"background-color: pink;\">' + 'Error:' + e + '</span>' // @@ enc\n }\n }\n\n div.setAttribute(\n 'style',\n 'background-color: white; width:40cm; height:20cm;'\n )\n\n const headerButtons = function (dom, labels, intial, callback) {\n const head = dom.createElement('table')\n let current = intial\n head.setAttribute(\n 'style',\n 'float: left; width: 30em; padding: 0.5em; height: 1.5em; background-color: #ddd; color: #444; font-weight: bold'\n )\n const tr = dom.createElement('tr')\n const style0 = 'border-radius: 0.6em; text-align: center;'\n const style1 = style0 + 'background-color: #ccc; color: black;'\n head.appendChild(tr)\n const setStyles = function () {\n for (i = 0; i < labels.length; i++) {\n buttons[i].setAttribute('style', i === current ? style1 : style0)\n }\n }\n let i, b\n const buttons = []\n for (i = 0; i < labels.length; i++) {\n b = buttons[i] = dom.createElement('td')\n b.textContent = labels[i]\n tr.appendChild(buttons[i])\n const listen = function (b, i) {\n b.addEventListener('click', function (_e) {\n current = i\n setStyles()\n callback(i)\n })\n }\n listen(b, i)\n }\n setStyles()\n return head\n }\n\n const setMode = function (mode) {\n if (mode !== currentMode) {\n currentMode = mode\n deselectObject()\n showFiltered(mode)\n }\n }\n\n const wrapper = dom.createElement('div')\n wrapper.setAttribute(\n 'style',\n ' width: 30em; height: 100%; padding: 0em; float:left;'\n )\n // wrapper.appendChild(head)\n div.appendChild(wrapper)\n wrapper.appendChild(\n headerButtons(\n dom,\n ['all', 'attached', 'not attached'],\n currentMode,\n setMode\n )\n )\n\n const objectList = UI.widgets.selectorPanel(\n dom,\n kb,\n objectType,\n predicate,\n true,\n objects,\n options,\n showObject,\n linkClicked\n )\n objectList.setAttribute(\n 'style',\n 'background-color: #ffe; width: 30em; height: 100%; padding: 0em; overflow:scroll;'\n ) // float:left\n wrapper.appendChild(objectList)\n\n // objectList.insertBefore(head, objectList.firstChild)\n\n const preview = dom.createElement('div')\n preview.setAttribute(\n 'style',\n /* background-color: black; */ 'padding: 0em; margin: 0; height: 100%; overflow:scroll;'\n )\n div.appendChild(preview)\n showFiltered(currentMode)\n\n if (subjects.length > 0 && multi) {\n const stores = {}\n for (let k = 0; k < subjects.length; k++) {\n const store = findStore(kb, subjects[k])\n if (store) stores[store.uri] = subjects[k]\n // if (!store) complain(\"No store for \"+subjects[k].uri)\n }\n for (const storeURI in stores) {\n // var store = findStore(kb,subjects[subjectList.length-1])\n const store = kb.sym(storeURI)\n const mintBox = dom.createElement('div')\n mintBox.setAttribute(\n 'style',\n 'clear: left; width: 20em; margin-top:2em; background-color:#ccc; border-radius: 1em; padding: 1em; font-weight: bold;'\n )\n mintBox.textContent = '+ New ' + UI.utils.label(subject)\n\n mintBox.textContent += ' in ' + UI.utils.label(store)\n const storeLab = dom.createElement('span')\n storeLab.setAttribute(\n 'style',\n 'font-weight: normal; font-size: 80%; color: #777;'\n )\n storeLab.textContent = storeURI\n mintBox.appendChild(dom.createElement('br'))\n mintBox.appendChild(storeLab)\n /*\n var mintButton = dom.createElement('img')\n mintBox.appendChild(mintButton)\n mintButton.setAttribute('src', ...); @@ Invokes master handler\n */\n mintBox.addEventListener(\n 'click',\n function (_event) {\n const thisForm = UI.widgets.promptForNew(\n dom,\n kb,\n subject,\n predicate,\n subject,\n null,\n store,\n function (ok, _body) {\n if (!ok) {\n // callback(ok, body); // @@ if ok, need some form of refresh of the select for the new thing\n } else {\n // Refresh @@\n }\n }\n )\n try {\n div.insertBefore(thisForm, mintBox.nextSibling) // Sigh no insertAfter\n } catch (e) {\n div.appendChild(thisForm)\n }\n // var newObject = thisForm.AJAR_subject\n },\n false\n )\n div.appendChild(mintBox)\n }\n }\n\n // if (!me) complain(\"(You do not have your Web Id set. Set your Web ID to make changes.)\")\n\n return div\n }\n} // pane object\n\n// ends\n"],"mappings":"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"}
1
+ {"version":3,"file":"attachPane.js","names":["UI","require","$rdf","module","exports","icon","icons","iconBase","name","label","subject","context","kb","session","store","t","findTypeURIs","QU","Namespace","WF","uri","findSuperClassesNT","holds","render","dom","complain","message","pre","createElement","setAttribute","div","appendChild","createTextNode","findStore","updater","editable","doc","any","esc","utils","escapeForXML","innerHTML","predicate","range","subjects","multi","options","currentMode","currentSubject","currentObject","objectType","getSortKeySimple","_c","uriMap","sym","ns","ui","getSortKey","c","k","sup","cl","fromNT","undefined","getMembersAndSort","sortBy","u","x","key","uriHash","findMemberURIs","pairs","hasOwnProperty","value","push","sort","reverse","i","length","objects","deselectObject","preview","showFiltered","mode","filtered","getFiltered","widgets","selectorPanelRefresh","objectList","showObject","linkClicked","filter","y","each","setAttachment","refresh","verb","linkDone3","ok","body","sts","st","update","event","inverse","s","o","showSubject","selected","subjectList","selectorPanel","fetcher","load","then","outliner","getOutliner","display","propertyTable","err","textContent","e","headerButtons","labels","intial","callback","head","current","tr","style0","style1","setStyles","buttons","b","listen","addEventListener","_e","setMode","wrapper","stores","storeURI","mintBox","storeLab","_event","thisForm","promptForNew","_body","insertBefore","nextSibling"],"sources":["../../src/attach/attachPane.js"],"sourcesContent":["/* Attachment Pane\n **\n ** - Attach a document to a thing\n ** - View attachments\n ** - Look at all unattached Supporting Documents.\n ** - Drag a document onto the pane to attach it @@\n **\n **\n */\n\nconst UI = require('solid-ui')\nconst $rdf = require('rdflib')\n\nmodule.exports = {\n icon: UI.icons.iconBase + 'noun_25830.svg', // noun_25830\n\n name: 'attachments',\n\n // Does the subject deserve an attachments pane?\n //\n // In this case we will render any thing which is in any subclass of\n // certain classes, or also the certain classes themselves, as a\n // triage tool for correlating many attachees with attachments.\n // We also offer the pane for anything of any class which just has an attachment already.\n //\n label: function (subject, context) {\n const kb = context.session.store\n const t = kb.findTypeURIs(subject)\n const QU = $rdf.Namespace('http://www.w3.org/2000/10/swap/pim/qif#')\n const WF = $rdf.Namespace('http://www.w3.org/2005/01/wf/flow#')\n if (\n t['http://www.w3.org/ns/pim/trip#Trip'] || // If in any subclass\n subject.uri === 'http://www.w3.org/ns/pim/trip#Trip' ||\n t['http://www.w3.org/2005/01/wf/flow#Task'] ||\n t['http://www.w3.org/2000/10/swap/pim/qif#Transaction'] ||\n // subject.uri == 'http://www.w3.org/2000/10/swap/pim/qif#Transaction' ||\n QU('Transaction') in kb.findSuperClassesNT(subject) ||\n kb.holds(subject, WF('attachment'))\n ) {\n return 'attachments'\n }\n return null\n },\n\n render: function (subject, context) {\n const dom = context.dom\n const kb = context.session.store\n const WF = $rdf.Namespace('http://www.w3.org/2005/01/wf/flow#')\n const QU = $rdf.Namespace('http://www.w3.org/2000/10/swap/pim/qif#')\n\n // ////////////////////////////////////////////////////////////////////////////\n\n const complain = function complain (message) {\n const pre = dom.createElement('pre')\n pre.setAttribute('style', 'background-color: pink')\n div.appendChild(pre)\n pre.appendChild(dom.createTextNode(message))\n }\n\n // Where can we write about this thing?\n //\n // Returns term for document or null\n const findStore = function (kb, subject) {\n if (kb.updater.editable(subject.doc(), kb)) return subject.doc()\n const store = kb.any(subject.doc(), QU('annotationStore'))\n return store\n }\n\n const div = dom.createElement('div')\n const esc = UI.utils.escapeForXML\n div.setAttribute('class', 'attachPane')\n div.innerHTML =\n '<h1>' + esc(UI.utils.label(subject, true)) + ' attachments</h1>' //\n\n const predicate = WF('attachment')\n const range = QU('SupportingDocument')\n\n let subjects, multi\n const options = {}\n let currentMode = 0 // 0 -> Show all; 1 -> Attached; 2 -> unattached\n let currentSubject = null\n let currentObject = null\n const objectType = QU('SupportingDocument')\n\n // Find all members of the class which we know about\n // and sort them by an appropriate property. @@ Move to library\n //\n\n const getSortKeySimple = function (_c) {\n const uriMap = {\n 'http://www.w3.org/2005/01/wf/flow#Task': 'http://purl.org/dc/elements/1.1/created',\n 'http://www.w3.org/ns/pim/trip#Trip': 'http://www.w3.org/2002/12/cal/ical#dtstart',\n 'http://www.w3.org/2000/10/swap/pim/qif#Transaction': 'http://www.w3.org/2000/10/swap/pim/qif#date',\n 'http://www.w3.org/2000/10/swap/pim/qif#SupportingDocument': 'http://purl.org/dc/elements/1.1/date'\n }\n const uri = uriMap[subject.uri]\n return uri ? kb.sym(uri) : kb.any(subject, UI.ns.ui('sortBy'))\n }\n\n const getSortKey = function (c) {\n let k = getSortKeySimple(c.uri)\n if (k) return k\n const sup = kb.findSuperClassesNT(c)\n for (const cl in sup) {\n // note unordered -- could be closest first\n k = getSortKeySimple(kb.fromNT(cl).uri)\n if (k) return k\n }\n return undefined // failure\n }\n\n const getMembersAndSort = function (subject) {\n const sortBy = getSortKey(subject)\n let u, x, key\n const uriHash = kb.findMemberURIs(subject)\n const pairs = []\n const subjects = []\n for (u in uriHash) {\n // @@ TODO: Write away the need for exception on next line\n // eslint-disable-next-line no-prototype-builtins\n if (uriHash.hasOwnProperty(u)) {\n x = kb.sym(u)\n if (sortBy) {\n key = kb.any(x, sortBy)\n if (!key) {\n // complain(\"No key \"+key+\" sortby \"+sortBy+\" for \"+x)\n key = '8888-12-31'\n } else {\n key = key.value\n }\n } else {\n complain('No sortby ' + sortBy + ' for ' + x)\n key = '9999-12-31'\n }\n // key = (sortBy && kb.any(x, sortBy)) || kb.literal(\"9999-12-31\") // Undated appear future\n // if (!key) complain(\"Sort: '\"+key+\"' No \"+sortBy+\" for \"+x) // Assume just not in this year\n pairs.push([key, x])\n }\n }\n pairs.sort()\n pairs.reverse() // @@ Descending order .. made a toggle?\n for (let i = 0; i < pairs.length; i++) {\n subjects.push(pairs[i][1])\n }\n return subjects\n }\n\n // Set up a triage of many class members against documents or just one\n if (\n subject.uri === 'http://www.w3.org/ns/pim/trip#Trip' ||\n QU('Transaction') in kb.findSuperClassesNT(subject)\n // subject.uri == 'http://www.w3.org/2000/10/swap/pim/qif#Transaction'\n ) {\n multi = true\n subjects = getMembersAndSort(subject)\n } else {\n currentSubject = subject\n currentMode = 1 // Show attached only.\n subjects = [subject]\n multi = false\n }\n\n // var store = findStore(kb, subject)\n // if (!store) complain(\"There is no annotation store for: \"+subject.uri)\n\n // var objects = kb.each(undefined, ns.rdf('type'), range)\n const objects = getMembersAndSort(range)\n if (!objects) complain('objects:' + objects.length)\n\n const deselectObject = function () {\n currentObject = null\n preview.innerHTML = ''\n }\n\n const showFiltered = function (mode) {\n const filtered = mode === 0 ? objects : getFiltered()\n // eslint-enable\n UI.widgets.selectorPanelRefresh(\n objectList,\n dom,\n kb,\n objectType,\n predicate,\n true,\n filtered,\n options,\n showObject,\n linkClicked\n )\n if (filtered.length === 1) {\n currentObject = filtered[0]\n showObject(currentObject, null, true) // @@ (Sure?) if only one select it.\n } else {\n deselectObject()\n }\n\n function getFiltered () {\n return mode === 1\n ? currentSubject === null\n ? objects.filter(y => !!kb.holds(undefined, predicate, y))\n : objects.filter(y => !!kb.holds(currentSubject, predicate, y))\n : objects.filter(y => kb.each(undefined, predicate, y).length === 0)\n }\n }\n\n const setAttachment = function (x, y, value, refresh) {\n if (kb.holds(x, predicate, y) === value) return\n const verb = value ? 'attach' : 'detach'\n // complain(\"Info: starting to \"+verb+\" \" + y.uri + \" to \"+x.uri+ \":\\n\")\n const linkDone3 = function (uri, ok, body) {\n if (ok) {\n // complain(\"Success \"+verb+\" \"+y.uri+\" to \"+x.uri+ \":\\n\"+ body)\n refresh()\n } else {\n complain(\n 'Error: Unable to ' +\n verb +\n ' ' +\n y.uri +\n ' to ' +\n x.uri +\n ':\\n' +\n body\n )\n }\n }\n\n const store = findStore(kb, x)\n if (!store) {\n complain('There is no annotation store for: ' + x.uri)\n } else {\n const sts = [$rdf.st(x, predicate, y, store)]\n if (value) {\n kb.updater.update([], sts, linkDone3)\n } else {\n kb.updater.update(sts, [], linkDone3)\n }\n }\n }\n\n const linkClicked = function (x, event, inverse, refresh) {\n let s, o\n if (inverse) {\n // Objectlist\n if (!currentSubject) {\n complain('No subject for the link has been selected')\n return\n } else {\n s = currentSubject\n o = x\n }\n } else {\n // Subjectlist\n if (!currentObject) {\n complain('No object for the link has been selected')\n return\n } else {\n s = x\n o = currentObject\n }\n }\n setAttachment(s, o, !kb.holds(s, predicate, o), refresh) // @@ toggle\n }\n\n // When you click on a subject, filter the objects connected to the subject in Mode 1\n const showSubject = function (x, event, selected) {\n if (selected) {\n currentSubject = x\n } else {\n currentSubject = null\n if (currentMode === 1) deselectObject()\n } // If all are displayed, refresh would just annoy:\n if (currentMode !== 0) showFiltered(currentMode) // Refresh the objects\n }\n\n if (multi) {\n const subjectList = UI.widgets.selectorPanel(\n dom,\n kb,\n subject,\n predicate,\n false,\n subjects,\n options,\n showSubject,\n linkClicked\n )\n subjectList.setAttribute(\n 'style',\n 'background-color: white; width: 25em; height: 100%; padding: 0 em; overflow:scroll; float:left'\n )\n div.appendChild(subjectList)\n }\n\n const showObject = function (x, event, selected) {\n if (!selected) {\n deselectObject()\n preview.innerHTML = '' // Clean out what is there\n // complain(\"Show object \"+x.uri)\n return\n }\n currentObject = x\n try {\n /*\n var dispalyable = function (kb, x) {\n var cts = kb.fetcher.getHeader(x, 'content-type')\n if (cts) {\n var displayables = ['text/html', 'image/png', 'application/pdf']\n for (var j = 0; j < cts.length; j++) {\n for (var 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 preview.innerHTML = 'Loading ....'\n if (x.uri) {\n kb.fetcher\n .load(x.uri)\n .then(() => {\n const outliner = context.getOutliner(dom)\n const display = outliner.propertyTable(x) // ,table, pane\n preview.innerHTML = ''\n preview.appendChild(display)\n })\n .catch(err => {\n preview.textContent = 'Error loading ' + x.uri + ': ' + err\n })\n }\n /*\n if (dispalyable(kb, x) || x.uri.slice(-4) == \".pdf\" || x.uri.slice(-4) == \".png\" || x.uri.slice(-5) == \".html\" ||\n x.uri.slice(-5) == \".jpeg\") { // @@@@@@ MAJOR KLUDGE! use metadata after HEAD\n preview.innerHTML = '<iframe height=\"100%\" width=\"100%\"src=\"'\n + x.uri + '\">' + x.uri + '</iframe>'\n } else {\n }\n */\n } catch (e) {\n preview.innerHTML =\n '<span style=\"background-color: pink;\">' + 'Error:' + e + '</span>' // @@ enc\n }\n }\n\n div.setAttribute(\n 'style',\n 'background-color: white; width:40cm; height:20cm;'\n )\n\n const headerButtons = function (dom, labels, intial, callback) {\n const head = dom.createElement('table')\n let current = intial\n head.setAttribute(\n 'style',\n 'float: left; width: 30em; padding: 0.5em; height: 1.5em; background-color: #ddd; color: #444; font-weight: bold'\n )\n const tr = dom.createElement('tr')\n const style0 = 'border-radius: 0.6em; text-align: center;'\n const style1 = style0 + 'background-color: #ccc; color: black;'\n head.appendChild(tr)\n const setStyles = function () {\n for (i = 0; i < labels.length; i++) {\n buttons[i].setAttribute('style', i === current ? style1 : style0)\n }\n }\n let i, b\n const buttons = []\n for (i = 0; i < labels.length; i++) {\n b = buttons[i] = dom.createElement('td')\n b.textContent = labels[i]\n tr.appendChild(buttons[i])\n const listen = function (b, i) {\n b.addEventListener('click', function (_e) {\n current = i\n setStyles()\n callback(i)\n })\n }\n listen(b, i)\n }\n setStyles()\n return head\n }\n\n const setMode = function (mode) {\n if (mode !== currentMode) {\n currentMode = mode\n deselectObject()\n showFiltered(mode)\n }\n }\n\n const wrapper = dom.createElement('div')\n wrapper.setAttribute(\n 'style',\n ' width: 30em; height: 100%; padding: 0em; float:left;'\n )\n // wrapper.appendChild(head)\n div.appendChild(wrapper)\n wrapper.appendChild(\n headerButtons(\n dom,\n ['all', 'attached', 'not attached'],\n currentMode,\n setMode\n )\n )\n\n const objectList = UI.widgets.selectorPanel(\n dom,\n kb,\n objectType,\n predicate,\n true,\n objects,\n options,\n showObject,\n linkClicked\n )\n objectList.setAttribute(\n 'style',\n 'background-color: #ffe; width: 30em; height: 100%; padding: 0em; overflow:scroll;'\n ) // float:left\n wrapper.appendChild(objectList)\n\n // objectList.insertBefore(head, objectList.firstChild)\n\n const preview = dom.createElement('div')\n preview.setAttribute(\n 'style',\n /* background-color: black; */ 'padding: 0em; margin: 0; height: 100%; overflow:scroll;'\n )\n div.appendChild(preview)\n showFiltered(currentMode)\n\n if (subjects.length > 0 && multi) {\n const stores = {}\n for (let k = 0; k < subjects.length; k++) {\n const store = findStore(kb, subjects[k])\n if (store) stores[store.uri] = subjects[k]\n // if (!store) complain(\"No store for \"+subjects[k].uri)\n }\n for (const storeURI in stores) {\n // var store = findStore(kb,subjects[subjectList.length-1])\n const store = kb.sym(storeURI)\n const mintBox = dom.createElement('div')\n mintBox.setAttribute(\n 'style',\n 'clear: left; width: 20em; margin-top:2em; background-color:#ccc; border-radius: 1em; padding: 1em; font-weight: bold;'\n )\n mintBox.textContent = '+ New ' + UI.utils.label(subject)\n\n mintBox.textContent += ' in ' + UI.utils.label(store)\n const storeLab = dom.createElement('span')\n storeLab.setAttribute(\n 'style',\n 'font-weight: normal; font-size: 80%; color: #777;'\n )\n storeLab.textContent = storeURI\n mintBox.appendChild(dom.createElement('br'))\n mintBox.appendChild(storeLab)\n /*\n var mintButton = dom.createElement('img')\n mintBox.appendChild(mintButton)\n mintButton.setAttribute('src', ...); @@ Invokes master handler\n */\n mintBox.addEventListener(\n 'click',\n function (_event) {\n const thisForm = UI.widgets.promptForNew(\n dom,\n kb,\n subject,\n predicate,\n subject,\n null,\n store,\n function (ok, _body) {\n if (!ok) {\n // callback(ok, body); // @@ if ok, need some form of refresh of the select for the new thing\n } else {\n // Refresh @@\n }\n }\n )\n try {\n div.insertBefore(thisForm, mintBox.nextSibling) // Sigh no insertAfter\n } catch (e) {\n div.appendChild(thisForm)\n }\n // var newObject = thisForm.AJAR_subject\n },\n false\n )\n div.appendChild(mintBox)\n }\n }\n\n // if (!me) complain(\"(You do not have your Web Id set. Set your Web ID to make changes.)\")\n\n return div\n }\n} // pane object\n\n// ends\n"],"mappings":"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"}
@@ -4,9 +4,7 @@
4
4
  **
5
5
  */
6
6
  var UI = require('solid-ui');
7
-
8
7
  var $rdf = require('rdflib');
9
-
10
8
  var ns = UI.ns;
11
9
  module.exports = {
12
10
  icon: UI.icons.iconBase + 'noun_534313.svg',
@@ -16,11 +14,9 @@ module.exports = {
16
14
  var kb = context.session.store;
17
15
  var typeURIs = kb.findTypeURIs(subject);
18
16
  var prefix = $rdf.Util.mediaTypeClass('audio/*').uri.split('*')[0];
19
-
20
17
  for (var t in typeURIs) {
21
18
  if (t.startsWith(prefix)) return 'Play audio';
22
19
  }
23
-
24
20
  return null;
25
21
  },
26
22
  render: function render(subject, context) {
@@ -32,46 +28,39 @@ module.exports = {
32
28
  chainAlbums: true,
33
29
  loop: false
34
30
  };
35
-
36
31
  var removeExtension = function removeExtension(str) {
37
32
  var dot = str.lastIndexOf('.');
38
33
  if (dot < 0) return str; // if any
39
-
40
34
  var slash = str.lastIndexOf('/');
41
35
  if (dot < slash) return str;
42
36
  return str.slice(0, dot);
43
- }; // True if there is another file like song.mp3 when this is "song 1.mp3"
37
+ };
38
+
39
+ // True if there is another file like song.mp3 when this is "song 1.mp3"
44
40
  // or this is song.m4a
45
41
  //
46
-
47
-
48
42
  var looksRedundant = function looksRedundant(x) {
49
43
  var folder = kb.any(undefined, ns.ldp('contains'), x);
50
44
  if (!folder) return false;
51
45
  var contents = kb.each(folder, ns.ldp('contains'));
52
46
  if (contents.length < 2) return false;
53
47
  var thisName = x.uri;
54
-
55
48
  for (var k = 0; k < contents.length; k++) {
56
49
  var otherName = contents[k].uri;
57
-
58
50
  if (thisName.length > otherName.length && thisName.startsWith(removeExtension(otherName))) {
59
51
  return true;
60
52
  }
61
-
62
53
  if (thisName.endsWith('.m4a') && otherName.endsWith('.mp3') && removeExtension(thisName) === removeExtension(otherName)) {
63
54
  return true;
64
55
  }
65
56
  }
66
-
67
57
  return false;
68
- }; // Alternative methods could include:
69
- // Accesing metadata in the audio contol, or paring the audio file
70
-
58
+ };
71
59
 
60
+ // Alternative methods could include:
61
+ // Accesing metadata in the audio contol, or paring the audio file
72
62
  var guessNames = function guessNames(x) {
73
63
  var a = x.uri.split('/').slice(-3); // Hope artist, album, track
74
-
75
64
  var decode = function decode(str) {
76
65
  try {
77
66
  return decodeURIComponent(str);
@@ -79,41 +68,34 @@ module.exports = {
79
68
  return str;
80
69
  }
81
70
  };
82
-
83
71
  artistRow.textContent = decode(a[0]);
84
72
  albumRow.textContent = decode(a[1]);
85
73
  trackRow.textContent = decode(removeExtension(a[2]));
86
74
  };
87
-
88
75
  var moveOn = function moveOn(current, level) {
89
76
  return new Promise(function (resolve) {
90
77
  level = level || 0;
91
- if (!options.chain) return resolve(null); // Ideally navigate graph else cheat with URI munging:
92
-
78
+ if (!options.chain) return resolve(null);
79
+ // Ideally navigate graph else cheat with URI munging:
93
80
  var folder = kb.any(undefined, ns.ldp('contains'), current) || current.dir();
94
81
  if (!folder) return resolve(null);
95
82
  kb.fetcher.load(folder).then(function (_xhr) {
96
83
  var contents = kb.each(folder, ns.ldp('contains')); // @@ load if not loaded
97
84
  // if (contents.length < 2) return resolve(null) NO might move on from 1-track album
98
-
99
85
  var j;
100
86
  contents.sort(); // sort by URI which hopefully will get tracks in order
101
-
102
87
  for (var i = 0; i < contents.length; i++) {
103
88
  if (current.uri === contents[i].uri) {
104
89
  j = (i + 1) % contents.length;
105
-
106
90
  if (j === 0) {
107
91
  if (!options.chainAlbums) {
108
92
  if (options.loop) {
109
93
  return resolve(contents[j]);
110
94
  }
111
-
112
95
  return resolve(null); // No more music needed
113
96
  } else {
114
97
  // chain albums
115
98
  if (level === 1 || !options.chainAlbums) return resolve(null); // limit of navigating treee
116
-
117
99
  moveOn(folder, level + 1).then(function (folder2) {
118
100
  if (folder2) {
119
101
  kb.fetcher.load(folder2).then(function (_xhr) {
@@ -131,7 +113,6 @@ module.exports = {
131
113
  }
132
114
  }
133
115
  } // for
134
-
135
116
  });
136
117
  });
137
118
  };
@@ -139,7 +120,6 @@ module.exports = {
139
120
  var endedListener = function endedListener(event) {
140
121
  var current = kb.sym(event.target.getAttribute('src'));
141
122
  if (!options.chain) return;
142
-
143
123
  var tryNext = function tryNext(cur) {
144
124
  var current = cur;
145
125
  moveOn(current).then(function (next) {
@@ -147,12 +127,10 @@ module.exports = {
147
127
  console.log('No successor to ' + current);
148
128
  return;
149
129
  }
150
-
151
130
  if (!looksRedundant(next)) {
152
131
  console.log('Moving on to ' + next);
153
132
  guessNames(next);
154
133
  controlRow.appendChild(audioControl(next, true)); // Force autoplay
155
-
156
134
  controlRow.removeChild(event.target);
157
135
  } else {
158
136
  console.log('Ignoring redundant ' + next);
@@ -160,15 +138,12 @@ module.exports = {
160
138
  }
161
139
  });
162
140
  };
163
-
164
141
  tryNext(current);
165
142
  };
166
-
167
143
  var audioControl = function audioControl(song, autoplay) {
168
144
  var audio = dom.createElement('audio');
169
145
  audio.setAttribute('controls', 'yes');
170
146
  audio.setAttribute('src', song.uri);
171
-
172
147
  if (autoplay) {
173
148
  audio.setAttribute('autoplay', 'autoplay'); // Make this a personal preference
174
149
  }
@@ -176,7 +151,6 @@ module.exports = {
176
151
  audio.addEventListener('ended', endedListener, false);
177
152
  return audio;
178
153
  };
179
-
180
154
  var div = dom.createElement('div');
181
155
  var table = div.appendChild(dom.createElement('table'));
182
156
  var labelStyle = 'padding: 0.3em; color:white; background-color: black;';
@@ -189,12 +163,13 @@ module.exports = {
189
163
  var controlRow = table.appendChild(dom.createElement('tr'));
190
164
  guessNames(subject);
191
165
  controlRow.appendChild(audioControl(subject, options.autoplay));
192
-
193
166
  if (!kb.holds(undefined, ns.ldp('contains'), subject) && subject.dir()) {
194
167
  kb.fetcher.load(subject.dir()); // Prefetch enclosing @@ or playlist
195
168
  }
196
169
 
197
170
  return div;
198
171
  }
199
- }; // ends
172
+ };
173
+
174
+ // ends
200
175
  //# sourceMappingURL=audioPane.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"audioPane.js","names":["UI","require","$rdf","ns","module","exports","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"],"sources":["../../src/audio/audioPane.js"],"sourcesContent":["/* Single audio play Pane\n **\n */\nconst UI = require('solid-ui')\nconst $rdf = require('rdflib')\nconst ns = UI.ns\n\nmodule.exports = {\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":"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"}
1
+ {"version":3,"file":"audioPane.js","names":["UI","require","$rdf","ns","module","exports","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"],"sources":["../../src/audio/audioPane.js"],"sourcesContent":["/* Single audio play Pane\n **\n */\nconst UI = require('solid-ui')\nconst $rdf = require('rdflib')\nconst ns = UI.ns\n\nmodule.exports = {\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":"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"}
@@ -4,48 +4,45 @@
4
4
  **
5
5
  ** This outline pane lists the members of a class
6
6
  */
7
- var UI = require('solid-ui');
8
7
 
8
+ var UI = require('solid-ui');
9
9
  var $rdf = require('rdflib');
10
-
11
10
  var ns = UI.ns;
12
11
  module.exports = {
13
12
  icon: UI.icons.originalIconBase + 'tango/22-folder-open.png',
14
13
  name: 'classInstance',
15
14
  // Create a new folder in a Solid system,
15
+
16
16
  audience: [ns.solid('PowerUser')],
17
17
  label: function label(subject, context) {
18
18
  var kb = context.session.store;
19
19
  var n = kb.each(undefined, ns.rdf('type'), subject).length;
20
20
  if (n > 0) return 'List (' + n + ')'; // Show how many in hover text
21
-
22
21
  return null; // Suppress pane otherwise
23
22
  },
23
+
24
24
  render: function render(subject, context) {
25
25
  var dom = context.dom;
26
26
  var outliner = context.getOutliner(dom);
27
27
  var kb = context.session.store;
28
-
29
28
  var complain = function complain(message, color) {
30
29
  var pre = dom.createElement('pre');
31
30
  pre.setAttribute('style', 'background-color: ' + color || '#eed' + ';');
32
31
  div.appendChild(pre);
33
32
  pre.appendChild(dom.createTextNode(message));
34
33
  };
35
-
36
34
  var div = dom.createElement('div');
37
35
  div.setAttribute('class', 'instancePane');
38
- div.setAttribute('style', ' border-top: solid 1px #777; border-bottom: solid 1px #777; margin-top: 0.5em; margin-bottom: 0.5em '); // If this is a class, look for all both explicit and implicit
36
+ div.setAttribute('style', ' border-top: solid 1px #777; border-bottom: solid 1px #777; margin-top: 0.5em; margin-bottom: 0.5em ');
39
37
 
38
+ // If this is a class, look for all both explicit and implicit
40
39
  var sts = kb.statementsMatching(undefined, ns.rdf('type'), subject);
41
-
42
40
  if (sts.length > 0) {
43
41
  var already = {};
44
42
  var more = [];
45
43
  sts.forEach(function (st) {
46
44
  already[st.subject.toNT()] = st;
47
45
  });
48
-
49
46
  for (var nt in kb.findMembersNT(subject)) {
50
47
  if (!already[nt]) {
51
48
  more.push($rdf.st(kb.fromNT(nt), ns.rdf('type'), subject)); // @@ no provenance
@@ -55,35 +52,29 @@ module.exports = {
55
52
  if (more.length) {
56
53
  complain('There are ' + sts.length + ' explicit and ' + more.length + ' implicit members of ' + UI.utils.label(subject));
57
54
  }
58
-
59
- if (subject.sameTerm(ns.rdf('Property'))) {// / Do not find all properties used as properties .. unless look at kb index
55
+ if (subject.sameTerm(ns.rdf('Property'))) {
56
+ // / Do not find all properties used as properties .. unless look at kb index
60
57
  } else if (subject.sameTerm(ns.rdfs('Class'))) {
61
58
  var uses = kb.statementsMatching(undefined, ns.rdf('type'), undefined);
62
59
  var usedTypes = {};
63
60
  uses.forEach(function (st) {
64
61
  usedTypes[st.object] = st;
65
62
  }); // Get unique
66
-
67
63
  var used = [];
68
-
69
64
  for (var i in usedTypes) {
70
65
  used.push($rdf.st($rdf.sym(i), ns.rdf('type'), ns.rdfs('Class')));
71
66
  }
72
-
73
67
  complain('Total of ' + uses.length + ' type statements and ' + used.length + ' unique types.');
74
68
  }
75
-
76
69
  if (sts.length > 10) {
77
70
  var tr = dom.createElement('TR');
78
- tr.appendChild(dom.createTextNode('' + sts.length)); // tr.AJAR_statement=sts[i]
79
-
71
+ tr.appendChild(dom.createTextNode('' + sts.length));
72
+ // tr.AJAR_statement=sts[i]
80
73
  div.appendChild(tr);
81
74
  }
82
-
83
75
  outliner.appendPropertyTRs(div, sts, true, function (_pred) {
84
76
  return true;
85
77
  });
86
-
87
78
  if (more.length) {
88
79
  complain('Implicit:');
89
80
  outliner.appendPropertyTRs(div, more, true, function (_pred) {
@@ -91,8 +82,8 @@ module.exports = {
91
82
  });
92
83
  }
93
84
  }
94
-
95
85
  return div;
96
86
  }
97
- }; // ends
87
+ };
88
+ // ends
98
89
  //# sourceMappingURL=classInstancePane.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"classInstancePane.js","names":["UI","require","$rdf","ns","module","exports","icon","icons","originalIconBase","name","audience","solid","label","subject","context","kb","session","store","n","each","undefined","rdf","length","render","dom","outliner","getOutliner","complain","message","color","pre","createElement","setAttribute","div","appendChild","createTextNode","sts","statementsMatching","already","more","forEach","st","toNT","nt","findMembersNT","push","fromNT","utils","sameTerm","rdfs","uses","usedTypes","object","used","i","sym","tr","appendPropertyTRs","_pred"],"sources":["../src/classInstancePane.js"],"sourcesContent":["/* Class member Pane\n **\n ** This outline pane lists the members of a class\n */\n\nconst UI = require('solid-ui')\nconst $rdf = require('rdflib')\n\nconst ns = UI.ns\n\nmodule.exports = {\n icon: UI.icons.originalIconBase + 'tango/22-folder-open.png',\n\n name: 'classInstance',\n\n // Create a new folder in a Solid system,\n\n audience: [ns.solid('PowerUser')],\n\n label: function (subject, context) {\n const kb = context.session.store\n const n = kb.each(undefined, ns.rdf('type'), subject).length\n if (n > 0) return 'List (' + n + ')' // Show how many in hover text\n return null // Suppress pane otherwise\n },\n\n render: function (subject, context) {\n const dom = context.dom\n const outliner = context.getOutliner(dom)\n const kb = context.session.store\n const complain = function complain (message, color) {\n const pre = dom.createElement('pre')\n pre.setAttribute('style', 'background-color: ' + color || '#eed' + ';')\n div.appendChild(pre)\n pre.appendChild(dom.createTextNode(message))\n }\n const div = dom.createElement('div')\n div.setAttribute('class', 'instancePane')\n div.setAttribute(\n 'style',\n ' border-top: solid 1px #777; border-bottom: solid 1px #777; margin-top: 0.5em; margin-bottom: 0.5em '\n )\n\n // If this is a class, look for all both explicit and implicit\n const sts = kb.statementsMatching(undefined, ns.rdf('type'), subject)\n if (sts.length > 0) {\n const already = {}\n const more = []\n sts.forEach(st => {\n already[st.subject.toNT()] = st\n })\n for (const nt in kb.findMembersNT(subject)) {\n if (!already[nt]) {\n more.push($rdf.st(kb.fromNT(nt), ns.rdf('type'), subject)) // @@ no provenance\n }\n }\n if (more.length) {\n complain(\n 'There are ' +\n sts.length +\n ' explicit and ' +\n more.length +\n ' implicit members of ' +\n UI.utils.label(subject)\n )\n }\n if (subject.sameTerm(ns.rdf('Property'))) {\n // / Do not find all properties used as properties .. unless look at kb index\n } else if (subject.sameTerm(ns.rdfs('Class'))) {\n const uses = kb.statementsMatching(undefined, ns.rdf('type'), undefined)\n const usedTypes = {}\n uses.forEach(function (st) {\n usedTypes[st.object] = st\n }) // Get unique\n const used = []\n for (const i in usedTypes) {\n used.push($rdf.st($rdf.sym(i), ns.rdf('type'), ns.rdfs('Class')))\n }\n complain(\n 'Total of ' +\n uses.length +\n ' type statements and ' +\n used.length +\n ' unique types.'\n )\n }\n\n if (sts.length > 10) {\n const tr = dom.createElement('TR')\n tr.appendChild(dom.createTextNode('' + sts.length))\n // tr.AJAR_statement=sts[i]\n div.appendChild(tr)\n }\n\n outliner.appendPropertyTRs(div, sts, true, function (_pred) {\n return true\n })\n\n if (more.length) {\n complain('Implicit:')\n outliner.appendPropertyTRs(div, more, true, function (_pred) {\n return true\n })\n }\n }\n\n return div\n }\n}\n// ends\n"],"mappings":"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"}
1
+ {"version":3,"file":"classInstancePane.js","names":["UI","require","$rdf","ns","module","exports","icon","icons","originalIconBase","name","audience","solid","label","subject","context","kb","session","store","n","each","undefined","rdf","length","render","dom","outliner","getOutliner","complain","message","color","pre","createElement","setAttribute","div","appendChild","createTextNode","sts","statementsMatching","already","more","forEach","st","toNT","nt","findMembersNT","push","fromNT","utils","sameTerm","rdfs","uses","usedTypes","object","used","i","sym","tr","appendPropertyTRs","_pred"],"sources":["../src/classInstancePane.js"],"sourcesContent":["/* Class member Pane\n **\n ** This outline pane lists the members of a class\n */\n\nconst UI = require('solid-ui')\nconst $rdf = require('rdflib')\n\nconst ns = UI.ns\n\nmodule.exports = {\n icon: UI.icons.originalIconBase + 'tango/22-folder-open.png',\n\n name: 'classInstance',\n\n // Create a new folder in a Solid system,\n\n audience: [ns.solid('PowerUser')],\n\n label: function (subject, context) {\n const kb = context.session.store\n const n = kb.each(undefined, ns.rdf('type'), subject).length\n if (n > 0) return 'List (' + n + ')' // Show how many in hover text\n return null // Suppress pane otherwise\n },\n\n render: function (subject, context) {\n const dom = context.dom\n const outliner = context.getOutliner(dom)\n const kb = context.session.store\n const complain = function complain (message, color) {\n const pre = dom.createElement('pre')\n pre.setAttribute('style', 'background-color: ' + color || '#eed' + ';')\n div.appendChild(pre)\n pre.appendChild(dom.createTextNode(message))\n }\n const div = dom.createElement('div')\n div.setAttribute('class', 'instancePane')\n div.setAttribute(\n 'style',\n ' border-top: solid 1px #777; border-bottom: solid 1px #777; margin-top: 0.5em; margin-bottom: 0.5em '\n )\n\n // If this is a class, look for all both explicit and implicit\n const sts = kb.statementsMatching(undefined, ns.rdf('type'), subject)\n if (sts.length > 0) {\n const already = {}\n const more = []\n sts.forEach(st => {\n already[st.subject.toNT()] = st\n })\n for (const nt in kb.findMembersNT(subject)) {\n if (!already[nt]) {\n more.push($rdf.st(kb.fromNT(nt), ns.rdf('type'), subject)) // @@ no provenance\n }\n }\n if (more.length) {\n complain(\n 'There are ' +\n sts.length +\n ' explicit and ' +\n more.length +\n ' implicit members of ' +\n UI.utils.label(subject)\n )\n }\n if (subject.sameTerm(ns.rdf('Property'))) {\n // / Do not find all properties used as properties .. unless look at kb index\n } else if (subject.sameTerm(ns.rdfs('Class'))) {\n const uses = kb.statementsMatching(undefined, ns.rdf('type'), undefined)\n const usedTypes = {}\n uses.forEach(function (st) {\n usedTypes[st.object] = st\n }) // Get unique\n const used = []\n for (const i in usedTypes) {\n used.push($rdf.st($rdf.sym(i), ns.rdf('type'), ns.rdfs('Class')))\n }\n complain(\n 'Total of ' +\n uses.length +\n ' type statements and ' +\n used.length +\n ' unique types.'\n )\n }\n\n if (sts.length > 10) {\n const tr = dom.createElement('TR')\n tr.appendChild(dom.createTextNode('' + sts.length))\n // tr.AJAR_statement=sts[i]\n div.appendChild(tr)\n }\n\n outliner.appendPropertyTRs(div, sts, true, function (_pred) {\n return true\n })\n\n if (more.length) {\n complain('Implicit:')\n outliner.appendPropertyTRs(div, more, true, function (_pred) {\n return true\n })\n }\n }\n\n return div\n }\n}\n// ends\n"],"mappings":"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"}