From 6cd3a5bc5829e28f2829ad602f7782b92d735d95 Mon Sep 17 00:00:00 2001 From: William Mantly Date: Thu, 16 Jul 2026 18:26:02 -0400 Subject: [PATCH] Update jq-repeat to 2.1.0; fix removed __setPut/__setTake API jq-repeat 2.1.0 (release notes: https://github.com/wmantly/jq-repeat/releases/tag/v2.1.0) brings real fixes (throttled-update race conditions, sorted-list reverse() leaking elements, nested-scope isolation) and a few behavior changes. Audited every usage in this repo against the changelog before upgrading: - push()/unshift() now return the new array length -- every call site in this repo is a bare statement, none consume the return value. No risk. - update() is now trailing-edge throttled (~50ms) even on the first call, not just rapid subsequent ones -- no code in this repo reads DOM/item state immediately after calling update(), so no risk here (unlike sso-manager-node's companion PR, which needed a fix). - jr-order-reverse and nested jq-repeat templates: not used anywhere in this repo. Real breakage found and fixed: users.ejs/groups.ejs/permissions.ejs called $.scope.X.__setPut(fn)/__setTake(fn) as setter METHODS -- that API is gone in 2.1.0. Insert/remove hooks are now set via direct property assignment ($.scope.X.__put = fn), per the current README. Verified live (real dev server + Playwright): before the fix, all three pages threw "__setTake is not a function" and the insert/remove row animations were broken; after, zero errors and the hooks fire correctly. --- nodejs/package-lock.json | 8 ++++---- nodejs/package.json | 2 +- nodejs/views/groups.ejs | 4 ++-- nodejs/views/permissions.ejs | 4 ++-- nodejs/views/users.ejs | 8 ++++---- 5 files changed, 13 insertions(+), 13 deletions(-) diff --git a/nodejs/package-lock.json b/nodejs/package-lock.json index ec9d298..c1dae06 100644 --- a/nodejs/package-lock.json +++ b/nodejs/package-lock.json @@ -21,7 +21,7 @@ "express": "^5.2.1", "express-rate-limit": "^8.5.2", "extend": "^3.0.2", - "jq-repeat": "^2.0.1", + "jq-repeat": "^2.1.0", "jquery": "^4.0.0", "ldapts": "^8.1.8", "linux-sys-user": "^1.2.0", @@ -1375,9 +1375,9 @@ "license": "MIT" }, "node_modules/jq-repeat": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/jq-repeat/-/jq-repeat-2.0.1.tgz", - "integrity": "sha512-ATI25tKQG3uHW8f8XPqBe85JsH4PNGHA/YLy1KgMVeYDoUSf9cqGNBum+4A+Pg1WKh9PA6bYyWfYNsgktwIbSg==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/jq-repeat/-/jq-repeat-2.1.0.tgz", + "integrity": "sha512-e1OmSWeBEHEtyOhNVysx0bnT5wd6HlZ37JZgPcGPmACJ0K9bXDPq0xOwrM1slQMSTw7FOSNDX+MD6VwvPeeZyQ==", "license": "MIT", "engines": { "node": ">=14.0.0" diff --git a/nodejs/package.json b/nodejs/package.json index 3e5a6d6..d06b251 100644 --- a/nodejs/package.json +++ b/nodejs/package.json @@ -32,7 +32,7 @@ "express": "^5.2.1", "express-rate-limit": "^8.5.2", "extend": "^3.0.2", - "jq-repeat": "^2.0.1", + "jq-repeat": "^2.1.0", "jquery": "^4.0.0", "ldapts": "^8.1.8", "linux-sys-user": "^1.2.0", diff --git a/nodejs/views/groups.ejs b/nodejs/views/groups.ejs index 69f2bb7..c8410ff 100644 --- a/nodejs/views/groups.ejs +++ b/nodejs/views/groups.ejs @@ -60,10 +60,10 @@ loadUserSuggestions(); - $.scope.LocalGroup.__setTake(function($el){ + $.scope.LocalGroup.__take = function($el){ $el.addClass('bg-danger'); $el.fadeOut(600, function(){ $el.remove(); }); - }); + }; app.subscribe(/^model:LocalGroup:create/, function(data){ $.scope.LocalGroup.remove(data.name); diff --git a/nodejs/views/permissions.ejs b/nodejs/views/permissions.ejs index 472b086..a7a4047 100644 --- a/nodejs/views/permissions.ejs +++ b/nodejs/views/permissions.ejs @@ -57,10 +57,10 @@ loadSubjectSuggestions(); - $.scope.Permission.__setTake(function($el, item, list){ + $.scope.Permission.__take = function($el, item, list){ $el.addClass('bg-danger'); $el.fadeOut(600, function(){ $el.remove(); }); - }); + }; // Live updates (model:Permission:*), so adds/removes reflect for everyone. app.subscribe(/^model:Permission:create/, function(data){ diff --git a/nodejs/views/users.ejs b/nodejs/views/users.ejs index 56b968b..5bcf119 100755 --- a/nodejs/views/users.ejs +++ b/nodejs/views/users.ejs @@ -26,12 +26,12 @@ for(let user of data.results){ $.scope.users.push(user); } - $.scope.users.__setPut(function($el, item, list){ + $.scope.users.__put = function($el, item, list){ $el.addClass('bg-success'); $el.fadeIn(3000, function(){ $el.removeClass('bg-success'); }); - }) + }; }); } @@ -45,12 +45,12 @@ $(document).ready(function(){ populateUsers(); //populate the table - $.scope.users.__setTake(function($el, item, list){ + $.scope.users.__take = function($el, item, list){ $el.addClass('bg-danger'); $el.fadeOut(1000, function(){ $el.remove() }); - }); + }; });