diff --git a/CHANGELOG.md b/CHANGELOG.md index 25ecf1e049..875212daa7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,21 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [4.11.1](https://github.com/angular-ui/ui-grid/compare/v4.11.0...v4.11.1) (2022-02-23) + + +### Bug Fixes + +* clear selection function ([f616137](https://github.com/angular-ui/ui-grid/commit/f61613794aa9f919d091ea60cc27eb85bf70ee74)) +* Find or Select by Row Entity's 'ID' ([7a0a6c6](https://github.com/angular-ui/ui-grid/commit/7a0a6c6f3ed29c3e41f5cfa77b46639d3df7f1ca)) +* exchanged filter() with every() ([583940f](https://github.com/angular-ui/ui-grid/commit/583940ffa30df614b64122dc1f8b9d83103821df)) +* **i18n:** complete ru locale ([8d2caee](https://github.com/angular-ui/ui-grid/commit/8d2caeeb7fa0e85d73c5513d39f0c8ff7992f0b7)) +* **resize-columns:** width gets adjusted so that ellipses aren't shown ([7851ff8](https://github.com/angular-ui/ui-grid/commit/7851ff81eae5b48bf89f4ca88ac66b097240c1ef)) + + + + + # [4.11.0](https://github.com/angular-ui/ui-grid/compare/v4.10.3...v4.11.0) (2021-08-12) diff --git a/bower.json b/bower.json index 82826ea935..6f93df9a65 100644 --- a/bower.json +++ b/bower.json @@ -1,6 +1,6 @@ { "name": "angular-ui-grid", - "version": "4.11.0", + "version": "4.11.1", "homepage": "http://ui-grid.info", "repository": { "type": "git", diff --git a/lerna.json b/lerna.json index ba8a8f7d47..509a74778d 100644 --- a/lerna.json +++ b/lerna.json @@ -2,5 +2,5 @@ "packages": [ "packages/*" ], - "version": "4.11.0" + "version": "4.11.1" } diff --git a/package-lock.json b/package-lock.json index c7edfcb8ea..c5fb03ba92 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "ui-grid", - "version": "4.11.0", + "version": "4.11.1", "lockfileVersion": 1, "requires": true, "dependencies": { @@ -3682,12 +3682,36 @@ } } }, + "@socket.io/base64-arraybuffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@socket.io/base64-arraybuffer/-/base64-arraybuffer-1.0.2.tgz", + "integrity": "sha512-dOlCBKnDw4iShaIsH/bxujKTM18+2TOAsYz+KSc11Am38H4q5Xw8Bbz97ZYdrVNM+um3p7w86Bvvmcn9q+5+eQ==", + "dev": true + }, "@types/color-name": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/@types/color-name/-/color-name-1.1.1.tgz", "integrity": "sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ==", "dev": true }, + "@types/component-emitter": { + "version": "1.2.11", + "resolved": "https://registry.npmjs.org/@types/component-emitter/-/component-emitter-1.2.11.tgz", + "integrity": "sha512-SRXjM+tfsSlA9VuG8hGO2nft2p8zjXCK1VcC6N4NXbBbYbSia9kzCChYQajIjzIqOOOuh5Ock6MmV2oux4jDZQ==", + "dev": true + }, + "@types/cookie": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.4.1.tgz", + "integrity": "sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q==", + "dev": true + }, + "@types/cors": { + "version": "2.8.12", + "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.12.tgz", + "integrity": "sha512-vt+kDhq/M2ayberEtJcIN/hxXy1Pk+59g2FV/ZQceeaTyCtCucjL2Q7FXlFjtWn4n15KCr1NE2lNNFhp0lEThw==", + "dev": true + }, "@types/glob": { "version": "7.1.3", "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.1.3.tgz", @@ -3789,12 +3813,6 @@ "integrity": "sha512-L8vcjDTCOIJk7wFvmlEUN7AsSb8T+2JrdP7KINBjzr24TJ5Mwj590sLu3BC7zNZowvJWa/JtPmD8eJCzdtDWjA==", "dev": true }, - "after": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/after/-/after-0.8.2.tgz", - "integrity": "sha1-/ts5T58OAqqXaOcCvaI7UF+ufh8=", - "dev": true - }, "agent-base": { "version": "4.2.1", "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-4.2.1.tgz", @@ -3850,9 +3868,9 @@ "dev": true }, "anymatch": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz", - "integrity": "sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", + "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", "dev": true, "requires": { "normalize-path": "^3.0.0", @@ -4085,12 +4103,6 @@ "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", "dev": true }, - "arraybuffer.slice": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/arraybuffer.slice/-/arraybuffer.slice-0.0.7.tgz", - "integrity": "sha512-wGUIVQXuehL5TCqQun8OW81jGzAWycqzFF8lFp+GOM5BXLYj3bKNsYC4daB7n6XjCqxQA/qgTJ+8ANR3acjrog==", - "dev": true - }, "arrify": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", @@ -4193,12 +4205,6 @@ "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==", "dev": true }, - "backo2": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/backo2/-/backo2-1.0.2.tgz", - "integrity": "sha1-MasayLEpNjRj41s+u2n038+6eUc=", - "dev": true - }, "balanced-match": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", @@ -4260,12 +4266,6 @@ } } }, - "base64-arraybuffer": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.1.5.tgz", - "integrity": "sha1-c5JncZI7Whl0etZmqlzUv5xunOg=", - "dev": true - }, "base64-js": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.1.tgz", @@ -4273,9 +4273,9 @@ "dev": true }, "base64id": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/base64id/-/base64id-1.0.0.tgz", - "integrity": "sha1-R2iMuZu2gE8OBtPnY7HDLlfY5rY=", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/base64id/-/base64id-2.0.0.tgz", + "integrity": "sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog==", "dev": true }, "basic-auth": { @@ -4315,25 +4315,10 @@ "integrity": "sha512-IWIbu7pMqyw3EAJHzzHbWa85b6oud/yfKYg5rqB5hNE8CeMi3nX+2C2sj0HswfblST86hpVEOAb9x34NZd6P7A==", "dev": true }, - "better-assert": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/better-assert/-/better-assert-1.0.2.tgz", - "integrity": "sha1-QIZrnhueC1W0gYlDEeaPr/rrxSI=", - "dev": true, - "requires": { - "callsite": "1.0.0" - } - }, "binary-extensions": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.0.0.tgz", - "integrity": "sha512-Phlt0plgpIIBOGTT/ehfFnbNlfsDEiqmzE2KRXoX1bLIlir4X/MR+zSyBEkL05ffWgnRSf/DXv+WrUAVr93/ow==", - "dev": true - }, - "blob": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/blob/-/blob-0.0.5.tgz", - "integrity": "sha512-gaqbzQPqOoamawKg0LGVd7SzLgXS+JH61oWprSLH+P+abTczqJbhTR8CmJ2u9/bUYNmHTGJx/UEmn6doAvvuig==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", "dev": true }, "blocking-proxy": { @@ -4364,27 +4349,27 @@ } }, "body-parser": { - "version": "1.19.0", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", - "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==", + "version": "1.19.1", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.1.tgz", + "integrity": "sha512-8ljfQi5eBk8EJfECMrgqNGWPEY5jWP+1IzkzkGdFFEwFQZZyaZ21UqdaHktgiMlH0xLHqIFtE/u2OYE5dOtViA==", "dev": true, "requires": { - "bytes": "3.1.0", + "bytes": "3.1.1", "content-type": "~1.0.4", "debug": "2.6.9", "depd": "~1.1.2", - "http-errors": "1.7.2", + "http-errors": "1.8.1", "iconv-lite": "0.4.24", "on-finished": "~2.3.0", - "qs": "6.7.0", - "raw-body": "2.4.0", - "type-is": "~1.6.17" + "qs": "6.9.6", + "raw-body": "2.4.2", + "type-is": "~1.6.18" }, "dependencies": { "bytes": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", - "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.1.tgz", + "integrity": "sha512-dWe4nWO/ruEOY7HkUJ5gFt1DCFV9zPRoJr8pV0/ASQermOZjtq8jMjOprC0Kd10GLN+l7xaUPvxzJFWtxGu8Fg==", "dev": true }, "debug": { @@ -4397,16 +4382,16 @@ } }, "http-errors": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", - "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==", + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.8.1.tgz", + "integrity": "sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==", "dev": true, "requires": { "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.1", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", "statuses": ">= 1.5.0 < 2", - "toidentifier": "1.0.0" + "toidentifier": "1.0.1" } }, "iconv-lite": { @@ -4418,28 +4403,34 @@ "safer-buffer": ">= 2.1.2 < 3" } }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, "qs": { - "version": "6.7.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", - "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==", + "version": "6.9.6", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.9.6.tgz", + "integrity": "sha512-TIRk4aqYLNoJUbd+g2lEdz5kLWIuTMRagAXxl78Q0RiVjAOugHmeKNGdd3cwo/ktpf9aL9epCfFqWDEKysUlLQ==", "dev": true }, "raw-body": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz", - "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==", + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.2.tgz", + "integrity": "sha512-RPMAFUJP19WIet/99ngh6Iv8fzAbqum4Li7AD6DtGaW2RpMB/11xDoalPiJMTbu6I3hkbMVkATvZrqb9EEqeeQ==", "dev": true, "requires": { - "bytes": "3.1.0", - "http-errors": "1.7.2", + "bytes": "3.1.1", + "http-errors": "1.8.1", "iconv-lite": "0.4.24", "unpipe": "1.0.0" } }, "setprototypeof": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", - "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", "dev": true } } @@ -4537,34 +4528,12 @@ "ieee754": "^1.1.4" } }, - "buffer-alloc": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.2.0.tgz", - "integrity": "sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==", - "dev": true, - "requires": { - "buffer-alloc-unsafe": "^1.1.0", - "buffer-fill": "^1.0.0" - } - }, - "buffer-alloc-unsafe": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz", - "integrity": "sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==", - "dev": true - }, "buffer-crc32": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.1.tgz", "integrity": "sha1-vj5TgvwCttYySVasGvmKqYsIU0w=", "dev": true }, - "buffer-fill": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz", - "integrity": "sha1-+PeLdniYiO858gXNY39o5wISKyw=", - "dev": true - }, "buffer-from": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", @@ -4725,12 +4694,6 @@ "caller-callsite": "^2.0.0" } }, - "callsite": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/callsite/-/callsite-1.0.0.tgz", - "integrity": "sha1-KAOY5dZkvXQDi28JBRU+borxvCA=", - "dev": true - }, "callsites": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", @@ -4803,19 +4766,19 @@ "dev": true }, "chokidar": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.2.1.tgz", - "integrity": "sha512-/j5PPkb5Feyps9e+jo07jUZGvkB5Aj953NrI4s8xSVScrAo/RHeILrtdb4uzR7N6aaFFxxJ+gt8mA8HfNpw76w==", + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", "dev": true, "requires": { - "anymatch": "~3.1.1", + "anymatch": "~3.1.2", "braces": "~3.0.2", - "fsevents": "~2.1.0", - "glob-parent": "~5.1.0", + "fsevents": "~2.3.2", + "glob-parent": "~5.1.2", "is-binary-path": "~2.1.0", "is-glob": "~4.0.1", "normalize-path": "~3.0.0", - "readdirp": "~3.1.3" + "readdirp": "~3.6.0" }, "dependencies": { "braces": { @@ -4837,18 +4800,18 @@ } }, "glob-parent": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.0.tgz", - "integrity": "sha512-qjtRgnIVmOfnKUE3NJAQEdk+lKrxfw8t5ke7SXtfMTHcjsBfOfWXCQfdb30zfDoZQ2IRSIiidmjtbHZPZ++Ihw==", + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", "dev": true, "requires": { "is-glob": "^4.0.1" } }, "is-glob": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", - "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", "dev": true, "requires": { "is-extglob": "^2.1.1" @@ -5125,24 +5088,12 @@ "dot-prop": "^3.0.0" } }, - "component-bind": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/component-bind/-/component-bind-1.0.0.tgz", - "integrity": "sha1-AMYIq33Nk4l8AAllGx06jh5zu9E=", - "dev": true - }, "component-emitter": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=", "dev": true }, - "component-inherit": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/component-inherit/-/component-inherit-0.0.3.tgz", - "integrity": "sha1-ZF/ErfWLcrZJ1crmUTVhnbJv8UM=", - "dev": true - }, "compress-commons": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/compress-commons/-/compress-commons-2.1.1.tgz", @@ -6336,9 +6287,9 @@ } }, "cookie": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz", - "integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s=", + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz", + "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==", "dev": true }, "copy-concurrently": { @@ -6393,6 +6344,16 @@ "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", "dev": true }, + "cors": { + "version": "2.8.5", + "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", + "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", + "dev": true, + "requires": { + "object-assign": "^4", + "vary": "^1" + } + }, "cosmiconfig": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.2.1.tgz", @@ -6739,9 +6700,9 @@ } }, "date-format": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/date-format/-/date-format-2.1.0.tgz", - "integrity": "sha512-bYQuGLeFxhkxNOF3rcMtiZxvCBAquGzZm6oWA1oZ0g2THUzivaRhv8uOhdr19LmoobSOLoIAxeUK2RdbM8IFTA==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/date-format/-/date-format-4.0.3.tgz", + "integrity": "sha512-7P3FyqDcfeznLZp2b+OMitV9Sz2lUnsT87WaTat9nVwqsBkTzPG3lPLNwW3en6F4pHUiWzr6vb8CLhjdK9bcxQ==", "dev": true }, "date-now": { @@ -7156,75 +7117,59 @@ } }, "engine.io": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-3.2.1.tgz", - "integrity": "sha512-+VlKzHzMhaU+GsCIg4AoXF1UdDFjHHwMmMKqMJNDNLlUlejz58FCy4LBqB2YVJskHGYl06BatYWKP2TVdVXE5w==", + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.1.2.tgz", + "integrity": "sha512-v/7eGHxPvO2AWsksyx2PUsQvBafuvqs0jJJQ0FdmJG1b9qIvgSbqDRGwNhfk2XHaTTbTXiC4quRE8Q9nRjsrQQ==", "dev": true, "requires": { + "@types/cookie": "^0.4.1", + "@types/cors": "^2.8.12", + "@types/node": ">=10.0.0", "accepts": "~1.3.4", - "base64id": "1.0.0", - "cookie": "0.3.1", - "debug": "~3.1.0", - "engine.io-parser": "~2.1.0", - "ws": "~3.3.1" + "base64id": "2.0.0", + "cookie": "~0.4.1", + "cors": "~2.8.5", + "debug": "~4.3.1", + "engine.io-parser": "~5.0.0", + "ws": "~8.2.3" }, "dependencies": { - "ws": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/ws/-/ws-3.3.3.tgz", - "integrity": "sha512-nnWLa/NwZSt4KQJu51MYlCcSQ5g7INpOrOMt4XV8j4dqTXdmlUmSHQ8/oLC069ckre0fRsgfvsKwbTdtKLCDkA==", + "@types/node": { + "version": "17.0.17", + "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.17.tgz", + "integrity": "sha512-e8PUNQy1HgJGV3iU/Bp2+D/DXh3PYeyli8LgIwsQcs1Ar1LoaWHSIT6Rw+H2rNJmiq6SNWiDytfx8+gYj7wDHw==", + "dev": true + }, + "debug": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", + "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", "dev": true, "requires": { - "async-limiter": "~1.0.0", - "safe-buffer": "~5.1.0", - "ultron": "~1.1.0" + "ms": "2.1.2" } - } - } - }, - "engine.io-client": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-3.2.1.tgz", - "integrity": "sha512-y5AbkytWeM4jQr7m/koQLc5AxpRKC1hEVUb/s1FUAWEJq5AzJJ4NLvzuKPuxtDi5Mq755WuDvZ6Iv2rXj4PTzw==", - "dev": true, - "requires": { - "component-emitter": "1.2.1", - "component-inherit": "0.0.3", - "debug": "~3.1.0", - "engine.io-parser": "~2.1.1", - "has-cors": "1.1.0", - "indexof": "0.0.1", - "parseqs": "0.0.5", - "parseuri": "0.0.5", - "ws": "~3.3.1", - "xmlhttprequest-ssl": "~1.5.4", - "yeast": "0.1.2" - }, - "dependencies": { + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, "ws": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/ws/-/ws-3.3.3.tgz", - "integrity": "sha512-nnWLa/NwZSt4KQJu51MYlCcSQ5g7INpOrOMt4XV8j4dqTXdmlUmSHQ8/oLC069ckre0fRsgfvsKwbTdtKLCDkA==", - "dev": true, - "requires": { - "async-limiter": "~1.0.0", - "safe-buffer": "~5.1.0", - "ultron": "~1.1.0" - } + "version": "8.2.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.2.3.tgz", + "integrity": "sha512-wBuoj1BDpC6ZQ1B7DWQBYVLphPWkm8i9Y0/3YdHjHKHiohOJ1ws+3OccDWtH+PoC9DZD5WOTrJvNbWvjS6JWaA==", + "dev": true } } }, "engine.io-parser": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-2.1.3.tgz", - "integrity": "sha512-6HXPre2O4Houl7c4g7Ic/XzPnHBvaEmN90vtRO9uLmwtRqQmTOw0QMevL1TOfL2Cpu1VzsaTmMotQgMdkzGkVA==", + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.0.3.tgz", + "integrity": "sha512-BtQxwF27XUNnSafQLvDi0dQ8s3i6VgzSoQMJacpIcGNrlUdfHSKbgm3jmjCVvQluGzqwujQMPAoMai3oYSTurg==", "dev": true, "requires": { - "after": "0.8.2", - "arraybuffer.slice": "~0.0.7", - "base64-arraybuffer": "0.1.5", - "blob": "0.0.5", - "has-binary2": "~1.0.2" + "@socket.io/base64-arraybuffer": "~1.0.2" } }, "ent": { @@ -7382,6 +7327,12 @@ "es5-ext": "~0.10.14" } }, + "escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true + }, "escape-html": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", @@ -7905,9 +7856,9 @@ "dev": true }, "eventemitter3": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.0.tgz", - "integrity": "sha512-qerSRB0p+UDEssxTtm6EDKcE7W4OaoisfIMl4CngyEhjpYglocpNg6UEqCvemdGhosAsg4sO2dXJOdyBifPGCg==", + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", "dev": true }, "execa": { @@ -8464,13 +8415,10 @@ } }, "follow-redirects": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.9.0.tgz", - "integrity": "sha512-CRcPzsSIbXyVDl0QI01muNDu69S8trU4jArW9LpOt2WtC6LyUJetcIrmfHsRBx7/Jb6GHJUiuqyYxPooFfNt6A==", - "dev": true, - "requires": { - "debug": "^3.0.0" - } + "version": "1.14.8", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.8.tgz", + "integrity": "sha512-1x0S9UVJHsQprFcEC/qnNzBLcIxsjAV905f/UkQxbclCsoTWlacCNOpQa/anodLl2uaEKFhfWOvM2Qg77+15zA==", + "dev": true }, "for-in": { "version": "1.0.2", @@ -8591,9 +8539,9 @@ "dev": true }, "fsevents": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.0.tgz", - "integrity": "sha512-+iXhW3LuDQsno8dOIrCIT/CBjeBWuP7PXe8w9shnj9Lebny/Gx1ZjVBYwexLz36Ri2jKuXMNpV6CYNh8lHHgrQ==", + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", "dev": true, "optional": true }, @@ -10236,9 +10184,9 @@ } }, "handlebars": { - "version": "4.7.6", - "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.6.tgz", - "integrity": "sha512-1f2BACcBfiwAfStCKZNrUCgqNZkGsAT7UM3kkYtXuLo0KnaVfjKOyf7PRzB6++aK9STyT1Pd2ZCPe3EGOXleXA==", + "version": "4.7.7", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.7.tgz", + "integrity": "sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA==", "dev": true, "requires": { "minimist": "^1.2.5", @@ -10296,35 +10244,12 @@ "ansi-regex": "^2.0.0" } }, - "has-binary2": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-binary2/-/has-binary2-1.0.3.tgz", - "integrity": "sha512-G1LWKhDSvhGeAQ8mPVQlqNcOB2sJdwATtZKl2pDKKHfpf/rYj24lkinxf69blJbnsvtqqNU+L3SL50vzZhXOnw==", - "dev": true, - "requires": { - "isarray": "2.0.1" - }, - "dependencies": { - "isarray": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz", - "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=", - "dev": true - } - } - }, "has-color": { "version": "0.1.7", "resolved": "https://registry.npmjs.org/has-color/-/has-color-0.1.7.tgz", "integrity": "sha1-ZxRKUmDDT8PMpnfQQdr1L+e3iy8=", "dev": true }, - "has-cors": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/has-cors/-/has-cors-1.1.0.tgz", - "integrity": "sha1-XkdHk/fqmEPRu5nCPu9J/xJv/zk=", - "dev": true - }, "has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", @@ -10433,9 +10358,9 @@ "dev": true }, "hosted-git-info": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.6.0.tgz", - "integrity": "sha1-IyNbKasjDFdqqw1PE/wEawsDgiI=", + "version": "2.8.9", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", "dev": true }, "html-escaper": { @@ -10621,9 +10546,9 @@ } }, "i": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/i/-/i-0.3.6.tgz", - "integrity": "sha1-2WyScyB28HJxG2sQ/X1PZa2O4j0=", + "version": "0.3.7", + "resolved": "https://registry.npmjs.org/i/-/i-0.3.7.tgz", + "integrity": "sha512-FYz4wlXgkQwIPqhzC5TdNMLSE5+GS1IIDJZY/1ZiEPCT2S3COUVZeT5OW4BmW4r5LHLQuOosSwsvnroG9GR59Q==", "dev": true }, "iconv-lite": { @@ -10718,12 +10643,6 @@ "repeating": "^2.0.0" } }, - "indexof": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz", - "integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=", - "dev": true - }, "infer-owner": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz", @@ -10753,9 +10672,9 @@ "dev": true }, "ini": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", - "integrity": "sha1-7uJfVtscnsYIXgwid4CD9Zar+Sc=", + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", "dev": true }, "init-package-json": { @@ -11226,13 +11145,10 @@ "dev": true }, "isbinaryfile": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-3.0.3.tgz", - "integrity": "sha512-8cJBL5tTd2OS0dM4jz07wQd5g0dCCqIhUxPIGtZfa5L6hWlvV5MHTITy/DBAsF+Oe2LS1X3krBUhNwaGUWpWxw==", - "dev": true, - "requires": { - "buffer-alloc": "^1.2.0" - } + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-4.0.8.tgz", + "integrity": "sha512-53h6XFniq77YdW+spoRrebh0mnmTxRPTlcuIArO57lmMdq4uBKFKaeTjnb92oYWrSn/LVL+LT+Hap2tFQj8V+w==", + "dev": true }, "isexe": { "version": "2.0.0", @@ -11638,40 +11554,51 @@ } }, "karma": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/karma/-/karma-4.3.0.tgz", - "integrity": "sha512-NSPViHOt+RW38oJklvYxQC4BSQsv737oQlr/r06pCM+slDOr4myuI1ivkRmp+3dVpJDfZt2DmaPJ2wkx+ZZuMQ==", + "version": "6.3.14", + "resolved": "https://registry.npmjs.org/karma/-/karma-6.3.14.tgz", + "integrity": "sha512-SDFoU5F4LdosEiUVWUDRPCV/C1zQRNtIakx7rWkigf7R4sxGADlSEeOma4S1f/js7YAzvqLW92ByoiQptg+8oQ==", "dev": true, "requires": { - "bluebird": "^3.3.0", - "body-parser": "^1.16.1", + "body-parser": "^1.19.0", "braces": "^3.0.2", - "chokidar": "^3.0.0", - "colors": "^1.1.0", - "connect": "^3.6.0", - "core-js": "^3.1.3", + "chokidar": "^3.5.1", + "colors": "1.4.0", + "connect": "^3.7.0", "di": "^0.0.1", - "dom-serialize": "^2.2.0", - "flatted": "^2.0.0", - "glob": "^7.1.1", - "graceful-fs": "^4.1.2", - "http-proxy": "^1.13.0", - "isbinaryfile": "^3.0.0", - "lodash": "^4.17.14", - "log4js": "^4.0.0", - "mime": "^2.3.1", - "minimatch": "^3.0.2", - "optimist": "^0.6.1", - "qjobs": "^1.1.4", - "range-parser": "^1.2.0", - "rimraf": "^2.6.0", - "safe-buffer": "^5.0.1", - "socket.io": "2.1.1", + "dom-serialize": "^2.2.1", + "glob": "^7.1.7", + "graceful-fs": "^4.2.6", + "http-proxy": "^1.18.1", + "isbinaryfile": "^4.0.8", + "lodash": "^4.17.21", + "log4js": "^6.4.1", + "mime": "^2.5.2", + "minimatch": "^3.0.4", + "qjobs": "^1.2.0", + "range-parser": "^1.2.1", + "rimraf": "^3.0.2", + "socket.io": "^4.2.0", "source-map": "^0.6.1", - "tmp": "0.0.33", - "useragent": "2.3.0" + "tmp": "^0.2.1", + "ua-parser-js": "^0.7.30", + "yargs": "^16.1.1" }, "dependencies": { + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, "braces": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", @@ -11681,16 +11608,63 @@ "fill-range": "^7.0.1" } }, + "cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dev": true, + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, "colors": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", "dev": true }, - "core-js": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.2.1.tgz", - "integrity": "sha512-Qa5XSVefSVPRxy2XfUC13WbvqkxhkwB3ve+pgCQveNgYzbM/UxZeu1dcOX/xr4UmfUd+muuvsaxilQzCyUurMw==", + "connect": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/connect/-/connect-3.7.0.tgz", + "integrity": "sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ==", + "dev": true, + "requires": { + "debug": "2.6.9", + "finalhandler": "1.1.2", + "parseurl": "~1.3.3", + "utils-merge": "1.0.1" + } + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", "dev": true }, "fill-range": { @@ -11702,10 +11676,25 @@ "to-regex-range": "^5.0.1" } }, + "finalhandler": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", + "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", + "dev": true, + "requires": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "statuses": "~1.5.0", + "unpipe": "~1.0.0" + } + }, "glob": { - "version": "7.1.4", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz", - "integrity": "sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", "dev": true, "requires": { "fs.realpath": "^1.0.0", @@ -11716,40 +11705,78 @@ "path-is-absolute": "^1.0.0" } }, + "graceful-fs": { + "version": "4.2.9", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.9.tgz", + "integrity": "sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ==", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true + }, "is-number": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", "dev": true }, - "lodash": { - "version": "4.17.20", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz", - "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==", + "mime": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", + "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==", "dev": true }, - "mime": { - "version": "2.4.4", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.4.tgz", - "integrity": "sha512-LRxmNwziLPT828z+4YkNzloCFC2YM4wrB99k+AV5ZbEyfGNWfG8SO1FUXLmLDBSo89NrJZ4DIWeLjy1CHGhMGA==", + "parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "dev": true + }, + "range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", "dev": true }, "rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", "dev": true, "requires": { "glob": "^7.1.3" } }, + "string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + } + }, + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.1" + } + }, "tmp": { - "version": "0.0.33", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", - "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", + "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==", "dev": true, "requires": { - "os-tmpdir": "~1.0.2" + "rimraf": "^3.0.0" } }, "to-regex-range": { @@ -11760,6 +11787,44 @@ "requires": { "is-number": "^7.0.0" } + }, + "wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + } + }, + "y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true + }, + "yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "dev": true, + "requires": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + } + }, + "yargs-parser": { + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "dev": true } } }, @@ -12446,27 +12511,33 @@ } }, "log4js": { - "version": "4.5.1", - "resolved": "https://registry.npmjs.org/log4js/-/log4js-4.5.1.tgz", - "integrity": "sha512-EEEgFcE9bLgaYUKuozyFfytQM2wDHtXn4tAN41pkaxpNjAykv11GVdeI4tHtmPWW4Xrgh9R/2d7XYghDVjbKKw==", + "version": "6.4.1", + "resolved": "https://registry.npmjs.org/log4js/-/log4js-6.4.1.tgz", + "integrity": "sha512-iUiYnXqAmNKiIZ1XSAitQ4TmNs8CdZYTAWINARF3LjnsLN8tY5m0vRwd6uuWj/yNY0YHxeZodnbmxKFUOM2rMg==", "dev": true, "requires": { - "date-format": "^2.0.0", - "debug": "^4.1.1", - "flatted": "^2.0.0", - "rfdc": "^1.1.4", - "streamroller": "^1.0.6" + "date-format": "^4.0.3", + "debug": "^4.3.3", + "flatted": "^3.2.4", + "rfdc": "^1.3.0", + "streamroller": "^3.0.2" }, "dependencies": { "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", + "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", "dev": true, "requires": { - "ms": "^2.1.1" + "ms": "2.1.2" } }, + "flatted": { + "version": "3.2.5", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.5.tgz", + "integrity": "sha512-WIWGi2L3DyTUvUrwRKgGi9TwxQMUEqPOPQBVi71R96jZXJdFskXEmf54BoZaS1kknGODoIGASGEzBUYdyMCBJg==", + "dev": true + }, "ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", @@ -12497,16 +12568,6 @@ "integrity": "sha1-miyr0bno4K6ZOkv31YdcOcQujqw=", "dev": true }, - "lru-cache": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.3.tgz", - "integrity": "sha512-fFEhvcgzuIoJVUF8fYr5KR0YqxD238zgObTps31YdADwPPAp82a4M8TrckkWyx7ekNlf9aBcVn81cFwwXngrJA==", - "dev": true, - "requires": { - "pseudomap": "^1.0.2", - "yallist": "^2.1.2" - } - }, "macos-release": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/macos-release/-/macos-release-2.4.1.tgz", @@ -13027,10 +13088,37 @@ } }, "node-fetch": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz", - "integrity": "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==", - "dev": true + "version": "2.6.7", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", + "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", + "dev": true, + "requires": { + "whatwg-url": "^5.0.0" + }, + "dependencies": { + "tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=", + "dev": true + }, + "webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE=", + "dev": true + }, + "whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha1-lmRU6HZUYuN2RNNib2dCzotwll0=", + "dev": true, + "requires": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + } + } }, "node-fetch-npm": { "version": "2.0.2", @@ -13468,12 +13556,6 @@ "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", "dev": true }, - "object-component": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/object-component/-/object-component-0.0.3.tgz", - "integrity": "sha1-8MaapQ78lbhmwYb0AKM3acsvEpE=", - "dev": true - }, "object-copy": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", @@ -13650,24 +13732,6 @@ "pinkie-promise": "^2.0.0" } }, - "optimist": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz", - "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=", - "dev": true, - "requires": { - "minimist": "~0.0.1", - "wordwrap": "~0.0.2" - }, - "dependencies": { - "minimist": { - "version": "0.0.10", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz", - "integrity": "sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8=", - "dev": true - } - } - }, "os-homedir": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", @@ -13997,24 +14061,6 @@ "protocols": "^1.4.0" } }, - "parseqs": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/parseqs/-/parseqs-0.0.5.tgz", - "integrity": "sha1-1SCKNzjkZ2bikbouoXNoSSGouJ0=", - "dev": true, - "requires": { - "better-assert": "~1.0.0" - } - }, - "parseuri": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/parseuri/-/parseuri-0.0.5.tgz", - "integrity": "sha1-gCBKUNTbt3m/3G6+J3jZDkvOMgo=", - "dev": true, - "requires": { - "better-assert": "~1.0.0" - } - }, "parseurl": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.2.tgz", @@ -14061,9 +14107,9 @@ "dev": true }, "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==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", "dev": true }, "path-root": { @@ -14147,9 +14193,9 @@ } }, "picomatch": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.0.7.tgz", - "integrity": "sha512-oLHIdio3tZ0qH76NybpeneBhYVj0QFTfXEFTc/B3zKQspYfYYkWYgFsmzo+4kvId/bQRcNkVeguI3y+CD22BtA==", + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", "dev": true }, "pify": { @@ -14650,12 +14696,6 @@ "dev": true, "optional": true }, - "pseudomap": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", - "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=", - "dev": true - }, "psl": { "version": "1.1.31", "resolved": "https://registry.npmjs.org/psl/-/psl-1.1.31.tgz", @@ -14945,12 +14985,12 @@ } }, "readdirp": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.1.3.tgz", - "integrity": "sha512-ZOsfTGkjO2kqeR5Mzr5RYDbTGYneSkdNKX2fOX2P5jF7vMrd/GNnIAUtDldeHHumHUCQ3V05YfWUdxMPAsRu9Q==", + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", "dev": true, "requires": { - "picomatch": "^2.0.4" + "picomatch": "^2.2.1" } }, "rechoir": { @@ -15219,9 +15259,9 @@ "dev": true }, "rfdc": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.1.4.tgz", - "integrity": "sha512-5C9HXdzK8EAqN7JDif30jqsBzavB7wLpaubisuQIGHWf2gUXSpzy6ArX/+Da8RjFpagWsCn+pIgxTMAmKw9Zug==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.3.0.tgz", + "integrity": "sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==", "dev": true }, "right-pad": { @@ -15568,9 +15608,9 @@ "dev": true }, "shelljs": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.2.tgz", - "integrity": "sha512-pRXeNrCA2Wd9itwhvLp5LZQvPJ0wU6bcjaTMywHHGX5XWhVN2nzSu7WV0q+oUY7mGK3mgSkDDzP3MgjqdyIgbQ==", + "version": "0.8.5", + "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.5.tgz", + "integrity": "sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==", "dev": true, "requires": { "glob": "^7.0.0", @@ -15758,62 +15798,72 @@ } }, "socket.io": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-2.1.1.tgz", - "integrity": "sha512-rORqq9c+7W0DAK3cleWNSyfv/qKXV99hV4tZe+gGLfBECw3XEhBy7x85F3wypA9688LKjtwO9pX9L33/xQI8yA==", + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.4.1.tgz", + "integrity": "sha512-s04vrBswdQBUmuWJuuNTmXUVJhP0cVky8bBDhdkf8y0Ptsu7fKU2LuLbts9g+pdmAdyMMn8F/9Mf1/wbtUN0fg==", "dev": true, "requires": { - "debug": "~3.1.0", - "engine.io": "~3.2.0", - "has-binary2": "~1.0.2", - "socket.io-adapter": "~1.1.0", - "socket.io-client": "2.1.1", - "socket.io-parser": "~3.2.0" + "accepts": "~1.3.4", + "base64id": "~2.0.0", + "debug": "~4.3.2", + "engine.io": "~6.1.0", + "socket.io-adapter": "~2.3.3", + "socket.io-parser": "~4.0.4" + }, + "dependencies": { + "debug": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", + "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + } } }, "socket.io-adapter": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-1.1.1.tgz", - "integrity": "sha1-KoBeihTWNyEk3ZFZrUUC+MsH8Gs=", + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-2.3.3.tgz", + "integrity": "sha512-Qd/iwn3VskrpNO60BeRyCyr8ZWw9CPZyitW4AQwmRZ8zCiyDiL+znRnWX6tDHXnWn1sJrM1+b6Mn6wEDJJ4aYQ==", "dev": true }, - "socket.io-client": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-2.1.1.tgz", - "integrity": "sha512-jxnFyhAuFxYfjqIgduQlhzqTcOEQSn+OHKVfAxWaNWa7ecP7xSNk2Dx/3UEsDcY7NcFafxvNvKPmmO7HTwTxGQ==", - "dev": true, - "requires": { - "backo2": "1.0.2", - "base64-arraybuffer": "0.1.5", - "component-bind": "1.0.0", - "component-emitter": "1.2.1", - "debug": "~3.1.0", - "engine.io-client": "~3.2.0", - "has-binary2": "~1.0.2", - "has-cors": "1.1.0", - "indexof": "0.0.1", - "object-component": "0.0.3", - "parseqs": "0.0.5", - "parseuri": "0.0.5", - "socket.io-parser": "~3.2.0", - "to-array": "0.1.4" - } - }, "socket.io-parser": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-3.2.0.tgz", - "integrity": "sha512-FYiBx7rc/KORMJlgsXysflWx/RIvtqZbyGLlHZvjfmPTPeuD/I8MaW7cfFrj5tRltICJdgwflhfZ3NVVbVLFQA==", + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.0.4.tgz", + "integrity": "sha512-t+b0SS+IxG7Rxzda2EVvyBZbvFPBCjJoyHuE0P//7OAsN23GItzDRdWa6ALxZI/8R5ygK7jAR6t028/z+7295g==", "dev": true, "requires": { - "component-emitter": "1.2.1", - "debug": "~3.1.0", - "isarray": "2.0.1" + "@types/component-emitter": "^1.2.10", + "component-emitter": "~1.3.0", + "debug": "~4.3.1" }, "dependencies": { - "isarray": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz", - "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=", + "component-emitter": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", + "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==", + "dev": true + }, + "debug": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", + "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "dev": true } } @@ -15979,9 +16029,9 @@ } }, "ssri": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.1.tgz", - "integrity": "sha512-3Wge10hNcT1Kur4PDFwEieXSCMCJs/7WvSACcrMYrNp+b8kDL1/0wJch5Ni2WrtwEa2IO8OsVfeKIciKCDx/QA==", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.2.tgz", + "integrity": "sha512-cepbSq/neFK7xB6A50KHN0xHDotYzq58wWCa5LeWqnPrHG8GzfEjO/4O8kpmcGW+oaxkvhEJCWgbgNk4/ZV93Q==", "dev": true, "requires": { "figgy-pudding": "^3.5.1" @@ -16037,67 +16087,63 @@ "dev": true }, "streamroller": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/streamroller/-/streamroller-1.0.6.tgz", - "integrity": "sha512-3QC47Mhv3/aZNFpDDVO44qQb9gwB9QggMEE0sQmkTAwBVYdBRWISdsywlkfm5II1Q5y/pmrHflti/IgmIzdDBg==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/streamroller/-/streamroller-3.0.2.tgz", + "integrity": "sha512-ur6y5S5dopOaRXBuRIZ1u6GC5bcEXHRZKgfBjfCglMhmIf+roVCECjvkEYzNQOXIN2/JPnkMPW/8B3CZoKaEPA==", "dev": true, "requires": { - "async": "^2.6.2", - "date-format": "^2.0.0", - "debug": "^3.2.6", - "fs-extra": "^7.0.1", - "lodash": "^4.17.14" + "date-format": "^4.0.3", + "debug": "^4.1.1", + "fs-extra": "^10.0.0" }, "dependencies": { - "async": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz", - "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==", - "dev": true, - "requires": { - "lodash": "^4.17.14" - } - }, "debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", + "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", "dev": true, "requires": { - "ms": "^2.1.1" + "ms": "2.1.2" } }, "fs-extra": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", - "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.0.0.tgz", + "integrity": "sha512-C5owb14u9eJwizKGdchcDUQeFtlSHHthBk8pbX9Vc1PFZrLombudjDnNns88aYslCyF6IY5SUw3Roz6xShcEIQ==", "dev": true, "requires": { - "graceful-fs": "^4.1.2", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" } }, + "graceful-fs": { + "version": "4.2.9", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.9.tgz", + "integrity": "sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ==", + "dev": true + }, "jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", "dev": true, "requires": { - "graceful-fs": "^4.1.6" + "graceful-fs": "^4.1.6", + "universalify": "^2.0.0" } }, - "lodash": { - "version": "4.17.20", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz", - "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==", - "dev": true - }, "ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "dev": true + }, + "universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "dev": true } } }, @@ -16302,18 +16348,18 @@ } }, "tar": { - "version": "4.4.15", - "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.15.tgz", - "integrity": "sha512-ItbufpujXkry7bHH9NpQyTXPbJ72iTlXgkBAYsAjDXk3Ds8t/3NfO5P4xZGy7u+sYuQUbimgzswX4uQIEeNVOA==", - "dev": true, - "requires": { - "chownr": "^1.1.1", - "fs-minipass": "^1.2.5", - "minipass": "^2.8.6", - "minizlib": "^1.2.1", - "mkdirp": "^0.5.0", - "safe-buffer": "^5.1.2", - "yallist": "^3.0.3" + "version": "4.4.19", + "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.19.tgz", + "integrity": "sha512-a20gEsvHnWe0ygBY8JbxoM4w3SJdhc7ZAuxkLqh+nvNQN2IOt0B5lLgM490X5Hl8FF0dl0tOf2ewFYAlIFgzVA==", + "dev": true, + "requires": { + "chownr": "^1.1.4", + "fs-minipass": "^1.2.7", + "minipass": "^2.9.0", + "minizlib": "^1.3.3", + "mkdirp": "^0.5.5", + "safe-buffer": "^5.2.1", + "yallist": "^3.1.1" }, "dependencies": { "safe-buffer": { @@ -16509,12 +16555,6 @@ "os-tmpdir": "~1.0.1" } }, - "to-array": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/to-array/-/to-array-0.1.4.tgz", - "integrity": "sha1-F+bBH3PdTz10zaek/zI46a2b+JA=", - "dev": true - }, "to-double-quotes": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/to-double-quotes/-/to-double-quotes-2.0.0.tgz", @@ -16576,9 +16616,9 @@ "dev": true }, "toidentifier": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", - "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", "dev": true }, "tough-cookie": { @@ -16614,9 +16654,9 @@ "dev": true }, "trim-off-newlines": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/trim-off-newlines/-/trim-off-newlines-1.0.1.tgz", - "integrity": "sha1-n5up2e+odkw4dpi8v+sshI8RrbM=", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/trim-off-newlines/-/trim-off-newlines-1.0.3.tgz", + "integrity": "sha512-kh6Tu6GbeSNMGfrrZh6Bb/4ZEHV1QlB4xNDBeog8Y9/QwFlKTRyWvY3Fs9tRDAMZliVUwieMgEdIeL/FtqjkJg==", "dev": true }, "tslib": { @@ -16667,18 +16707,18 @@ }, "dependencies": { "mime-db": { - "version": "1.40.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.40.0.tgz", - "integrity": "sha512-jYdeOMPy9vnxEqFRRo6ZvTZ8d9oPb+k18PKoYNYUe2stVEBPPwsln/qWzdbmaIvnhZ9v2P+CuecK+fpUfsV2mA==", + "version": "1.51.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.51.0.tgz", + "integrity": "sha512-5y8A56jg7XVQx2mbv1lu49NR4dokRnhZYTtL+KGfaa27uq4pSTXkwQkFJl4pkRMyNFz/EtYDSkiiEHx3F7UN6g==", "dev": true }, "mime-types": { - "version": "2.1.24", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.24.tgz", - "integrity": "sha512-WaFHS3MCl5fapm3oLxU4eYDw77IQM2ACcxQ9RIxfaC3ooc6PFuBMGZZsYpvoXS5D5QTWPieo1jjLdAm3TBP3cQ==", + "version": "2.1.34", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.34.tgz", + "integrity": "sha512-6cP692WwGIs9XXdOO4++N+7qjqv0rqxxVvJ3VHPh/Sc9mVZcQP+ZGhkKiTvWMQRr2tbHkJP/Yn7Y0npb3ZBs4A==", "dev": true, "requires": { - "mime-db": "1.40.0" + "mime-db": "1.51.0" } } } @@ -16716,6 +16756,12 @@ "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", "dev": true }, + "ua-parser-js": { + "version": "0.7.31", + "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.31.tgz", + "integrity": "sha512-qLK/Xe9E2uzmYI3qLeOmI0tEOt+TBBQyUIAh4aAgU05FVYzeZrKUdkAZfBNVGRaHVgV0TDkdEngJSw/SyQchkQ==", + "dev": true + }, "uglify-js": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.6.0.tgz", @@ -16740,12 +16786,6 @@ "integrity": "sha1-DqEOgDXo61uOREnwbaHHMGY7qoE=", "dev": true }, - "ultron": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ultron/-/ultron-1.1.1.tgz", - "integrity": "sha512-UIEXBNeYmKptWH6z8ZnqTeS8fV74zG0/eRU9VGkpzz+LIJNs8W/zM/L+7ctCkRrgbNnnR0xxw4bKOr0cW0N0Og==", - "dev": true - }, "umask": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/umask/-/umask-1.1.0.tgz", @@ -16918,16 +16958,6 @@ "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", "dev": true }, - "useragent": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/useragent/-/useragent-2.3.0.tgz", - "integrity": "sha512-4AoH4pxuSvHCjqLO04sU6U/uE65BYza8l/KKBS0b0hnUPWi+cQ2BpeTEwejCSx9SPV5/U03nniDTrWx5NrmKdw==", - "dev": true, - "requires": { - "lru-cache": "4.1.x", - "tmp": "0.0.x" - } - }, "util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", @@ -17023,6 +17053,12 @@ "integrity": "sha1-a2GE2mUgzDIEzhtAfKwm2SYJ6/8=", "dev": true }, + "vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=", + "dev": true + }, "verror": { "version": "1.10.0", "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", @@ -17530,12 +17566,6 @@ "integrity": "sha1-YQY29rH3A4kb00dxzLF/uTtHB5w=", "dev": true }, - "wordwrap": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz", - "integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8=", - "dev": true - }, "wrap-ansi": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", @@ -17724,12 +17754,6 @@ } } }, - "xmlhttprequest-ssl": { - "version": "1.5.5", - "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.5.tgz", - "integrity": "sha1-wodrBhaKrcQOV9l+gRkayPQ5iz4=", - "dev": true - }, "xtend": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", @@ -17737,15 +17761,9 @@ "dev": true }, "y18n": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz", - "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==", - "dev": true - }, - "yallist": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", - "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", "dev": true }, "yargs": { @@ -17854,12 +17872,6 @@ "decamelize": "^1.2.0" } }, - "yeast": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/yeast/-/yeast-0.1.2.tgz", - "integrity": "sha1-AI4G2AlDIMNy28L47XagymyKxBk=", - "dev": true - }, "zip-stream": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/zip-stream/-/zip-stream-2.1.3.tgz", diff --git a/package.json b/package.json index f063efddbf..cab60b2877 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "ui-grid", - "version": "4.11.0", + "version": "4.11.1", "description": "A data grid for Angular", "directories": { "test": "test" @@ -72,7 +72,7 @@ "jasmine-core": "^2.4.1", "jit-grunt": "^0.10.0", "jshint-stylish": "^2.2.1", - "karma": "^4.3.0", + "karma": "^6.3.14", "karma-chrome-launcher": "~2.2.0", "karma-coverage": "^2.0.3", "karma-firefox-launcher": "~1.1.0", diff --git a/packages/auto-resize/CHANGELOG.md b/packages/auto-resize/CHANGELOG.md index e510eba6a7..f0685fc604 100644 --- a/packages/auto-resize/CHANGELOG.md +++ b/packages/auto-resize/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [4.11.1](https://github.com/angular-ui/ui-grid/compare/v4.11.0...v4.11.1) (2022-02-23) + +**Note:** Version bump only for package @ui-grid/auto-resize + + + + + # [4.11.0](https://github.com/angular-ui/ui-grid/compare/v4.10.3...v4.11.0) (2021-08-12) **Note:** Version bump only for package @ui-grid/auto-resize diff --git a/packages/auto-resize/package-lock.json b/packages/auto-resize/package-lock.json index 6cde84c83e..685c0ab75e 100644 --- a/packages/auto-resize/package-lock.json +++ b/packages/auto-resize/package-lock.json @@ -1,6 +1,6 @@ { "name": "@ui-grid/auto-resize", - "version": "4.11.0", + "version": "4.11.1", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/packages/auto-resize/package.json b/packages/auto-resize/package.json index 1bf5d33ac6..f1f6d9d113 100644 --- a/packages/auto-resize/package.json +++ b/packages/auto-resize/package.json @@ -1,10 +1,10 @@ { "name": "@ui-grid/auto-resize", - "version": "4.11.0", + "version": "4.11.1", "description": "This module provides auto-resizing functionality to UI-Grid", "main": "index.js", "dependencies": { - "@ui-grid/core": "^4.11.0", + "@ui-grid/core": "^4.11.1", "angular": ">=1.4.0 1.8.x" }, "publishConfig": { diff --git a/packages/cellnav/CHANGELOG.md b/packages/cellnav/CHANGELOG.md index c2e4db298a..eed1d53871 100644 --- a/packages/cellnav/CHANGELOG.md +++ b/packages/cellnav/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [4.11.1](https://github.com/angular-ui/ui-grid/compare/v4.11.0...v4.11.1) (2022-02-23) + +**Note:** Version bump only for package @ui-grid/cell-nav + + + + + # [4.11.0](https://github.com/angular-ui/ui-grid/compare/v4.10.3...v4.11.0) (2021-08-12) diff --git a/packages/cellnav/package-lock.json b/packages/cellnav/package-lock.json index 2c4359dd01..e4330ed23a 100644 --- a/packages/cellnav/package-lock.json +++ b/packages/cellnav/package-lock.json @@ -1,6 +1,6 @@ { "name": "@ui-grid/cell-nav", - "version": "4.11.0", + "version": "4.11.1", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/packages/cellnav/package.json b/packages/cellnav/package.json index cc96920df2..4f804bfbc0 100644 --- a/packages/cellnav/package.json +++ b/packages/cellnav/package.json @@ -1,10 +1,10 @@ { "name": "@ui-grid/cell-nav", - "version": "4.11.0", + "version": "4.11.1", "description": "This module provides cell navigation functionality to UI-Grid", "main": "index.js", "dependencies": { - "@ui-grid/core": "^4.11.0", + "@ui-grid/core": "^4.11.1", "angular": ">=1.4.0 1.8.x" }, "publishConfig": { diff --git a/packages/core/CHANGELOG.md b/packages/core/CHANGELOG.md index 398702de43..6f4dfe02e1 100644 --- a/packages/core/CHANGELOG.md +++ b/packages/core/CHANGELOG.md @@ -3,6 +3,16 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [4.11.1](https://github.com/angular-ui/ui-grid/compare/v4.11.0...v4.11.1) (2022-02-23) + +### Bug Fixes + +* Find or Select by Row Entity's 'ID' ([7a0a6c6](https://github.com/angular-ui/ui-grid/commit/7a0a6c6f3ed29c3e41f5cfa77b46639d3df7f1ca)) +* exchanged filter() with every() ([583940f](https://github.com/angular-ui/ui-grid/commit/583940ffa30df614b64122dc1f8b9d83103821df)) + + + + # [4.11.0](https://github.com/angular-ui/ui-grid/compare/v4.10.3...v4.11.0) (2021-08-12) diff --git a/packages/core/package-lock.json b/packages/core/package-lock.json index 77b66539d4..30b894211e 100644 --- a/packages/core/package-lock.json +++ b/packages/core/package-lock.json @@ -1,6 +1,6 @@ { "name": "@ui-grid/core", - "version": "4.11.0", + "version": "4.11.1", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/packages/core/package.json b/packages/core/package.json index db145c097f..723c81b717 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -1,6 +1,6 @@ { "name": "@ui-grid/core", - "version": "4.11.0", + "version": "4.11.1", "description": "A data grid for Angular", "main": "index.js", "dependencies": { diff --git a/packages/core/src/js/directives/ui-grid-style.js b/packages/core/src/js/directives/ui-grid-style.js index 54f634e4ee..164ac98d77 100644 --- a/packages/core/src/js/directives/ui-grid-style.js +++ b/packages/core/src/js/directives/ui-grid-style.js @@ -45,7 +45,9 @@ if (interpolateFn) { $scope.$watch(interpolateFn, function(value) { - $elm.text(value); + for (var i = 0; i < $elm.length; i++) { + $elm[i].textContent = value; + } }); } } diff --git a/packages/core/src/js/factories/Grid.js b/packages/core/src/js/factories/Grid.js index 7d0cd90891..6e7a1026c2 100644 --- a/packages/core/src/js/factories/Grid.js +++ b/packages/core/src/js/factories/Grid.js @@ -686,11 +686,9 @@ angular.module('ui.grid') * @param {string} name column name */ Grid.prototype.getColumn = function getColumn(name) { - var columns = this.columns.filter(function (column) { + return rowColumnFinder(this.columns, function (column) { return column.colDef.name === name; }); - - return columns.length > 0 ? columns[0] : null; }; /** @@ -701,10 +699,9 @@ angular.module('ui.grid') * @param {string} name column.field */ Grid.prototype.getColDef = function getColDef(name) { - var colDefs = this.options.columnDefs.filter(function (colDef) { + return rowColumnFinder(this.options.columnDefs, function (colDef) { return colDef.name === name; }); - return colDefs.length > 0 ? colDefs[0] : null; }; /** @@ -1073,6 +1070,25 @@ angular.module('ui.grid') return t; }; + var rowColumnFinder = function(array, func) { + if (array && array.length) { + if (angular.isFunction(array.find)) { + return array.find(func) || null; + } + + var result = null; + array.every(function (entry) { + if (func(entry)) { + result = entry; + return false; + } + return true; + }); + return result; + } + return null; + } + /** * @ngdoc function * @name getRow @@ -1084,15 +1100,71 @@ angular.module('ui.grid') */ Grid.prototype.getRow = function getRow(rowEntity, lookInRows) { var self = this; - - lookInRows = typeof(lookInRows) === 'undefined' ? self.rows : lookInRows; - - var rows = lookInRows.filter(function (row) { + lookInRows = lookInRows == void 0 ? this.rows : lookInRows; + return rowColumnFinder(lookInRows, function (row) { return self.options.rowEquality(row.entity, rowEntity); }); - return rows.length > 0 ? rows[0] : null; }; + /** + * @ngdoc function + * @name getRowsByKey + * @methodOf ui.grid.class:Grid + * @description returns the GridRows who have an key that is equal to comparator + * @param {boolean} isInEntity if true then key is in entity else it's directly in row + * @param {(string|number)} key the key to look for + * @param {any} comparator the value that key should have + * @param {array} lookInRows [optional] the rows to look in - if not provided then + * looks in grid.rows + */ + Grid.prototype.getRowsByKey = function getRowsByKey(isInEntity, key, comparator, lookInRows) { + if ( key == void 0 ) { + return null; + } + + lookInRows = lookInRows == void 0 ? this.rows : lookInRows; + var func = isInEntity ? function (row) { + return row.entity != void 0 && row.entity.hasOwnProperty(key) && row.entity[key] === comparator; + } : function (row) { + return row.hasOwnProperty(key) && row[key] === comparator; + } + + return lookInRows.filter(func); + }; + + /** + * @ngdoc function + * @name findRowByKey + * @methodOf ui.grid.class:Grid + * @description returns the first GridRow which has an key that is equal to comparator + * @param {boolean} isInEntity if true then key is in entity else it's directly in row + * @param {(string|number)} key the key to look for + * @param {any} comparator the value that key should have + * @param {array} lookInRows [optional] the rows to look in - if not provided then + * looks in grid.rows + */ + Grid.prototype.findRowByKey = function findRowByKey(isInEntity, key, comparator, lookInRows) { + var result = null; + if ( key != void 0 ) { + lookInRows = lookInRows == void 0 ? this.rows : lookInRows; + var func = isInEntity ? function (row) { + if ( row.entity != void 0 && row.entity.hasOwnProperty(key) && row.entity[key] === comparator ) { + result = row; + return false; + } + return true; + } : function (row) { + if ( row.hasOwnProperty(key) && row[key] === comparator ) { + result = row; + return false; + } + return true; + } + + lookInRows.every(func); + } + return result + }; /** * @ngdoc function diff --git a/packages/core/src/js/services/rowSearcher.js b/packages/core/src/js/services/rowSearcher.js index b487ac2bf0..d7a230626e 100644 --- a/packages/core/src/js/services/rowSearcher.js +++ b/packages/core/src/js/services/rowSearcher.js @@ -111,8 +111,7 @@ module.service('rowSearcher', ['gridUtil', 'uiGridConstants', function (gridUtil rowSearcher.setupFilters = function setupFilters( filters ) { var newFilters = []; - var filtersLength = filters.length; - for ( var i = 0; i < filtersLength; i++ ) { + for ( var i = 0; i < filters.length; i++ ) { var filter = filters[i]; if ( filter.noTerm || !gridUtil.isNullOrUndefined(filter.term) ) { @@ -131,30 +130,24 @@ module.service('rowSearcher', ['gridUtil', 'uiGridConstants', function (gridUtil newFilter.term = rowSearcher.stripTerm(filter); } } - newFilter.noTerm = filter.noTerm; - - if ( filter.condition ) { - newFilter.condition = filter.condition; - } else { - newFilter.condition = rowSearcher.guessCondition(filter); - } + newFilter.noTerm = filter.noTerm; + newFilter.condition = filter.condition || rowSearcher.guessCondition(filter); newFilter.flags = angular.extend( { caseSensitive: false, date: false }, filter.flags ); - if (newFilter.condition === uiGridConstants.filter.STARTS_WITH) { - newFilter.startswithRE = new RegExp('^' + newFilter.term, regexpFlags); - } - - if (newFilter.condition === uiGridConstants.filter.ENDS_WITH) { - newFilter.endswithRE = new RegExp(newFilter.term + '$', regexpFlags); - } - - if (newFilter.condition === uiGridConstants.filter.CONTAINS) { - newFilter.containsRE = new RegExp(newFilter.term, regexpFlags); - } - - if (newFilter.condition === uiGridConstants.filter.EXACT) { - newFilter.exactRE = new RegExp('^' + newFilter.term + '$', regexpFlags); + switch (newFilter.condition) { + case uiGridConstants.filter.STARTS_WITH: + newFilter.startswithRE = new RegExp('^' + newFilter.term, regexpFlags); + break; + case uiGridConstants.filter.ENDS_WITH: + newFilter.endswithRE = new RegExp(newFilter.term + '$', regexpFlags); + break; + case uiGridConstants.filter.EXACT: + newFilter.exactRE = new RegExp('^' + newFilter.term + '$', regexpFlags); + break; + case uiGridConstants.filter.CONTAINS: + newFilter.containsRE = new RegExp(newFilter.term, regexpFlags); + break; } newFilters.push(newFilter); @@ -185,14 +178,11 @@ module.service('rowSearcher', ['gridUtil', 'uiGridConstants', function (gridUtil var term = filter.term; // Get the column value for this row - var value; - if ( column.filterCellFiltered ) { - value = grid.getCellDisplayValue(row, column); - } else { - value = grid.getCellValue(row, column); + var value = column.filterCellFiltered ? grid.getCellDisplayValue(row, column) : grid.getCellValue(row, column); + if (value == void 0) { + value = ""; } - // If the filter's condition is a RegExp, then use it if (filter.condition instanceof RegExp) { return filter.condition.test(value); @@ -220,8 +210,7 @@ module.service('rowSearcher', ['gridUtil', 'uiGridConstants', function (gridUtil } if (filter.condition === uiGridConstants.filter.NOT_EQUAL) { - var regex = new RegExp('^' + term + '$'); - return !regex.exec(value); + return !new RegExp('^' + term + '$').test(value); } if (typeof(value) === 'number' && typeof(term) === 'string' ) { @@ -240,20 +229,15 @@ module.service('rowSearcher', ['gridUtil', 'uiGridConstants', function (gridUtil term = new Date(term.replace(/\\/g, '')); } - if (filter.condition === uiGridConstants.filter.GREATER_THAN) { - return (value > term); - } - - if (filter.condition === uiGridConstants.filter.GREATER_THAN_OR_EQUAL) { - return (value >= term); - } - - if (filter.condition === uiGridConstants.filter.LESS_THAN) { - return (value < term); - } - - if (filter.condition === uiGridConstants.filter.LESS_THAN_OR_EQUAL) { - return (value <= term); + switch (filter.condition) { + case uiGridConstants.filter.GREATER_THAN: + return (value > term); + case uiGridConstants.filter.GREATER_THAN_OR_EQUAL: + return (value >= term); + case uiGridConstants.filter.LESS_THAN: + return (value < term); + case uiGridConstants.filter.LESS_THAN_OR_EQUAL: + return (value <= term); } return true; @@ -287,13 +271,11 @@ module.service('rowSearcher', ['gridUtil', 'uiGridConstants', function (gridUtil return true; } - var filtersLength = filters.length; - for (var i = 0; i < filtersLength; i++) { + for (var i = 0; i < filters.length; i++) { var filter = filters[i]; if ( !gridUtil.isNullOrUndefined(filter.term) && filter.term !== '' || filter.noTerm ) { - var ret = rowSearcher.runColumnFilter(grid, row, column, filter); - if (!ret) { + if (!rowSearcher.runColumnFilter(grid, row, column, filter)) { return false; } } @@ -333,8 +315,6 @@ module.service('rowSearcher', ['gridUtil', 'uiGridConstants', function (gridUtil // Build list of filters to apply var filterData = []; - var colsLength = columns.length; - var hasTerm = function( filters ) { var hasTerm = false; @@ -347,7 +327,7 @@ module.service('rowSearcher', ['gridUtil', 'uiGridConstants', function (gridUtil return hasTerm; }; - for (var i = 0; i < colsLength; i++) { + for (var i = 0; i < columns.length; i++) { var col = columns[i]; if (typeof(col.filters) !== 'undefined' && hasTerm(col.filters) ) { @@ -364,15 +344,13 @@ module.service('rowSearcher', ['gridUtil', 'uiGridConstants', function (gridUtil }; var foreachFilterCol = function(grid, filterData) { - var rowsLength = rows.length; - for ( var i = 0; i < rowsLength; i++) { + for ( var i = 0; i < rows.length; i++) { foreachRow(grid, rows[i], filterData.col, filterData.filters); } }; // nested loop itself - foreachFilterCol, which in turn calls foreachRow - var filterDataLength = filterData.length; - for ( var j = 0; j < filterDataLength; j++) { + for ( var j = 0; j < filterData.length; j++) { foreachFilterCol( grid, filterData[j] ); } diff --git a/packages/core/src/js/services/rowSorter.js b/packages/core/src/js/services/rowSorter.js index 00c72ec823..f6ee847977 100644 --- a/packages/core/src/js/services/rowSorter.js +++ b/packages/core/src/js/services/rowSorter.js @@ -11,17 +11,7 @@ var module = angular.module('ui.grid'); * */ -module.service('rowSorter', ['$parse', 'uiGridConstants', function ($parse, uiGridConstants) { - var currencyRegexStr = - '(' + - uiGridConstants.CURRENCY_SYMBOLS - .map(function (a) { return '\\' + a; }) // Escape all the currency symbols ($ at least will jack up this regex) - .join('|') + // Join all the symbols together with |s - ')?'; - - // /^[-+]?[£$¤¥]?[\d,.]+%?$/ - var numberStrRegex = new RegExp('^[-+]?' + currencyRegexStr + '[\\d,.]+' + currencyRegexStr + '%?$'); - +module.service('rowSorter', ['uiGridConstants', function (uiGridConstants) { var rowSorter = { // Cache of sorting functions. Once we create them, we don't want to keep re-doing it // this takes a piece of data from the cell and tries to determine its type and what sorting @@ -74,17 +64,16 @@ module.service('rowSorter', ['$parse', 'uiGridConstants', function ($parse, uiGr */ rowSorter.handleNulls = function handleNulls(a, b) { // We want to allow zero values and false values to be evaluated in the sort function - if ((!a && a !== 0 && a !== false) || (!b && b !== 0 && b !== false)) { + if ((a == void 0) || (b == void 0)) { // We want to force nulls and such to the bottom when we sort... which effectively is "greater than" - if ((!a && a !== 0 && a !== false) && (!b && b !== 0 && b !== false)) { + if ((a == void 0) && (b == void 0)) { return 0; } - else if (!a && a !== 0 && a !== false) { + + if (a == void 0) { return 1; } - else if (!b && b !== 0 && b !== false) { - return -1; - } + return -1;// b == void 0 } return null; }; @@ -102,17 +91,18 @@ module.service('rowSorter', ['$parse', 'uiGridConstants', function ($parse, uiGr */ rowSorter.basicSort = function basicSort(a, b) { var nulls = rowSorter.handleNulls(a, b); - if ( nulls !== null ) { + if (nulls !== null) { return nulls; - } else { - if (a === b) { - return 0; - } - if (a < b) { - return -1; - } - return 1; } + + if (a === b) { + return 0; + } + + if (a < b) { + return -1; + } + return 1; }; @@ -127,14 +117,18 @@ module.service('rowSorter', ['$parse', 'uiGridConstants', function ($parse, uiGr */ rowSorter.sortNumber = function sortNumber(a, b) { var nulls = rowSorter.handleNulls(a, b); - if ( nulls !== null ) { - return nulls; - } else { - return a - b; - } + return (nulls !== null) ? nulls : a - b; }; + function parseNumStr(numStr) { + if (/^\s*-?Infinity\s*$/.test(numStr)) { // check for positive or negative Infinity and return that + return parseFloat(numStr); + } + return parseFloat(numStr.replace(/[^0-9.eE-]/g, '')); + } + + /** * @ngdoc method * @methodOf ui.grid.class:rowSorter @@ -147,45 +141,23 @@ module.service('rowSorter', ['$parse', 'uiGridConstants', function ($parse, uiGr */ rowSorter.sortNumberStr = function sortNumberStr(a, b) { var nulls = rowSorter.handleNulls(a, b); - if ( nulls !== null ) { + if (nulls !== null) { return nulls; - } else { - var numA, // The parsed number form of 'a' - numB, // The parsed number form of 'b' - badA = false, - badB = false; - - // Try to parse 'a' to a float - numA = parseFloat(a.replace(/[^0-9.-]/g, '')); - - // If 'a' couldn't be parsed to float, flag it as bad - if (isNaN(numA)) { - badA = true; - } - - // Try to parse 'b' to a float - numB = parseFloat(b.replace(/[^0-9.-]/g, '')); - - // If 'b' couldn't be parsed to float, flag it as bad - if (isNaN(numB)) { - badB = true; - } - - // We want bad ones to get pushed to the bottom... which effectively is "greater than" - if (badA && badB) { - return 0; - } + } - if (badA) { - return 1; - } + var numA = parseNumStr(a), // The parsed number form of 'a' + numB = parseNumStr(b); // The parsed number form of 'b' - if (badB) { - return -1; - } + // If 'a' couldn't be parsed to float, flag it as bad + var badA = isNaN(numA), + badB = isNaN(numB); - return numA - numB; + // We want bad ones to get pushed to the bottom... which effectively is "greater than" + if (badA || badB) { + return (badA && badB) ? 0 : (badA ? 1 : -1); } + + return numA - numB; }; @@ -200,14 +172,13 @@ module.service('rowSorter', ['$parse', 'uiGridConstants', function ($parse, uiGr */ rowSorter.sortAlpha = function sortAlpha(a, b) { var nulls = rowSorter.handleNulls(a, b); - if ( nulls !== null ) { + if (nulls !== null) { return nulls; - } else { - var strA = a.toString().toLowerCase(), - strB = b.toString().toLowerCase(); - - return strA === strB ? 0 : strA.localeCompare(strB); } + + var strA = a.toString().toLowerCase(), + strB = b.toString().toLowerCase(); + return strA === strB ? 0 : strA.localeCompare(strB); }; @@ -223,20 +194,13 @@ module.service('rowSorter', ['$parse', 'uiGridConstants', function ($parse, uiGr */ rowSorter.sortDate = function sortDate(a, b) { var nulls = rowSorter.handleNulls(a, b); - if ( nulls !== null ) { + if (nulls !== null) { return nulls; - } else { - if (!(a instanceof Date)) { - a = new Date(a); - } - if (!(b instanceof Date)) { - b = new Date(b); - } - var timeA = a.getTime(), - timeB = b.getTime(); - - return timeA === timeB ? 0 : (timeA < timeB ? -1 : 1); } + + var timeA = (a instanceof Date) ? a.getTime() : new Date(a).getTime(); + var timeB = (b instanceof Date) ? b.getTime() : new Date(b).getTime(); + return timeA === timeB ? 0 : (timeA < timeB ? -1 : 1); }; @@ -252,20 +216,14 @@ module.service('rowSorter', ['$parse', 'uiGridConstants', function ($parse, uiGr */ rowSorter.sortBool = function sortBool(a, b) { var nulls = rowSorter.handleNulls(a, b); - if ( nulls !== null ) { + if (nulls !== null) { return nulls; - } else { - if (a && b) { - return 0; - } + } - if (!a && !b) { - return 0; - } - else { - return a ? 1 : -1; - } + if ((a && b) || (!a && !b)) { + return 0; } + return a ? 1 : -1; }; @@ -290,45 +248,38 @@ module.service('rowSorter', ['$parse', 'uiGridConstants', function ($parse, uiGr * we might inspect the rows themselves to decide what sort of data might be there * @returns {function} the sort function chosen for the column */ - rowSorter.getSortFn = function getSortFn(grid, col, rows) { - var sortFn, item; - + rowSorter.getSortFn = function getSortFn(col) { // See if we already figured out what to use to sort the column and have it in the cache if (rowSorter.colSortFnCache[col.colDef.name]) { - sortFn = rowSorter.colSortFnCache[col.colDef.name]; + return rowSorter.colSortFnCache[col.colDef.name]; } // If the column has its OWN sorting algorithm, use that - else if (col.sortingAlgorithm !== undefined) { - sortFn = col.sortingAlgorithm; + if (col.sortingAlgorithm != void 0) { rowSorter.colSortFnCache[col.colDef.name] = col.sortingAlgorithm; + return col.sortingAlgorithm; } // Always default to sortAlpha when sorting after a cellFilter - else if ( col.sortCellFiltered && col.cellFilter ) { - sortFn = rowSorter.sortAlpha; - rowSorter.colSortFnCache[col.colDef.name] = sortFn; + if (col.sortCellFiltered && col.cellFilter) { + rowSorter.colSortFnCache[col.colDef.name] = rowSorter.sortAlpha; + return rowSorter.sortAlpha; } + // Try and guess what sort function to use - else { - // Guess the sort function - sortFn = rowSorter.guessSortFn(col.colDef.type); + // Guess the sort function + var sortFn = rowSorter.guessSortFn(col.colDef.type); - // If we found a sort function, cache it - if (sortFn) { - rowSorter.colSortFnCache[col.colDef.name] = sortFn; - } - else { - // We assign the alpha sort because anything that is null/undefined will never get passed to - // the actual sorting function. It will get caught in our null check and returned to be sorted - // down to the bottom - sortFn = rowSorter.sortAlpha; - } + // If we found a sort function, cache it + if (sortFn) { + rowSorter.colSortFnCache[col.colDef.name] = sortFn; + return sortFn; } - - return sortFn; + // We assign the alpha sort because anything that is null/undefined will never get passed to + // the actual sorting function. It will get caught in our null check and returned to be sorted + // down to the bottom + return rowSorter.sortAlpha; }; - /** * @ngdoc method * @methodOf ui.grid.class:rowSorter @@ -349,26 +300,22 @@ module.service('rowSorter', ['$parse', 'uiGridConstants', function ($parse, uiGr return -1; } // Equal - else if (a.sort.priority === b.sort.priority) { + if (a.sort.priority === b.sort.priority) { return 0; } // B is higher - else { - return 1; - } + return 1; } // Only A has a priority - else if (a.sort && a.sort.priority !== undefined) { + if (a.sort && a.sort.priority !== undefined) { return -1; } // Only B has a priority - else if (b.sort && b.sort.priority !== undefined) { + if (b.sort && b.sort.priority !== undefined) { return 1; } // Neither has a priority - else { - return 0; - } + return 0; }; @@ -434,14 +381,9 @@ module.service('rowSorter', ['$parse', 'uiGridConstants', function ($parse, uiGr var col, direction; // put a custom index field on each row, used to make a stable sort out of unstable sorts (e.g. Chrome) - var setIndex = function( row, idx ) { + rows.forEach(function (row, idx) { row.entity.$$uiGridIndex = idx; - }; - rows.forEach(setIndex); - - // IE9-11 HACK.... the 'rows' variable would be empty where we call rowSorter.getSortFn(...) below. We have to use a separate reference - // var d = data.slice(0); - var r = rows.slice(0); + }); // Now actually sort the data var rowSortFn = function (rowA, rowB) { @@ -454,14 +396,12 @@ module.service('rowSorter', ['$parse', 'uiGridConstants', function ($parse, uiGr col = sortCols[idx].col; direction = sortCols[idx].sort.direction; - sortFn = rowSorter.getSortFn(grid, col, r); + sortFn = rowSorter.getSortFn(col); // Webpack's compress will hoist and combine propA, propB into one var and break sorting functionality // Wrapping in function prevents that unexpected behavior var props = getCellValues(grid, rowA, rowB, col); - var propA = props[0]; - var propB = props[1]; - tem = sortFn(propA, propB, rowA, rowB, direction, col); + tem = sortFn(props[0], props[1], rowA, rowB, direction, col); idx++; } @@ -475,20 +415,15 @@ module.service('rowSorter', ['$parse', 'uiGridConstants', function ($parse, uiGr } // Made it this far, we don't have to worry about null & undefined - if (direction === uiGridConstants.ASC) { - return tem; - } else { - return 0 - tem; - } + return (direction === uiGridConstants.ASC) ? tem : 0 - tem; }; var newRows = rows.sort(rowSortFn); // remove the custom index field on each row, used to make a stable sort out of unstable sorts (e.g. Chrome) - var clearIndex = function( row, idx ) { - delete row.entity.$$uiGridIndex; - }; - rows.forEach(clearIndex); + rows.forEach(function (row, idx) { + delete row.entity.$$uiGridIndex; + }); return newRows; }; diff --git a/packages/core/test/core/factories/Grid.spec.js b/packages/core/test/core/factories/Grid.spec.js index 690a78a4e3..31ad340963 100644 --- a/packages/core/test/core/factories/Grid.spec.js +++ b/packages/core/test/core/factories/Grid.spec.js @@ -324,6 +324,64 @@ describe('Grid factory', function() { }); }); + describe('getting Rows', function() { + it('should get Rows', function() { + expect(grid.getRow()).toBe(null); + expect(grid.getRow(grid.rows[0].entity)).toBe(grid.rows[0]); + expect(grid.getRow(grid.rows[0].entity), [grid.rows[0]]).toBe(grid.rows[0]); + }); + + it('should get Rows by key', function() { + grid.rows[0].entity = {str: 'abc', num: 123, nll: null, multi: true}; + grid.rows[1].entity = {multi: true}; + grid.rows[0].str = 'abc'; + grid.rows[0].num = 123; + grid.rows[0].nll = null; + grid.rows[0].innerMulti = false; + grid.rows[1].innerMulti = false; + + expect(grid.getRowsByKey()).toBe(null); + expect(grid.getRowsByKey(true, "test")).toEqual([]); + expect(grid.getRowsByKey(true, "str", "abc")[0].entity).toBe(grid.rows[0].entity); + expect(grid.getRowsByKey(true, "str", "def")).toEqual([]); + expect(grid.getRowsByKey(true, "num", 123)[0].entity).toBe(grid.rows[0].entity); + expect(grid.getRowsByKey(true, "nll", null)[0].entity).toBe(grid.rows[0].entity); + expect(grid.getRowsByKey(true, "multi", true).length).toBe(2); + + expect(grid.getRowsByKey(false, "test")).toEqual([]); + expect(grid.getRowsByKey(false, "str", "abc")).toEqual([grid.rows[0]]); + expect(grid.getRowsByKey(false, "str", "def")).toEqual([]); + expect(grid.getRowsByKey(false, "num", 123)).toEqual([grid.rows[0]]); + expect(grid.getRowsByKey(false, "nll", null)).toEqual([grid.rows[0]]); + expect(grid.getRowsByKey(false, "innerMulti", false).length).toBe(2); + }); + + it('should find first Row by key', function() { + grid.rows[0].entity = {str: 'abc', num: 123, nll: null, multi: true}; + grid.rows[1].entity = {multi: true}; + grid.rows[0].str = 'abc'; + grid.rows[0].num = 123; + grid.rows[0].nll = null; + grid.rows[0].innerMulti = false; + grid.rows[1].innerMulti = false; + + expect(grid.findRowByKey()).toBe(null); + expect(grid.findRowByKey(true, "test")).toBe(null); + expect(grid.findRowByKey(true, "str", "abc").entity).toBe(grid.rows[0].entity); + expect(grid.findRowByKey(true, "str", "def")).toBe(null); + expect(grid.findRowByKey(true, "num", 123).entity).toBe(grid.rows[0].entity); + expect(grid.findRowByKey(true, "nll", null).entity).toBe(grid.rows[0].entity); + expect(grid.findRowByKey(true, "multi", true).entity).toBe(grid.rows[0].entity); + + expect(grid.findRowByKey(false, "test")).toBe(null); + expect(grid.findRowByKey(false, "str", "abc")).toBe(grid.rows[0]); + expect(grid.findRowByKey(false, "str", "def")).toBe(null); + expect(grid.findRowByKey(false, "num", 123)).toBe(grid.rows[0]); + expect(grid.findRowByKey(false, "nll", null)).toBe(grid.rows[0]); + expect(grid.findRowByKey(false, "innerMulti", false).entity).toBe(grid.rows[0].entity); + }); + }) + describe('buildColumns', function() { it('guess correct column types when not specified', function() { var dataRow = {str: 'abc', num: 123, dat: new Date(), bool: true, obj: {}, nll: null, negNum: -1, posNum: +1}; diff --git a/packages/edit/CHANGELOG.md b/packages/edit/CHANGELOG.md index 51ba94b78b..8d28067d64 100644 --- a/packages/edit/CHANGELOG.md +++ b/packages/edit/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [4.11.1](https://github.com/angular-ui/ui-grid/compare/v4.11.0...v4.11.1) (2022-02-23) + +**Note:** Version bump only for package @ui-grid/edit + + + + + # [4.11.0](https://github.com/angular-ui/ui-grid/compare/v4.10.3...v4.11.0) (2021-08-12) **Note:** Version bump only for package @ui-grid/edit diff --git a/packages/edit/package-lock.json b/packages/edit/package-lock.json index 42b8f621e3..e1d4099eda 100644 --- a/packages/edit/package-lock.json +++ b/packages/edit/package-lock.json @@ -1,6 +1,6 @@ { "name": "@ui-grid/edit", - "version": "4.11.0", + "version": "4.11.1", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/packages/edit/package.json b/packages/edit/package.json index 83248372cf..7de892ec9f 100644 --- a/packages/edit/package.json +++ b/packages/edit/package.json @@ -1,10 +1,10 @@ { "name": "@ui-grid/edit", - "version": "4.11.0", + "version": "4.11.1", "description": "This module provides cell editing capability to ui.grid", "main": "index.js", "dependencies": { - "@ui-grid/core": "^4.11.0", + "@ui-grid/core": "^4.11.1", "angular": ">=1.4.0 1.8.x" }, "publishConfig": { diff --git a/packages/empty-base-layer/CHANGELOG.md b/packages/empty-base-layer/CHANGELOG.md index 99fc47e431..9e62f72234 100644 --- a/packages/empty-base-layer/CHANGELOG.md +++ b/packages/empty-base-layer/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [4.11.1](https://github.com/angular-ui/ui-grid/compare/v4.11.0...v4.11.1) (2022-02-23) + +**Note:** Version bump only for package @ui-grid/empty-base-layer + + + + + # [4.11.0](https://github.com/angular-ui/ui-grid/compare/v4.10.3...v4.11.0) (2021-08-12) **Note:** Version bump only for package @ui-grid/empty-base-layer diff --git a/packages/empty-base-layer/package-lock.json b/packages/empty-base-layer/package-lock.json index ea8725c142..a6e278fb77 100644 --- a/packages/empty-base-layer/package-lock.json +++ b/packages/empty-base-layer/package-lock.json @@ -1,6 +1,6 @@ { "name": "@ui-grid/empty-base-layer", - "version": "4.11.0", + "version": "4.11.1", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/packages/empty-base-layer/package.json b/packages/empty-base-layer/package.json index eea384f291..67ba921ff9 100644 --- a/packages/empty-base-layer/package.json +++ b/packages/empty-base-layer/package.json @@ -1,10 +1,10 @@ { "name": "@ui-grid/empty-base-layer", - "version": "4.11.0", + "version": "4.11.1", "description": "This module provides the ability to have the background of the ui-grid be empty rows", "main": "index.js", "dependencies": { - "@ui-grid/core": "^4.11.0", + "@ui-grid/core": "^4.11.1", "angular": ">=1.4.0 1.8.x" }, "publishConfig": { diff --git a/packages/expandable/CHANGELOG.md b/packages/expandable/CHANGELOG.md index 0baf7397ec..7d8b3a50ab 100644 --- a/packages/expandable/CHANGELOG.md +++ b/packages/expandable/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [4.11.1](https://github.com/angular-ui/ui-grid/compare/v4.11.0...v4.11.1) (2022-02-23) + +**Note:** Version bump only for package @ui-grid/expandable + + + + + # [4.11.0](https://github.com/angular-ui/ui-grid/compare/v4.10.3...v4.11.0) (2021-08-12) **Note:** Version bump only for package @ui-grid/expandable diff --git a/packages/expandable/package-lock.json b/packages/expandable/package-lock.json index 0ceb75d8b1..7116cf6482 100644 --- a/packages/expandable/package-lock.json +++ b/packages/expandable/package-lock.json @@ -1,6 +1,6 @@ { "name": "@ui-grid/expandable", - "version": "4.11.0", + "version": "4.11.1", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/packages/expandable/package.json b/packages/expandable/package.json index 12884c01bd..a5c5483865 100644 --- a/packages/expandable/package.json +++ b/packages/expandable/package.json @@ -1,10 +1,10 @@ { "name": "@ui-grid/expandable", - "version": "4.11.0", + "version": "4.11.1", "description": "This module provides the ability to create subgrids inside ui-grid", "main": "index.js", "dependencies": { - "@ui-grid/core": "^4.11.0", + "@ui-grid/core": "^4.11.1", "angular": ">=1.4.0 1.8.x" }, "publishConfig": { diff --git a/packages/exporter/CHANGELOG.md b/packages/exporter/CHANGELOG.md index 036026bebd..4b2dfea2a7 100644 --- a/packages/exporter/CHANGELOG.md +++ b/packages/exporter/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [4.11.1](https://github.com/angular-ui/ui-grid/compare/v4.11.0...v4.11.1) (2022-02-23) + +**Note:** Version bump only for package @ui-grid/exporter + + + + + # [4.11.0](https://github.com/angular-ui/ui-grid/compare/v4.10.3...v4.11.0) (2021-08-12) **Note:** Version bump only for package @ui-grid/exporter diff --git a/packages/exporter/package-lock.json b/packages/exporter/package-lock.json index 0546c6224e..e1bab58d99 100644 --- a/packages/exporter/package-lock.json +++ b/packages/exporter/package-lock.json @@ -1,9 +1,17 @@ { "name": "@ui-grid/exporter", - "version": "4.11.0", + "version": "4.11.1", "lockfileVersion": 1, "requires": true, "dependencies": { + "@ui-grid/core": { + "version": "4.10.3", + "resolved": "https://registry.npmjs.org/@ui-grid/core/-/core-4.10.3.tgz", + "integrity": "sha512-hDgzXdcaWnATqD5VbC/jvZ5NJCttLpUl2z3oFq+sFl8cLksWxaRjdX0fr2iXtuwhbNRqFtp6p/peLYL62Cph/Q==", + "requires": { + "angular": ">=1.4.0 1.8.x" + } + }, "abbrev": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", @@ -735,9 +743,9 @@ "integrity": "sha512-6i0HVbUfcKaTv+EG8ZTr75az7GFXcLYk9UyLEg7Notv/Ma+z/UG3TCoz6GiNeOrn1E/e63I0X/Hpw18jHOTUnA==" }, "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==" + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" }, "pdfkit": { "version": "0.8.3", diff --git a/packages/exporter/package.json b/packages/exporter/package.json index afb2ddef5c..5ae5729895 100644 --- a/packages/exporter/package.json +++ b/packages/exporter/package.json @@ -1,10 +1,10 @@ { "name": "@ui-grid/exporter", - "version": "4.11.0", + "version": "4.11.1", "description": "This module provides the ability to export data from ui-grid", "main": "index.js", "dependencies": { - "@ui-grid/core": "^4.11.0", + "@ui-grid/core": "^4.11.1", "angular": ">=1.4.0 1.8.x", "csv-js": "~1.0.0", "excel-builder": "~2.0.2", diff --git a/packages/exporter/src/js/exporter.js b/packages/exporter/src/js/exporter.js index 64b19c0523..cf77663f69 100755 --- a/packages/exporter/src/js/exporter.js +++ b/packages/exporter/src/js/exporter.js @@ -232,6 +232,13 @@ * @description The default filename to use when saving the downloaded csv. * This will only work in some browsers. *
Defaults to 'download.csv' + *
+           *   gridOptions.exporterCsvFilename = "rows.csv"
+           * 
+ *
Or a function returning a string: + *
+           *   gridOptions.exporterCsvFilename = function(grid, rowTypes, colTypes) { return "rows" + rowTypes + ".csv" };
+           * 
*/ gridOptions.exporterCsvFilename = gridOptions.exporterCsvFilename ? gridOptions.exporterCsvFilename : 'download.csv'; /** @@ -240,6 +247,13 @@ * @propertyOf ui.grid.exporter.api:GridOptions * @description The default filename to use when saving the downloaded pdf, only used in IE (other browsers open pdfs in a new window) *
Defaults to 'download.pdf' + *
+           *   gridOptions.exporterPdfFilename = "rows.pdf"
+           * 
+ *
Or a function returning a string: + *
+           *   gridOptions.exporterPdfFilename = function(grid, rowTypes, colTypes) { return "rows" + rowTypes + ".pdf" };
+           * 
*/ gridOptions.exporterPdfFilename = gridOptions.exporterPdfFilename ? gridOptions.exporterPdfFilename : 'download.pdf'; /** @@ -248,6 +262,13 @@ * @propertyOf ui.grid.exporter.api:GridOptions * @description The default filename to use when saving the downloaded excel, only used in IE (other browsers open excels in a new window) *
Defaults to 'download.xlsx' + *
+           *   gridOptions.exporterExcelFilename = "rows.xlsx"
+           * 
+ *
Or a function returning a string: + *
+           *   gridOptions.exporterExcelFilename = function(grid, rowTypes, colTypes) { return "rows" + rowTypes + ".xlsx" };
+           * 
*/ gridOptions.exporterExcelFilename = gridOptions.exporterExcelFilename ? gridOptions.exporterExcelFilename : 'download.xlsx'; @@ -257,6 +278,13 @@ * @propertyOf ui.grid.exporter.api:GridOptions * @description The default sheetname to use when saving the downloaded to excel *
Defaults to 'Sheet1' + *
+           *   gridOptions.exporterExcelSheetName = "HitListSheet"
+           * 
+ *
Or a function returning a string: + *
+           *   gridOptions.exporterExcelSheetName = function(grid, rowTypes, colTypes) { return "HitListSheet" + rowTypes };
+           * 
*/ gridOptions.exporterExcelSheetName = gridOptions.exporterExcelSheetName ? gridOptions.exporterExcelSheetName : 'Sheet1'; @@ -831,7 +859,8 @@ var exportData = self.getData(grid, rowTypes, colTypes); var csvContent = self.formatAsCsv(exportColumnHeaders, exportData, grid.options.exporterCsvColumnSeparator); - self.downloadFile (grid.options.exporterCsvFilename, csvContent, grid.options.exporterCsvColumnSeparator, grid.options.exporterOlderExcelCompatibility, grid.options.exporterIsExcelCompatible); + var fileName = angular.isFunction(grid.options.exporterCsvFilename) ? grid.options.exporterCsvFilename(grid, rowTypes, colTypes) : grid.options.exporterCsvFilename; + self.downloadFile(fileName, csvContent, grid.options.exporterCsvColumnSeparator, grid.options.exporterOlderExcelCompatibility, grid.options.exporterIsExcelCompatible); }); }, @@ -1268,7 +1297,8 @@ docDefinition = self.prepareAsPdf(grid, exportColumnHeaders, exportData); if (self.isIE() || navigator.appVersion.indexOf('Edge') !== -1) { - self.downloadPDF(grid.options.exporterPdfFilename, docDefinition); + var fileName = angular.isFunction(grid.options.exporterPdfFilename) ? grid.options.exporterPdfFilename(grid, rowTypes, colTypes) : grid.options.exporterPdfFilename; + self.downloadPDF(fileName, docDefinition); } else { pdfMake.createPdf(docDefinition).open(); } @@ -1608,9 +1638,13 @@ this.loadAllDataIfNeeded(grid, rowTypes, colTypes).then(function() { var exportColumnHeaders = grid.options.showHeader ? self.getColumnHeaders(grid, colTypes) : []; - var workbook = new ExcelBuilder.Workbook(); - var aName = grid.options.exporterExcelSheetName ? grid.options.exporterExcelSheetName : 'Sheet1'; + var aName = 'Sheet1'; + if (grid.options.exporterExcelSheetName) { + aName = angular.isFunction(grid.options.exporterExcelSheetName) ? grid.options.exporterExcelSheetName(grid, rowTypes, colTypes) : grid.options.exporterExcelSheetName; + } + var sheet = new ExcelBuilder.Worksheet({name: aName}); + var workbook = new ExcelBuilder.Workbook(); workbook.addWorksheet(sheet); var docDefinition = self.prepareAsExcel(grid, workbook, sheet); @@ -1633,8 +1667,8 @@ sheet.setData(sheet.data.concat(excelContent)); ExcelBuilder.Builder.createFile(workbook, {type: 'blob'}).then(function(result) { - self.downloadFile (grid.options.exporterExcelFilename, result, grid.options.exporterCsvColumnSeparator, - grid.options.exporterOlderExcelCompatibility); + var fileName = angular.isFunction(grid.options.exporterExcelFilename) ? grid.options.exporterExcelFilename(grid, rowTypes, colTypes) : grid.options.exporterExcelFilename; + self.downloadFile(fileName, result, grid.options.exporterCsvColumnSeparator, grid.options.exporterOlderExcelCompatibility); }); }); } diff --git a/packages/exporter/test/exporter.spec.js b/packages/exporter/test/exporter.spec.js index e2e911836f..1f11986699 100644 --- a/packages/exporter/test/exporter.spec.js +++ b/packages/exporter/test/exporter.spec.js @@ -773,7 +773,7 @@ describe('ui.grid.exporter', function() { it('calls exporterAllDataFn', function() { expect(grid.options.exporterAllDataFn).toHaveBeenCalled(); }); - it('calls exporterAllDataFn', function() { + it('calls modifyRows', function() { expect(grid.modifyRows).toHaveBeenCalled(); }); }); diff --git a/packages/grouping/CHANGELOG.md b/packages/grouping/CHANGELOG.md index 3fc315f8c3..a1026f5884 100644 --- a/packages/grouping/CHANGELOG.md +++ b/packages/grouping/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [4.11.1](https://github.com/angular-ui/ui-grid/compare/v4.11.0...v4.11.1) (2022-02-23) + +**Note:** Version bump only for package @ui-grid/grouping + + + + + # [4.11.0](https://github.com/angular-ui/ui-grid/compare/v4.10.3...v4.11.0) (2021-08-12) **Note:** Version bump only for package @ui-grid/grouping diff --git a/packages/grouping/package-lock.json b/packages/grouping/package-lock.json index d8d5273e81..c053183f6d 100644 --- a/packages/grouping/package-lock.json +++ b/packages/grouping/package-lock.json @@ -1,6 +1,6 @@ { "name": "@ui-grid/grouping", - "version": "4.11.0", + "version": "4.11.1", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/packages/grouping/package.json b/packages/grouping/package.json index 714884490f..a4824903f3 100644 --- a/packages/grouping/package.json +++ b/packages/grouping/package.json @@ -1,11 +1,11 @@ { "name": "@ui-grid/grouping", - "version": "4.11.0", + "version": "4.11.1", "description": "This module provides ui-grid with grouping of rows based on the data in them", "main": "index.js", "dependencies": { - "@ui-grid/core": "^4.11.0", - "@ui-grid/tree-base": "^4.11.0", + "@ui-grid/core": "^4.11.1", + "@ui-grid/tree-base": "^4.11.1", "angular": ">=1.4.0 1.8.x" }, "publishConfig": { diff --git a/packages/grouping/src/js/grouping.js b/packages/grouping/src/js/grouping.js index 28dc300dfe..6c33da961f 100644 --- a/packages/grouping/src/js/grouping.js +++ b/packages/grouping/src/js/grouping.js @@ -953,7 +953,7 @@ var fieldValue = grid.getCellValue(row, groupFieldState.col); // look for change of value - and insert a header - if ( !groupFieldState.initialised || rowSorter.getSortFn(grid, groupFieldState.col, renderableRows)(fieldValue, groupFieldState.currentValue) !== 0 ) { + if ( !groupFieldState.initialised || rowSorter.getSortFn(groupFieldState.col)(fieldValue, groupFieldState.currentValue) !== 0 ) { service.insertGroupHeader( grid, renderableRows, i, processingState, stateIndex ); i++; } diff --git a/packages/i18n/CHANGELOG.md b/packages/i18n/CHANGELOG.md index 0be374e213..a90d535be2 100644 --- a/packages/i18n/CHANGELOG.md +++ b/packages/i18n/CHANGELOG.md @@ -3,6 +3,17 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [4.11.1](https://github.com/angular-ui/ui-grid/compare/v4.11.0...v4.11.1) (2022-02-23) + + +### Bug Fixes + +* **i18n:** complete ru locale ([8d2caee](https://github.com/angular-ui/ui-grid/commit/8d2caeeb7fa0e85d73c5513d39f0c8ff7992f0b7)) + + + + + # [4.11.0](https://github.com/angular-ui/ui-grid/compare/v4.10.3...v4.11.0) (2021-08-12) **Note:** Version bump only for package @ui-grid/i18n diff --git a/packages/i18n/package-lock.json b/packages/i18n/package-lock.json index 4ac4b200ee..68b25d37ce 100644 --- a/packages/i18n/package-lock.json +++ b/packages/i18n/package-lock.json @@ -1,6 +1,6 @@ { "name": "@ui-grid/i18n", - "version": "4.11.0", + "version": "4.11.1", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/packages/i18n/package.json b/packages/i18n/package.json index 52451c9360..abf1221610 100644 --- a/packages/i18n/package.json +++ b/packages/i18n/package.json @@ -1,10 +1,10 @@ { "name": "@ui-grid/i18n", - "version": "4.11.0", + "version": "4.11.1", "description": "This package provides various language translations for ui-grid", "main": "index.js", "dependencies": { - "@ui-grid/core": "^4.11.0", + "@ui-grid/core": "^4.11.1", "angular": ">=1.4.0 1.8.x" }, "publishConfig": { diff --git a/packages/i18n/src/js/ru.js b/packages/i18n/src/js/ru.js index c48799eb97..17aacaf6fb 100644 --- a/packages/i18n/src/js/ru.js +++ b/packages/i18n/src/js/ru.js @@ -99,7 +99,7 @@ grouping: { group: 'Группировать', ungroup: 'Разгруппировать', - aggregate_count: 'Группировать: Count', + aggregate_count: 'Группировать: Количество', aggregate_sum: 'Для группы: Сумма', aggregate_max: 'Для группы: Максимум', aggregate_min: 'Для группы: Минимум', diff --git a/packages/importer/CHANGELOG.md b/packages/importer/CHANGELOG.md index 91012ce5ca..87a452fbce 100644 --- a/packages/importer/CHANGELOG.md +++ b/packages/importer/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [4.11.1](https://github.com/angular-ui/ui-grid/compare/v4.11.0...v4.11.1) (2022-02-23) + +**Note:** Version bump only for package @ui-grid/importer + + + + + # [4.11.0](https://github.com/angular-ui/ui-grid/compare/v4.10.3...v4.11.0) (2021-08-12) **Note:** Version bump only for package @ui-grid/importer diff --git a/packages/importer/package-lock.json b/packages/importer/package-lock.json index 5fe38cbe15..025c863947 100644 --- a/packages/importer/package-lock.json +++ b/packages/importer/package-lock.json @@ -1,6 +1,6 @@ { "name": "@ui-grid/importer", - "version": "4.11.0", + "version": "4.11.1", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/packages/importer/package.json b/packages/importer/package.json index 6072bef5c4..c7603f2ca1 100644 --- a/packages/importer/package.json +++ b/packages/importer/package.json @@ -1,10 +1,10 @@ { "name": "@ui-grid/importer", - "version": "4.11.0", + "version": "4.11.1", "description": "This module provides the ability to import data into ui-grid", "main": "index.js", "dependencies": { - "@ui-grid/core": "^4.11.0", + "@ui-grid/core": "^4.11.1", "angular": ">=1.4.0 1.8.x", "csv-js": "~1.0.0" }, diff --git a/packages/infinite-scroll/CHANGELOG.md b/packages/infinite-scroll/CHANGELOG.md index 5e7013fd57..f1ec85c459 100644 --- a/packages/infinite-scroll/CHANGELOG.md +++ b/packages/infinite-scroll/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [4.11.1](https://github.com/angular-ui/ui-grid/compare/v4.11.0...v4.11.1) (2022-02-23) + +**Note:** Version bump only for package @ui-grid/infinite-scroll + + + + + # [4.11.0](https://github.com/angular-ui/ui-grid/compare/v4.10.3...v4.11.0) (2021-08-12) **Note:** Version bump only for package @ui-grid/infinite-scroll diff --git a/packages/infinite-scroll/package-lock.json b/packages/infinite-scroll/package-lock.json index 3164b030ff..82e88a6c43 100644 --- a/packages/infinite-scroll/package-lock.json +++ b/packages/infinite-scroll/package-lock.json @@ -1,6 +1,6 @@ { "name": "@ui-grid/infinite-scroll", - "version": "4.11.0", + "version": "4.11.1", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/packages/infinite-scroll/package.json b/packages/infinite-scroll/package.json index e00098a40e..6c1f7492c2 100644 --- a/packages/infinite-scroll/package.json +++ b/packages/infinite-scroll/package.json @@ -1,10 +1,10 @@ { "name": "@ui-grid/infinite-scroll", - "version": "4.11.0", + "version": "4.11.1", "description": "This module provides infinite scroll functionality to ui-grid", "main": "index.js", "dependencies": { - "@ui-grid/core": "^4.11.0", + "@ui-grid/core": "^4.11.1", "angular": ">=1.4.0 1.8.x" }, "publishConfig": { diff --git a/packages/move-columns/CHANGELOG.md b/packages/move-columns/CHANGELOG.md index 1857f34e89..85e1028f63 100644 --- a/packages/move-columns/CHANGELOG.md +++ b/packages/move-columns/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [4.11.1](https://github.com/angular-ui/ui-grid/compare/v4.11.0...v4.11.1) (2022-02-23) + +**Note:** Version bump only for package @ui-grid/move-columns + + + + + # [4.11.0](https://github.com/angular-ui/ui-grid/compare/v4.10.3...v4.11.0) (2021-08-12) **Note:** Version bump only for package @ui-grid/move-columns diff --git a/packages/move-columns/package-lock.json b/packages/move-columns/package-lock.json index 7fcaddbc7d..f19bb3f53c 100644 --- a/packages/move-columns/package-lock.json +++ b/packages/move-columns/package-lock.json @@ -1,6 +1,6 @@ { "name": "@ui-grid/move-columns", - "version": "4.11.0", + "version": "4.11.1", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/packages/move-columns/package.json b/packages/move-columns/package.json index 7eb8c5a6d9..672382f786 100644 --- a/packages/move-columns/package.json +++ b/packages/move-columns/package.json @@ -1,10 +1,10 @@ { "name": "@ui-grid/move-columns", - "version": "4.11.0", + "version": "4.11.1", "description": "This module enables ui-grid users to change the position of columns", "main": "index.js", "dependencies": { - "@ui-grid/core": "^4.11.0", + "@ui-grid/core": "^4.11.1", "angular": ">=1.4.0 1.8.x" }, "publishConfig": { diff --git a/packages/pagination/CHANGELOG.md b/packages/pagination/CHANGELOG.md index f159fd5934..c65c1a9d84 100644 --- a/packages/pagination/CHANGELOG.md +++ b/packages/pagination/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [4.11.1](https://github.com/angular-ui/ui-grid/compare/v4.11.0...v4.11.1) (2022-02-23) + +**Note:** Version bump only for package @ui-grid/pagination + + + + + # [4.11.0](https://github.com/angular-ui/ui-grid/compare/v4.10.3...v4.11.0) (2021-08-12) **Note:** Version bump only for package @ui-grid/pagination diff --git a/packages/pagination/package-lock.json b/packages/pagination/package-lock.json index 55131ca9a3..d8cd823dbd 100644 --- a/packages/pagination/package-lock.json +++ b/packages/pagination/package-lock.json @@ -1,6 +1,6 @@ { "name": "@ui-grid/pagination", - "version": "4.11.0", + "version": "4.11.1", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/packages/pagination/package.json b/packages/pagination/package.json index 3256e340ed..fa891d07ea 100644 --- a/packages/pagination/package.json +++ b/packages/pagination/package.json @@ -1,10 +1,10 @@ { "name": "@ui-grid/pagination", - "version": "4.11.0", + "version": "4.11.1", "description": "This module provides pagination support to ui-grid", "main": "index.js", "dependencies": { - "@ui-grid/core": "^4.11.0", + "@ui-grid/core": "^4.11.1", "angular": ">=1.4.0 1.8.x" }, "publishConfig": { diff --git a/packages/pinning/CHANGELOG.md b/packages/pinning/CHANGELOG.md index e50ab61b4d..4afbc83cd6 100644 --- a/packages/pinning/CHANGELOG.md +++ b/packages/pinning/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [4.11.1](https://github.com/angular-ui/ui-grid/compare/v4.11.0...v4.11.1) (2022-02-23) + +**Note:** Version bump only for package @ui-grid/pinning + + + + + # [4.11.0](https://github.com/angular-ui/ui-grid/compare/v4.10.3...v4.11.0) (2021-08-12) **Note:** Version bump only for package @ui-grid/pinning diff --git a/packages/pinning/package-lock.json b/packages/pinning/package-lock.json index 466dbc7d0b..a60b333cd6 100644 --- a/packages/pinning/package-lock.json +++ b/packages/pinning/package-lock.json @@ -1,6 +1,6 @@ { "name": "@ui-grid/pinning", - "version": "4.11.0", + "version": "4.11.1", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/packages/pinning/package.json b/packages/pinning/package.json index ccd0831832..90662f9082 100644 --- a/packages/pinning/package.json +++ b/packages/pinning/package.json @@ -1,10 +1,10 @@ { "name": "@ui-grid/pinning", - "version": "4.11.0", + "version": "4.11.1", "description": "This module enables the user to pun columns in ui-grid", "main": "index.js", "dependencies": { - "@ui-grid/core": "^4.11.0", + "@ui-grid/core": "^4.11.1", "angular": ">=1.4.0 1.8.x" }, "publishConfig": { diff --git a/packages/resize-columns/CHANGELOG.md b/packages/resize-columns/CHANGELOG.md index 82f7972bbc..44cb346f41 100644 --- a/packages/resize-columns/CHANGELOG.md +++ b/packages/resize-columns/CHANGELOG.md @@ -3,6 +3,17 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [4.11.1](https://github.com/angular-ui/ui-grid/compare/v4.11.0...v4.11.1) (2022-02-23) + + +### Bug Fixes + +* width gets adjusted so that ellipses aren't shown ([7851ff8](https://github.com/angular-ui/ui-grid/commit/7851ff81eae5b48bf89f4ca88ac66b097240c1ef)) + + + + + # [4.11.0](https://github.com/angular-ui/ui-grid/compare/v4.10.3...v4.11.0) (2021-08-12) **Note:** Version bump only for package @ui-grid/resize-columns diff --git a/packages/resize-columns/package-lock.json b/packages/resize-columns/package-lock.json index 92b5606276..c0259172ee 100644 --- a/packages/resize-columns/package-lock.json +++ b/packages/resize-columns/package-lock.json @@ -1,6 +1,6 @@ { "name": "@ui-grid/resize-columns", - "version": "4.11.0", + "version": "4.11.1", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/packages/resize-columns/package.json b/packages/resize-columns/package.json index 172472c194..a1d94c07c2 100644 --- a/packages/resize-columns/package.json +++ b/packages/resize-columns/package.json @@ -1,10 +1,10 @@ { "name": "@ui-grid/resize-columns", - "version": "4.11.0", + "version": "4.11.1", "description": "This module allows columns to be resized in ui-grid", "main": "index.js", "dependencies": { - "@ui-grid/core": "^4.11.0", + "@ui-grid/core": "^4.11.1", "angular": ">=1.4.0 1.8.x" }, "publishConfig": { diff --git a/packages/resize-columns/src/js/ui-grid-column-resizer.js b/packages/resize-columns/src/js/ui-grid-column-resizer.js index b746ab2c85..44e915640d 100644 --- a/packages/resize-columns/src/js/ui-grid-column-resizer.js +++ b/packages/resize-columns/src/js/ui-grid-column-resizer.js @@ -525,7 +525,7 @@ var e = angular.element(newElm); e.attr('style', 'float: left'); - var width = gridUtil.elementWidth(e); + var width = gridUtil.elementWidth(e) + 2; if (menuButton) { var menuButtonWidth = gridUtil.elementWidth(menuButton); diff --git a/packages/row-edit/CHANGELOG.md b/packages/row-edit/CHANGELOG.md index ab63e035d5..0dc8a01961 100644 --- a/packages/row-edit/CHANGELOG.md +++ b/packages/row-edit/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [4.11.1](https://github.com/angular-ui/ui-grid/compare/v4.11.0...v4.11.1) (2022-02-23) + +**Note:** Version bump only for package @ui-grid/row-edit + + + + + # [4.11.0](https://github.com/angular-ui/ui-grid/compare/v4.10.3...v4.11.0) (2021-08-12) **Note:** Version bump only for package @ui-grid/row-edit diff --git a/packages/row-edit/package-lock.json b/packages/row-edit/package-lock.json index a97d224eaa..b951f9401b 100644 --- a/packages/row-edit/package-lock.json +++ b/packages/row-edit/package-lock.json @@ -1,6 +1,6 @@ { "name": "@ui-grid/row-edit", - "version": "4.11.0", + "version": "4.11.1", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/packages/row-edit/package.json b/packages/row-edit/package.json index 24fd86bb55..30a6d9c5b2 100644 --- a/packages/row-edit/package.json +++ b/packages/row-edit/package.json @@ -1,12 +1,12 @@ { "name": "@ui-grid/row-edit", - "version": "4.11.0", + "version": "4.11.1", "description": "This ui-grid module extends the edit feature to provide tracking and saving of rows of data", "main": "index.js", "dependencies": { - "@ui-grid/cell-nav": "^4.11.0", - "@ui-grid/core": "^4.11.0", - "@ui-grid/edit": "^4.11.0", + "@ui-grid/cell-nav": "^4.11.1", + "@ui-grid/core": "^4.11.1", + "@ui-grid/edit": "^4.11.1", "angular": ">=1.4.0 1.8.x" }, "publishConfig": { diff --git a/packages/saveState/CHANGELOG.md b/packages/saveState/CHANGELOG.md index 4da2ec17c0..0c8395f5fb 100644 --- a/packages/saveState/CHANGELOG.md +++ b/packages/saveState/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [4.11.1](https://github.com/angular-ui/ui-grid/compare/v4.11.0...v4.11.1) (2022-02-23) + +**Note:** Version bump only for package @ui-grid/save-state + + + + + # [4.11.0](https://github.com/angular-ui/ui-grid/compare/v4.10.3...v4.11.0) (2021-08-12) **Note:** Version bump only for package @ui-grid/save-state diff --git a/packages/saveState/package-lock.json b/packages/saveState/package-lock.json index 29d8f80319..eeda27e183 100644 --- a/packages/saveState/package-lock.json +++ b/packages/saveState/package-lock.json @@ -1,6 +1,6 @@ { "name": "@ui-grid/save-state", - "version": "4.11.0", + "version": "4.11.1", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/packages/saveState/package.json b/packages/saveState/package.json index a79b140e98..205d462202 100644 --- a/packages/saveState/package.json +++ b/packages/saveState/package.json @@ -1,14 +1,14 @@ { "name": "@ui-grid/save-state", - "version": "4.11.0", + "version": "4.11.1", "description": "This ui-grid module provides the ability to save and restore the grid state", "main": "index.js", "dependencies": { - "@ui-grid/cell-nav": "^4.11.0", - "@ui-grid/core": "^4.11.0", - "@ui-grid/grouping": "^4.11.0", - "@ui-grid/selection": "^4.11.0", - "@ui-grid/tree-view": "^4.11.0", + "@ui-grid/cell-nav": "^4.11.1", + "@ui-grid/core": "^4.11.1", + "@ui-grid/grouping": "^4.11.1", + "@ui-grid/selection": "^4.11.1", + "@ui-grid/tree-view": "^4.11.1", "angular": ">=1.4.0 1.8.x" }, "publishConfig": { diff --git a/packages/selection/CHANGELOG.md b/packages/selection/CHANGELOG.md index 6ce6a79ba8..5fbeabd1f9 100644 --- a/packages/selection/CHANGELOG.md +++ b/packages/selection/CHANGELOG.md @@ -3,6 +3,17 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [4.11.1](https://github.com/angular-ui/ui-grid/compare/v4.11.0...v4.11.1) (2022-02-23) + + +### Bug Fixes + +* clear selection function ([f616137](https://github.com/angular-ui/ui-grid/commit/f61613794aa9f919d091ea60cc27eb85bf70ee74)) + + + + + # [4.11.0](https://github.com/angular-ui/ui-grid/compare/v4.10.3...v4.11.0) (2021-08-12) **Note:** Version bump only for package @ui-grid/selection diff --git a/packages/selection/package-lock.json b/packages/selection/package-lock.json index 8626a316ee..3186a78420 100644 --- a/packages/selection/package-lock.json +++ b/packages/selection/package-lock.json @@ -1,6 +1,6 @@ { "name": "@ui-grid/selection", - "version": "4.11.0", + "version": "4.11.1", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/packages/selection/package.json b/packages/selection/package.json index a9acf1187f..624d45dbf0 100644 --- a/packages/selection/package.json +++ b/packages/selection/package.json @@ -1,10 +1,10 @@ { "name": "@ui-grid/selection", - "version": "4.11.0", + "version": "4.11.1", "description": "This module provides row selection to ui-grid", "main": "index.js", "dependencies": { - "@ui-grid/core": "^4.11.0", + "@ui-grid/core": "^4.11.1", "angular": ">=1.4.0 1.8.x" }, "publishConfig": { diff --git a/packages/selection/src/js/selection.js b/packages/selection/src/js/selection.js index 1ffd0ec200..8288097d56 100644 --- a/packages/selection/src/js/selection.js +++ b/packages/selection/src/js/selection.js @@ -201,8 +201,8 @@ */ toggleRowSelection: function (rowEntity, evt) { var row = grid.getRow(rowEntity); - if (row !== null) { - service.toggleRowSelection(grid, row, evt, grid.options.multiSelect, grid.options.noUnselect); + if (row != void 0 && row !== null) { + service.toggleRowSelection(grid, row, evt, grid.options.multiSelect, grid.options.noUnselect, true); } }, /** @@ -215,8 +215,8 @@ */ selectRow: function (rowEntity, evt) { var row = grid.getRow(rowEntity); - if (row !== null && !row.isSelected) { - service.toggleRowSelection(grid, row, evt, grid.options.multiSelect, grid.options.noUnselect); + if (row != void 0 && row !== null && !row.isSelected) { + service.toggleRowSelection(grid, row, evt, grid.options.multiSelect, grid.options.noUnselect, true); } }, /** @@ -232,8 +232,25 @@ */ selectRowByVisibleIndex: function (rowNum, evt) { var row = grid.renderContainers.body.visibleRowCache[rowNum]; - if (row !== null && typeof (row) !== 'undefined' && !row.isSelected) { - service.toggleRowSelection(grid, row, evt, grid.options.multiSelect, grid.options.noUnselect); + if (row != void 0 && row !== null && typeof (row) !== 'undefined' && !row.isSelected) { + service.toggleRowSelection(grid, row, evt, grid.options.multiSelect, grid.options.noUnselect, false); + } + }, + /** + * @ngdoc function + * @name selectRowByKey + * @methodOf ui.grid.selection.api:PublicApi + * @description Select the data row + * @param {boolean} isInEntity if true then key is in entity else it's directly in row + * @param {Symbol} key the key to look for + * @param {any} comparator the value that key should have + * @param {Event} evt object if raised from an event + * @param {array} lookInRows [optional] the rows to look in - if not provided then looks in grid.rows + */ + selectRowByKey: function (isInEntity, key, comparator, evt, lookInRows) { + var row = grid.findRowByKey(isInEntity, key, comparator, lookInRows); + if (row != void 0 && row !== null && typeof (row) !== 'undefined' && !row.isSelected) { + service.toggleRowSelection(grid, row, evt, grid.options.multiSelect, grid.options.noUnselect, false); } }, /** @@ -246,8 +263,8 @@ */ unSelectRow: function (rowEntity, evt) { var row = grid.getRow(rowEntity); - if (row !== null && row.isSelected) { - service.toggleRowSelection(grid, row, evt, grid.options.multiSelect, grid.options.noUnselect); + if (row != void 0 && row !== null && row.isSelected) { + service.toggleRowSelection(grid, row, evt, grid.options.multiSelect, grid.options.noUnselect, true); } }, /** @@ -263,8 +280,25 @@ */ unSelectRowByVisibleIndex: function (rowNum, evt) { var row = grid.renderContainers.body.visibleRowCache[rowNum]; - if (row !== null && typeof (row) !== 'undefined' && row.isSelected) { - service.toggleRowSelection(grid, row, evt, grid.options.multiSelect, grid.options.noUnselect); + if (row != void 0 && row !== null && typeof (row) !== 'undefined' && row.isSelected) { + service.toggleRowSelection(grid, row, evt, grid.options.multiSelect, grid.options.noUnselect, false); + } + }, + /** + * @ngdoc function + * @name unSelectRowByKey + * @methodOf ui.grid.selection.api:PublicApi + * @description Select the data row + * @param {boolean} isInEntity if true then key is in entity else it's directly in row + * @param {(string|number)} key the key to look for + * @param {any} comparator the value that key should have + * @param {Event} evt object if raised from an event + * @param {array} lookInRows [optional] the rows to look in - if not provided then looks in grid.rows + */ + unSelectRowByKey: function (isInEntity, key, comparator, evt, lookInRows) { + var row = grid.findRowByKey(isInEntity, key, comparator, lookInRows); + if (row != void 0 && row !== null && typeof (row) !== 'undefined' && row.isSelected) { + service.toggleRowSelection(grid, row, evt, grid.options.multiSelect, grid.options.noUnselect, false); } }, /** @@ -326,14 +360,19 @@ * @ngdoc function * @name getSelectedRows * @methodOf ui.grid.selection.api:PublicApi - * @description returns all selectedRow's entity references + * @description returns all selected Row's entity references */ getSelectedRows: function () { - return service.getSelectedRows(grid).map(function (gridRow) { - return gridRow.entity; - }).filter(function (entity) { - return entity.hasOwnProperty('$$hashKey') || !angular.isObject(entity); - }); + return service.mapAndFilterRowsByEntity(service.getSelectedRows(grid)); + }, + /** + * @ngdoc function + * @name getUnSelectedRows + * @methodOf ui.grid.selection.api:PublicApi + * @description returns all unselected Row's entity references + */ + getUnSelectedRows: function () { + return service.mapAndFilterRowsByEntity(service.getUnSelectedRows(grid)); }, /** * @ngdoc function @@ -344,6 +383,15 @@ getSelectedGridRows: function () { return service.getSelectedRows(grid); }, + /** + * @ngdoc function + * @name getSelectedGridRows + * @methodOf ui.grid.selection.api:PublicApi + * @description returns all unselected Row's as gridRows + */ + getUnSelectedGridRows: function () { + return service.getUnSelectedRows(grid); + }, /** * @ngdoc function * @name getSelectedCount @@ -531,38 +579,37 @@ * @param {Event} evt object if resulting from event * @param {bool} multiSelect if false, only one row at time can be selected * @param {bool} noUnselect if true then rows cannot be unselected + * @param {bool} [canBeInvisible=true] if false, row can only be selected when it's (theoretically) visible */ - toggleRowSelection: function (grid, row, evt, multiSelect, noUnselect) { + toggleRowSelection: function (grid, row, evt, multiSelect, noUnselect, canBeInvisible) { if ( row.enableSelection === false ) { return; } - var selected = row.isSelected, - selectedRows; + if (canBeInvisible === void 0) { + canBeInvisible = true; + } + + var selected = row.isSelected; if (!multiSelect) { if (!selected) { service.clearSelectedRows(grid, evt); } - else { - selectedRows = service.getSelectedRows(grid); - if (selectedRows.length > 1) { - selected = false; // Enable reselect of the row - service.clearSelectedRows(grid, evt); - } + else if (service.getSelectedRows(grid).length > 1) { + selected = false; // Enable reselect of the row + service.clearSelectedRows(grid, evt); } } // only select row in this case - if (!(selected && noUnselect)) { + if (!(selected && noUnselect) && (canBeInvisible || row.visible)) { row.setSelected(!selected); if (row.isSelected === true) { grid.selection.lastSelectedRow = row; } - selectedRows = service.getSelectedRows(grid); - grid.selection.selectAll = grid.rows.length === selectedRows.length; - + grid.selection.selectAll = grid.rows.length === service.getSelectedRows(grid).length; grid.api.selection.raise.rowSelectionChanged(row, evt); } }, @@ -615,6 +662,40 @@ return row.isSelected; }); }, + /** + * @ngdoc function + * @name getUnSelectedRows + * @methodOf ui.grid.selection.service:uiGridSelectionService + * @description Returns all the unselected rows + * @param {Grid} grid grid object + */ + getUnSelectedRows: function (grid) { + return grid.rows.filter(function (row) { + return !row.isSelected; + }); + }, + /** + * @ngdoc function + * @name mapAndFilterRowsByEntity + * @methodOf ui.grid.selection.service:uiGridSelectionService + * @description Filters all rows by entity and then maps them to Array. + */ + mapAndFilterRowsByEntity: function(gridRows) { + if (typeof gridRows.reduce === 'function') { // If reduce is available it will be taken, due to better performance + return gridRows.reduce(function (previousVal, currentRow) { + if (currentRow.entity.hasOwnProperty('$$hashKey') || !angular.isObject(currentRow.entity)) { + previousVal.push(currentRow.entity); + } + return previousVal; + }, []); + } + + return gridRows.filter(function (gridRow) { // stays as polyfill + return gridRow.entity.hasOwnProperty('$$hashKey') || !angular.isObject(gridRow.entity); + }).map(function (gridRow) { + return gridRow.entity; + }); + }, /** * @ngdoc function @@ -627,7 +708,7 @@ clearSelectedRows: function (grid, evt) { var changedRows = []; service.getSelectedRows(grid).forEach(function (row) { - if (row.isSelected && row.enableSelection !== false && grid.options.isRowSelectable(row) !== false) { + if (row.isSelected && row.enableSelection !== false) { row.setSelected(false); service.decideRaiseSelectionEvent(grid, row, changedRows, evt); } @@ -802,17 +883,17 @@ } else if (evt.ctrlKey || evt.metaKey) { uiGridSelectionService.toggleRowSelection(self, row, evt, - self.options.multiSelect, self.options.noUnselect); + self.options.multiSelect, self.options.noUnselect, false); } else if (row.groupHeader) { - uiGridSelectionService.toggleRowSelection(self, row, evt, self.options.multiSelect, self.options.noUnselect); + uiGridSelectionService.toggleRowSelection(self, row, evt, self.options.multiSelect, self.options.noUnselect, false); for (var i = 0; i < row.treeNode.children.length; i++) { - uiGridSelectionService.toggleRowSelection(self, row.treeNode.children[i].row, evt, self.options.multiSelect, self.options.noUnselect); + uiGridSelectionService.toggleRowSelection(self, row.treeNode.children[i].row, evt, self.options.multiSelect, self.options.noUnselect, false); } } else { uiGridSelectionService.toggleRowSelection(self, row, evt, - (self.options.multiSelect && !self.options.modifierKeysToMultiSelect), self.options.noUnselect); + (self.options.multiSelect && !self.options.modifierKeysToMultiSelect), self.options.noUnselect, false); } self.options.enableFocusRowOnRowHeaderClick && row.setFocused(!row.isFocused) && self.api.selection.raise.rowFocusChanged(row, evt); } @@ -933,7 +1014,7 @@ evt.preventDefault(); uiGridSelectionService.toggleRowSelection($scope.grid, $scope.row, evt, ($scope.grid.options.multiSelect && !$scope.grid.options.modifierKeysToMultiSelect), - $scope.grid.options.noUnselect); + $scope.grid.options.noUnselect, false); $scope.$apply(); } }); @@ -953,12 +1034,12 @@ } else if (evt.ctrlKey || evt.metaKey) { uiGridSelectionService.toggleRowSelection($scope.grid, $scope.row, evt, - $scope.grid.options.multiSelect, $scope.grid.options.noUnselect); + $scope.grid.options.multiSelect, $scope.grid.options.noUnselect, false); } else if ($scope.grid.options.enableSelectRowOnFocus) { uiGridSelectionService.toggleRowSelection($scope.grid, $scope.row, evt, ($scope.grid.options.multiSelect && !$scope.grid.options.modifierKeysToMultiSelect), - $scope.grid.options.noUnselect); + $scope.grid.options.noUnselect, false); } $scope.row.setFocused(!$scope.row.isFocused); $scope.grid.api.selection.raise.rowFocusChanged($scope.row, evt); diff --git a/packages/selection/test/uiGridSelectionService.spec.js b/packages/selection/test/uiGridSelectionService.spec.js index 4887296a10..6e32757f99 100644 --- a/packages/selection/test/uiGridSelectionService.spec.js +++ b/packages/selection/test/uiGridSelectionService.spec.js @@ -77,6 +77,54 @@ describe('ui.grid.selection uiGridSelectionService', function() { expect(grid.rows[1].isSelected).toBe(true); }); + it('should toggle selected with invisible rows using default', function() { + grid.rows[0].visible = true; + grid.rows[1].visible = false; + + uiGridSelectionService.toggleRowSelection(grid, grid.rows[0], null, true, false); + expect(grid.rows[0].isSelected).toBe(true); + uiGridSelectionService.toggleRowSelection(grid, grid.rows[1], null, true, false); + expect(grid.rows[1].isSelected).toBe(true); + + uiGridSelectionService.toggleRowSelection(grid, grid.rows[0], null, true, false); + expect(grid.rows[0].isSelected).toBe(false); + uiGridSelectionService.toggleRowSelection(grid, grid.rows[1], null, true, false); + expect(grid.rows[1].isSelected).toBe(false); + }); + + it('should toggle selected with invisible rows but not using default', function() { + grid.rows[0].visible = true; + grid.rows[1].visible = false; + + uiGridSelectionService.toggleRowSelection(grid, grid.rows[0], null, true, false, true); + expect(grid.rows[0].isSelected).toBe(true); + uiGridSelectionService.toggleRowSelection(grid, grid.rows[1], null, true, false, true); + expect(grid.rows[1].isSelected).toBe(true); + + uiGridSelectionService.toggleRowSelection(grid, grid.rows[0], null, true, false, true); + expect(grid.rows[0].isSelected).toBe(false); + uiGridSelectionService.toggleRowSelection(grid, grid.rows[1], null, true, false, true); + expect(grid.rows[1].isSelected).toBe(false); + }); + + it('should toggle selected with visible rows', function() { + grid.rows[0].visible = true; + grid.rows[1].visible = false; + grid.rows[2].visible = false; + grid.rows[2].isSelected = true; + + uiGridSelectionService.toggleRowSelection(grid, grid.rows[0], null, true, false, false); + expect(grid.rows[0].isSelected).toBe(true); + uiGridSelectionService.toggleRowSelection(grid, grid.rows[1], null, true, false, false); + expect(grid.rows[1].isSelected).toBe(false); + + uiGridSelectionService.toggleRowSelection(grid, grid.rows[0], null, true, false, false); + expect(grid.rows[0].isSelected).toBe(false); + + uiGridSelectionService.toggleRowSelection(grid, grid.rows[2], null, true, false, false); + expect(grid.rows[2].isSelected).toBe(true); + }); + it('should not toggle selected with enableSelection: false', function() { grid.rows[0].enableSelection = false; uiGridSelectionService.toggleRowSelection(grid, grid.rows[0], null, true); @@ -123,8 +171,10 @@ describe('ui.grid.selection uiGridSelectionService', function() { it('should utilize public apis', function() { grid.api.selection.toggleRowSelection(grid.rows[0].entity); expect(uiGridSelectionService.getSelectedRows(grid).length).toBe(1); + expect(uiGridSelectionService.getUnSelectedRows(grid).length).toBe(9); grid.api.selection.clearSelectedRows(); expect(uiGridSelectionService.getSelectedRows(grid).length).toBe(0); + expect(uiGridSelectionService.getUnSelectedRows(grid).length).toBe(10); }); }); @@ -197,6 +247,69 @@ describe('ui.grid.selection uiGridSelectionService', function() { grid.api.selection.selectRow(grid.rows[4].entity); expect(grid.rows[4].isSelected).toBe(false); }); + + it('select by key then unselect rows by key in entity, including selecting rows already selected and unselecting rows not selected', function() { + grid.rows[4].entity = {str: 'abc'}; + grid.rows[6].entity = {str: 'def'}; + grid.api.selection.selectRowByKey(true, "str", "abc"); + expect(grid.rows[4].isSelected).toBe(true); + + grid.api.selection.selectRowByKey(true, "str", "def"); + expect(grid.rows[4].isSelected).toBe(true); + expect(grid.rows[6].isSelected).toBe(true); + + grid.api.selection.selectRowByKey(true, "str", "abc"); + expect(grid.rows[4].isSelected).toBe(true); + expect(grid.rows[6].isSelected).toBe(true); + + grid.api.selection.unSelectRowByKey(true, "str", "abc"); + expect(grid.rows[4].isSelected).toBe(false); + expect(grid.rows[6].isSelected).toBe(true); + + grid.api.selection.unSelectRowByKey(true, "str", "abc"); + expect(grid.rows[4].isSelected).toBe(false); + expect(grid.rows[6].isSelected).toBe(true); + + grid.api.selection.unSelectRowByKey(true, "str", "def"); + expect(grid.rows[4].isSelected).toBe(false); + expect(grid.rows[6].isSelected).toBe(false); + + grid.rows[4].enableSelection = false; + grid.api.selection.selectRowByKey(true, "str", "abc"); + expect(grid.rows[4].isSelected).toBe(false); + }); + + it('select by key then unselect rows by key outside entity, including selecting rows already selected and unselecting rows not selected', function() { + grid.rows[4].str = 'abc'; + grid.rows[6].str = 'def'; + + grid.api.selection.selectRowByKey(false, "str", "abc"); + expect(grid.rows[4].isSelected).toBe(true); + + grid.api.selection.selectRowByKey(false, "str", "def"); + expect(grid.rows[4].isSelected).toBe(true); + expect(grid.rows[6].isSelected).toBe(true); + + grid.api.selection.selectRowByKey(false, "str", "abc"); + expect(grid.rows[4].isSelected).toBe(true); + expect(grid.rows[6].isSelected).toBe(true); + + grid.api.selection.unSelectRowByKey(false, "str", "abc"); + expect(grid.rows[4].isSelected).toBe(false); + expect(grid.rows[6].isSelected).toBe(true); + + grid.api.selection.unSelectRowByKey(false, "str", "abc"); + expect(grid.rows[4].isSelected).toBe(false); + expect(grid.rows[6].isSelected).toBe(true); + + grid.api.selection.unSelectRowByKey(false, "str", "def"); + expect(grid.rows[4].isSelected).toBe(false); + expect(grid.rows[6].isSelected).toBe(false); + + grid.rows[4].enableSelection = false; + grid.api.selection.selectRowByKey(false, "str", "abc"); + expect(grid.rows[4].isSelected).toBe(false); + }); }); describe('setSelected function', function() { @@ -368,6 +481,11 @@ describe('ui.grid.selection uiGridSelectionService', function() { }); describe('getSelectedRows function', function() { + it('should retrieve empty array if nothing selected', function() { + expect(grid.api.selection.getSelectedRows().length).toBe(0); + expect(grid.api.selection.getSelectedGridRows().length).toBe(0); + }); + it('should retrieve the selected rows that have a $$hashKey property', function() { grid.rows.forEach(function(row) { row.isSelected = false; @@ -387,6 +505,56 @@ describe('ui.grid.selection uiGridSelectionService', function() { }; expect(grid.api.selection.getSelectedRows().length).toEqual(2); + expect(grid.api.selection.getSelectedGridRows().length).toEqual(3); + }); + + it('should retrieve correct data', function() { + grid.rows[0].isSelected = true; + grid.rows[0].entity = { + $$hashKey: '1234' + }; + + expect(grid.api.selection.getSelectedRows()[0].$$hashKey).toEqual('1234'); + expect(grid.api.selection.getSelectedGridRows()[0].entity).toEqual({ + $$hashKey: '1234' + }); + }); + }); + + describe('getUnSelectedRows function', function() { + it('should retrieve every row if nothing selected', function() { + expect(grid.api.selection.getUnSelectedRows().length).toEqual(10); + expect(grid.api.selection.getUnSelectedGridRows().length).toEqual(10); + }); + + it('should retrieve the unselected rows that have a $$hashKey property', function() { + grid.rows.forEach(function(row) { + row.isSelected = false; + row.entity = { + $$hashKey: '1234' + }; + }); + + grid.rows[0].isSelected = true; + grid.rows[1].isSelected = true; + grid.rows[2].isSelected = true; + grid.rows[2].entity = {}; + grid.rows[3].entity = {}; + + expect(grid.api.selection.getUnSelectedRows().length).toEqual(6); + expect(grid.api.selection.getUnSelectedGridRows().length).toEqual(7); + }); + + it('should retrieve correct data', function() { + grid.rows[0].isSelected = false; + grid.rows[0].entity = { + $$hashKey: '1234' + }; + + expect(grid.api.selection.getUnSelectedRows()[0].$$hashKey).toEqual('1234'); + expect(grid.api.selection.getUnSelectedGridRows()[0].entity).toEqual({ + $$hashKey: '1234' + }); }); }); diff --git a/packages/tree-base/CHANGELOG.md b/packages/tree-base/CHANGELOG.md index 74402bb837..8e7d329a4e 100644 --- a/packages/tree-base/CHANGELOG.md +++ b/packages/tree-base/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [4.11.1](https://github.com/angular-ui/ui-grid/compare/v4.11.0...v4.11.1) (2022-02-23) + +**Note:** Version bump only for package @ui-grid/tree-base + + + + + # [4.11.0](https://github.com/angular-ui/ui-grid/compare/v4.10.3...v4.11.0) (2021-08-12) **Note:** Version bump only for package @ui-grid/tree-base diff --git a/packages/tree-base/package-lock.json b/packages/tree-base/package-lock.json index 01744e24a7..e28d26562a 100644 --- a/packages/tree-base/package-lock.json +++ b/packages/tree-base/package-lock.json @@ -1,6 +1,6 @@ { "name": "@ui-grid/tree-base", - "version": "4.11.0", + "version": "4.11.1", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/packages/tree-base/package.json b/packages/tree-base/package.json index a88c80284f..2ef9f02cc1 100644 --- a/packages/tree-base/package.json +++ b/packages/tree-base/package.json @@ -1,10 +1,10 @@ { "name": "@ui-grid/tree-base", - "version": "4.11.0", + "version": "4.11.1", "description": "This ui-grid module provides a tree view of the data, with nodes and leaves", "main": "index.js", "dependencies": { - "@ui-grid/core": "^4.11.0", + "@ui-grid/core": "^4.11.1", "angular": ">=1.4.0 1.8.x" }, "publishConfig": { diff --git a/packages/tree-view/CHANGELOG.md b/packages/tree-view/CHANGELOG.md index cdb0bf51d4..728489bdbc 100644 --- a/packages/tree-view/CHANGELOG.md +++ b/packages/tree-view/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [4.11.1](https://github.com/angular-ui/ui-grid/compare/v4.11.0...v4.11.1) (2022-02-23) + +**Note:** Version bump only for package @ui-grid/tree-view + + + + + # [4.11.0](https://github.com/angular-ui/ui-grid/compare/v4.10.3...v4.11.0) (2021-08-12) **Note:** Version bump only for package @ui-grid/tree-view diff --git a/packages/tree-view/package-lock.json b/packages/tree-view/package-lock.json index 11e2743696..21c344bf93 100644 --- a/packages/tree-view/package-lock.json +++ b/packages/tree-view/package-lock.json @@ -1,6 +1,6 @@ { "name": "@ui-grid/tree-view", - "version": "4.11.0", + "version": "4.11.1", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/packages/tree-view/package.json b/packages/tree-view/package.json index cac89d1e92..7bb10343b2 100644 --- a/packages/tree-view/package.json +++ b/packages/tree-view/package.json @@ -1,11 +1,11 @@ { "name": "@ui-grid/tree-view", - "version": "4.11.0", + "version": "4.11.1", "description": "This ui-grid module provides a tree view of the data, with nodes and leaves", "main": "index.js", "dependencies": { - "@ui-grid/core": "^4.11.0", - "@ui-grid/tree-base": "^4.11.0", + "@ui-grid/core": "^4.11.1", + "@ui-grid/tree-base": "^4.11.1", "angular": ">=1.4.0 1.8.x" }, "publishConfig": { diff --git a/packages/validate/CHANGELOG.md b/packages/validate/CHANGELOG.md index 8f41409d5d..33d68b4efd 100644 --- a/packages/validate/CHANGELOG.md +++ b/packages/validate/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [4.11.1](https://github.com/angular-ui/ui-grid/compare/v4.11.0...v4.11.1) (2022-02-23) + +**Note:** Version bump only for package @ui-grid/validate + + + + + # [4.11.0](https://github.com/angular-ui/ui-grid/compare/v4.10.3...v4.11.0) (2021-08-12) **Note:** Version bump only for package @ui-grid/validate diff --git a/packages/validate/package-lock.json b/packages/validate/package-lock.json index cc4cf50c01..b27cd1ecee 100644 --- a/packages/validate/package-lock.json +++ b/packages/validate/package-lock.json @@ -1,6 +1,6 @@ { "name": "@ui-grid/validate", - "version": "4.11.0", + "version": "4.11.1", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/packages/validate/package.json b/packages/validate/package.json index bbce009d7f..bacb452983 100644 --- a/packages/validate/package.json +++ b/packages/validate/package.json @@ -1,11 +1,11 @@ { "name": "@ui-grid/validate", - "version": "4.11.0", + "version": "4.11.1", "description": "This ui-grid module provides the ability to validate cells upon change", "main": "index.js", "dependencies": { - "@ui-grid/core": "^4.11.0", - "@ui-grid/edit": "^4.11.0", + "@ui-grid/core": "^4.11.1", + "@ui-grid/edit": "^4.11.1", "angular": ">=1.4.0 1.8.x", "angular-ui-bootstrap": "0.13.4" },