diff --git a/package-lock.json b/package-lock.json index 9f70d8b4e..1ba45bc9e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1337,9 +1337,9 @@ } }, "async-mutex": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/async-mutex/-/async-mutex-0.2.3.tgz", - "integrity": "sha512-766xaN3BZJyNa7rxdsN1XV34/XFKiyuqJ7VBc8wrCS3wetLdCEgvarIiv7U+Mojly8TVxZxAXZcmFBEdmvDVCA==", + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/async-mutex/-/async-mutex-0.2.4.tgz", + "integrity": "sha512-fcQKOXUKMQc57JlmjBCHtkKNrfGpHyR7vu18RfuLfeTAf4hK9PgOadPR5cDrBQ682zasrLUhJFe7EKAHJOduDg==", "requires": { "tslib": "^2.0.0" }, @@ -2841,9 +2841,9 @@ } }, "electron": { - "version": "10.0.0-beta.4", - "resolved": "https://registry.npmjs.org/electron/-/electron-10.0.0-beta.4.tgz", - "integrity": "sha512-/Jp9i0yiuM/WUdiKFjf7+5gZQJITGhijl++Zp31m94MY+QNMLEnFhaKLSqzrmPA2FPrXn2KlUPNpQs+4Wjcvpg==", + "version": "10.0.0-beta.9", + "resolved": "https://registry.npmjs.org/electron/-/electron-10.0.0-beta.9.tgz", + "integrity": "sha512-trK7AsHIr8+f5kfCVLM/IAiHhr0CVIpf6GEokvkUMqoi/6q3q2PAgeaPnQhb102AREwKruCiE/wVEXCZiY7spQ==", "dev": true, "requires": { "@electron/get": "^1.0.1", diff --git a/package.json b/package.json index f63f95d70..2fabe2f85 100644 --- a/package.json +++ b/package.json @@ -75,7 +75,7 @@ }, "devDependencies": { "cross-env": "^7.0.2", - "electron": "10.0.0-beta.4", + "electron": "10.0.0-beta.9", "electron-builder": "22.7.0", "electron-packager": "15.0.0", "electron-rebuild": "1.11.0", diff --git a/spec-es6/attribute_parser.spec.js b/spec-es6/attribute_parser.spec.js index 899969fc3..7a779531a 100644 --- a/spec-es6/attribute_parser.spec.js +++ b/spec-es6/attribute_parser.spec.js @@ -1,6 +1,13 @@ import attributeParser from '../src/public/app/services/attribute_parser.js'; import {describe, it, expect, execute} from './mini_test.js'; +describe("Preprocessor", () => { + it("relation with value", () => { + expect(attributeParser.preprocess('

~relation = note 

')) + .toEqual("~relation = #root/RclIpMauTOKS/NFi2gL4xtPxM "); + }); +}); + describe("Lexer", () => { it("simple label", () => { expect(attributeParser.lexer("#label").map(t => t.text)) @@ -19,11 +26,8 @@ describe("Lexer", () => { }); it("relation with value", () => { - expect(attributeParser.lexer('~relation=note').map(t => t.text)) + expect(attributeParser.lexer('~relation=#root/RclIpMauTOKS/NFi2gL4xtPxM').map(t => t.text)) .toEqual(["~relation", "=", "#root/RclIpMauTOKS/NFi2gL4xtPxM"]); - - expect(attributeParser.lexer('~relation=note').map(t => t.text)) - .toEqual(["~relation", "=", "#NFi2gL4xtPxM"]); }); it("use quotes to define value", () => { @@ -74,7 +78,7 @@ describe("Parser", () => { }); it("error cases", () => { - expect(() => attributeParser.parser(["~token"].map(t => ({text: t})))) + expect(() => attributeParser.parser(["~token"].map(t => ({text: t})), "~token")) .toThrow('Relation "~token" should point to a note.'); }); }); diff --git a/spec-es6/mini_test.js b/spec-es6/mini_test.js index 525cdc50b..820999fde 100644 --- a/spec-es6/mini_test.js +++ b/spec-es6/mini_test.js @@ -44,6 +44,7 @@ export function expect(val) { console.trace("toThrow caught exception, but messages differ"); console.error(`expected: ${errorMessage}`); console.error(`got: ${e.message}`); + console.error(`${e.stack}`); errorCount++; } diff --git a/src/public/app/services/attribute_parser.js b/src/public/app/services/attribute_parser.js index 7507aec89..2921e8cb5 100644 --- a/src/public/app/services/attribute_parser.js +++ b/src/public/app/services/attribute_parser.js @@ -195,6 +195,7 @@ function lexAndParse(str, allowEmptyRelations = false) { } export default { + preprocess, lexer, parser, lexAndParse diff --git a/src/public/app/widgets/attribute_detail.js b/src/public/app/widgets/attribute_detail.js index 2aa6962a2..289a0b30c 100644 --- a/src/public/app/widgets/attribute_detail.js +++ b/src/public/app/widgets/attribute_detail.js @@ -115,13 +115,16 @@ export default class AttributeDetailWidget extends BasicWidget { }); } - async showAttributeDetail({attribute, isOwned, x, y}) { + async showAttributeDetail({allAttributes, attribute, isOwned, x, y}) { if (!attribute) { this.hide(); return; } + this.allAttributes = allAttributes; + this.attribute = attribute; + this.toggleInt(true); let {results, count} = await server.post('search-related', attribute); @@ -173,11 +176,13 @@ export default class AttributeDetailWidget extends BasicWidget { this.$attrEditName .val(attribute.name) - .attr('readonly', () => !isOwned); + .attr('readonly', () => !isOwned) + .on('keyup', () => this.updateParent()); this.$attrEditValue .val(attribute.value) - .attr('readonly', () => !isOwned); + .attr('readonly', () => !isOwned) + .on('keyup', () => this.updateParent()); this.$attrEditButtonRow.toggle(!!isOwned); @@ -186,6 +191,13 @@ export default class AttributeDetailWidget extends BasicWidget { this.$widget.show(); } + updateParent() { + this.attribute.name = this.$attrEditName.val(); + this.attribute.value = this.$attrEditValue.val(); + + this.triggerCommand('updateAttributeList', { attributes: this.allAttributes }); + } + hide() { this.toggleInt(false); } diff --git a/src/public/app/widgets/note_attributes.js b/src/public/app/widgets/note_attributes.js index 385ad148f..5b2ab5478 100644 --- a/src/public/app/widgets/note_attributes.js +++ b/src/public/app/widgets/note_attributes.js @@ -71,6 +71,59 @@ const mentionSetup = { ] }; +const editorConfig = { + removePlugins: [ + 'Enter', + 'ShiftEnter', + 'Heading', + 'Link', + 'Autoformat', + 'Bold', + 'Italic', + 'Underline', + 'Strikethrough', + 'Code', + 'Superscript', + 'Subscript', + 'BlockQuote', + 'Image', + 'ImageCaption', + 'ImageStyle', + 'ImageToolbar', + 'ImageUpload', + 'ImageResize', + 'List', + 'TodoList', + 'PasteFromOffice', + 'Table', + 'TableToolbar', + 'TableProperties', + 'TableCellProperties', + 'Indent', + 'IndentBlock', + 'BlockToolbar', + 'ParagraphButtonUI', + 'HeadingButtonsUI', + 'UploadimagePlugin', + 'InternalLinkPlugin', + 'MarkdownImportPlugin', + 'CuttonotePlugin', + 'TextTransformation', + 'Font', + 'FontColor', + 'FontBackgroundColor', + 'CodeBlock', + 'SelectAll', + 'IncludeNote', + 'CutToNote' + ], + toolbar: { + items: [] + }, + placeholder: "Type the labels and relations here ...", + mention: mentionSetup +}; + const TPL = `