solid-ui 2.4.12-f15f92bb → 2.4.13
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/lib/pad.js +4 -2
- package/lib/pad.js.map +1 -1
- package/lib/participation.js +3 -1
- package/lib/participation.js.map +1 -1
- package/lib/tabs.js +5 -3
- package/lib/tabs.js.map +1 -1
- package/lib/versionInfo.js +6 -6
- package/lib/versionInfo.js.map +1 -1
- package/lib/webpack-bundle.js +48054 -62073
- package/lib/webpack-bundle.js.map +1 -1
- package/package.json +34 -34
package/lib/pad.js
CHANGED
|
@@ -37,6 +37,8 @@ Object.defineProperty(exports, "renderPartipants", {
|
|
|
37
37
|
});
|
|
38
38
|
exports.xmlEncode = xmlEncode;
|
|
39
39
|
|
|
40
|
+
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
|
|
41
|
+
|
|
40
42
|
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
|
|
41
43
|
|
|
42
44
|
var _assertThisInitialized2 = _interopRequireDefault(require("@babel/runtime/helpers/assertThisInitialized"));
|
|
@@ -98,7 +100,7 @@ var NotepadElement = /*#__PURE__*/function (_HTMLElement) {
|
|
|
98
100
|
return _this;
|
|
99
101
|
}
|
|
100
102
|
|
|
101
|
-
return NotepadElement;
|
|
103
|
+
return (0, _createClass2["default"])(NotepadElement);
|
|
102
104
|
}( /*#__PURE__*/(0, _wrapNativeSuper2["default"])(HTMLElement));
|
|
103
105
|
/**
|
|
104
106
|
* @ignore
|
|
@@ -127,7 +129,7 @@ var NotepadPart = /*#__PURE__*/function (_HTMLElement2) {
|
|
|
127
129
|
return _this2;
|
|
128
130
|
}
|
|
129
131
|
|
|
130
|
-
return NotepadPart;
|
|
132
|
+
return (0, _createClass2["default"])(NotepadPart);
|
|
131
133
|
}( /*#__PURE__*/(0, _wrapNativeSuper2["default"])(HTMLElement));
|
|
132
134
|
/** Figure out a random color from my webid
|
|
133
135
|
*
|
package/lib/pad.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/pad.ts"],"names":["store","solidLogicSingleton","PAD","NotepadElement","HTMLElement","NotepadPart","lightColorHash","author","hash","x","split","reduce","a","b","charCodeAt","uri","toString","notepad","dom","padDoc","subject","me","options","exists","table","createElement","kb","Error","updater","setAttribute","upstreamStatus","downstreamStatus","statusArea","t","appendChild","tr","complain","message","upstream","clearStatus","_upsteam","innerHTML","setPartStyle","part","colors","pending","chunk","baseStyle","headingCore","headingStyle","any","ns","dc","bgcolor","indent","value","style","removePart","prev","undefined","next","sameTerm","del","statementsMatching","concat","ins","NamedNode","label","slice","update","ok","errorMessage","response","row","parentNode","before","previousSibling","removeChild","firstChild","focus","status","state","setTimeout","reloadAndSync","res","changeIndent","delta","current","length","Number","object","newIndent","errorBody","requestDownstreamAction","addListeners","addEventListener","event","queueProperty","queue","keyCode","shiftKey","newChunk","preventDefault","nextSibling","updateStore","old","sioc","newOne","lastSent","xhr","inputChangeListener","_event","newPartAfter","tr1","text","insertBefore","ele","here","tagName","toLowerCase","push","_xhr","newPart","newLinesBefore","consistencyCheck","found","failed","complain2","msg","the","k","each","sts","forEach","st","sync","textContent","manif","i","children","refreshTree","root","refresh","reloading","checkAndSync","retryTimeout","tryReload","reload","holds","insertables","rdf","Date","getChunks","chunks","xmlEncode","str","replace","notepadToHTML","pad","html","title","anyValue","dct","level","increaseLevel","decreaseLevel","anyJS","rawContent","content","h"],"mappings":"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","sourcesContent":["/** **************\n * Notepad Widget\n */\n\n/** @module pad\n */\nimport * as ns from './ns'\nimport { Namespace, NamedNode, st, IndexedFormula } from 'rdflib'\nimport { newThing, errorMessageBlock } from './widgets'\nimport { beep } from './utils'\nimport { log } from './debug'\nimport { solidLogicSingleton } from './logic'\nexport { renderPartipants, participationObject, manageParticipation, recordParticipation } from './participation'\n\nconst store = solidLogicSingleton.store\n\nconst PAD = Namespace('http://www.w3.org/ns/pim/pad#')\n\ntype notepadOptions = {\n statusArea?: HTMLDivElement\n exists?: boolean\n}\n/**\n * @ignore\n */\nclass NotepadElement extends HTMLElement {\n subject?: NamedNode\n}\n/**\n * @ignore\n */\nclass NotepadPart extends HTMLElement {\n subject?: NamedNode | string\n value?: string\n state?: Number\n lastSent?: String\n}\n/** Figure out a random color from my webid\n *\n * @param {NamedNode} author - The author of text being displayed\n * @returns {String} The CSS color generated, constrained to be light for a background color\n */\nexport function lightColorHash (author?: NamedNode): string {\n const hash = function (x) {\n return x.split('').reduce(function (a, b) {\n a = (a << 5) - a + b.charCodeAt(0)\n return a & a\n }, 0)\n }\n return author && author.uri\n ? '#' + ((hash(author.uri) & 0xffffff) | 0xc0c0c0).toString(16)\n : '#ffffff' // c0c0c0 forces pale\n} // no id -> white\n\n/** notepad\n *\n * @param {HTMLDocument} dom - the web page of the browser\n * @param {NamedNode} padDoc - the document into which the particpation should be shown\n * @param {NamedNode} subject - the thing in which participation is happening\n * @param {NamedNode} me - person who is logged into the pod\n * @param {notepadOptions} options - the options that can be passed in consist of statusArea, exists\n */\nexport function notepad (dom: HTMLDocument, padDoc: NamedNode, subject: NamedNode, me: NamedNode, options?: notepadOptions) {\n options = options || {}\n const exists = options.exists\n const table: any = dom.createElement('table')\n const kb = store\n\n if (me && !me.uri) throw new Error('UI.pad.notepad: Invalid userid')\n\n const updater = store.updater\n\n const PAD = Namespace('http://www.w3.org/ns/pim/pad#')\n\n table.setAttribute(\n 'style',\n 'padding: 1em; overflow: auto; resize: horizontal; min-width: 40em;'\n )\n\n let upstreamStatus: HTMLElement | null = null\n let downstreamStatus: HTMLElement | null = null\n\n if (options.statusArea) {\n const t = options.statusArea.appendChild(dom.createElement('table'))\n const tr = t.appendChild(dom.createElement('tr'))\n upstreamStatus = tr.appendChild(dom.createElement('td'))\n downstreamStatus = tr.appendChild(dom.createElement('td'))\n\n if (upstreamStatus) {\n upstreamStatus.setAttribute('style', 'width:50%')\n }\n if (downstreamStatus) {\n downstreamStatus.setAttribute('style', 'width:50%')\n }\n }\n /* @@ TODO want to look into this, it seems upstream should be a boolean and default to false ?\n *\n */\n const complain = function (message: string, upstream: boolean = false) {\n log(message)\n if ((options as notepadOptions).statusArea) {\n ; (upstream ? upstreamStatus as HTMLElement : downstreamStatus as HTMLElement).appendChild(errorMessageBlock(dom, message, 'pink'))\n }\n }\n // @@ TODO need to refactor so that we don't have to type cast\n const clearStatus = function (_upsteam?: any) {\n if ((options as notepadOptions).statusArea) {\n ((options as notepadOptions).statusArea as HTMLElement).innerHTML = ''\n }\n }\n\n const setPartStyle = function (part: NotepadPart, colors?: string, pending?: any) {\n const chunk = part.subject\n colors = colors || ''\n const baseStyle =\n 'font-size: 100%; font-family: monospace; width: 100%; border: none; white-space: pre-wrap;'\n const headingCore =\n 'font-family: sans-serif; font-weight: bold; border: none;'\n const headingStyle = [\n 'font-size: 110%; padding-top: 0.5em; padding-bottom: 0.5em; width: 100%;',\n 'font-size: 120%; padding-top: 1em; padding-bottom: 1em; width: 100%;',\n 'font-size: 150%; padding-top: 1em; padding-bottom: 1em; width: 100%;'\n ]\n\n const author = kb.any(chunk as any, ns.dc('author'))\n if (!colors && author) {\n // Hash the user webid for now -- later allow user selection!\n const bgcolor = lightColorHash(author as any)\n colors =\n 'color: ' +\n (pending ? '#888' : 'black') +\n '; background-color: ' +\n bgcolor +\n ';'\n }\n\n // @@ TODO Need to research when this can be an object with the indent stored in value\n // and when the indent is stored as a Number itself, not in an object.\n let indent: any = kb.any(chunk as any, PAD('indent'))\n\n indent = indent ? indent.value : 0\n const style =\n indent >= 0\n ? baseStyle + 'text-indent: ' + indent * 3 + 'em;'\n : headingCore + headingStyle[-1 - indent]\n // ? baseStyle + 'padding-left: ' + (indent * 3) + 'em;'\n part.setAttribute('style', style + colors)\n }\n\n const removePart = function (part: NotepadPart) {\n const chunk = part.subject\n if (!chunk) throw new Error('No chunk for line to be deleted!') // just in case\n const prev: any = kb.any(undefined, PAD('next'), chunk as any)\n const next: any = kb.any(chunk as any, PAD('next'))\n if (prev.sameTerm(subject) && next.sameTerm(subject)) {\n // Last one\n log(\"You can't delete the only line.\")\n return\n }\n\n const del = kb\n .statementsMatching(chunk as any, undefined, undefined, padDoc)\n .concat(kb.statementsMatching(undefined, undefined, chunk as any, padDoc))\n const ins = [st(prev, PAD('next'), next, padDoc)]\n\n // @@ TODO what should we do if chunk is not a NamedNode should we\n // assume then it is a string?\n if (chunk instanceof NamedNode) {\n const label = chunk.uri.slice(-4)\n\n log('Deleting line ' + label)\n }\n if (!updater) {\n throw new Error('have no updater')\n }\n // @@ TODO below you can see that before is redefined and not a boolean\n updater.update(del, ins, function (uri, ok, errorMessage, response) {\n if (ok) {\n const row = part.parentNode\n if (row) {\n const before: any = row.previousSibling\n if (row.parentNode) {\n row.parentNode.removeChild(row)\n }\n // console.log(' deleted line ' + label + ' ok ' + part.value)\n if (before && before.firstChild) {\n // @@ TODO IMPORTANT FOCUS ISN'T A PROPERTY ON A CHILDNODE\n before.firstChild.focus()\n }\n }\n } else if (response && (response as any).status === 409) {\n // Conflict\n setPartStyle(part, 'color: black; background-color: #ffd;') // yellow\n part.state = 0 // Needs downstream refresh\n beep(0.5, 512) // Ooops clash with other person\n setTimeout(function () {\n // Ideally, beep! @@\n reloadAndSync() // Throw away our changes and\n // updater.requestDownstreamAction(padDoc, reloadAndSync)\n }, 1000)\n } else {\n log(' removePart FAILED ' + chunk + ': ' + errorMessage)\n log(\" removePart was deleteing :'\" + del)\n setPartStyle(part, 'color: black; background-color: #fdd;') // failed\n const res = response ? (response as any).status : ' [no response field] '\n complain('Error ' + res + ' saving changes: ' + (errorMessage as any).true) // upstream,\n // updater.requestDownstreamAction(padDoc, reloadAndSync);\n }\n })\n } // removePart\n\n const changeIndent = function (part: NotepadPart, chunk: string, delta) {\n const del = kb.statementsMatching(chunk as any, PAD('indent'))\n const current = del.length ? Number(del[0].object.value) : 0\n if (current + delta < -3) return // limit negative indent\n const newIndent = current + delta\n const ins = st(chunk as any, PAD('indent'), newIndent, padDoc)\n if (!updater) {\n throw new Error('no updater')\n }\n updater.update(del, ins as any, function (uri, ok, errorBody) {\n if (!ok) {\n log(\n \"Indent change FAILED '\" +\n newIndent +\n \"' for \" +\n padDoc +\n ': ' +\n errorBody\n )\n setPartStyle(part, 'color: black; background-color: #fdd;') // failed\n updater.requestDownstreamAction(padDoc, reloadAndSync)\n } else {\n setPartStyle(part) // Implement the indent\n }\n })\n }\n\n // Use this sort of code to split the line when return pressed in the middle @@\n /*\n function doGetCaretPosition doGetCaretPosition (oField) {\n var iCaretPos = 0\n // IE Support\n if (document.selection) {\n // Set focus on the element to avoid IE bug\n oField.focus()\n // To get cursor position, get empty selection range\n var oSel = document.selection.createRange()\n // Move selection start to 0 position\n oSel.moveStart('character', -oField.value.length)\n // The caret position is selection length\n iCaretPos = oSel.text.length\n // Firefox suppor\n } else if (oField.selectionStart || oField.selectionStart === '0') {\n iCaretPos = oField.selectionStart\n }\n // Return results\n return (iCaretPos)\n }\n */\n const addListeners = function (part: any, chunk: any) {\n part.addEventListener('keydown', function (event) {\n if (!updater) {\n throw new Error('no updater')\n }\n\n let queueProperty, queue\n // up 38; down 40; left 37; right 39 tab 9; shift 16; escape 27\n switch (event.keyCode) {\n case 13: // Return\n {\n const before: NotepadElement = event.shiftKey\n log('enter') // Shift-return inserts before -- only way to add to top of pad.\n if (before) {\n queue = kb.any(undefined, PAD('next'), chunk)\n queueProperty = 'newlinesAfter'\n } else {\n queue = kb.any(chunk, PAD('next'))\n queueProperty = 'newlinesBefore'\n }\n queue[queueProperty] = queue[queueProperty] || 0\n queue[queueProperty] += 1\n if (queue[queueProperty] > 1) {\n log(' queueing newline queue = ' + queue[queueProperty])\n return\n }\n log(' go ahead line before ' + queue[queueProperty])\n newChunk(part, before) // was document.activeElement\n break\n }\n case 8: // Delete\n if (part.value.length === 0) {\n log(\n 'Delete key line ' + chunk.uri.slice(-4) + ' state ' + part.state\n )\n\n switch (part.state) {\n case 1: // contents being sent\n case 2: // contents need to be sent again\n part.state = 4 // delete me\n return\n case 3: // being deleted already\n case 4: // already deleme state\n return\n case undefined:\n case 0:\n part.state = 3 // being deleted\n removePart(part)\n event.preventDefault()\n break // continue\n default:\n throw new Error('pad: Unexpected state ' + part)\n }\n }\n break\n case 9: // Tab\n {\n const delta = event.shiftKey ? -1 : 1\n changeIndent(part, chunk, delta)\n event.preventDefault() // default is to highlight next field\n break\n }\n case 27: // ESC\n log('escape')\n updater.requestDownstreamAction(padDoc, reloadAndSync)\n event.preventDefault()\n break\n\n case 38: // Up\n if (part.parentNode.previousSibling) {\n part.parentNode.previousSibling.firstChild.focus()\n event.preventDefault()\n }\n break\n\n case 40: // Down\n if (part.parentNode.nextSibling) {\n part.parentNode.nextSibling.firstChild.focus()\n event.preventDefault()\n }\n break\n\n default:\n }\n })\n\n const updateStore = function (part: NotepadPart) {\n const chunk: any = part.subject\n setPartStyle(part, undefined, true)\n const old = (kb.any(chunk, ns.sioc('content')) as any).value\n const del = [st(chunk, ns.sioc('content'), old, padDoc)]\n let ins\n if (part.value) {\n ins = [st(chunk, ns.sioc('content'), part.value as any, padDoc)]\n }\n const newOne = part.value\n\n // DEBUGGING ONLY\n if (part.lastSent) {\n if (old !== part.lastSent) {\n throw new Error(\n \"Out of order, last sent expected '\" +\n old +\n \"' but found '\" +\n part.lastSent +\n \"'\"\n )\n }\n }\n part.lastSent = newOne\n\n /* console.log(\n ' Patch proposed to ' +\n chunk.uri.slice(-4) +\n \" '\" +\n old +\n \"' -> '\" +\n newOne +\n \"' \"\n ) */\n if (!updater) {\n throw new Error('no updater')\n }\n\n updater.update(del, ins, function (uri, ok, errorBody, xhr) {\n if (!ok) {\n // alert(\"clash \" + errorBody);\n log(\n ' patch FAILED ' +\n (xhr as any).status +\n \" for '\" +\n old +\n \"' -> '\" +\n newOne +\n \"': \" +\n errorBody\n )\n if ((xhr as any).status === 409) {\n // Conflict - @@ we assume someone else\n setPartStyle(part, 'color: black; background-color: #fdd;')\n part.state = 0 // Needs downstream refresh\n beep(0.5, 512) // Ooops clash with other person\n setTimeout(function () {\n updater.requestDownstreamAction(padDoc, reloadAndSync)\n }, 1000)\n } else {\n setPartStyle(part, 'color: black; background-color: #fdd;') // failed pink\n part.state = 0\n complain(\n ' Error ' + (xhr as any).status + ' sending data: ' + errorBody,\n true\n )\n beep(1.0, 128) // Other\n // @@@ Do soemthing more serious with other errors eg auth, etc\n }\n } else {\n clearStatus(true) // upstream\n setPartStyle(part) // synced\n log(\" Patch ok '\" + old + \"' -> '\" + newOne + \"' \")\n\n if (part.state === 4) {\n // delete me\n part.state = 3\n removePart(part)\n } else if (part.state === 3) {\n // being deleted\n // pass\n } else if (part.state === 2) {\n part.state = 1 // pending: lock\n updateStore(part)\n } else {\n part.state = 0 // clear lock\n }\n }\n })\n }\n\n part.addEventListener('input', function inputChangeListener (_event) {\n // debug.log(\"input changed \"+part.value);\n setPartStyle(part, undefined, true) // grey out - not synced\n log(\n 'Input event state ' + part.state + \" value '\" + part.value + \"'\"\n )\n switch (part.state) {\n case 3: // being deleted\n return\n case 4: // needs to be deleted\n return\n case 2: // needs content updating, we know\n return\n case 1:\n part.state = 2 // lag we need another patch\n return\n case 0:\n case undefined:\n part.state = 1 // being upadted\n updateStore(part)\n }\n }) // listener\n } // addlisteners\n\n // @@ TODO Need to research before as it appears to be used as an Element and a boolean\n const newPartAfter = function (tr1: HTMLTableElement, chunk: String, before?: NotepadElement | boolean) {\n // @@ take chunk and add listeners\n let text: any = kb.any(chunk as any, ns.sioc('content'))\n text = text ? text.value : ''\n const tr = dom.createElement('tr')\n if (before) {\n table.insertBefore(tr, tr1)\n } else {\n // after\n if (tr1 && tr1.nextSibling) {\n table.insertBefore(tr, tr1.nextSibling)\n } else {\n table.appendChild(tr)\n }\n }\n const part: any = tr.appendChild(dom.createElement('input'))\n part.subject = chunk\n part.setAttribute('type', 'text')\n part.value = text\n if (me) {\n setPartStyle(part, '')\n addListeners(part, chunk)\n } else {\n setPartStyle(part, 'color: #222; background-color: #fff')\n log(\"Note can't add listeners - not logged in\")\n }\n return part\n }\n\n /* @@ TODO we need to look at indent, it can be a Number or an Object this doesn't seem correct.\n */\n const newChunk = function (ele?: NotepadElement, before?: NotepadElement) {\n // element of chunk being split\n const kb = store\n let indent: any = 0\n let queueProperty: string | null = null\n let here, prev, next, queue, tr1: any\n\n if (ele) {\n if (ele.tagName.toLowerCase() !== 'input') {\n log('return pressed when current document is: ' + ele.tagName)\n }\n here = ele.subject\n indent = kb.any(here, PAD('indent'))\n indent = indent ? Number(indent.value) : 0\n if (before) {\n prev = kb.any(undefined, PAD('next'), here)\n next = here\n queue = prev\n queueProperty = 'newlinesAfter'\n } else {\n prev = here\n next = kb.any(here, PAD('next'))\n queue = next\n queueProperty = 'newlinesBefore'\n }\n tr1 = ele.parentNode\n } else {\n prev = subject\n next = subject\n tr1 = undefined\n }\n\n const chunk = newThing(padDoc)\n const label = chunk.uri.slice(-4)\n\n const del = [st(prev, PAD('next'), next, padDoc)]\n const ins = [\n st(prev, PAD('next'), chunk, padDoc),\n st(chunk, PAD('next'), next, padDoc),\n st(chunk, ns.dc('author'), me, padDoc),\n st(chunk, ns.sioc('content'), '' as any, padDoc)\n ]\n if (indent > 0) {\n // Do not inherit\n ins.push(st(chunk, PAD('indent'), indent, padDoc))\n }\n\n log(' Fresh chunk ' + label + ' proposed')\n if (!updater) {\n throw new Error('no updater')\n }\n updater.update(del, ins, function (uri, ok, errorBody, _xhr) {\n if (!ok) {\n // alert(\"Error writing new line \" + label + \": \" + errorBody);\n log(' ERROR writing new line ' + label + ': ' + errorBody)\n } else {\n const newPart = newPartAfter(tr1, chunk, before)\n setPartStyle(newPart)\n newPart.focus() // Note this is delayed\n if (queueProperty) {\n log(\n ' Fresh chunk ' +\n label +\n ' updated, queue = ' +\n queue[queueProperty]\n )\n queue[queueProperty] -= 1\n if (queue[queueProperty] > 0) {\n log(\n ' Implementing queued newlines = ' + next.newLinesBefore\n )\n newChunk(newPart, before)\n }\n }\n }\n })\n }\n\n const consistencyCheck = function () {\n const found: { [uri: string]: boolean } = {}\n let failed = 0\n function complain2 (msg) {\n complain(msg)\n failed++\n }\n\n if (!kb.the(subject, PAD('next'))) {\n complain2('No initial next pointer')\n return false // can't do linked list\n }\n // var chunk = kb.the(subject, PAD('next'))\n let prev = subject\n let chunk\n for (; ;) {\n chunk = kb.the(prev, PAD('next'))\n if (!chunk) {\n complain2('No next pointer from ' + prev)\n }\n if (chunk.sameTerm(subject)) {\n break\n }\n prev = chunk\n const label = chunk.uri.split('#')[1]\n if (found[chunk.uri]) {\n complain2('Loop!')\n return false\n }\n\n found[chunk.uri] = true\n let k = kb.each(chunk, PAD('next')).length\n if (k !== 1) {\n complain2('Should be 1 not ' + k + ' next pointer for ' + label)\n }\n\n k = kb.each(chunk, PAD('indent')).length\n if (k > 1) {\n complain2('Should be 0 or 1 not ' + k + ' indent for ' + label)\n }\n\n k = kb.each(chunk, ns.sioc('content')).length\n if (k !== 1) {\n complain2('Should be 1 not ' + k + ' contents for ' + label)\n }\n\n k = kb.each(chunk, ns.dc('author')).length\n if (k !== 1) {\n complain2('Should be 1 not ' + k + ' author for ' + label)\n }\n\n const sts = kb.statementsMatching(undefined, ns.sioc('contents'))\n sts.forEach(function (st) {\n if (!found[st.subject.value]) {\n complain2('Loose chunk! ' + st.subject.value)\n }\n })\n }\n return !failed\n }\n\n // Ensure that the display matches the current state of the\n // @@ TODO really need to refactor this so that we don't need to cast types\n const sync = function () {\n // var first = kb.the(subject, PAD('next'))\n if (kb.each(subject, PAD('next')).length !== 1) {\n const msg =\n 'Pad: Inconsistent data - NEXT pointers: ' +\n kb.each(subject, PAD('next')).length\n log(msg)\n if ((options as notepadOptions).statusArea) {\n ((options as notepadOptions).statusArea as HTMLElement).textContent += msg\n }\n return\n }\n // var last = kb.the(undefined, PAD('previous'), subject)\n // var chunk = first // = kb.the(subject, PAD('next'));\n let row\n\n // First see which of the logical chunks have existing physical manifestations\n const manif: any = []\n // Find which lines correspond to existing chunks\n\n for (\n let chunk = kb.the(subject, PAD('next')) as unknown as any;\n !chunk.sameTerm(subject);\n chunk = kb.the(chunk, PAD('next'))\n ) {\n for (let i = 0; i < table.children.length; i++) {\n const tr: any = table.children[i]\n if (tr.firstChild) {\n if (tr.firstChild.subject.sameTerm(chunk)) {\n manif[chunk.uri] = tr.firstChild\n }\n }\n }\n }\n\n // Remove any deleted lines\n for (let i = table.children.length - 1; i >= 0; i--) {\n row = table.children[i]\n if (!manif[row.firstChild.subject.uri]) {\n table.removeChild(row)\n }\n }\n // Insert any new lines and update old ones\n row = table.firstChild // might be null\n for (\n let chunk = kb.the(subject, PAD('next')) as unknown as any;\n !chunk.sameTerm(subject);\n chunk = kb.the(chunk, PAD('next'))\n ) {\n const text = (kb.any(chunk, ns.sioc('content')) as any).value\n // superstitious -- don't mess with unchanged input fields\n // which may be selected by the user\n if (row && manif[chunk.uri]) {\n const part = row.firstChild\n if (text !== part.value) {\n part.value = text\n }\n setPartStyle(part)\n part.state = 0 // Clear the state machine\n delete part.lastSent // DEBUG ONLY\n row = row.nextSibling\n } else {\n newPartAfter(row, chunk, true) // actually before\n }\n }\n }\n\n // Refresh the DOM tree\n\n const refreshTree = function (root) {\n if (root.refresh) {\n root.refresh()\n return\n }\n for (let i = 0; i < root.children.length; i++) {\n refreshTree(root.children[i])\n }\n }\n\n let reloading = false\n\n const checkAndSync = function () {\n log(' reloaded OK')\n clearStatus()\n if (!consistencyCheck()) {\n complain('CONSITENCY CHECK FAILED')\n } else {\n refreshTree(table)\n }\n }\n\n const reloadAndSync = function () {\n if (reloading) {\n log(' Already reloading - stop')\n return // once only needed\n }\n reloading = true\n let retryTimeout = 1000 // ms\n const tryReload = function () {\n log('try reload - timeout = ' + retryTimeout)\n if (!updater) {\n throw new Error('no updater')\n }\n updater.reload(updater.store, padDoc, function (ok, message, xhr) {\n reloading = false\n if (ok) {\n checkAndSync()\n } else {\n if ((xhr as any).status === 0) {\n complain(\n 'Network error refreshing the pad. Retrying in ' +\n retryTimeout / 1000\n )\n reloading = true\n retryTimeout = retryTimeout * 2\n setTimeout(tryReload, retryTimeout)\n } else {\n complain(\n 'Error ' +\n (xhr as any).status +\n 'refreshing the pad:' +\n message +\n '. Stopped. ' +\n padDoc\n )\n }\n }\n })\n }\n tryReload()\n }\n\n table.refresh = sync // Catch downward propagating refresh events\n table.reloadAndSync = reloadAndSync\n\n if (!me) log('Warning: must be logged in for pad to be edited')\n\n if (exists) {\n log('Existing pad.')\n if (consistencyCheck()) {\n sync()\n if (kb.holds(subject, PAD('next'), subject)) {\n // Empty list untenable\n newChunk() // require at least one line\n }\n } else {\n log((table.textContent = 'Inconsistent data. Abort'))\n }\n } else {\n // Make new pad\n log('No pad exists - making new one.')\n const insertables = [\n st(subject, ns.rdf('type'), PAD('Notepad'), padDoc),\n st(subject, ns.dc('author'), me, padDoc),\n st(subject, ns.dc('created'), new Date() as any, padDoc),\n st(subject, PAD('next'), subject, padDoc)\n ]\n\n if (!updater) {\n throw new Error('no updater')\n }\n updater.update([], insertables, function (uri: string | null | undefined, ok: boolean, errorBody?: string) {\n if (!ok) {\n complain(errorBody || '')\n } else {\n log('Initial pad created')\n newChunk() // Add a first chunck\n // getResults();\n }\n })\n }\n return table\n}\n\n/**\n * Get the chunks of the notepad\n * They are stored in a RDF linked list\n */\n\n// @ignore exporting this only for the unit test\nexport function getChunks (subject: NamedNode, kb: IndexedFormula) {\n const chunks: any[] = []\n for (\n let chunk: any = kb.the(subject, PAD('next'));\n !chunk.sameTerm(subject);\n chunk = kb.the(chunk, PAD('next'))\n ) {\n chunks.push(chunk)\n }\n return chunks\n}\n\n/**\n * Encode content to be put in XML or HTML elements\n */\n// @ignore exporting this only for the unit test\nexport function xmlEncode (str) {\n return str.replace('&', '&').replace('<', '<').replace('>', '>')\n}\n\n/**\n * Convert a notepad to HTML\n * @param { } pad - the notepad\n * @param {store} pad - the data store\n */\nexport function notepadToHTML (pad: any, kb: IndexedFormula) {\n const chunks = getChunks(pad, kb)\n let html = '<html>\\n <head>\\n'\n const title = kb.anyValue(pad, ns.dct('title'))\n if (title) {\n html += ` <title>${xmlEncode(title)}</title>\\n`\n }\n html += ' </head>\\n <body>\\n'\n let level = 0\n\n function increaseLevel (indent) {\n for (; level < indent; level++) {\n html += '<ul>\\n'\n }\n }\n\n function decreaseLevel (indent) {\n for (; level > indent; level--) {\n html += '</ul>\\n'\n }\n }\n chunks.forEach(chunk => {\n const indent = kb.anyJS(chunk, PAD('indent'))\n const rawContent = kb.anyJS(chunk, ns.sioc('content'))\n if (!rawContent) return // seed chunk is dummy\n const content = xmlEncode(rawContent)\n if (indent < 0) { // negative indent levels represent heading levels\n decreaseLevel(0)\n const h = indent >= -3 ? 4 + indent : 1 // -1 -> h4, -2 -> h3\n html += `\\n<h${h}>${content}</h${h}>\\n`\n } else { // >= 0\n if (indent > 0) { // Lists\n decreaseLevel(indent)\n increaseLevel(indent)\n html += `<li>${content}</li>\\n`\n } else { // indent 0\n decreaseLevel(indent)\n html += `<p>${content}</p>\\n`\n }\n }\n }) // foreach chunk\n // At the end decreaseLevel any open ULs\n decreaseLevel(0)\n html += ' </body>\\n</html>\\n'\n return html\n}\n"],"file":"pad.js"}
|
|
1
|
+
{"version":3,"sources":["../src/pad.ts"],"names":["store","solidLogicSingleton","PAD","NotepadElement","HTMLElement","NotepadPart","lightColorHash","author","hash","x","split","reduce","a","b","charCodeAt","uri","toString","notepad","dom","padDoc","subject","me","options","exists","table","createElement","kb","Error","updater","setAttribute","upstreamStatus","downstreamStatus","statusArea","t","appendChild","tr","complain","message","upstream","clearStatus","_upsteam","innerHTML","setPartStyle","part","colors","pending","chunk","baseStyle","headingCore","headingStyle","any","ns","dc","bgcolor","indent","value","style","removePart","prev","undefined","next","sameTerm","del","statementsMatching","concat","ins","NamedNode","label","slice","update","ok","errorMessage","response","row","parentNode","before","previousSibling","removeChild","firstChild","focus","status","state","setTimeout","reloadAndSync","res","changeIndent","delta","current","length","Number","object","newIndent","errorBody","requestDownstreamAction","addListeners","addEventListener","event","queueProperty","queue","keyCode","shiftKey","newChunk","preventDefault","nextSibling","updateStore","old","sioc","newOne","lastSent","xhr","inputChangeListener","_event","newPartAfter","tr1","text","insertBefore","ele","here","tagName","toLowerCase","push","_xhr","newPart","newLinesBefore","consistencyCheck","found","failed","complain2","msg","the","k","each","sts","forEach","st","sync","textContent","manif","i","children","refreshTree","root","refresh","reloading","checkAndSync","retryTimeout","tryReload","reload","holds","insertables","rdf","Date","getChunks","chunks","xmlEncode","str","replace","notepadToHTML","pad","html","title","anyValue","dct","level","increaseLevel","decreaseLevel","anyJS","rawContent","content","h"],"mappings":"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","sourcesContent":["/** **************\n * Notepad Widget\n */\n\n/** @module pad\n */\nimport * as ns from './ns'\nimport { Namespace, NamedNode, st, IndexedFormula } from 'rdflib'\nimport { newThing, errorMessageBlock } from './widgets'\nimport { beep } from './utils'\nimport { log } from './debug'\nimport { solidLogicSingleton } from './logic'\nexport { renderPartipants, participationObject, manageParticipation, recordParticipation } from './participation'\n\nconst store = solidLogicSingleton.store\n\nconst PAD = Namespace('http://www.w3.org/ns/pim/pad#')\n\ntype notepadOptions = {\n statusArea?: HTMLDivElement\n exists?: boolean\n}\n/**\n * @ignore\n */\nclass NotepadElement extends HTMLElement {\n subject?: NamedNode\n}\n/**\n * @ignore\n */\nclass NotepadPart extends HTMLElement {\n subject?: NamedNode | string\n value?: string\n state?: Number\n lastSent?: String\n}\n/** Figure out a random color from my webid\n *\n * @param {NamedNode} author - The author of text being displayed\n * @returns {String} The CSS color generated, constrained to be light for a background color\n */\nexport function lightColorHash (author?: NamedNode): string {\n const hash = function (x) {\n return x.split('').reduce(function (a, b) {\n a = (a << 5) - a + b.charCodeAt(0)\n return a & a\n }, 0)\n }\n return author && author.uri\n ? '#' + ((hash(author.uri) & 0xffffff) | 0xc0c0c0).toString(16)\n : '#ffffff' // c0c0c0 forces pale\n} // no id -> white\n\n/** notepad\n *\n * @param {HTMLDocument} dom - the web page of the browser\n * @param {NamedNode} padDoc - the document into which the particpation should be shown\n * @param {NamedNode} subject - the thing in which participation is happening\n * @param {NamedNode} me - person who is logged into the pod\n * @param {notepadOptions} options - the options that can be passed in consist of statusArea, exists\n */\nexport function notepad (dom: HTMLDocument, padDoc: NamedNode, subject: NamedNode, me: NamedNode, options?: notepadOptions) {\n options = options || {}\n const exists = options.exists\n const table: any = dom.createElement('table')\n const kb = store\n\n if (me && !me.uri) throw new Error('UI.pad.notepad: Invalid userid')\n\n const updater = store.updater\n\n const PAD = Namespace('http://www.w3.org/ns/pim/pad#')\n\n table.setAttribute(\n 'style',\n 'padding: 1em; overflow: auto; resize: horizontal; min-width: 40em;'\n )\n\n let upstreamStatus: HTMLElement | null = null\n let downstreamStatus: HTMLElement | null = null\n\n if (options.statusArea) {\n const t = options.statusArea.appendChild(dom.createElement('table'))\n const tr = t.appendChild(dom.createElement('tr'))\n upstreamStatus = tr.appendChild(dom.createElement('td'))\n downstreamStatus = tr.appendChild(dom.createElement('td'))\n\n if (upstreamStatus) {\n upstreamStatus.setAttribute('style', 'width:50%')\n }\n if (downstreamStatus) {\n downstreamStatus.setAttribute('style', 'width:50%')\n }\n }\n /* @@ TODO want to look into this, it seems upstream should be a boolean and default to false ?\n *\n */\n const complain = function (message: string, upstream: boolean = false) {\n log(message)\n if ((options as notepadOptions).statusArea) {\n ; (upstream ? upstreamStatus as HTMLElement : downstreamStatus as HTMLElement).appendChild(errorMessageBlock(dom, message, 'pink'))\n }\n }\n // @@ TODO need to refactor so that we don't have to type cast\n const clearStatus = function (_upsteam?: any) {\n if ((options as notepadOptions).statusArea) {\n ((options as notepadOptions).statusArea as HTMLElement).innerHTML = ''\n }\n }\n\n const setPartStyle = function (part: NotepadPart, colors?: string, pending?: any) {\n const chunk = part.subject\n colors = colors || ''\n const baseStyle =\n 'font-size: 100%; font-family: monospace; width: 100%; border: none; white-space: pre-wrap;'\n const headingCore =\n 'font-family: sans-serif; font-weight: bold; border: none;'\n const headingStyle = [\n 'font-size: 110%; padding-top: 0.5em; padding-bottom: 0.5em; width: 100%;',\n 'font-size: 120%; padding-top: 1em; padding-bottom: 1em; width: 100%;',\n 'font-size: 150%; padding-top: 1em; padding-bottom: 1em; width: 100%;'\n ]\n\n const author = kb.any(chunk as any, ns.dc('author'))\n if (!colors && author) {\n // Hash the user webid for now -- later allow user selection!\n const bgcolor = lightColorHash(author as any)\n colors =\n 'color: ' +\n (pending ? '#888' : 'black') +\n '; background-color: ' +\n bgcolor +\n ';'\n }\n\n // @@ TODO Need to research when this can be an object with the indent stored in value\n // and when the indent is stored as a Number itself, not in an object.\n let indent: any = kb.any(chunk as any, PAD('indent'))\n\n indent = indent ? indent.value : 0\n const style =\n indent >= 0\n ? baseStyle + 'text-indent: ' + indent * 3 + 'em;'\n : headingCore + headingStyle[-1 - indent]\n // ? baseStyle + 'padding-left: ' + (indent * 3) + 'em;'\n part.setAttribute('style', style + colors)\n }\n\n const removePart = function (part: NotepadPart) {\n const chunk = part.subject\n if (!chunk) throw new Error('No chunk for line to be deleted!') // just in case\n const prev: any = kb.any(undefined, PAD('next'), chunk as any)\n const next: any = kb.any(chunk as any, PAD('next'))\n if (prev.sameTerm(subject) && next.sameTerm(subject)) {\n // Last one\n log(\"You can't delete the only line.\")\n return\n }\n\n const del = kb\n .statementsMatching(chunk as any, undefined, undefined, padDoc)\n .concat(kb.statementsMatching(undefined, undefined, chunk as any, padDoc))\n const ins = [st(prev, PAD('next'), next, padDoc)]\n\n // @@ TODO what should we do if chunk is not a NamedNode should we\n // assume then it is a string?\n if (chunk instanceof NamedNode) {\n const label = chunk.uri.slice(-4)\n\n log('Deleting line ' + label)\n }\n if (!updater) {\n throw new Error('have no updater')\n }\n // @@ TODO below you can see that before is redefined and not a boolean\n updater.update(del, ins, function (uri, ok, errorMessage, response) {\n if (ok) {\n const row = part.parentNode\n if (row) {\n const before: any = row.previousSibling\n if (row.parentNode) {\n row.parentNode.removeChild(row)\n }\n // console.log(' deleted line ' + label + ' ok ' + part.value)\n if (before && before.firstChild) {\n // @@ TODO IMPORTANT FOCUS ISN'T A PROPERTY ON A CHILDNODE\n before.firstChild.focus()\n }\n }\n } else if (response && (response as any).status === 409) {\n // Conflict\n setPartStyle(part, 'color: black; background-color: #ffd;') // yellow\n part.state = 0 // Needs downstream refresh\n beep(0.5, 512) // Ooops clash with other person\n setTimeout(function () {\n // Ideally, beep! @@\n reloadAndSync() // Throw away our changes and\n // updater.requestDownstreamAction(padDoc, reloadAndSync)\n }, 1000)\n } else {\n log(' removePart FAILED ' + chunk + ': ' + errorMessage)\n log(\" removePart was deleteing :'\" + del)\n setPartStyle(part, 'color: black; background-color: #fdd;') // failed\n const res = response ? (response as any).status : ' [no response field] '\n complain('Error ' + res + ' saving changes: ' + (errorMessage as any).true) // upstream,\n // updater.requestDownstreamAction(padDoc, reloadAndSync);\n }\n })\n } // removePart\n\n const changeIndent = function (part: NotepadPart, chunk: string, delta) {\n const del = kb.statementsMatching(chunk as any, PAD('indent'))\n const current = del.length ? Number(del[0].object.value) : 0\n if (current + delta < -3) return // limit negative indent\n const newIndent = current + delta\n const ins = st(chunk as any, PAD('indent'), newIndent, padDoc)\n if (!updater) {\n throw new Error('no updater')\n }\n updater.update(del, ins as any, function (uri, ok, errorBody) {\n if (!ok) {\n log(\n \"Indent change FAILED '\" +\n newIndent +\n \"' for \" +\n padDoc +\n ': ' +\n errorBody\n )\n setPartStyle(part, 'color: black; background-color: #fdd;') // failed\n updater.requestDownstreamAction(padDoc, reloadAndSync)\n } else {\n setPartStyle(part) // Implement the indent\n }\n })\n }\n\n // Use this sort of code to split the line when return pressed in the middle @@\n /*\n function doGetCaretPosition doGetCaretPosition (oField) {\n var iCaretPos = 0\n // IE Support\n if (document.selection) {\n // Set focus on the element to avoid IE bug\n oField.focus()\n // To get cursor position, get empty selection range\n var oSel = document.selection.createRange()\n // Move selection start to 0 position\n oSel.moveStart('character', -oField.value.length)\n // The caret position is selection length\n iCaretPos = oSel.text.length\n // Firefox suppor\n } else if (oField.selectionStart || oField.selectionStart === '0') {\n iCaretPos = oField.selectionStart\n }\n // Return results\n return (iCaretPos)\n }\n */\n const addListeners = function (part: any, chunk: any) {\n part.addEventListener('keydown', function (event) {\n if (!updater) {\n throw new Error('no updater')\n }\n\n let queueProperty, queue\n // up 38; down 40; left 37; right 39 tab 9; shift 16; escape 27\n switch (event.keyCode) {\n case 13: // Return\n {\n const before: NotepadElement = event.shiftKey\n log('enter') // Shift-return inserts before -- only way to add to top of pad.\n if (before) {\n queue = kb.any(undefined, PAD('next'), chunk)\n queueProperty = 'newlinesAfter'\n } else {\n queue = kb.any(chunk, PAD('next'))\n queueProperty = 'newlinesBefore'\n }\n queue[queueProperty] = queue[queueProperty] || 0\n queue[queueProperty] += 1\n if (queue[queueProperty] > 1) {\n log(' queueing newline queue = ' + queue[queueProperty])\n return\n }\n log(' go ahead line before ' + queue[queueProperty])\n newChunk(part, before) // was document.activeElement\n break\n }\n case 8: // Delete\n if (part.value.length === 0) {\n log(\n 'Delete key line ' + chunk.uri.slice(-4) + ' state ' + part.state\n )\n\n switch (part.state) {\n case 1: // contents being sent\n case 2: // contents need to be sent again\n part.state = 4 // delete me\n return\n case 3: // being deleted already\n case 4: // already deleme state\n return\n case undefined:\n case 0:\n part.state = 3 // being deleted\n removePart(part)\n event.preventDefault()\n break // continue\n default:\n throw new Error('pad: Unexpected state ' + part)\n }\n }\n break\n case 9: // Tab\n {\n const delta = event.shiftKey ? -1 : 1\n changeIndent(part, chunk, delta)\n event.preventDefault() // default is to highlight next field\n break\n }\n case 27: // ESC\n log('escape')\n updater.requestDownstreamAction(padDoc, reloadAndSync)\n event.preventDefault()\n break\n\n case 38: // Up\n if (part.parentNode.previousSibling) {\n part.parentNode.previousSibling.firstChild.focus()\n event.preventDefault()\n }\n break\n\n case 40: // Down\n if (part.parentNode.nextSibling) {\n part.parentNode.nextSibling.firstChild.focus()\n event.preventDefault()\n }\n break\n\n default:\n }\n })\n\n const updateStore = function (part: NotepadPart) {\n const chunk: any = part.subject\n setPartStyle(part, undefined, true)\n const old = (kb.any(chunk, ns.sioc('content')) as any).value\n const del = [st(chunk, ns.sioc('content'), old, padDoc)]\n let ins\n if (part.value) {\n ins = [st(chunk, ns.sioc('content'), part.value as any, padDoc)]\n }\n const newOne = part.value\n\n // DEBUGGING ONLY\n if (part.lastSent) {\n if (old !== part.lastSent) {\n throw new Error(\n \"Out of order, last sent expected '\" +\n old +\n \"' but found '\" +\n part.lastSent +\n \"'\"\n )\n }\n }\n part.lastSent = newOne\n\n /* console.log(\n ' Patch proposed to ' +\n chunk.uri.slice(-4) +\n \" '\" +\n old +\n \"' -> '\" +\n newOne +\n \"' \"\n ) */\n if (!updater) {\n throw new Error('no updater')\n }\n\n updater.update(del, ins, function (uri, ok, errorBody, xhr) {\n if (!ok) {\n // alert(\"clash \" + errorBody);\n log(\n ' patch FAILED ' +\n (xhr as any).status +\n \" for '\" +\n old +\n \"' -> '\" +\n newOne +\n \"': \" +\n errorBody\n )\n if ((xhr as any).status === 409) {\n // Conflict - @@ we assume someone else\n setPartStyle(part, 'color: black; background-color: #fdd;')\n part.state = 0 // Needs downstream refresh\n beep(0.5, 512) // Ooops clash with other person\n setTimeout(function () {\n updater.requestDownstreamAction(padDoc, reloadAndSync)\n }, 1000)\n } else {\n setPartStyle(part, 'color: black; background-color: #fdd;') // failed pink\n part.state = 0\n complain(\n ' Error ' + (xhr as any).status + ' sending data: ' + errorBody,\n true\n )\n beep(1.0, 128) // Other\n // @@@ Do soemthing more serious with other errors eg auth, etc\n }\n } else {\n clearStatus(true) // upstream\n setPartStyle(part) // synced\n log(\" Patch ok '\" + old + \"' -> '\" + newOne + \"' \")\n\n if (part.state === 4) {\n // delete me\n part.state = 3\n removePart(part)\n } else if (part.state === 3) {\n // being deleted\n // pass\n } else if (part.state === 2) {\n part.state = 1 // pending: lock\n updateStore(part)\n } else {\n part.state = 0 // clear lock\n }\n }\n })\n }\n\n part.addEventListener('input', function inputChangeListener (_event) {\n // debug.log(\"input changed \"+part.value);\n setPartStyle(part, undefined, true) // grey out - not synced\n log(\n 'Input event state ' + part.state + \" value '\" + part.value + \"'\"\n )\n switch (part.state) {\n case 3: // being deleted\n return\n case 4: // needs to be deleted\n return\n case 2: // needs content updating, we know\n return\n case 1:\n part.state = 2 // lag we need another patch\n return\n case 0:\n case undefined:\n part.state = 1 // being upadted\n updateStore(part)\n }\n }) // listener\n } // addlisteners\n\n // @@ TODO Need to research before as it appears to be used as an Element and a boolean\n const newPartAfter = function (tr1: HTMLTableElement, chunk: String, before?: NotepadElement | boolean) {\n // @@ take chunk and add listeners\n let text: any = kb.any(chunk as any, ns.sioc('content'))\n text = text ? text.value : ''\n const tr = dom.createElement('tr')\n if (before) {\n table.insertBefore(tr, tr1)\n } else {\n // after\n if (tr1 && tr1.nextSibling) {\n table.insertBefore(tr, tr1.nextSibling)\n } else {\n table.appendChild(tr)\n }\n }\n const part: any = tr.appendChild(dom.createElement('input'))\n part.subject = chunk\n part.setAttribute('type', 'text')\n part.value = text\n if (me) {\n setPartStyle(part, '')\n addListeners(part, chunk)\n } else {\n setPartStyle(part, 'color: #222; background-color: #fff')\n log(\"Note can't add listeners - not logged in\")\n }\n return part\n }\n\n /* @@ TODO we need to look at indent, it can be a Number or an Object this doesn't seem correct.\n */\n const newChunk = function (ele?: NotepadElement, before?: NotepadElement) {\n // element of chunk being split\n const kb = store\n let indent: any = 0\n let queueProperty: string | null = null\n let here, prev, next, queue, tr1: any\n\n if (ele) {\n if (ele.tagName.toLowerCase() !== 'input') {\n log('return pressed when current document is: ' + ele.tagName)\n }\n here = ele.subject\n indent = kb.any(here, PAD('indent'))\n indent = indent ? Number(indent.value) : 0\n if (before) {\n prev = kb.any(undefined, PAD('next'), here)\n next = here\n queue = prev\n queueProperty = 'newlinesAfter'\n } else {\n prev = here\n next = kb.any(here, PAD('next'))\n queue = next\n queueProperty = 'newlinesBefore'\n }\n tr1 = ele.parentNode\n } else {\n prev = subject\n next = subject\n tr1 = undefined\n }\n\n const chunk = newThing(padDoc)\n const label = chunk.uri.slice(-4)\n\n const del = [st(prev, PAD('next'), next, padDoc)]\n const ins = [\n st(prev, PAD('next'), chunk, padDoc),\n st(chunk, PAD('next'), next, padDoc),\n st(chunk, ns.dc('author'), me, padDoc),\n st(chunk, ns.sioc('content'), '' as any, padDoc)\n ]\n if (indent > 0) {\n // Do not inherit\n ins.push(st(chunk, PAD('indent'), indent, padDoc))\n }\n\n log(' Fresh chunk ' + label + ' proposed')\n if (!updater) {\n throw new Error('no updater')\n }\n updater.update(del, ins, function (uri, ok, errorBody, _xhr) {\n if (!ok) {\n // alert(\"Error writing new line \" + label + \": \" + errorBody);\n log(' ERROR writing new line ' + label + ': ' + errorBody)\n } else {\n const newPart = newPartAfter(tr1, chunk, before)\n setPartStyle(newPart)\n newPart.focus() // Note this is delayed\n if (queueProperty) {\n log(\n ' Fresh chunk ' +\n label +\n ' updated, queue = ' +\n queue[queueProperty]\n )\n queue[queueProperty] -= 1\n if (queue[queueProperty] > 0) {\n log(\n ' Implementing queued newlines = ' + next.newLinesBefore\n )\n newChunk(newPart, before)\n }\n }\n }\n })\n }\n\n const consistencyCheck = function () {\n const found: { [uri: string]: boolean } = {}\n let failed = 0\n function complain2 (msg) {\n complain(msg)\n failed++\n }\n\n if (!kb.the(subject, PAD('next'))) {\n complain2('No initial next pointer')\n return false // can't do linked list\n }\n // var chunk = kb.the(subject, PAD('next'))\n let prev = subject\n let chunk\n for (; ;) {\n chunk = kb.the(prev, PAD('next'))\n if (!chunk) {\n complain2('No next pointer from ' + prev)\n }\n if (chunk.sameTerm(subject)) {\n break\n }\n prev = chunk\n const label = chunk.uri.split('#')[1]\n if (found[chunk.uri]) {\n complain2('Loop!')\n return false\n }\n\n found[chunk.uri] = true\n let k = kb.each(chunk, PAD('next')).length\n if (k !== 1) {\n complain2('Should be 1 not ' + k + ' next pointer for ' + label)\n }\n\n k = kb.each(chunk, PAD('indent')).length\n if (k > 1) {\n complain2('Should be 0 or 1 not ' + k + ' indent for ' + label)\n }\n\n k = kb.each(chunk, ns.sioc('content')).length\n if (k !== 1) {\n complain2('Should be 1 not ' + k + ' contents for ' + label)\n }\n\n k = kb.each(chunk, ns.dc('author')).length\n if (k !== 1) {\n complain2('Should be 1 not ' + k + ' author for ' + label)\n }\n\n const sts = kb.statementsMatching(undefined, ns.sioc('contents'))\n sts.forEach(function (st) {\n if (!found[st.subject.value]) {\n complain2('Loose chunk! ' + st.subject.value)\n }\n })\n }\n return !failed\n }\n\n // Ensure that the display matches the current state of the\n // @@ TODO really need to refactor this so that we don't need to cast types\n const sync = function () {\n // var first = kb.the(subject, PAD('next'))\n if (kb.each(subject, PAD('next')).length !== 1) {\n const msg =\n 'Pad: Inconsistent data - NEXT pointers: ' +\n kb.each(subject, PAD('next')).length\n log(msg)\n if ((options as notepadOptions).statusArea) {\n ((options as notepadOptions).statusArea as HTMLElement).textContent += msg\n }\n return\n }\n // var last = kb.the(undefined, PAD('previous'), subject)\n // var chunk = first // = kb.the(subject, PAD('next'));\n let row\n\n // First see which of the logical chunks have existing physical manifestations\n const manif: any = []\n // Find which lines correspond to existing chunks\n\n for (\n let chunk = kb.the(subject, PAD('next')) as unknown as any;\n !chunk.sameTerm(subject);\n chunk = kb.the(chunk, PAD('next'))\n ) {\n for (let i = 0; i < table.children.length; i++) {\n const tr: any = table.children[i]\n if (tr.firstChild) {\n if (tr.firstChild.subject.sameTerm(chunk)) {\n manif[chunk.uri] = tr.firstChild\n }\n }\n }\n }\n\n // Remove any deleted lines\n for (let i = table.children.length - 1; i >= 0; i--) {\n row = table.children[i]\n if (!manif[row.firstChild.subject.uri]) {\n table.removeChild(row)\n }\n }\n // Insert any new lines and update old ones\n row = table.firstChild // might be null\n for (\n let chunk = kb.the(subject, PAD('next')) as unknown as any;\n !chunk.sameTerm(subject);\n chunk = kb.the(chunk, PAD('next'))\n ) {\n const text = (kb.any(chunk, ns.sioc('content')) as any).value\n // superstitious -- don't mess with unchanged input fields\n // which may be selected by the user\n if (row && manif[chunk.uri]) {\n const part = row.firstChild\n if (text !== part.value) {\n part.value = text\n }\n setPartStyle(part)\n part.state = 0 // Clear the state machine\n delete part.lastSent // DEBUG ONLY\n row = row.nextSibling\n } else {\n newPartAfter(row, chunk, true) // actually before\n }\n }\n }\n\n // Refresh the DOM tree\n\n const refreshTree = function (root) {\n if (root.refresh) {\n root.refresh()\n return\n }\n for (let i = 0; i < root.children.length; i++) {\n refreshTree(root.children[i])\n }\n }\n\n let reloading = false\n\n const checkAndSync = function () {\n log(' reloaded OK')\n clearStatus()\n if (!consistencyCheck()) {\n complain('CONSITENCY CHECK FAILED')\n } else {\n refreshTree(table)\n }\n }\n\n const reloadAndSync = function () {\n if (reloading) {\n log(' Already reloading - stop')\n return // once only needed\n }\n reloading = true\n let retryTimeout = 1000 // ms\n const tryReload = function () {\n log('try reload - timeout = ' + retryTimeout)\n if (!updater) {\n throw new Error('no updater')\n }\n updater.reload(updater.store, padDoc, function (ok, message, xhr) {\n reloading = false\n if (ok) {\n checkAndSync()\n } else {\n if ((xhr as any).status === 0) {\n complain(\n 'Network error refreshing the pad. Retrying in ' +\n retryTimeout / 1000\n )\n reloading = true\n retryTimeout = retryTimeout * 2\n setTimeout(tryReload, retryTimeout)\n } else {\n complain(\n 'Error ' +\n (xhr as any).status +\n 'refreshing the pad:' +\n message +\n '. Stopped. ' +\n padDoc\n )\n }\n }\n })\n }\n tryReload()\n }\n\n table.refresh = sync // Catch downward propagating refresh events\n table.reloadAndSync = reloadAndSync\n\n if (!me) log('Warning: must be logged in for pad to be edited')\n\n if (exists) {\n log('Existing pad.')\n if (consistencyCheck()) {\n sync()\n if (kb.holds(subject, PAD('next'), subject)) {\n // Empty list untenable\n newChunk() // require at least one line\n }\n } else {\n log((table.textContent = 'Inconsistent data. Abort'))\n }\n } else {\n // Make new pad\n log('No pad exists - making new one.')\n const insertables = [\n st(subject, ns.rdf('type'), PAD('Notepad'), padDoc),\n st(subject, ns.dc('author'), me, padDoc),\n st(subject, ns.dc('created'), new Date() as any, padDoc),\n st(subject, PAD('next'), subject, padDoc)\n ]\n\n if (!updater) {\n throw new Error('no updater')\n }\n updater.update([], insertables, function (uri: string | null | undefined, ok: boolean, errorBody?: string) {\n if (!ok) {\n complain(errorBody || '')\n } else {\n log('Initial pad created')\n newChunk() // Add a first chunck\n // getResults();\n }\n })\n }\n return table\n}\n\n/**\n * Get the chunks of the notepad\n * They are stored in a RDF linked list\n */\n\n// @ignore exporting this only for the unit test\nexport function getChunks (subject: NamedNode, kb: IndexedFormula) {\n const chunks: any[] = []\n for (\n let chunk: any = kb.the(subject, PAD('next'));\n !chunk.sameTerm(subject);\n chunk = kb.the(chunk, PAD('next'))\n ) {\n chunks.push(chunk)\n }\n return chunks\n}\n\n/**\n * Encode content to be put in XML or HTML elements\n */\n// @ignore exporting this only for the unit test\nexport function xmlEncode (str) {\n return str.replace('&', '&').replace('<', '<').replace('>', '>')\n}\n\n/**\n * Convert a notepad to HTML\n * @param { } pad - the notepad\n * @param {store} pad - the data store\n */\nexport function notepadToHTML (pad: any, kb: IndexedFormula) {\n const chunks = getChunks(pad, kb)\n let html = '<html>\\n <head>\\n'\n const title = kb.anyValue(pad, ns.dct('title'))\n if (title) {\n html += ` <title>${xmlEncode(title)}</title>\\n`\n }\n html += ' </head>\\n <body>\\n'\n let level = 0\n\n function increaseLevel (indent) {\n for (; level < indent; level++) {\n html += '<ul>\\n'\n }\n }\n\n function decreaseLevel (indent) {\n for (; level > indent; level--) {\n html += '</ul>\\n'\n }\n }\n chunks.forEach(chunk => {\n const indent = kb.anyJS(chunk, PAD('indent'))\n const rawContent = kb.anyJS(chunk, ns.sioc('content'))\n if (!rawContent) return // seed chunk is dummy\n const content = xmlEncode(rawContent)\n if (indent < 0) { // negative indent levels represent heading levels\n decreaseLevel(0)\n const h = indent >= -3 ? 4 + indent : 1 // -1 -> h4, -2 -> h3\n html += `\\n<h${h}>${content}</h${h}>\\n`\n } else { // >= 0\n if (indent > 0) { // Lists\n decreaseLevel(indent)\n increaseLevel(indent)\n html += `<li>${content}</li>\\n`\n } else { // indent 0\n decreaseLevel(indent)\n html += `<p>${content}</p>\\n`\n }\n }\n }) // foreach chunk\n // At the end decreaseLevel any open ULs\n decreaseLevel(0)\n html += ' </body>\\n</html>\\n'\n return html\n}\n"],"file":"pad.js"}
|
package/lib/participation.js
CHANGED
|
@@ -12,6 +12,8 @@ exports.participationObject = participationObject;
|
|
|
12
12
|
exports.recordParticipation = recordParticipation;
|
|
13
13
|
exports.renderPartipants = renderPartipants;
|
|
14
14
|
|
|
15
|
+
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
|
|
16
|
+
|
|
15
17
|
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
|
|
16
18
|
|
|
17
19
|
var _assertThisInitialized2 = _interopRequireDefault(require("@babel/runtime/helpers/assertThisInitialized"));
|
|
@@ -69,7 +71,7 @@ var ParticipationTableElement = /*#__PURE__*/function (_HTMLTableElement) {
|
|
|
69
71
|
return _this;
|
|
70
72
|
}
|
|
71
73
|
|
|
72
|
-
return ParticipationTableElement;
|
|
74
|
+
return (0, _createClass2["default"])(ParticipationTableElement);
|
|
73
75
|
}( /*#__PURE__*/(0, _wrapNativeSuper2["default"])(HTMLTableElement));
|
|
74
76
|
|
|
75
77
|
var kb = _logic.solidLogicSingleton.store;
|
package/lib/participation.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/participation.ts"],"names":["ParticipationTableElement","HTMLTableElement","kb","solidLogicSingleton","store","renderPartipants","dom","table","unused1","subject","unused2","options","setAttribute","newRowForParticpation","parp","person","any","ns","wf","tr","createElement","textContent","bg","anyValue","ui","block","appendChild","td","insertBefore","firstChild","syncTable","parps","each","map","cal","sort","participations","p","refresh","participationObject","padDoc","me","Promise","resolve","reject","Error","filter","pn","holds","length","participation","ins","Date","updater","update","uri","ok","errorMessage","recordParticipation","refreshable","manageParticipation","container","e"],"mappings":"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","sourcesContent":["/* Manage a UI for the particpation of a person in any thing\n*/\n\nimport { currentUser } from './authn/authn'\nimport { NamedNode, st } from 'rdflib'\nimport * as ns from './ns'\nimport { personTR, newThing, errorMessageBlock } from './widgets'\nimport { syncTableToArray } from './utils'\nimport { lightColorHash } from './pad'\nimport { log } from './debug'\nimport { solidLogicSingleton } from './logic'\n\ntype ParticipationOptions = {\n deleteFunction?: () => {}\n link?: string\n draggable?: boolean\n}\n\nclass ParticipationTableElement extends HTMLTableElement {\n refresh?: () => void\n}\nconst kb = solidLogicSingleton.store\n\n/** Manage participation in this session\n*\n* @param {Document} dom - the web page loaded into the browser\n* @param {HTMLTableElement} table - the table element\n* @param {NamedNode} unused1/document - the document to render (this argument is no longer used, but left in for backwards compatibility)\n* @param {NamedNode} subject - the thing in which the participation is happening\n* @param {NamedNode} unused2/me - user that is logged into the pod (this argument is no longer used, but left in for backwards compatibility)\n* @param {ParticipationOptions} options - the options that can be passed in are deleteFunction, link, and draggable these are used by the personTR button\n*/\nexport function renderPartipants (dom: HTMLDocument, table: ParticipationTableElement, unused1: NamedNode, subject: NamedNode, unused2: NamedNode, options: ParticipationOptions) {\n table.setAttribute('style', 'margin: 0.8em;')\n\n const newRowForParticpation = function (parp) {\n const person = kb.any(parp, ns.wf('participant'))\n\n let tr\n if (!person) {\n tr = dom.createElement('tr')\n tr.textContent = '???' // Don't crash - invalid part'n entry\n return tr\n }\n const bg = kb.anyValue(parp, ns.ui('backgroundColor')) || 'white'\n\n const block = dom.createElement('div')\n block.setAttribute(\n 'style',\n 'height: 1.5em; width: 1.5em; margin: 0.3em; border 0.01em solid #888; background-color: ' +\n bg\n )\n tr = personTR(dom, null, person, options)\n table.appendChild(tr)\n const td = dom.createElement('td')\n td.setAttribute('style', 'vertical-align: middle;')\n td.appendChild(block)\n tr.insertBefore(td, tr.firstChild)\n return tr\n }\n\n const syncTable = function () {\n const parps = kb.each(subject, ns.wf('participation')).map(function (parp) {\n log('in participants')\n return [kb.anyValue(parp as any, ns.cal('dtstart')) || '9999-12-31', parp]\n })\n parps.sort() // List in order of joining\n const participations = parps.map(function (p) {\n return p[1]\n })\n syncTableToArray(table, participations, newRowForParticpation)\n }\n table.refresh = syncTable\n syncTable()\n return table\n}\n\n/** Record, or find old, Particpation object\n *\n * A particpaption object is a place to record things specifically about\n * subject and the user, such as preferences, start of membership, etc\n * @param {NamedNode} subject - the thing in which the participation is happening\n * @param {NamedNode} document - where to record the data\n * @param {NamedNode} me - the logged in user\n *\n */\nexport function participationObject (subject: NamedNode, padDoc: NamedNode, me: NamedNode) {\n return new Promise(function (resolve, reject) {\n if (!me) {\n throw new Error('Not user id')\n }\n\n const parps = kb.each(subject, ns.wf('participation')).filter(function (pn) {\n return kb.holds(pn, ns.wf('participant'), me)\n })\n if (parps.length > 1) {\n throw new Error('Multiple records of your participation')\n }\n if (parps.length) {\n // If I am not already recorded\n resolve(parps[0]) // returns the particpation object\n } else {\n const participation = newThing(padDoc)\n const ins = [\n st(subject, ns.wf('participation'), participation, padDoc),\n\n st(participation, ns.wf('participant'), me, padDoc),\n st(participation, ns.cal('dtstart'), new Date() as any, padDoc),\n st(\n participation,\n ns.ui('backgroundColor'),\n lightColorHash(me) as any,\n padDoc\n )\n ]\n if (!kb.updater) {\n throw new Error('kb has no updater')\n }\n kb.updater.update([], ins, function (uri: string | null | undefined, ok: boolean, errorMessage?: string) {\n if (!ok) {\n reject(new Error('Error recording your partipation: ' + errorMessage))\n } else {\n resolve(participation)\n }\n })\n resolve(participation)\n }\n })\n}\n\n/** Record my participation and display participants\n *\n * @param {NamedNode} subject - the thing in which participation is happening\n * @param {NamedNode} padDoc - the document into which the particpation should be recorded\n * @param {DOMNode} refreshable - a DOM element whose refresh() is to be called if the change works\n *\n */\nexport function recordParticipation (subject: NamedNode, padDoc: NamedNode, refreshable: any) {\n const me = currentUser()\n if (!me) return // Not logged in\n\n const parps = kb.each(subject, ns.wf('participation')).filter(function (pn) {\n return kb.holds(pn, ns.wf('participant'), me)\n })\n if (parps.length > 1) {\n throw new Error('Multiple records of your participation')\n }\n if (parps.length) {\n // If I am not already recorded\n return parps[0] // returns the particpation object\n } else {\n const participation = newThing(padDoc)\n const ins = [\n st(subject, ns.wf('participation'), participation, padDoc),\n\n st(participation, ns.wf('participant'), me, padDoc),\n st(participation, ns.cal('dtstart'), new Date() as any, padDoc),\n st(\n participation,\n ns.ui('backgroundColor'),\n lightColorHash(me) as any,\n padDoc\n )\n ]\n if (!kb.updater) {\n throw new Error('kb has no updater')\n }\n kb.updater.update([], ins, function (uri: string | null | undefined, ok: boolean, errorMessage?: string) {\n if (!ok) {\n throw new Error('Error recording your partipation: ' + errorMessage)\n }\n if (refreshable && refreshable.refresh) {\n refreshable.refresh()\n }\n // UI.pad.renderPartipants(dom, table, padDoc, subject, me, options)\n })\n return participation\n }\n}\n\n/** Record my participation and display participants\n*\n* @param {Document} dom - the web page loaded into the browser\n* @param {HTMLDivElement} container - the container element where the participants should be displayed\n* @param {NamedNode} document - the document into which the particpation should be shown\n* @param {NamedNode} subject - the thing in which participation is happening\n* @param {NamedNode} me - the logged in user\n* @param {ParticipationOptions} options - the options that can be passed in are deleteFunction, link, and draggable these are used by the personTR button\n*\n*/\nexport function manageParticipation (\n dom: Document,\n container: HTMLDivElement,\n padDoc: NamedNode,\n subject: NamedNode,\n me: NamedNode,\n options: ParticipationOptions\n) {\n const table = dom.createElement('table')\n container.appendChild(table)\n renderPartipants(dom, table, padDoc, subject, me, options)\n try {\n recordParticipation(subject, padDoc, table)\n } catch (e) {\n container.appendChild(\n errorMessageBlock(\n dom,\n 'Error recording your partipation: ' + e\n )\n ) // Clean up?\n }\n return table\n}\n"],"file":"participation.js"}
|
|
1
|
+
{"version":3,"sources":["../src/participation.ts"],"names":["ParticipationTableElement","HTMLTableElement","kb","solidLogicSingleton","store","renderPartipants","dom","table","unused1","subject","unused2","options","setAttribute","newRowForParticpation","parp","person","any","ns","wf","tr","createElement","textContent","bg","anyValue","ui","block","appendChild","td","insertBefore","firstChild","syncTable","parps","each","map","cal","sort","participations","p","refresh","participationObject","padDoc","me","Promise","resolve","reject","Error","filter","pn","holds","length","participation","ins","Date","updater","update","uri","ok","errorMessage","recordParticipation","refreshable","manageParticipation","container","e"],"mappings":"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","sourcesContent":["/* Manage a UI for the particpation of a person in any thing\n*/\n\nimport { currentUser } from './authn/authn'\nimport { NamedNode, st } from 'rdflib'\nimport * as ns from './ns'\nimport { personTR, newThing, errorMessageBlock } from './widgets'\nimport { syncTableToArray } from './utils'\nimport { lightColorHash } from './pad'\nimport { log } from './debug'\nimport { solidLogicSingleton } from './logic'\n\ntype ParticipationOptions = {\n deleteFunction?: () => {}\n link?: string\n draggable?: boolean\n}\n\nclass ParticipationTableElement extends HTMLTableElement {\n refresh?: () => void\n}\nconst kb = solidLogicSingleton.store\n\n/** Manage participation in this session\n*\n* @param {Document} dom - the web page loaded into the browser\n* @param {HTMLTableElement} table - the table element\n* @param {NamedNode} unused1/document - the document to render (this argument is no longer used, but left in for backwards compatibility)\n* @param {NamedNode} subject - the thing in which the participation is happening\n* @param {NamedNode} unused2/me - user that is logged into the pod (this argument is no longer used, but left in for backwards compatibility)\n* @param {ParticipationOptions} options - the options that can be passed in are deleteFunction, link, and draggable these are used by the personTR button\n*/\nexport function renderPartipants (dom: HTMLDocument, table: ParticipationTableElement, unused1: NamedNode, subject: NamedNode, unused2: NamedNode, options: ParticipationOptions) {\n table.setAttribute('style', 'margin: 0.8em;')\n\n const newRowForParticpation = function (parp) {\n const person = kb.any(parp, ns.wf('participant'))\n\n let tr\n if (!person) {\n tr = dom.createElement('tr')\n tr.textContent = '???' // Don't crash - invalid part'n entry\n return tr\n }\n const bg = kb.anyValue(parp, ns.ui('backgroundColor')) || 'white'\n\n const block = dom.createElement('div')\n block.setAttribute(\n 'style',\n 'height: 1.5em; width: 1.5em; margin: 0.3em; border 0.01em solid #888; background-color: ' +\n bg\n )\n tr = personTR(dom, null, person, options)\n table.appendChild(tr)\n const td = dom.createElement('td')\n td.setAttribute('style', 'vertical-align: middle;')\n td.appendChild(block)\n tr.insertBefore(td, tr.firstChild)\n return tr\n }\n\n const syncTable = function () {\n const parps = kb.each(subject, ns.wf('participation')).map(function (parp) {\n log('in participants')\n return [kb.anyValue(parp as any, ns.cal('dtstart')) || '9999-12-31', parp]\n })\n parps.sort() // List in order of joining\n const participations = parps.map(function (p) {\n return p[1]\n })\n syncTableToArray(table, participations, newRowForParticpation)\n }\n table.refresh = syncTable\n syncTable()\n return table\n}\n\n/** Record, or find old, Particpation object\n *\n * A particpaption object is a place to record things specifically about\n * subject and the user, such as preferences, start of membership, etc\n * @param {NamedNode} subject - the thing in which the participation is happening\n * @param {NamedNode} document - where to record the data\n * @param {NamedNode} me - the logged in user\n *\n */\nexport function participationObject (subject: NamedNode, padDoc: NamedNode, me: NamedNode) {\n return new Promise(function (resolve, reject) {\n if (!me) {\n throw new Error('Not user id')\n }\n\n const parps = kb.each(subject, ns.wf('participation')).filter(function (pn) {\n return kb.holds(pn, ns.wf('participant'), me)\n })\n if (parps.length > 1) {\n throw new Error('Multiple records of your participation')\n }\n if (parps.length) {\n // If I am not already recorded\n resolve(parps[0]) // returns the particpation object\n } else {\n const participation = newThing(padDoc)\n const ins = [\n st(subject, ns.wf('participation'), participation, padDoc),\n\n st(participation, ns.wf('participant'), me, padDoc),\n st(participation, ns.cal('dtstart'), new Date() as any, padDoc),\n st(\n participation,\n ns.ui('backgroundColor'),\n lightColorHash(me) as any,\n padDoc\n )\n ]\n if (!kb.updater) {\n throw new Error('kb has no updater')\n }\n kb.updater.update([], ins, function (uri: string | null | undefined, ok: boolean, errorMessage?: string) {\n if (!ok) {\n reject(new Error('Error recording your partipation: ' + errorMessage))\n } else {\n resolve(participation)\n }\n })\n resolve(participation)\n }\n })\n}\n\n/** Record my participation and display participants\n *\n * @param {NamedNode} subject - the thing in which participation is happening\n * @param {NamedNode} padDoc - the document into which the particpation should be recorded\n * @param {DOMNode} refreshable - a DOM element whose refresh() is to be called if the change works\n *\n */\nexport function recordParticipation (subject: NamedNode, padDoc: NamedNode, refreshable: any) {\n const me = currentUser()\n if (!me) return // Not logged in\n\n const parps = kb.each(subject, ns.wf('participation')).filter(function (pn) {\n return kb.holds(pn, ns.wf('participant'), me)\n })\n if (parps.length > 1) {\n throw new Error('Multiple records of your participation')\n }\n if (parps.length) {\n // If I am not already recorded\n return parps[0] // returns the particpation object\n } else {\n const participation = newThing(padDoc)\n const ins = [\n st(subject, ns.wf('participation'), participation, padDoc),\n\n st(participation, ns.wf('participant'), me, padDoc),\n st(participation, ns.cal('dtstart'), new Date() as any, padDoc),\n st(\n participation,\n ns.ui('backgroundColor'),\n lightColorHash(me) as any,\n padDoc\n )\n ]\n if (!kb.updater) {\n throw new Error('kb has no updater')\n }\n kb.updater.update([], ins, function (uri: string | null | undefined, ok: boolean, errorMessage?: string) {\n if (!ok) {\n throw new Error('Error recording your partipation: ' + errorMessage)\n }\n if (refreshable && refreshable.refresh) {\n refreshable.refresh()\n }\n // UI.pad.renderPartipants(dom, table, padDoc, subject, me, options)\n })\n return participation\n }\n}\n\n/** Record my participation and display participants\n*\n* @param {Document} dom - the web page loaded into the browser\n* @param {HTMLDivElement} container - the container element where the participants should be displayed\n* @param {NamedNode} document - the document into which the particpation should be shown\n* @param {NamedNode} subject - the thing in which participation is happening\n* @param {NamedNode} me - the logged in user\n* @param {ParticipationOptions} options - the options that can be passed in are deleteFunction, link, and draggable these are used by the personTR button\n*\n*/\nexport function manageParticipation (\n dom: Document,\n container: HTMLDivElement,\n padDoc: NamedNode,\n subject: NamedNode,\n me: NamedNode,\n options: ParticipationOptions\n) {\n const table = dom.createElement('table')\n container.appendChild(table)\n renderPartipants(dom, table, padDoc, subject, me, options)\n try {\n recordParticipation(subject, padDoc, table)\n } catch (e) {\n container.appendChild(\n errorMessageBlock(\n dom,\n 'Error recording your partipation: ' + e\n )\n ) // Clean up?\n }\n return table\n}\n"],"file":"participation.js"}
|
package/lib/tabs.js
CHANGED
|
@@ -10,6 +10,8 @@ exports.tabWidget = tabWidget;
|
|
|
10
10
|
|
|
11
11
|
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
|
12
12
|
|
|
13
|
+
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
|
|
14
|
+
|
|
13
15
|
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
|
|
14
16
|
|
|
15
17
|
var _assertThisInitialized2 = _interopRequireDefault(require("@babel/runtime/helpers/assertThisInitialized"));
|
|
@@ -56,7 +58,7 @@ var ContainerElement = /*#__PURE__*/function (_HTMLElement) {
|
|
|
56
58
|
return _this;
|
|
57
59
|
}
|
|
58
60
|
|
|
59
|
-
return ContainerElement;
|
|
61
|
+
return (0, _createClass2["default"])(ContainerElement);
|
|
60
62
|
}( /*#__PURE__*/(0, _wrapNativeSuper2["default"])(HTMLElement));
|
|
61
63
|
|
|
62
64
|
var TabWidgetElement = /*#__PURE__*/function (_HTMLElement2) {
|
|
@@ -80,7 +82,7 @@ var TabWidgetElement = /*#__PURE__*/function (_HTMLElement2) {
|
|
|
80
82
|
return _this2;
|
|
81
83
|
}
|
|
82
84
|
|
|
83
|
-
return TabWidgetElement;
|
|
85
|
+
return (0, _createClass2["default"])(TabWidgetElement);
|
|
84
86
|
}( /*#__PURE__*/(0, _wrapNativeSuper2["default"])(HTMLElement));
|
|
85
87
|
/**
|
|
86
88
|
* @ignore
|
|
@@ -109,7 +111,7 @@ var TabElement = /*#__PURE__*/function (_HTMLElement3) {
|
|
|
109
111
|
return _this3;
|
|
110
112
|
}
|
|
111
113
|
|
|
112
|
-
return TabElement;
|
|
114
|
+
return (0, _createClass2["default"])(TabElement);
|
|
113
115
|
}( /*#__PURE__*/(0, _wrapNativeSuper2["default"])(HTMLElement));
|
|
114
116
|
/**
|
|
115
117
|
* Use this widget to generate tabs from triples set in the global store.
|
package/lib/tabs.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/tabs.ts"],"names":["ContainerElement","HTMLElement","TabWidgetElement","TabElement","tabWidget","options","subject","dom","document","orientation","parseInt","backgroundColor","flipped","vertical","onClose","getColors","selectedColor","color","bodyMainStyle","rootElement","createElement","setAttribute","navElement","appendChild","mainElement","tabContainer","tabElement","bodyContainer","corners","cornersPrepped","concat","slice","cornersStyle","join","margins","marginsPrepped","marginsStyle","paddingStyle","tabStyle","unselectedStyle","selectedStyle","shownStyle","hiddenStyle","refresh","orderedSync","startEmpty","children","length","selectedTab","Array","from","map","tab","firstChild","find","dataset","name","click","addCancelButton","onCloseSet","existingCancelButton","querySelector","removeChild","extraTab","classList","add","tabCancelButton","getAttribute","getItems","items","ordered","store","the","predicate","elements","each","makeNewSlot","item","ele","div","addEventListener","e","metaKey","resetTabStyle","resetBodyStyle","bodyTR","bodyMain","getOrCreateContainerElement","renderTabSettings","altKey","asSettings","innerHTML","renderMain","renderTab","textContent","newBodyMain","slot","i","j","left","right","differ","sameTerm","insertables","newSlot","newBodyDiv","insertBefore","contains","isLight","colorBlend","a","b","mix","ca","cb","res","str","hex","res2","split","h","l","x","total"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;AACA;;AAEA;;;;;;AAEA;AACA;AACA;IACMA,gB;;;;;;;;;;;;;;;;;;;;kDAAyBC,W;;IAoBlBC,gB;;;;;;;;;;;;;;;;;;;;;;kDAAyBD,W;AAMtC;AACA;AACA;;;;;IACME,U;;;;;;;;;;;;;;;;;;;;;kDAAmBF,W;AAKzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACO,SAASG,SAAT,CAAoBC,OAApB,EAA+C;AACpD,MAAMC,OAAO,GAAGD,OAAO,CAACC,OAAxB;AACA,MAAMC,GAAG,GAAGF,OAAO,CAACE,GAAR,IAAeC,QAA3B;AACA,MAAMC,WAAW,GAAGC,QAAQ,CAACL,OAAO,CAACI,WAAR,IAAuB,GAAxB,CAA5B;AACA,MAAME,eAAe,GAAGN,OAAO,CAACM,eAAR,IAA2B,SAAnD;AACA,MAAMC,OAAO,GAAGH,WAAW,GAAG,CAA9B;AACA,MAAMI,QAAQ,GAAGJ,WAAW,GAAG,CAA/B;AACA,MAAMK,OAAO,GAAGT,OAAO,CAACS,OAAxB;;AAEA,mBAA+BC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","sourcesContent":["import { cancelButton } from './widgets'\nimport { label } from './utils'\nimport { NamedNode } from 'rdflib'\nimport { store } from './logic'\n\n/**\n * @ignore\n */\nclass ContainerElement extends HTMLElement {\n asSettings?: boolean\n}\n\ntype TabWidgetOptions = {\n backgroundColor?: string\n dom?: HTMLDocument\n items?: Array<NamedNode>\n onClose?: (event: Event) => void\n ordered?: boolean\n orientation?: '0' | '1' | '2' | '3'\n predicate?: NamedNode\n renderMain?: (bodyMain: HTMLElement, subject: NamedNode) => void\n renderTab?: (tabDiv: HTMLDivElement, subject: NamedNode) => void\n renderTabSettings?: (bodyMain: ContainerElement, subject: NamedNode) => void\n selectedTab?: string\n startEmpty?: boolean\n subject?: NamedNode\n}\n\nexport class TabWidgetElement extends HTMLElement {\n bodyContainer?: HTMLElement\n refresh?: () => void\n tabContainer?: HTMLElement\n}\n\n/**\n * @ignore\n */\nclass TabElement extends HTMLElement {\n bodyTR?: HTMLElement\n subject?: NamedNode\n}\n\n/**\n * Use this widget to generate tabs from triples set in the global store.\n *\n * [Here you can see examples of the tabs](https://solid.github.io/solid-ui/examples/tabs/).\n *\n * It assumes that items to use for tabs will be in a collection by default,\n * e.g.:\n *\n * ```turtle\n * :subject :predicate ( :item1 :item2 ) .\n * ```\n *\n * You can override this by setting `ordered: false`, in which case it expects\n * unordered triples:\n *\n * ```turtle\n * :subject :predicate :item1, :item 2 .\n * ```\n *\n * Triples that are not ordered in collection are in principle not sorted,\n * which means that tabs could change order every time you render the widget.\n * But in this case the widget will try to sort it in order to keep it\n * consistent.\n *\n * In both of these cases you need to define options `subject` and `predicate`\n * to tell the widget which triples it should be looking for.\n *\n * Finally you can set items manually, using the `items` option, e.g.:\n *\n * ```javascript\n * {\n * items: [\n * namedNode('https://domain.tld/#item1'),\n * namedNode('https://domain.tld/#item2')\n * ]\n * }\n * ```\n *\n * When you set items manually you do not need to set `subject` and\n * `predicate`.\n *\n * In any case you probably want to set the renderMain option to specify\n * what should be rendered for the various items, e.g.:\n *\n * ```javascript\n * {\n * renderMain: (bodyMain, subject) => {\n * bodyMain.innerHTML = renderItem(subject)\n * }\n * }\n * ```\n *\n * **Note:** `renderItem` is a custom function that you need to define yourself.\n *\n * The option `renderTabSettings` allows you to render a custom view in the\n * body container that is shown when you hold the ALT key and click on a\n * tab. It works very much like the `renderMain` option:\n *\n * ```javascript\n * {\n * renderTabSettings: (bodyMain, subject) => {\n * bodyMain.innerHTML = renderTabSettings(subject)\n * }\n * }\n * ```\n *\n * **Note:** `renderTabSettings` is a custom function that you need to define\n * yourself.\n *\n * By default the widget will try to guess the label by using the\n * [[utils.label]] function. If you want to customize this yourself, you can\n * use the `renderTab` option:\n *\n * ```javascript\n * {\n * renderTab: (tabDiv, subject) => {\n * tabDiv.innerText = renderTabText(subject)\n * }\n * }\n * ```\n *\n * **Note:** `renderTabText` is a custom function you need to define yourself.\n *\n * The option renderTab is also important if you want to set which tab should\n * be selected once the widget is rendered. By default it will simply select\n * the first tab, but you can override by setting `dataset.name` on the tab\n * and referring to the same string in `selectedTab`:\n *\n * ```javascript\n * {\n * renderTab: (tabDiv, subject) => {\n * tabDiv.dataset.name = subject.uri\n * },\n * selectedTab: item2.uri\n * }\n * ```\n *\n * You can apply a color to use for tabs and border of the container by using\n * option `background-color`. This is #ddddcc by default.\n *\n * You can override the document object that the widget uses to generate DOM\n * elements by setting the option `dom`. This is encouraged to set if you\n * intend your functionality to be used in environments that don't provide\n * a global `document` object.\n *\n * If you want to render a close button next to the tabs you can set option\n * `onClose` which takes a callback function that is triggered when the\n * button is clicked:\n *\n * ```javascript\n * {\n * onClose: (event) => {\n * // do something that hides the widget altogether\n * }\n * }\n * ```\n *\n * The option `orientation` allows you to set which side the tabs should be\n * located: `'0'` = Top, `'1'` = Left, `'2'` = Bottom, `'3'` = Right\n *\n * If you don't want to render anything in the body container by default,\n * you can set the option `startEmpty` to `true`.\n *\n * @param options\n */\nexport function tabWidget (options: TabWidgetOptions) {\n const subject = options.subject\n const dom = options.dom || document\n const orientation = parseInt(options.orientation || '0')\n const backgroundColor = options.backgroundColor || '#ddddcc'\n const flipped = orientation & 2\n const vertical = orientation & 1\n const onClose = options.onClose\n\n const [selectedColor, color] = getColors(backgroundColor)\n const bodyMainStyle = `flex: 2; width: auto; height: 100%; border: 0.1em; border-style: solid; border-color: ${selectedColor}; padding: 1em;`\n const rootElement: TabWidgetElement = dom.createElement('div') // 20200117a\n\n rootElement.setAttribute('style', 'display: flex; height: 100%; width: 100%; flex-direction: ' +\n (vertical ? 'row' : 'column') + (flipped ? '-reverse;' : ';'))\n\n const navElement = rootElement.appendChild(dom.createElement('nav'))\n navElement.setAttribute('style', 'margin: 0;')\n\n const mainElement = rootElement.appendChild(dom.createElement('main'))\n\n mainElement.setAttribute('style', 'margin: 0; width:100%; height: 100%;') // override tabbedtab.css\n const tabContainer = navElement.appendChild(dom.createElement('ul'))\n tabContainer.setAttribute('style', `\n list-style-type: none;\n display: flex;\n height: 100%;\n width: 100%;\n margin: 0;\n padding: 0;\n flex-direction: ${(vertical ? 'column' : 'row')}\n `)\n\n const tabElement = 'li'\n\n const bodyContainer = mainElement\n rootElement.tabContainer = tabContainer\n rootElement.bodyContainer = bodyContainer\n\n const corners = ['0.2em', '0.2em', '0', '0'] // top left, TR, BR, BL\n const cornersPrepped = corners.concat(corners).slice(orientation, orientation + 4)\n const cornersStyle = `border-radius: ${cornersPrepped.join(' ')};`\n\n const margins = ['0.3em', '0.3em', '0', '0.3em'] // top, right, bottom, left\n const marginsPrepped = margins.concat(margins).slice(orientation, orientation + 4)\n const marginsStyle = `margin: ${marginsPrepped.join(' ')};`\n\n const paddingStyle = `padding: ${marginsPrepped.join(' ')};`\n\n const tabStyle = cornersStyle + `padding: 0.7em; max-width: 20em; color: ${color};`\n const unselectedStyle = `${tabStyle + marginsStyle}opacity: 50%; background-color: ${backgroundColor};`\n const selectedStyle = `${tabStyle + marginsStyle}background-color: ${selectedColor};`\n const shownStyle = 'height: 100%; width: 100%;'\n const hiddenStyle = shownStyle + 'display: none;'\n rootElement.refresh = orderedSync\n orderedSync()\n\n if (!options.startEmpty && tabContainer.children.length && options.selectedTab) {\n const selectedTab = Array.from(tabContainer.children)\n .map(tab => tab.firstChild as HTMLElement)\n .find(tab => tab.dataset.name === options.selectedTab)\n const tab = selectedTab || tabContainer.children[0].firstChild as HTMLButtonElement\n tab.click()\n } else if (!options.startEmpty) {\n (tabContainer.children[0].firstChild as HTMLButtonElement).click() // Open first tab\n }\n return rootElement\n\n function addCancelButton (tabContainer) {\n if (tabContainer.dataset.onCloseSet) {\n // @@ TODO: this is only here to make the browser tests work\n // Discussion at https://github.com/solid/solid-ui/pull/110#issuecomment-527080663\n const existingCancelButton = tabContainer.querySelector('.unstyled')\n tabContainer.removeChild(existingCancelButton)\n }\n const extraTab = dom.createElement(tabElement)\n extraTab.classList.add('unstyled')\n const tabCancelButton = cancelButton(dom, onClose)\n tabCancelButton.setAttribute('style', tabCancelButton.getAttribute('style') + paddingStyle)\n extraTab.appendChild(tabCancelButton)\n tabContainer.appendChild(extraTab)\n tabContainer.dataset.onCloseSet = 'true'\n }\n\n function getItems (): Array<NamedNode> {\n if (options.items) return options.items\n if (options.ordered !== false) {\n // options.ordered defaults to true\n return (store.the(subject, options.predicate) as any).elements\n } else {\n return store.each(subject, options.predicate) as any\n }\n }\n\n function makeNewSlot (item: NamedNode) {\n const ele = dom.createElement(tabElement) as TabElement\n ele.subject = item\n const div = ele.appendChild(dom.createElement('div'))\n div.setAttribute('style', unselectedStyle)\n\n div.addEventListener('click', function (e) {\n if (!e.metaKey) {\n resetTabStyle()\n resetBodyStyle()\n }\n div.setAttribute('style', selectedStyle)\n if (!ele.bodyTR) return\n ele.bodyTR.setAttribute('style', shownStyle)\n const bodyMain = getOrCreateContainerElement(ele)\n if (options.renderTabSettings && e.altKey && ele.subject && bodyMain.asSettings !== true) {\n bodyMain.innerHTML = 'loading settings ...' + item\n options.renderTabSettings(bodyMain, ele.subject)\n bodyMain.asSettings = true\n } else if (options.renderMain && ele.subject && bodyMain.asSettings !== false) {\n bodyMain.innerHTML = 'loading item ...' + item\n options.renderMain(bodyMain, ele.subject)\n bodyMain.asSettings = false\n }\n })\n\n if (options.renderTab) {\n options.renderTab(div, item)\n } else {\n div.textContent = label(item)\n }\n return ele\n\n function getOrCreateContainerElement (ele: TabElement): ContainerElement {\n const bodyMain = ele.bodyTR?.children[0] as ContainerElement\n if (bodyMain) return bodyMain\n const newBodyMain = ele.bodyTR!.appendChild(dom.createElement('main'))\n newBodyMain.setAttribute('style', bodyMainStyle)\n return newBodyMain\n }\n }\n\n // @@ Use common one from utils?\n function orderedSync () {\n const items = getItems()\n let slot: TabElement, i, j, left, right\n let differ = false\n // Find how many match at each end\n for (left = 0; left < tabContainer.children.length; left++) {\n slot = tabContainer.children[left] as TabElement\n if (\n left >= items.length ||\n (slot.subject && !slot.subject.sameTerm(items[left]))\n ) {\n differ = true\n break\n }\n }\n if (!differ && items.length === tabContainer.children.length) {\n return // The two just match in order: a case to optimize for\n }\n for (right = tabContainer.children.length - 1; right >= 0; right--) {\n slot = tabContainer.children[right] as TabElement\n j = right - tabContainer.children.length + items.length\n if (slot.subject && !slot.subject.sameTerm(items[j])) {\n break\n }\n }\n // The elements left ... right in tabContainer.children do not match\n const insertables = items.slice(left, right - tabContainer.children.length + items.length + 1)\n while (right >= left) {\n // remove extra\n tabContainer.removeChild(tabContainer.children[left])\n bodyContainer.removeChild(bodyContainer.children[left])\n right -= 1\n }\n for (i = 0; i < insertables.length; i++) {\n const newSlot = makeNewSlot(insertables[i])\n const newBodyDiv = dom.createElement('div')\n newSlot.bodyTR = newBodyDiv\n if (left === tabContainer.children.length) {\n // None left of original on right\n tabContainer.appendChild(newSlot)\n bodyContainer.appendChild(newBodyDiv)\n } else {\n tabContainer.insertBefore(newSlot, tabContainer.children[left + i])\n bodyContainer.insertBefore(newBodyDiv, bodyContainer.children[left + i])\n }\n }\n if (onClose) {\n addCancelButton(tabContainer)\n }\n }\n\n function resetTabStyle () {\n for (let i = 0; i < tabContainer.children.length; i++) {\n const tab = tabContainer.children[i]\n if (tab.classList.contains('unstyled')) {\n continue\n }\n if (tab.children[0]) {\n tab.children[0].setAttribute('style', unselectedStyle)\n }\n }\n }\n\n function resetBodyStyle () {\n for (let i = 0; i < bodyContainer.children.length; i++) {\n bodyContainer.children[i].setAttribute('style', hiddenStyle)\n }\n }\n}\n\n/**\n * @internal\n */\nfunction getColors (backgroundColor: string): [string, string] {\n return isLight(backgroundColor)\n ? [colorBlend(backgroundColor, '#ffffff', 0.3), '#000000']\n : [colorBlend(backgroundColor, '#000000', 0.3), '#ffffff']\n}\n\n/**\n * @internal\n */\nfunction colorBlend (a: string, b: string, mix: number): string {\n let ca, cb, res\n let str = '#'\n const hex = '0123456789abcdef'\n for (let i = 0; i < 3; i++) {\n ca = parseInt(a.slice(i * 2 + 1, i * 2 + 3), 16)\n cb = parseInt(b.slice(i * 2 + 1, i * 2 + 3), 16)\n res = ca * (1.0 - mix) + cb * mix // @@@ rounding\n const res2 = parseInt(('' + res).split('.')[0]) // @@ ugh\n const h = parseInt(('' + res2 / 16).split('.')[0]) // @@ ugh\n const l = parseInt(('' + (res2 % 16)).split('.')[0]) // @@ ugh\n str += hex[h] + hex[l]\n }\n return str\n}\n\n/**\n * @internal\n */\nfunction isLight (x: string): boolean {\n let total = 0\n for (let i = 0; i < 3; i++) {\n total += parseInt(x.slice(i * 2 + 1, i * 2 + 3), 16)\n }\n return total > 128 * 3\n}\n"],"file":"tabs.js"}
|
|
1
|
+
{"version":3,"sources":["../src/tabs.ts"],"names":["ContainerElement","HTMLElement","TabWidgetElement","TabElement","tabWidget","options","subject","dom","document","orientation","parseInt","backgroundColor","flipped","vertical","onClose","getColors","selectedColor","color","bodyMainStyle","rootElement","createElement","setAttribute","navElement","appendChild","mainElement","tabContainer","tabElement","bodyContainer","corners","cornersPrepped","concat","slice","cornersStyle","join","margins","marginsPrepped","marginsStyle","paddingStyle","tabStyle","unselectedStyle","selectedStyle","shownStyle","hiddenStyle","refresh","orderedSync","startEmpty","children","length","selectedTab","Array","from","map","tab","firstChild","find","dataset","name","click","addCancelButton","onCloseSet","existingCancelButton","querySelector","removeChild","extraTab","classList","add","tabCancelButton","getAttribute","getItems","items","ordered","store","the","predicate","elements","each","makeNewSlot","item","ele","div","addEventListener","e","metaKey","resetTabStyle","resetBodyStyle","bodyTR","bodyMain","getOrCreateContainerElement","renderTabSettings","altKey","asSettings","innerHTML","renderMain","renderTab","textContent","newBodyMain","slot","i","j","left","right","differ","sameTerm","insertables","newSlot","newBodyDiv","insertBefore","contains","isLight","colorBlend","a","b","mix","ca","cb","res","str","hex","res2","split","h","l","x","total"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;AACA;;AAEA;;;;;;AAEA;AACA;AACA;IACMA,gB;;;;;;;;;;;;;;;;;;;;kDAAyBC,W;;IAoBlBC,gB;;;;;;;;;;;;;;;;;;;;;;kDAAyBD,W;AAMtC;AACA;AACA;;;;;IACME,U;;;;;;;;;;;;;;;;;;;;;kDAAmBF,W;AAKzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACO,SAASG,SAAT,CAAoBC,OAApB,EAA+C;AACpD,MAAMC,OAAO,GAAGD,OAAO,CAACC,OAAxB;AACA,MAAMC,GAAG,GAAGF,OAAO,CAACE,GAAR,IAAeC,QAA3B;AACA,MAAMC,WAAW,GAAGC,QAAQ,CAACL,OAAO,CAACI,WAAR,IAAuB,GAAxB,CAA5B;AACA,MAAME,eAAe,GAAGN,OAAO,CAACM,eAAR,IAA2B,SAAnD;AACA,MAAMC,OAAO,GAAGH,WAAW,GAAG,CAA9B;AACA,MAAMI,QAAQ,GAAGJ,WAAW,GAAG,CAA/B;AACA,MAAMK,OAAO,GAAGT,OAAO,CAACS,OAAxB;;AAEA,mBAA+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","sourcesContent":["import { cancelButton } from './widgets'\nimport { label } from './utils'\nimport { NamedNode } from 'rdflib'\nimport { store } from './logic'\n\n/**\n * @ignore\n */\nclass ContainerElement extends HTMLElement {\n asSettings?: boolean\n}\n\ntype TabWidgetOptions = {\n backgroundColor?: string\n dom?: HTMLDocument\n items?: Array<NamedNode>\n onClose?: (event: Event) => void\n ordered?: boolean\n orientation?: '0' | '1' | '2' | '3'\n predicate?: NamedNode\n renderMain?: (bodyMain: HTMLElement, subject: NamedNode) => void\n renderTab?: (tabDiv: HTMLDivElement, subject: NamedNode) => void\n renderTabSettings?: (bodyMain: ContainerElement, subject: NamedNode) => void\n selectedTab?: string\n startEmpty?: boolean\n subject?: NamedNode\n}\n\nexport class TabWidgetElement extends HTMLElement {\n bodyContainer?: HTMLElement\n refresh?: () => void\n tabContainer?: HTMLElement\n}\n\n/**\n * @ignore\n */\nclass TabElement extends HTMLElement {\n bodyTR?: HTMLElement\n subject?: NamedNode\n}\n\n/**\n * Use this widget to generate tabs from triples set in the global store.\n *\n * [Here you can see examples of the tabs](https://solid.github.io/solid-ui/examples/tabs/).\n *\n * It assumes that items to use for tabs will be in a collection by default,\n * e.g.:\n *\n * ```turtle\n * :subject :predicate ( :item1 :item2 ) .\n * ```\n *\n * You can override this by setting `ordered: false`, in which case it expects\n * unordered triples:\n *\n * ```turtle\n * :subject :predicate :item1, :item 2 .\n * ```\n *\n * Triples that are not ordered in collection are in principle not sorted,\n * which means that tabs could change order every time you render the widget.\n * But in this case the widget will try to sort it in order to keep it\n * consistent.\n *\n * In both of these cases you need to define options `subject` and `predicate`\n * to tell the widget which triples it should be looking for.\n *\n * Finally you can set items manually, using the `items` option, e.g.:\n *\n * ```javascript\n * {\n * items: [\n * namedNode('https://domain.tld/#item1'),\n * namedNode('https://domain.tld/#item2')\n * ]\n * }\n * ```\n *\n * When you set items manually you do not need to set `subject` and\n * `predicate`.\n *\n * In any case you probably want to set the renderMain option to specify\n * what should be rendered for the various items, e.g.:\n *\n * ```javascript\n * {\n * renderMain: (bodyMain, subject) => {\n * bodyMain.innerHTML = renderItem(subject)\n * }\n * }\n * ```\n *\n * **Note:** `renderItem` is a custom function that you need to define yourself.\n *\n * The option `renderTabSettings` allows you to render a custom view in the\n * body container that is shown when you hold the ALT key and click on a\n * tab. It works very much like the `renderMain` option:\n *\n * ```javascript\n * {\n * renderTabSettings: (bodyMain, subject) => {\n * bodyMain.innerHTML = renderTabSettings(subject)\n * }\n * }\n * ```\n *\n * **Note:** `renderTabSettings` is a custom function that you need to define\n * yourself.\n *\n * By default the widget will try to guess the label by using the\n * [[utils.label]] function. If you want to customize this yourself, you can\n * use the `renderTab` option:\n *\n * ```javascript\n * {\n * renderTab: (tabDiv, subject) => {\n * tabDiv.innerText = renderTabText(subject)\n * }\n * }\n * ```\n *\n * **Note:** `renderTabText` is a custom function you need to define yourself.\n *\n * The option renderTab is also important if you want to set which tab should\n * be selected once the widget is rendered. By default it will simply select\n * the first tab, but you can override by setting `dataset.name` on the tab\n * and referring to the same string in `selectedTab`:\n *\n * ```javascript\n * {\n * renderTab: (tabDiv, subject) => {\n * tabDiv.dataset.name = subject.uri\n * },\n * selectedTab: item2.uri\n * }\n * ```\n *\n * You can apply a color to use for tabs and border of the container by using\n * option `background-color`. This is #ddddcc by default.\n *\n * You can override the document object that the widget uses to generate DOM\n * elements by setting the option `dom`. This is encouraged to set if you\n * intend your functionality to be used in environments that don't provide\n * a global `document` object.\n *\n * If you want to render a close button next to the tabs you can set option\n * `onClose` which takes a callback function that is triggered when the\n * button is clicked:\n *\n * ```javascript\n * {\n * onClose: (event) => {\n * // do something that hides the widget altogether\n * }\n * }\n * ```\n *\n * The option `orientation` allows you to set which side the tabs should be\n * located: `'0'` = Top, `'1'` = Left, `'2'` = Bottom, `'3'` = Right\n *\n * If you don't want to render anything in the body container by default,\n * you can set the option `startEmpty` to `true`.\n *\n * @param options\n */\nexport function tabWidget (options: TabWidgetOptions) {\n const subject = options.subject\n const dom = options.dom || document\n const orientation = parseInt(options.orientation || '0')\n const backgroundColor = options.backgroundColor || '#ddddcc'\n const flipped = orientation & 2\n const vertical = orientation & 1\n const onClose = options.onClose\n\n const [selectedColor, color] = getColors(backgroundColor)\n const bodyMainStyle = `flex: 2; width: auto; height: 100%; border: 0.1em; border-style: solid; border-color: ${selectedColor}; padding: 1em;`\n const rootElement: TabWidgetElement = dom.createElement('div') // 20200117a\n\n rootElement.setAttribute('style', 'display: flex; height: 100%; width: 100%; flex-direction: ' +\n (vertical ? 'row' : 'column') + (flipped ? '-reverse;' : ';'))\n\n const navElement = rootElement.appendChild(dom.createElement('nav'))\n navElement.setAttribute('style', 'margin: 0;')\n\n const mainElement = rootElement.appendChild(dom.createElement('main'))\n\n mainElement.setAttribute('style', 'margin: 0; width:100%; height: 100%;') // override tabbedtab.css\n const tabContainer = navElement.appendChild(dom.createElement('ul'))\n tabContainer.setAttribute('style', `\n list-style-type: none;\n display: flex;\n height: 100%;\n width: 100%;\n margin: 0;\n padding: 0;\n flex-direction: ${(vertical ? 'column' : 'row')}\n `)\n\n const tabElement = 'li'\n\n const bodyContainer = mainElement\n rootElement.tabContainer = tabContainer\n rootElement.bodyContainer = bodyContainer\n\n const corners = ['0.2em', '0.2em', '0', '0'] // top left, TR, BR, BL\n const cornersPrepped = corners.concat(corners).slice(orientation, orientation + 4)\n const cornersStyle = `border-radius: ${cornersPrepped.join(' ')};`\n\n const margins = ['0.3em', '0.3em', '0', '0.3em'] // top, right, bottom, left\n const marginsPrepped = margins.concat(margins).slice(orientation, orientation + 4)\n const marginsStyle = `margin: ${marginsPrepped.join(' ')};`\n\n const paddingStyle = `padding: ${marginsPrepped.join(' ')};`\n\n const tabStyle = cornersStyle + `padding: 0.7em; max-width: 20em; color: ${color};`\n const unselectedStyle = `${tabStyle + marginsStyle}opacity: 50%; background-color: ${backgroundColor};`\n const selectedStyle = `${tabStyle + marginsStyle}background-color: ${selectedColor};`\n const shownStyle = 'height: 100%; width: 100%;'\n const hiddenStyle = shownStyle + 'display: none;'\n rootElement.refresh = orderedSync\n orderedSync()\n\n if (!options.startEmpty && tabContainer.children.length && options.selectedTab) {\n const selectedTab = Array.from(tabContainer.children)\n .map(tab => tab.firstChild as HTMLElement)\n .find(tab => tab.dataset.name === options.selectedTab)\n const tab = selectedTab || tabContainer.children[0].firstChild as HTMLButtonElement\n tab.click()\n } else if (!options.startEmpty) {\n (tabContainer.children[0].firstChild as HTMLButtonElement).click() // Open first tab\n }\n return rootElement\n\n function addCancelButton (tabContainer) {\n if (tabContainer.dataset.onCloseSet) {\n // @@ TODO: this is only here to make the browser tests work\n // Discussion at https://github.com/solid/solid-ui/pull/110#issuecomment-527080663\n const existingCancelButton = tabContainer.querySelector('.unstyled')\n tabContainer.removeChild(existingCancelButton)\n }\n const extraTab = dom.createElement(tabElement)\n extraTab.classList.add('unstyled')\n const tabCancelButton = cancelButton(dom, onClose)\n tabCancelButton.setAttribute('style', tabCancelButton.getAttribute('style') + paddingStyle)\n extraTab.appendChild(tabCancelButton)\n tabContainer.appendChild(extraTab)\n tabContainer.dataset.onCloseSet = 'true'\n }\n\n function getItems (): Array<NamedNode> {\n if (options.items) return options.items\n if (options.ordered !== false) {\n // options.ordered defaults to true\n return (store.the(subject, options.predicate) as any).elements\n } else {\n return store.each(subject, options.predicate) as any\n }\n }\n\n function makeNewSlot (item: NamedNode) {\n const ele = dom.createElement(tabElement) as TabElement\n ele.subject = item\n const div = ele.appendChild(dom.createElement('div'))\n div.setAttribute('style', unselectedStyle)\n\n div.addEventListener('click', function (e) {\n if (!e.metaKey) {\n resetTabStyle()\n resetBodyStyle()\n }\n div.setAttribute('style', selectedStyle)\n if (!ele.bodyTR) return\n ele.bodyTR.setAttribute('style', shownStyle)\n const bodyMain = getOrCreateContainerElement(ele)\n if (options.renderTabSettings && e.altKey && ele.subject && bodyMain.asSettings !== true) {\n bodyMain.innerHTML = 'loading settings ...' + item\n options.renderTabSettings(bodyMain, ele.subject)\n bodyMain.asSettings = true\n } else if (options.renderMain && ele.subject && bodyMain.asSettings !== false) {\n bodyMain.innerHTML = 'loading item ...' + item\n options.renderMain(bodyMain, ele.subject)\n bodyMain.asSettings = false\n }\n })\n\n if (options.renderTab) {\n options.renderTab(div, item)\n } else {\n div.textContent = label(item)\n }\n return ele\n\n function getOrCreateContainerElement (ele: TabElement): ContainerElement {\n const bodyMain = ele.bodyTR?.children[0] as ContainerElement\n if (bodyMain) return bodyMain\n const newBodyMain = ele.bodyTR!.appendChild(dom.createElement('main'))\n newBodyMain.setAttribute('style', bodyMainStyle)\n return newBodyMain\n }\n }\n\n // @@ Use common one from utils?\n function orderedSync () {\n const items = getItems()\n let slot: TabElement, i, j, left, right\n let differ = false\n // Find how many match at each end\n for (left = 0; left < tabContainer.children.length; left++) {\n slot = tabContainer.children[left] as TabElement\n if (\n left >= items.length ||\n (slot.subject && !slot.subject.sameTerm(items[left]))\n ) {\n differ = true\n break\n }\n }\n if (!differ && items.length === tabContainer.children.length) {\n return // The two just match in order: a case to optimize for\n }\n for (right = tabContainer.children.length - 1; right >= 0; right--) {\n slot = tabContainer.children[right] as TabElement\n j = right - tabContainer.children.length + items.length\n if (slot.subject && !slot.subject.sameTerm(items[j])) {\n break\n }\n }\n // The elements left ... right in tabContainer.children do not match\n const insertables = items.slice(left, right - tabContainer.children.length + items.length + 1)\n while (right >= left) {\n // remove extra\n tabContainer.removeChild(tabContainer.children[left])\n bodyContainer.removeChild(bodyContainer.children[left])\n right -= 1\n }\n for (i = 0; i < insertables.length; i++) {\n const newSlot = makeNewSlot(insertables[i])\n const newBodyDiv = dom.createElement('div')\n newSlot.bodyTR = newBodyDiv\n if (left === tabContainer.children.length) {\n // None left of original on right\n tabContainer.appendChild(newSlot)\n bodyContainer.appendChild(newBodyDiv)\n } else {\n tabContainer.insertBefore(newSlot, tabContainer.children[left + i])\n bodyContainer.insertBefore(newBodyDiv, bodyContainer.children[left + i])\n }\n }\n if (onClose) {\n addCancelButton(tabContainer)\n }\n }\n\n function resetTabStyle () {\n for (let i = 0; i < tabContainer.children.length; i++) {\n const tab = tabContainer.children[i]\n if (tab.classList.contains('unstyled')) {\n continue\n }\n if (tab.children[0]) {\n tab.children[0].setAttribute('style', unselectedStyle)\n }\n }\n }\n\n function resetBodyStyle () {\n for (let i = 0; i < bodyContainer.children.length; i++) {\n bodyContainer.children[i].setAttribute('style', hiddenStyle)\n }\n }\n}\n\n/**\n * @internal\n */\nfunction getColors (backgroundColor: string): [string, string] {\n return isLight(backgroundColor)\n ? [colorBlend(backgroundColor, '#ffffff', 0.3), '#000000']\n : [colorBlend(backgroundColor, '#000000', 0.3), '#ffffff']\n}\n\n/**\n * @internal\n */\nfunction colorBlend (a: string, b: string, mix: number): string {\n let ca, cb, res\n let str = '#'\n const hex = '0123456789abcdef'\n for (let i = 0; i < 3; i++) {\n ca = parseInt(a.slice(i * 2 + 1, i * 2 + 3), 16)\n cb = parseInt(b.slice(i * 2 + 1, i * 2 + 3), 16)\n res = ca * (1.0 - mix) + cb * mix // @@@ rounding\n const res2 = parseInt(('' + res).split('.')[0]) // @@ ugh\n const h = parseInt(('' + res2 / 16).split('.')[0]) // @@ ugh\n const l = parseInt(('' + (res2 % 16)).split('.')[0]) // @@ ugh\n str += hex[h] + hex[l]\n }\n return str\n}\n\n/**\n * @internal\n */\nfunction isLight (x: string): boolean {\n let total = 0\n for (let i = 0; i < 3; i++) {\n total += parseInt(x.slice(i * 2 + 1, i * 2 + 3), 16)\n }\n return total > 128 * 3\n}\n"],"file":"tabs.js"}
|
package/lib/versionInfo.js
CHANGED
|
@@ -5,12 +5,12 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
5
5
|
});
|
|
6
6
|
exports["default"] = void 0;
|
|
7
7
|
var _default = {
|
|
8
|
-
buildTime: '2021-12-
|
|
9
|
-
commit: '
|
|
8
|
+
buildTime: '2021-12-25T19:07:50Z',
|
|
9
|
+
commit: '86bc253a888d14296d3f0d9ff48462c64f83a08b',
|
|
10
10
|
npmInfo: {
|
|
11
|
-
'solid-ui': '2.4.
|
|
11
|
+
'solid-ui': '2.4.13',
|
|
12
12
|
npm: '6.14.15',
|
|
13
|
-
ares: '1.
|
|
13
|
+
ares: '1.18.1',
|
|
14
14
|
brotli: '1.0.9',
|
|
15
15
|
cldr: '39.0',
|
|
16
16
|
icu: '69.1',
|
|
@@ -18,12 +18,12 @@ var _default = {
|
|
|
18
18
|
modules: '83',
|
|
19
19
|
napi: '8',
|
|
20
20
|
nghttp2: '1.42.0',
|
|
21
|
-
node: '14.18.
|
|
21
|
+
node: '14.18.2',
|
|
22
22
|
openssl: '1.1.1l',
|
|
23
23
|
tz: '2021a',
|
|
24
24
|
unicode: '13.0',
|
|
25
25
|
uv: '1.42.0',
|
|
26
|
-
v8: '8.4.371.23-node.
|
|
26
|
+
v8: '8.4.371.23-node.85',
|
|
27
27
|
zlib: '1.2.11'
|
|
28
28
|
}
|
|
29
29
|
};
|