From 6e05be9fee5ecd19c459d22d8bb19e1b5bab7ef6 Mon Sep 17 00:00:00 2001 From: "Alex A. Naanou" Date: Sat, 4 May 2019 15:46:04 +0300 Subject: [PATCH] updated generic-walk + .walk2(..) now fully works... Signed-off-by: Alex A. Naanou --- ui (gen4)/lib/widget/browse2.js | 71 ++++++++++++++----- ui (gen4)/package-lock.json | 118 +++++++++++++++++--------------- ui (gen4)/package.json | 8 +-- 3 files changed, 119 insertions(+), 78 deletions(-) diff --git a/ui (gen4)/lib/widget/browse2.js b/ui (gen4)/lib/widget/browse2.js index 9f05abc3..a903ea04 100755 --- a/ui (gen4)/lib/widget/browse2.js +++ b/ui (gen4)/lib/widget/browse2.js @@ -779,20 +779,45 @@ var BaseBrowserPrototype = { }, + // + // .walk2() + // -> list + // + // .walk2(func[, options]) + // .walk2(func, recursion[, options]) + // .walk2(func, recursion, walkable[, options]) + // -> list + // + // + // func(node, index, path, next(..), stop(..), children) + // -> list + // + // next(children) + // -> list + // + // stop(result) + // + // + // recursion(func(..), stop(..), index, path, children, options) + // -> list + // + // + // walkable(node) + // -> bool + // + // // XXX need to make this the same as .walk(..) from the user's // perspective with one addition, expose the root stop(..) // function to func... - // next steps: - // - get a feeling of this running - // - see if we need to change the API - // - either embed into .walk(..) or reimplement... + // XXX this uses a slightly different signature to func(..) that .walk(..) does... // XXX can this be simpler??? walk2: function(func, recursion, walkable, options){ var that = this // parse args... var args = [...arguments] - func = args[0] instanceof Function ? + func = (args[0] instanceof Function + || args[0] == null) ? args.shift() : undefined var recursion = (args[0] instanceof Function @@ -806,17 +831,18 @@ var BaseBrowserPrototype = { : null options = args.shift() || {} - // threaded args... + // recursion-threaded args... var i = args.shift() || 0 var path = args.shift() || [] + var stopParent = args.shift() || null // options specifics... options = !options.root ? Object.assign({}, - this.options, + this.options || {}, options, // set call context... - {root: this}) + { root: this }) : options var iterateNonIterable = options.iterateAll || options.iterateNonIterable var iterateCollapsed = options.iterateAll || options.iterateCollapsed @@ -855,11 +881,12 @@ var BaseBrowserPrototype = { return (list === false ? [] : list instanceof Array ? + // NOTE: this gets the path and i from context... next('do', state, ...(reverse ? list.slice().reverse() : list)) // user-defined recursion... : recursion instanceof Function ? - recursion.call(that, func, i, p, list, options) - : list[recursion || 'walk2'](func, recursion, walkable, options, i, p)) + recursion.call(that, func, stop, i, p, list, options) + : list.walk2(func, recursion, walkable, options, i, p, stop)) .run(function(){ // normalize... nested = this instanceof Array ? @@ -896,12 +923,14 @@ var BaseBrowserPrototype = { && doNested() // element... state.splice(state.length, 0, - ...[func.call(that, - ...(inline ? [null, i] : [node, i++]), - p, - doNested, - stop, - children) || []]) + ...[ func ? + (func.call(that, + ...(inline ? [null, i] : [node, i++]), + p, + doNested, + stop, + children) || []) + : [node] ]) // normal order -> do children... children && (doNested(), @@ -911,8 +940,14 @@ var BaseBrowserPrototype = { return state }, // normalize the root result... - function(state){ - return options.root === that ? + function(state, mode){ + // if we stopped, thread the stop up... + mode == 'stopped' + && stopParent instanceof Function + && stopParent(state) + // normalize the result... + return (options.root === that + && state instanceof Array) ? state.flat() : state }, [], diff --git a/ui (gen4)/package-lock.json b/ui (gen4)/package-lock.json index 1801fc3c..326b1c14 100755 --- a/ui (gen4)/package-lock.json +++ b/ui (gen4)/package-lock.json @@ -5,9 +5,9 @@ "requires": true, "dependencies": { "@types/node": { - "version": "10.12.18", - "resolved": "https://registry.npmjs.org/@types/node/-/node-10.12.18.tgz", - "integrity": "sha512-fh+pAqt4xRzPfqA6eh3Z2y6fyZavRIumvjhaCL753+TVkGKGhpPeyrJG2JftD0T9q4GF00KjefsQ+PQNDdWQaQ==" + "version": "10.14.6", + "resolved": "https://registry.npmjs.org/@types/node/-/node-10.14.6.tgz", + "integrity": "sha512-Fvm24+u85lGmV4hT5G++aht2C5I4Z4dYlWZIh62FAfFO/TfzXtPpoLI6I7AuBWkIFqZCnhFOoTT7RjjaIL5Fjg==" }, "ajv": { "version": "6.6.1", @@ -147,11 +147,6 @@ "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==" }, - "builtin-modules": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", - "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=" - }, "camelcase": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz", @@ -227,9 +222,9 @@ } }, "commander": { - "version": "2.19.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.19.0.tgz", - "integrity": "sha512-6tvAOO+D6OENvRAh524Dh9jcfKTYDQAqvqezbCW82xj5X0pSrcpxtvRKHLG0yBY6SD7PSDrJaj+0AiOcKVd1Xg==" + "version": "2.20.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.0.tgz", + "integrity": "sha512-7j2y+40w61zy6YC2iRNpUe/NwhNyoXrYpHMrSunaMG64nRnaf96zO/KMQR4OyN/UnE5KLyEBnKHd4aG3rskjpQ==" }, "concat-map": { "version": "0.0.1", @@ -285,11 +280,11 @@ } }, "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", "requires": { - "ms": "2.0.0" + "ms": "^2.1.1" } }, "decamelize": { @@ -335,9 +330,9 @@ } }, "electron": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/electron/-/electron-4.0.1.tgz", - "integrity": "sha512-kBWDLn1Vq8Tm6+/HpQc8gkjX7wJyQI8v/lf2kAirfi0Q4cXh6vBjozFvV1U/9gGCbyKnIDM+m8/wpyJIjg4w7g==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/electron/-/electron-4.2.0.tgz", + "integrity": "sha512-bn41xAekJ8h4QfMwmlsL3Qx1xUloTwVHBEKRg8hGDhecfdPgDdps60gfoZOhdL88avimahrP01Bd7Aijsyywdg==", "requires": { "@types/node": "^10.12.18", "electron-download": "^4.1.0", @@ -451,6 +446,11 @@ "requires": { "ms": "2.0.0" } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" } } }, @@ -1071,9 +1071,9 @@ } }, "generic-walk": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/generic-walk/-/generic-walk-1.3.1.tgz", - "integrity": "sha512-SWKd/3pnz4214suNn0+0hsfJmHkEoXXnU+oX2XtdmcCqOc8IzkioOry54cbp2Mvydvk0/3ebA2i0mqF5X7o/Ag==" + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/generic-walk/-/generic-walk-1.4.0.tgz", + "integrity": "sha512-xeU2id9PsCDO2Q+96sAQ0BItpTa5or2xFtQTTKVTqxJ/rpo4DGLAk/uNwZQJMUd5B48lccDqqGNh1ndbctF03g==" }, "get-stdin": { "version": "4.0.1", @@ -1222,14 +1222,6 @@ "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==" }, - "is-builtin-module": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz", - "integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=", - "requires": { - "builtin-modules": "^1.0.0" - } - }, "is-finite": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz", @@ -1351,13 +1343,6 @@ "pify": "^2.0.0", "pinkie-promise": "^2.0.0", "strip-bom": "^2.0.0" - }, - "dependencies": { - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=" - } } }, "loose-envify": { @@ -1477,14 +1462,14 @@ } }, "moment": { - "version": "2.23.0", - "resolved": "https://registry.npmjs.org/moment/-/moment-2.23.0.tgz", - "integrity": "sha512-3IE39bHVqFbWWaPOMHZF98Q9c3LDKGTmypMiTM2QygGXXElkFWIH7GxfmlwmY2vwa+wmNsoYZmG2iusf1ZjJoA==" + "version": "2.24.0", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.24.0.tgz", + "integrity": "sha512-bV7f+6l2QigeBBZSM/6yTNq4P2fNpSWj/0e7jQcy87A8e7o2nAfP/34/2ky5Vw4B9S446EtIhodAzkFCcR4dQg==" }, "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==" }, "nan": { "version": "2.13.2", @@ -1519,12 +1504,12 @@ "integrity": "sha1-lKKxYzxPExdVMAfYlm/Q6EG2pMI=" }, "normalize-package-data": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.4.0.tgz", - "integrity": "sha512-9jjUFbTPfEy3R/ad/2oNbKtW9Hgovl5O1FvFWKkKblNXoN/Oou6+9+KKohPK13Yc3/TyunyWhJp6gvRNR/PPAw==", + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", "requires": { "hosted-git-info": "^2.1.4", - "is-builtin-module": "^1.0.0", + "resolve": "^1.10.0", "semver": "2 || 3 || 4 || 5", "validate-npm-package-license": "^3.0.1" } @@ -1561,6 +1546,11 @@ "requires": { "ms": "2.0.0" } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" } } }, @@ -1620,6 +1610,11 @@ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" }, + "path-parse": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", + "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==" + }, "path-type": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", @@ -1628,13 +1623,6 @@ "graceful-fs": "^4.1.2", "pify": "^2.0.0", "pinkie-promise": "^2.0.0" - }, - "dependencies": { - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=" - } } }, "pend": { @@ -1658,6 +1646,11 @@ "webworkify": "^1.3.0" } }, + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=" + }, "pinkie": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", @@ -1920,6 +1913,14 @@ "resolved": "https://registry.npmjs.org/requirejs-plugins/-/requirejs-plugins-1.0.2.tgz", "integrity": "sha1-aTtVidl/hZhGL8cYJjUyYqr9qDY=" }, + "resolve": { + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.10.1.tgz", + "integrity": "sha512-KuIe4mf++td/eFb6wkaPbMDnP6kObCaEtIDuHOUED6MNUo4K670KZUHuuvYPZDxNF0WVLw49n06M2m2dXphEzA==", + "requires": { + "path-parse": "^1.0.6" + } + }, "safe-buffer": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", @@ -2036,9 +2037,9 @@ } }, "spdx-license-ids": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.3.tgz", - "integrity": "sha512-uBIcIl3Ih6Phe3XHK1NqboJLdGfwr1UN3k6wSD1dZpmPsIkb8AGNbZYJ1fOBk834+Gxy8rpfDxrS6XLEMZMY2g==" + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.4.tgz", + "integrity": "sha512-7j8LYJLeY/Yb6ACbQ7F76qy5jHkp0U6jgBfJsk97bwWlVUnUWsAgpyaCvo17h0/RQGnQ036tVDomiwoI4pDkQA==" }, "speedometer": { "version": "0.1.4", @@ -2123,6 +2124,11 @@ "requires": { "ms": "2.0.0" } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" } } }, diff --git a/ui (gen4)/package.json b/ui (gen4)/package.json index 4c076d72..1650b814 100755 --- a/ui (gen4)/package.json +++ b/ui (gen4)/package.json @@ -20,18 +20,18 @@ "dependencies": { "app-module-path": "^1.0.6", "async-json": "0.0.2", - "commander": "^2.19.0", - "electron": "^4.0.1", + "commander": "^2.20.0", + "electron": "^4.2.0", "exiftool": "^0.0.3", "fs-extra": "^7.0.1", "fs-walk": "^0.0.1", - "generic-walk": "^1.3.1", + "generic-walk": "^1.4.0", "glob": "^7.1.3", "guarantee-events": "^1.0.0", "ig-actions": "^3.22.2", "ig-features": "^3.3.4", "ig-object": "^1.2.0", - "moment": "^2.23.0", + "moment": "^2.24.0", "openseadragon": "^2.4.0", "requirejs": "^2.3.6", "requirejs-plugins": "^1.0.2",