source_monitor 0.12.2 → 0.12.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.claude/skills/sm-upgrade/reference/version-history.md +9 -0
- data/CHANGELOG.md +9 -0
- data/Gemfile.lock +1 -1
- data/README.md +3 -3
- data/VERSION +1 -1
- data/app/assets/builds/source_monitor/application.css +15 -0
- data/app/assets/builds/source_monitor/application.js +74 -4
- data/app/assets/builds/source_monitor/application.js.map +2 -2
- data/app/assets/javascripts/source_monitor/controllers/modal_controller.js +4 -0
- data/app/assets/javascripts/source_monitor/controllers/select_all_controller.js +81 -4
- data/app/components/source_monitor/icon_component.rb +2 -7
- data/app/controllers/source_monitor/bulk_scrape_enablements_controller.rb +8 -5
- data/app/controllers/source_monitor/sources_controller.rb +1 -0
- data/app/views/source_monitor/sources/_bulk_scrape_enable_modal.html.erb +24 -26
- data/app/views/source_monitor/sources/index.html.erb +20 -1
- data/docs/setup.md +2 -2
- data/docs/upgrade.md +14 -0
- data/lib/source_monitor/version.rb +1 -1
- metadata +1 -1
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: a6bd1ceac36f485b9a9dffbd4c9665082496268093ff999b4d80ce21e973c904
|
|
4
|
+
data.tar.gz: 613a81d29bf56f6206a65299fc0784fc79e4137434dedbc6ae0d49dcde73d881
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: bfa2c1455721d08030777b3aaf93db2440716d93102e5ae1464ed63d6f4da8d38024af56f76b2fb263c902d3a0ca7ce4e53955a97686baaa42539cd9e3be6dd7
|
|
7
|
+
data.tar.gz: 1540e2e2595f91e4aec25c6772cdc54dc6a1636dd5d605874b0afe05f2ca6773e1adfb4e06df25df9343d69a9b3c2d6501b66aa29525a7413e2d71de24ae9fbb
|
|
@@ -2,6 +2,15 @@
|
|
|
2
2
|
|
|
3
3
|
Version-specific migration notes for each major/minor version transition. Agents should reference this file when guiding users through multi-version upgrades.
|
|
4
4
|
|
|
5
|
+
## 0.12.2 to 0.12.3
|
|
6
|
+
|
|
7
|
+
**Key changes:**
|
|
8
|
+
- UI fixes: menu icon rendering (gear -> vertical ellipsis), modal Stimulus controller scope, cross-page select-all for bulk scraping recommendations
|
|
9
|
+
|
|
10
|
+
**Action items:**
|
|
11
|
+
1. `bundle update source_monitor`
|
|
12
|
+
2. No migrations, config changes, or breaking changes.
|
|
13
|
+
|
|
5
14
|
## 0.12.1 to 0.12.2
|
|
6
15
|
|
|
7
16
|
**Key changes:**
|
data/CHANGELOG.md
CHANGED
|
@@ -15,6 +15,15 @@ All notable changes to this project are documented below. The format follows [Ke
|
|
|
15
15
|
|
|
16
16
|
- No unreleased changes yet.
|
|
17
17
|
|
|
18
|
+
## [0.12.3] - 2026-03-16
|
|
19
|
+
|
|
20
|
+
### Added
|
|
21
|
+
- Cross-page "select all" for scraping recommendations — banner appears when candidates span multiple pages, backend resolves all candidates via query
|
|
22
|
+
|
|
23
|
+
### Fixed
|
|
24
|
+
- Source action dropdown icon rendered as gear instead of vertical ellipsis (three dots)
|
|
25
|
+
- "Enable Scraping" button did not open confirmation modal — Stimulus controller scope and missing `stop` method fixed
|
|
26
|
+
|
|
18
27
|
## [0.12.2] - 2026-03-15
|
|
19
28
|
|
|
20
29
|
### Fixed
|
data/Gemfile.lock
CHANGED
data/README.md
CHANGED
|
@@ -9,8 +9,8 @@ SourceMonitor is a production-ready Rails 8 mountable engine for ingesting, norm
|
|
|
9
9
|
In your host Rails app:
|
|
10
10
|
|
|
11
11
|
```bash
|
|
12
|
-
bundle add source_monitor --version "~> 0.12.
|
|
13
|
-
# or add `gem "source_monitor", "~> 0.12.
|
|
12
|
+
bundle add source_monitor --version "~> 0.12.3"
|
|
13
|
+
# or add `gem "source_monitor", "~> 0.12.3"` manually, then run:
|
|
14
14
|
bundle install
|
|
15
15
|
```
|
|
16
16
|
|
|
@@ -46,7 +46,7 @@ This exposes `bin/source_monitor` (via Bundler binstubs) so you can run the guid
|
|
|
46
46
|
Before running any SourceMonitor commands inside your host app, add the gem and install dependencies:
|
|
47
47
|
|
|
48
48
|
```bash
|
|
49
|
-
bundle add source_monitor --version "~> 0.12.
|
|
49
|
+
bundle add source_monitor --version "~> 0.12.3"
|
|
50
50
|
# or edit your Gemfile, then run
|
|
51
51
|
bundle install
|
|
52
52
|
```
|
data/VERSION
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
0.12.
|
|
1
|
+
0.12.3
|
|
@@ -1280,6 +1280,11 @@ video {
|
|
|
1280
1280
|
border-color: rgb(221 214 254 / var(--tw-border-opacity, 1));
|
|
1281
1281
|
}
|
|
1282
1282
|
|
|
1283
|
+
.fm-admin .border-violet-100 {
|
|
1284
|
+
--tw-border-opacity: 1;
|
|
1285
|
+
border-color: rgb(237 233 254 / var(--tw-border-opacity, 1));
|
|
1286
|
+
}
|
|
1287
|
+
|
|
1283
1288
|
.fm-admin .bg-amber-100 {
|
|
1284
1289
|
--tw-bg-opacity: 1;
|
|
1285
1290
|
background-color: rgb(254 243 199 / var(--tw-bg-opacity, 1));
|
|
@@ -1861,6 +1866,11 @@ video {
|
|
|
1861
1866
|
color: rgb(161 98 7 / var(--tw-text-opacity, 1));
|
|
1862
1867
|
}
|
|
1863
1868
|
|
|
1869
|
+
.fm-admin .text-violet-900 {
|
|
1870
|
+
--tw-text-opacity: 1;
|
|
1871
|
+
color: rgb(76 29 149 / var(--tw-text-opacity, 1));
|
|
1872
|
+
}
|
|
1873
|
+
|
|
1864
1874
|
.fm-admin .underline {
|
|
1865
1875
|
text-decoration-line: underline;
|
|
1866
1876
|
}
|
|
@@ -2059,6 +2069,11 @@ video {
|
|
|
2059
2069
|
color: rgb(255 255 255 / var(--tw-text-opacity, 1));
|
|
2060
2070
|
}
|
|
2061
2071
|
|
|
2072
|
+
.fm-admin .hover\:text-violet-600:hover {
|
|
2073
|
+
--tw-text-opacity: 1;
|
|
2074
|
+
color: rgb(124 58 237 / var(--tw-text-opacity, 1));
|
|
2075
|
+
}
|
|
2076
|
+
|
|
2062
2077
|
.fm-admin .hover\:underline:hover {
|
|
2063
2078
|
text-decoration-line: underline;
|
|
2064
2079
|
}
|
|
@@ -2706,6 +2706,9 @@ var modal_controller_default = class extends Controller {
|
|
|
2706
2706
|
this.close(event);
|
|
2707
2707
|
}
|
|
2708
2708
|
}
|
|
2709
|
+
stop(event) {
|
|
2710
|
+
event.stopPropagation();
|
|
2711
|
+
}
|
|
2709
2712
|
handleEscape(event) {
|
|
2710
2713
|
if (event.key === "Escape") {
|
|
2711
2714
|
this.close(event);
|
|
@@ -2796,7 +2799,15 @@ var confirm_navigation_controller_default = class extends Controller {
|
|
|
2796
2799
|
|
|
2797
2800
|
// app/assets/javascripts/source_monitor/controllers/select_all_controller.js
|
|
2798
2801
|
var select_all_controller_default = class extends Controller {
|
|
2799
|
-
static targets = [
|
|
2802
|
+
static targets = [
|
|
2803
|
+
"master",
|
|
2804
|
+
"item",
|
|
2805
|
+
"actionBar",
|
|
2806
|
+
"count",
|
|
2807
|
+
"crossPageBanner",
|
|
2808
|
+
"selectAllPagesInput"
|
|
2809
|
+
];
|
|
2810
|
+
static values = { totalCandidates: Number };
|
|
2800
2811
|
connect() {
|
|
2801
2812
|
this.syncMaster();
|
|
2802
2813
|
this.updateActionBar();
|
|
@@ -2815,12 +2826,50 @@ var select_all_controller_default = class extends Controller {
|
|
|
2815
2826
|
if (checkbox.disabled) return;
|
|
2816
2827
|
checkbox.checked = checked;
|
|
2817
2828
|
});
|
|
2829
|
+
if (!checked) {
|
|
2830
|
+
this.deselectAllPages();
|
|
2831
|
+
}
|
|
2818
2832
|
this.updateActionBar();
|
|
2819
2833
|
}
|
|
2820
2834
|
toggleItem() {
|
|
2835
|
+
this.deselectAllPages();
|
|
2821
2836
|
this.syncMaster();
|
|
2822
2837
|
this.updateActionBar();
|
|
2823
2838
|
}
|
|
2839
|
+
selectAllPages() {
|
|
2840
|
+
if (this.hasSelectAllPagesInputTarget) {
|
|
2841
|
+
this.selectAllPagesInputTarget.disabled = false;
|
|
2842
|
+
}
|
|
2843
|
+
if (this.hasCrossPageBannerTarget) {
|
|
2844
|
+
this.crossPageBannerTarget.dataset.selected = "true";
|
|
2845
|
+
const deselect = this.crossPageBannerTarget.querySelector(
|
|
2846
|
+
"[data-role='deselect']"
|
|
2847
|
+
);
|
|
2848
|
+
const select = this.crossPageBannerTarget.querySelector(
|
|
2849
|
+
"[data-role='select']"
|
|
2850
|
+
);
|
|
2851
|
+
if (deselect) deselect.classList.remove("hidden");
|
|
2852
|
+
if (select) select.classList.add("hidden");
|
|
2853
|
+
}
|
|
2854
|
+
this.updateCount();
|
|
2855
|
+
}
|
|
2856
|
+
deselectAllPages() {
|
|
2857
|
+
if (this.hasSelectAllPagesInputTarget) {
|
|
2858
|
+
this.selectAllPagesInputTarget.disabled = true;
|
|
2859
|
+
}
|
|
2860
|
+
if (this.hasCrossPageBannerTarget) {
|
|
2861
|
+
this.crossPageBannerTarget.dataset.selected = "false";
|
|
2862
|
+
const deselect = this.crossPageBannerTarget.querySelector(
|
|
2863
|
+
"[data-role='deselect']"
|
|
2864
|
+
);
|
|
2865
|
+
const select = this.crossPageBannerTarget.querySelector(
|
|
2866
|
+
"[data-role='select']"
|
|
2867
|
+
);
|
|
2868
|
+
if (deselect) deselect.classList.add("hidden");
|
|
2869
|
+
if (select) select.classList.remove("hidden");
|
|
2870
|
+
}
|
|
2871
|
+
this.updateCount();
|
|
2872
|
+
}
|
|
2824
2873
|
syncMaster() {
|
|
2825
2874
|
if (!this.hasMasterTarget) return;
|
|
2826
2875
|
const selectable = this.itemTargets.filter((checkbox) => !checkbox.disabled);
|
|
@@ -2830,15 +2879,36 @@ var select_all_controller_default = class extends Controller {
|
|
|
2830
2879
|
updateActionBar() {
|
|
2831
2880
|
if (!this.hasActionBarTarget) return;
|
|
2832
2881
|
const checkedCount = this.itemTargets.filter((cb) => cb.checked).length;
|
|
2833
|
-
|
|
2834
|
-
|
|
2835
|
-
}
|
|
2882
|
+
this.updateCount();
|
|
2883
|
+
this.updateCrossPageBanner();
|
|
2836
2884
|
if (checkedCount > 0) {
|
|
2837
2885
|
this.actionBarTarget.classList.remove("hidden");
|
|
2838
2886
|
} else {
|
|
2839
2887
|
this.actionBarTarget.classList.add("hidden");
|
|
2840
2888
|
}
|
|
2841
2889
|
}
|
|
2890
|
+
updateCount() {
|
|
2891
|
+
if (!this.hasCountTarget) return;
|
|
2892
|
+
const isAllPages = this.hasCrossPageBannerTarget && this.crossPageBannerTarget.dataset.selected === "true";
|
|
2893
|
+
if (isAllPages && this.hasTotalCandidatesValue) {
|
|
2894
|
+
this.countTarget.textContent = this.totalCandidatesValue;
|
|
2895
|
+
} else {
|
|
2896
|
+
const checkedCount = this.itemTargets.filter((cb) => cb.checked).length;
|
|
2897
|
+
this.countTarget.textContent = checkedCount;
|
|
2898
|
+
}
|
|
2899
|
+
}
|
|
2900
|
+
updateCrossPageBanner() {
|
|
2901
|
+
if (!this.hasCrossPageBannerTarget) return;
|
|
2902
|
+
const selectable = this.itemTargets.filter((cb) => !cb.disabled);
|
|
2903
|
+
const allChecked = selectable.length > 0 && selectable.every((cb) => cb.checked);
|
|
2904
|
+
const hasMorePages = this.hasTotalCandidatesValue && this.totalCandidatesValue > selectable.length;
|
|
2905
|
+
if (allChecked && hasMorePages) {
|
|
2906
|
+
this.crossPageBannerTarget.classList.remove("hidden");
|
|
2907
|
+
} else {
|
|
2908
|
+
this.crossPageBannerTarget.classList.add("hidden");
|
|
2909
|
+
this.deselectAllPages();
|
|
2910
|
+
}
|
|
2911
|
+
}
|
|
2842
2912
|
};
|
|
2843
2913
|
|
|
2844
2914
|
// app/assets/javascripts/source_monitor/controllers/filter_submit_controller.js
|