From 59da25ef555c072ce9d3d5aee501fab43b5451a9 Mon Sep 17 00:00:00 2001 From: zadam Date: Thu, 15 Aug 2019 10:04:03 +0200 Subject: [PATCH] sidebar & widget state management WIP --- package-lock.json | 252 ++++++++++++------ package.json | 4 +- .../javascripts/services/note_detail.js | 16 +- src/public/javascripts/services/sidebar.js | 13 + .../javascripts/services/tab_context.js | 17 ++ src/public/javascripts/widgets/attributes.js | 24 +- src/public/javascripts/widgets/link_map.js | 19 ++ src/public/javascripts/widgets/note_info.js | 19 ++ .../javascripts/widgets/note_revisions.js | 19 ++ 9 files changed, 286 insertions(+), 97 deletions(-) diff --git a/package-lock.json b/package-lock.json index 16c5cca97..b104ea359 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "trilium", - "version": "0.34.2", + "version": "0.34.3", "lockfileVersion": 1, "requires": true, "dependencies": { @@ -599,9 +599,9 @@ } }, "@types/debug": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.4.tgz", - "integrity": "sha512-D9MyoQFI7iP5VdpEyPZyjjqIJ8Y8EDNQFIFVLOmeg1rI1xiHOChyUPMPRUVfqFCerxfE+yS3vMyj37F6IdtOoQ==", + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.5.tgz", + "integrity": "sha512-Q1y515GcOdTHgagaVFhHnIFQ38ygs/kmxdNpvpou+raI9UO3YZcHDngBSYKQklcKlvA7iuQlmIKbzvmxcOE9CQ==", "dev": true }, "@types/events": { @@ -795,27 +795,27 @@ "integrity": "sha512-uMgjozySS8adZZYePpaWs8cxB9/kdzmpX6SgJZ+wbz1K5eYk5QMYDVJaZKhxyIHUdnnJkfR7SVgStgH7LkGUyg==" }, "app-builder-bin": { - "version": "3.4.2", - "resolved": "https://registry.npmjs.org/app-builder-bin/-/app-builder-bin-3.4.2.tgz", - "integrity": "sha512-E9VvUrZm60oLl0rvLw/ErvZiEOIHkulZbJ9C9TWMD4ftNrkXFc2+a5JGlD19Bwvj329d4qz91zs/hWD01q18TQ==", + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/app-builder-bin/-/app-builder-bin-3.4.3.tgz", + "integrity": "sha512-qMhayIwi3juerQEVJMQ76trObEbfQT0nhUdxZz9a26/3NLT3pE6awmQ8S1cEnrGugaaM5gYqR8OElcDezfmEsg==", "dev": true }, "app-builder-lib": { - "version": "21.1.5", - "resolved": "https://registry.npmjs.org/app-builder-lib/-/app-builder-lib-21.1.5.tgz", - "integrity": "sha512-hLsSVSstMTq33a9jbBStrF0e+fa6eWXWIpsatPvHnJlkjx7dAZ5d2cZPe/1bAO3bCL3afpRl5j+HU853eGfDCg==", + "version": "21.2.0", + "resolved": "https://registry.npmjs.org/app-builder-lib/-/app-builder-lib-21.2.0.tgz", + "integrity": "sha512-aOX/nv77/Bti6NymJDg7p9T067xD8m1ipIEJR7B4Mm1GsJWpMm9PZdXtCRiMNRjHtQS5KIljT0g17781y6qn5A==", "dev": true, "requires": { "7zip-bin": "~5.0.3", "@develar/schema-utils": "~2.1.0", "async-exit-hook": "^2.0.1", "bluebird-lst": "^1.0.9", - "builder-util": "21.1.5", + "builder-util": "21.2.0", "builder-util-runtime": "8.3.0", "chromium-pickle-js": "^0.2.0", "debug": "^4.1.1", "ejs": "^2.6.2", - "electron-publish": "21.1.5", + "electron-publish": "21.2.0", "fs-extra": "^8.1.0", "hosted-git-info": "^2.7.1", "is-ci": "^2.0.0", @@ -825,7 +825,7 @@ "minimatch": "^3.0.4", "normalize-package-data": "^2.5.0", "read-config-file": "5.0.0", - "sanitize-filename": "^1.6.1", + "sanitize-filename": "^1.6.2", "semver": "^6.3.0", "temp-file": "^3.3.4" }, @@ -874,27 +874,21 @@ }, "dependencies": { "semver": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz", - "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==", + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", "dev": true } } }, "resolve": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.11.1.tgz", - "integrity": "sha512-vIpgF6wfuJOZI7KKKSP+HmiKggadPQAdsp5HiC1mvqnfp0gF1vdwgBWZIdrVft9pgqoMFQN+R7BSWZiBxx+BBw==", + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.12.0.tgz", + "integrity": "sha512-B/dOmuoAik5bKcD6s6nXDCjzUKnaDvdkRyAk6rsmsKLipWj4797iothd7jmmUhWTfinVMU+wc56rYKsit2Qy4w==", "dev": true, "requires": { "path-parse": "^1.0.6" } - }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true } } }, @@ -1233,6 +1227,14 @@ "url-regex": "^3.0.0" }, "dependencies": { + "rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "requires": { + "glob": "^7.1.3" + } + }, "tempfile": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/tempfile/-/tempfile-1.1.1.tgz", @@ -1609,14 +1611,14 @@ } }, "builder-util": { - "version": "21.1.5", - "resolved": "https://registry.npmjs.org/builder-util/-/builder-util-21.1.5.tgz", - "integrity": "sha512-RBr06OnoTKTkg0W7Om2dnuKe8I82CiciU9EdsNnLO8DAfH0ZVCPsVpc3qYmr7g/7cH3zXA3yyQP73QDGNpbVYQ==", + "version": "21.2.0", + "resolved": "https://registry.npmjs.org/builder-util/-/builder-util-21.2.0.tgz", + "integrity": "sha512-Nd6CUb6YgDY8EXAXEIegx+1kzKqyFQ5ZM5BoYkeunAlwz/zDJoH1UCyULjoS5wQe5czNClFQy07zz2bzYD0Z4A==", "dev": true, "requires": { "7zip-bin": "~5.0.3", "@types/debug": "^4.1.4", - "app-builder-bin": "3.4.2", + "app-builder-bin": "3.4.3", "bluebird-lst": "^1.0.9", "builder-util-runtime": "8.3.0", "chalk": "^2.4.2", @@ -1624,7 +1626,7 @@ "fs-extra": "^8.1.0", "is-ci": "^2.0.0", "js-yaml": "^3.13.1", - "source-map-support": "^0.5.12", + "source-map-support": "^0.5.13", "stat-mode": "^0.3.0", "temp-file": "^3.3.4" }, @@ -2275,9 +2277,9 @@ } }, "content-security-policy-builder": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/content-security-policy-builder/-/content-security-policy-builder-2.0.0.tgz", - "integrity": "sha512-j+Nhmj1yfZAikJLImCvPJFE29x/UuBi+/MWqggGGc515JKaZrjuei2RhULJmy0MsstW3E3htl002bwmBNMKr7w==" + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/content-security-policy-builder/-/content-security-policy-builder-2.1.0.tgz", + "integrity": "sha512-/MtLWhJVvJNkA9dVLAp6fg9LxD2gfI6R2Fi1hPmfjYXSahJJzcfvoeDOxSyp4NvxMuwWv3WMssE9o31DoULHrQ==" }, "content-type": { "version": "1.0.4", @@ -2371,6 +2373,17 @@ "dev": true, "requires": { "rimraf": "^2.5.2" + }, + "dependencies": { + "rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + } } }, "crypto-random-string": { @@ -2901,18 +2914,18 @@ } }, "dmg-builder": { - "version": "21.1.5", - "resolved": "https://registry.npmjs.org/dmg-builder/-/dmg-builder-21.1.5.tgz", - "integrity": "sha512-o9rZua7mzNzZIo9SZJi57ZXe4zjNaajxEJ0LO/8k2z8Q2CL57RIaJZ95sA6G0dC1/g5Gm4cmW3O5nv9Ur8Ayow==", + "version": "21.2.0", + "resolved": "https://registry.npmjs.org/dmg-builder/-/dmg-builder-21.2.0.tgz", + "integrity": "sha512-9cJEclnGy7EyKFCoHDYDf54pub/t92CQapyiUxU0w9Bj2vUvfoDagP1PMiX4XD5rPp96141h9A+QN0OB4VgvQg==", "dev": true, "requires": { - "app-builder-lib": "~21.1.5", + "app-builder-lib": "~21.2.0", "bluebird-lst": "^1.0.9", - "builder-util": "~21.1.5", + "builder-util": "~21.2.0", "fs-extra": "^8.1.0", "iconv-lite": "^0.5.0", "js-yaml": "^3.13.1", - "sanitize-filename": "^1.6.1" + "sanitize-filename": "^1.6.2" }, "dependencies": { "esprima": { @@ -3119,22 +3132,22 @@ } }, "electron-builder": { - "version": "21.1.5", - "resolved": "https://registry.npmjs.org/electron-builder/-/electron-builder-21.1.5.tgz", - "integrity": "sha512-2tEgBESGWQ661dC9/rZlpbtmhlofoNPwnkO6KUuCZUBYpFMRvpMzH2IF7vQYsCst78yxnrV0CtiBePhM1i+DfA==", + "version": "21.2.0", + "resolved": "https://registry.npmjs.org/electron-builder/-/electron-builder-21.2.0.tgz", + "integrity": "sha512-x8EXrqFbAb2L3N22YlGar3dGh8vwptbB3ovo3OF6K7NTpcsmM2zEoJv7GhFyX73rNzSG2HaWpXwGAtOp2JWiEw==", "dev": true, "requires": { - "app-builder-lib": "21.1.5", + "app-builder-lib": "21.2.0", "bluebird-lst": "^1.0.9", - "builder-util": "21.1.5", + "builder-util": "21.2.0", "builder-util-runtime": "8.3.0", "chalk": "^2.4.2", - "dmg-builder": "21.1.5", + "dmg-builder": "21.2.0", "fs-extra": "^8.1.0", "is-ci": "^2.0.0", "lazy-val": "^1.0.4", "read-config-file": "5.0.0", - "sanitize-filename": "^1.6.1", + "sanitize-filename": "^1.6.2", "update-notifier": "^3.0.1", "yargs": "^13.3.0" }, @@ -3613,6 +3626,15 @@ "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", "dev": true }, + "rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + }, "yargs": { "version": "4.8.1", "resolved": "https://registry.npmjs.org/yargs/-/yargs-4.8.1.tgz", @@ -3648,9 +3670,9 @@ } }, "electron-context-menu": { - "version": "0.13.0", - "resolved": "https://registry.npmjs.org/electron-context-menu/-/electron-context-menu-0.13.0.tgz", - "integrity": "sha512-a98UDykOn+tiyb2mQEz710ZNWj/L85wHv6jRUJFE9GNLSaRH5I5BR022RYoWInLTj1Mns66vh9SueyMPWc+aTQ==", + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/electron-context-menu/-/electron-context-menu-0.14.0.tgz", + "integrity": "sha512-7PuDz0Z3Eebhg/OS3JfPqHrQYl5ApokT/05PPUbNELk0EHBfFZwVcVneOJ05SlaGagK1bfQIXf75WSZt/K23VA==", "requires": { "cli-truncate": "^2.0.0", "electron-dl": "^1.2.0", @@ -3803,6 +3825,17 @@ "dev": true, "requires": { "rimraf": "^2.6.3" + }, + "dependencies": { + "rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + } } }, "tmp-promise": { @@ -3932,13 +3965,13 @@ } }, "electron-publish": { - "version": "21.1.5", - "resolved": "https://registry.npmjs.org/electron-publish/-/electron-publish-21.1.5.tgz", - "integrity": "sha512-EgFxZJBrb+EBUcEwg8RNKouoBaOEpACnjLi+ipUsk72x+/6kzhcofAYBchIkGns7meengoXy7QdoiThgpr6rew==", + "version": "21.2.0", + "resolved": "https://registry.npmjs.org/electron-publish/-/electron-publish-21.2.0.tgz", + "integrity": "sha512-mWavuoWJe87iaeKd0I24dNWIaR+0yRzshjNVqGyK019H766fsPWl3caQJnVKFaEyrZRP397v4JZVG0e7s16AxA==", "dev": true, "requires": { "bluebird-lst": "^1.0.9", - "builder-util": "~21.1.5", + "builder-util": "~21.2.0", "builder-util-runtime": "8.3.0", "chalk": "^2.4.2", "fs-extra": "^8.1.0", @@ -4856,6 +4889,16 @@ "pify": "^3.0.0", "rimraf": "^2.5.4", "tempfile": "^2.0.0" + }, + "dependencies": { + "rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "requires": { + "glob": "^7.1.3" + } + } } }, "exec-series": { @@ -5457,9 +5500,9 @@ } }, "file-type": { - "version": "12.0.1", - "resolved": "https://registry.npmjs.org/file-type/-/file-type-12.0.1.tgz", - "integrity": "sha512-YIs1E51cmqcmgF38ODjy0+M/l5DyfIIy3vngTOujQr/lXqkaSskfBniaZoZ1HVIpa5FTf5e7hCXS4TzxfNGMRQ==" + "version": "12.1.0", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-12.1.0.tgz", + "integrity": "sha512-aZkf42yWGiH+vSOpbVgvbnoRuX4JiitMX9pHYqTHemNQ3lrx64iHi33YGAP7TSJSno56kxQY1lHmw8S6ujlFUg==" }, "filename-regex": { "version": "2.0.1", @@ -5643,6 +5686,17 @@ "graceful-fs": "^4.1.2", "rimraf": "~2.6.2", "write": "^0.2.1" + }, + "dependencies": { + "rimraf": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", + "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + } } }, "flora-colossus": { @@ -6519,9 +6573,9 @@ "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==" }, "helmet": { - "version": "3.19.0", - "resolved": "https://registry.npmjs.org/helmet/-/helmet-3.19.0.tgz", - "integrity": "sha512-l58Q3unSpYatlurvFzkCbTRQ8oWUmdXbOs7h+pnwQbFJRhRJDjER6UMyqHxp9iFtWPcVA05VLcUGSi0EXIv7GA==", + "version": "3.20.0", + "resolved": "https://registry.npmjs.org/helmet/-/helmet-3.20.0.tgz", + "integrity": "sha512-Ob+TqmQFZ5f7WgP8kBbAzNPsbf6p1lOj5r+327/ymw/IILWih3wcx9u/u/S8Mwv5wbBkO7Li6x5s23t3COhUKw==", "requires": { "depd": "2.0.0", "dns-prefetch-control": "0.2.0", @@ -6530,7 +6584,7 @@ "feature-policy": "0.3.0", "frameguard": "3.1.0", "helmet-crossdomain": "0.4.0", - "helmet-csp": "2.7.1", + "helmet-csp": "2.8.0", "hide-powered-by": "1.1.0", "hpkp": "2.0.0", "hsts": "2.2.0", @@ -6553,12 +6607,12 @@ "integrity": "sha512-AB4DTykRw3HCOxovD1nPR16hllrVImeFp5VBV9/twj66lJ2nU75DP8FPL0/Jp4jj79JhTfG+pFI2MD02kWJ+fA==" }, "helmet-csp": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/helmet-csp/-/helmet-csp-2.7.1.tgz", - "integrity": "sha512-sCHwywg4daQ2mY0YYwXSZRsgcCeerUwxMwNixGA7aMLkVmPTYBl7gJoZDHOZyXkqPrtuDT3s2B1A+RLI7WxSdQ==", + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/helmet-csp/-/helmet-csp-2.8.0.tgz", + "integrity": "sha512-MlCPeM0Sm3pS9RACRihx70VeTHmkQwa7sum9EK1tfw1VZyvFU0dBWym9nHh3CRkTRNlyNm/WFCMvuh9zXkOjNw==", "requires": { "camelize": "1.0.0", - "content-security-policy-builder": "2.0.0", + "content-security-policy-builder": "2.1.0", "dasherize": "2.0.0", "platform": "1.3.5" } @@ -9066,17 +9120,17 @@ "integrity": "sha512-0L9FvHG3nfnnmaEQPjT9xhfN4ISk0A8/2j4M37Np4mcDesJjHgEUfgPhdCyZuFI954tjokaIj/A3NdpFNdEh4Q==" }, "node-abi": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-2.10.0.tgz", - "integrity": "sha512-OT0WepUvYHXdki6DU8LWhEkuo3M44i2paWBYtH9qXtPb9YiKlYEKa5WUII20XEcOv7UJPzfB0kZfPZdW46zdkw==", + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-2.11.0.tgz", + "integrity": "sha512-kuy/aEg75u40v378WRllQ4ZexaXJiCvB68D2scDXclp/I4cRq6togpbOoKhmN07tns9Zldu51NNERo0wehfX9g==", "requires": { "semver": "^5.4.1" }, "dependencies": { "semver": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz", - "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==" + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" } } }, @@ -9108,6 +9162,15 @@ "abbrev": "1" } }, + "rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + }, "semver": { "version": "5.3.0", "resolved": "http://registry.npmjs.org/semver/-/semver-5.3.0.tgz", @@ -9133,6 +9196,14 @@ "tar": "^4" }, "dependencies": { + "rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "requires": { + "glob": "^7.1.3" + } + }, "semver": { "version": "5.7.0", "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz", @@ -11336,9 +11407,9 @@ "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==" }, "rimraf": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", - "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.0.tgz", + "integrity": "sha512-NDGVxTsjqfunkds7CqsOiEnxln4Bo7Nddl3XhS4pXg5OzwkLqJ971ZVAAnB+DDLnF76N+VnDEiBHaVV8I06SUg==", "requires": { "glob": "^7.1.3" } @@ -11391,9 +11462,9 @@ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" }, "sanitize-filename": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/sanitize-filename/-/sanitize-filename-1.6.1.tgz", - "integrity": "sha1-YS2hyWRz+gLczaktzVtKsWSmdyo=", + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/sanitize-filename/-/sanitize-filename-1.6.2.tgz", + "integrity": "sha512-cmTzND7RMxUB+f7gI+4+KAVHWEg0lfXvQJdko+FXDP5bNbGIdx4KMP5pX6lv5jfT9jSf6OBbjyxjFtZQwYA/ig==", "requires": { "truncate-utf8-bytes": "^1.0.0" } @@ -11412,9 +11483,9 @@ } }, "semver": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.2.0.tgz", - "integrity": "sha512-jdFC1VdUGT/2Scgbimf7FSx9iJLXoqfglSF+gJeuNWVpiE37OIbc1jywR/GJyFdz3mnkz2/id0L0J/cr0izR5A==" + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" }, "semver-diff": { "version": "2.1.0", @@ -11834,9 +11905,9 @@ } }, "source-map-support": { - "version": "0.5.12", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.12.tgz", - "integrity": "sha512-4h2Pbvyy15EE02G+JOZpUCmqWJuqrs+sEkzewTm++BPi7Hvn/HwcqLAcNxYAyI0x13CpPPn+kMjl+hplXMHITQ==", + "version": "0.5.13", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz", + "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==", "dev": true, "requires": { "buffer-from": "^1.0.0", @@ -12488,6 +12559,17 @@ "dev": true, "requires": { "rimraf": "^2.6.3" + }, + "dependencies": { + "rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + } } }, "tmp-promise": { @@ -13323,9 +13405,9 @@ } }, "ws": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.1.0.tgz", - "integrity": "sha512-Swie2C4fs7CkwlHu1glMePLYJJsWjzhl1vm3ZaLplD0h7OMkZyZ6kLTB/OagiU923bZrPFXuDTeEqaEN4NWG4g==", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.1.1.tgz", + "integrity": "sha512-o41D/WmDeca0BqYhsr3nJzQyg9NF5X8l/UdnFNux9cS3lwB+swm8qGWX5rn+aD6xfBU3rGmtHij7g7x6LxFU3A==", "requires": { "async-limiter": "^1.0.0" } diff --git a/package.json b/package.json index ac6e85012..93199a916 100644 --- a/package.json +++ b/package.json @@ -55,13 +55,13 @@ "mime-types": "2.1.24", "moment": "2.24.0", "multer": "1.4.2", - "node-abi": "2.10.0", + "node-abi": "2.11.0", "open": "6.4.0", "pngjs": "3.4.0", "portscanner": "2.2.0", "rand-token": "0.4.0", "rcedit": "2.0.0", - "rimraf": "2.6.3", + "rimraf": "3.0.0", "sanitize-filename": "1.6.2", "sax": "1.2.4", "semver": "6.3.0", diff --git a/src/public/javascripts/services/note_detail.js b/src/public/javascripts/services/note_detail.js index 1fd81ed51..160de4ed0 100644 --- a/src/public/javascripts/services/note_detail.js +++ b/src/public/javascripts/services/note_detail.js @@ -513,19 +513,18 @@ function openTabsChanged() { } async function saveOpenTabs() { - const activeTabEl = tabRow.activeTabEl; const openTabs = []; for (const tabEl of tabRow.tabEls) { const tabId = tabEl.getAttribute('data-tab-id'); const tabContext = tabContexts.find(tc => tc.tabId === tabId); - if (tabContext && tabContext.notePath) { - openTabs.push({ - tabId: tabContext.tabId, - notePath: tabContext.notePath, - active: activeTabEl === tabEl - }); + if (tabContext) { + const tabState = tabContext.getTabState(); + + if (tabState) { + openTabs.push(tabState); + } } } @@ -573,5 +572,6 @@ export default { openEmptyTab, noteDeleted, refreshTabs, - noteChanged + noteChanged, + openTabsChanged }; \ No newline at end of file diff --git a/src/public/javascripts/services/sidebar.js b/src/public/javascripts/services/sidebar.js index 612558181..8da56c745 100644 --- a/src/public/javascripts/services/sidebar.js +++ b/src/public/javascripts/services/sidebar.js @@ -38,14 +38,27 @@ class Sidebar { this.$hideSidebarButton.click(() => { this.$sidebar.hide(); this.$showSideBarButton.show(); + this.ctx.stateChanged(); }); this.$showSideBarButton.click(() => { this.$sidebar.show(); this.$showSideBarButton.hide(); + this.ctx.stateChanged(); }); } + isVisible() { + return this.$sidebar.is(":visible"); + } + + getSidebarState() { + return { + visible: this.isVisible(), + widgets: this.widgets.map(w => w.getWidgetState()) + } + } + async noteLoaded() { this.widgets = []; this.$widgets.empty(); diff --git a/src/public/javascripts/services/tab_context.js b/src/public/javascripts/services/tab_context.js index a902a7ea6..617bbb8c8 100644 --- a/src/public/javascripts/services/tab_context.js +++ b/src/public/javascripts/services/tab_context.js @@ -363,6 +363,23 @@ class TabContext { this.sidebar.syncDataReceived(syncData); } } + + getTabState() { + if (!this.notePath) { + return null; + } + + return { + tabId: this.tabId, + notePath: this.notePath, + active: this.tabRow.activeTabEl === this.$tab[0], + sidebar: this.sidebar && this.sidebar.getSidebarState() + } + } + + stateChanged() { + noteDetailService.openTabsChanged(); + } } export default TabContext; \ No newline at end of file diff --git a/src/public/javascripts/widgets/attributes.js b/src/public/javascripts/widgets/attributes.js index 1aec87f4a..febfc2ca1 100644 --- a/src/public/javascripts/widgets/attributes.js +++ b/src/public/javascripts/widgets/attributes.js @@ -11,9 +11,13 @@ class AttributesWidget { constructor(ctx, $widget) { this.ctx = ctx; this.$widget = $widget; + this.$widget.on('show.bs.collapse', () => this.renderBody()); + this.$widget.on('show.bs.collapse', () => this.ctx.stateChanged()); + this.$widget.on('hide.bs.collapse', () => this.ctx.stateChanged()); this.$title = this.$widget.find('.widget-title'); this.$title.text("Attributes"); this.$headerActions = this.$widget.find('.widget-header-actions'); + this.$bodyWrapper = this.$widget.find('.body-wrapper'); const $showFullButton = $("").append("show dialog").addClass('widget-header-action'); $showFullButton.click(() => { @@ -24,13 +28,18 @@ class AttributesWidget { } async renderBody() { + if (!this.isVisible()) { + return; + } + const $body = this.$widget.find('.card-body'); const attributes = await this.ctx.attributes.getAttributes(); const ownedAttributes = attributes.filter(attr => attr.noteId === this.ctx.note.noteId); - if (ownedAttributes.length === 0) { - $body.text("No own attributes yet..."); + if (attributes.length === 0) { + $body.text("No attributes yet..."); + return; } const $attributesContainer = $("
"); @@ -96,6 +105,17 @@ class AttributesWidget { this.renderBody(); } } + + getWidgetState() { + return { + id: 'attributes', + visible: this.isVisible() + }; + } + + isVisible() { + return this.$bodyWrapper.is(":visible"); + } } export default AttributesWidget; \ No newline at end of file diff --git a/src/public/javascripts/widgets/link_map.js b/src/public/javascripts/widgets/link_map.js index 8e4ced14d..a6bac5f8e 100644 --- a/src/public/javascripts/widgets/link_map.js +++ b/src/public/javascripts/widgets/link_map.js @@ -30,9 +30,13 @@ class LinkMapWidget { constructor(ctx, $widget) { this.ctx = ctx; this.$widget = $widget; + this.$widget.on('show.bs.collapse', () => this.renderBody()); + this.$widget.on('show.bs.collapse', () => this.ctx.stateChanged()); + this.$widget.on('hide.bs.collapse', () => this.ctx.stateChanged()); this.$title = this.$widget.find('.widget-title'); this.$title.text("Link map"); this.$headerActions = this.$widget.find('.widget-header-actions'); + this.$bodyWrapper = this.$widget.find('.body-wrapper'); const $showFullButton = $("").append("show full").addClass('widget-header-action'); $showFullButton.click(() => { @@ -43,6 +47,10 @@ class LinkMapWidget { } async renderBody() { + if (!this.isVisible()) { + return; + } + const $body = this.$widget.find('.card-body'); $body.html(TPL); @@ -225,6 +233,17 @@ class LinkMapWidget { noteIdToId(noteId) { return "link-map-note-" + noteId; } + + getWidgetState() { + return { + id: 'attributes', + visible: this.isVisible() + }; + } + + isVisible() { + return this.$bodyWrapper.is(":visible"); + } } export default LinkMapWidget; \ No newline at end of file diff --git a/src/public/javascripts/widgets/note_info.js b/src/public/javascripts/widgets/note_info.js index 893c28a1c..705b59648 100644 --- a/src/public/javascripts/widgets/note_info.js +++ b/src/public/javascripts/widgets/note_info.js @@ -31,11 +31,19 @@ class NoteInfoWidget { constructor(ctx, $widget) { this.ctx = ctx; this.$widget = $widget; + this.$widget.on('show.bs.collapse', () => this.renderBody()); + this.$widget.on('show.bs.collapse', () => this.ctx.stateChanged()); + this.$widget.on('hide.bs.collapse', () => this.ctx.stateChanged()); this.$title = this.$widget.find('.widget-title'); this.$title.text("Note info"); + this.$bodyWrapper = this.$widget.find('.body-wrapper'); } async renderBody() { + if (!this.isVisible()) { + return; + } + const $body = this.$widget.find('.card-body'); $body.html(TPL); @@ -60,6 +68,17 @@ class NoteInfoWidget { this.renderBody(); } } + + getWidgetState() { + return { + id: 'attributes', + visible: this.isVisible() + }; + } + + isVisible() { + return this.$bodyWrapper.is(":visible"); + } } export default NoteInfoWidget; \ No newline at end of file diff --git a/src/public/javascripts/widgets/note_revisions.js b/src/public/javascripts/widgets/note_revisions.js index da3251a3e..9f210d778 100644 --- a/src/public/javascripts/widgets/note_revisions.js +++ b/src/public/javascripts/widgets/note_revisions.js @@ -13,11 +13,19 @@ class NoteRevisionsWidget { constructor(ctx, $widget) { this.ctx = ctx; this.$widget = $widget; + this.$widget.on('show.bs.collapse', () => this.renderBody()); + this.$widget.on('show.bs.collapse', () => this.ctx.stateChanged()); + this.$widget.on('hide.bs.collapse', () => this.ctx.stateChanged()); this.$title = this.$widget.find('.widget-title'); this.$title.text("Note revisions"); + this.$bodyWrapper = this.$widget.find('.body-wrapper'); } async renderBody() { + if (!this.isVisible()) { + return; + } + const $body = this.$widget.find('.card-body'); const revisionItems = await server.get(`notes/${this.ctx.note.noteId}/revisions`); @@ -45,6 +53,17 @@ class NoteRevisionsWidget { this.renderBody(); } } + + getWidgetState() { + return { + id: 'attributes', + visible: this.isVisible() + }; + } + + isVisible() { + return this.$bodyWrapper.is(":visible"); + } } export default NoteRevisionsWidget; \ No newline at end of file