yummy-guide-generic-administrate 0.6.0 → 0.6.1

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 8906e8c09072b22eebdaeaa49b0fb57a395aa30693bf6f9986ebc3c0687e254d
4
- data.tar.gz: 802a739018ffc6e269a688a459464e17e213c6d6ee195d7aacd6e396aa74f97a
3
+ metadata.gz: f3caffae44b6ea10fc063a2cc8fb8a3938e3cc42078c4af3bc2a08d4188cf01a
4
+ data.tar.gz: cea155304d262445a29199f9c5e57c574600508dca66206f49b81b3d3db66fb2
5
5
  SHA512:
6
- metadata.gz: b37b6a8dfbe765ab42af40cc6c2db86a7f568c049af2a6c3a47d3ef5871bacb2351896b15b9f1368ad446a97f6d9e1a3eab44cbd1d045b1ab2efd68a2fbfbb31
7
- data.tar.gz: 84255b48f37a7b0926e74228cd24b1ff0d5080f7c7dedc89b7b7ecedf86eff3a871299bbd002882eefe9ad3f0b4800ea3b706eae7ddd39806ca11d2317fecdf0
6
+ metadata.gz: 6a2e5a4b98e6cea96bfdc9e0cb026212c6ed37f39518800368329cc8ba1fcff202859acb8b3340754b493544b92f33e191d92606de032575c889e436ae39b789
7
+ data.tar.gz: 669b6a383ff6d184527e7324def8875626dc46dd0b5d9c5d55d3b5f18fd8f4e97188d6a943ffa65e4076a70eefd0389e41abbd7b77d97f9e98466a3c580ecc43
data/README.md CHANGED
@@ -409,6 +409,10 @@ FILTER_ATTRIBUTES = {
409
409
  </tr>
410
410
  ```
411
411
 
412
+ `filter_form.js` を読み込んでいる場合、`data-behavior="filter-field-clear"` を持つ
413
+ button は同じ `tr` 内の input / select / textarea / checkbox / radio / datetime
414
+ filter だけをクリアします。
415
+
412
416
  複数画面で再利用する filter 型は `YummyGuide::Administrate::Filters::Base` を継承して作ります。
413
417
  単一 input なら `input` を実装し、行全体を制御したい場合は `row` または `input_cell` を上書きします。
414
418
 
@@ -43,6 +43,12 @@
43
43
  });
44
44
  });
45
45
 
46
+ formEl.querySelectorAll('[data-behavior="filter-field-clear"]').forEach(function(buttonEl) {
47
+ buttonEl.addEventListener("click", function(event) {
48
+ clearFilterField(formEl, event);
49
+ });
50
+ });
51
+
46
52
  formEl.querySelectorAll('[data-behavior="checkbox-group-select-all"]').forEach(function(buttonEl) {
47
53
  buttonEl.addEventListener("click", function() {
48
54
  setCheckboxGroupState(formEl, buttonEl.dataset.target, true);
@@ -58,6 +64,19 @@
58
64
  syncDatetimeFilterFields(formEl);
59
65
  }
60
66
 
67
+ function clearFilterField(formEl, event) {
68
+ event.preventDefault();
69
+
70
+ var rowEl = event.currentTarget.closest("tr");
71
+ if (!rowEl) return;
72
+
73
+ clearTextControls(rowEl);
74
+ clearChoiceControls(rowEl);
75
+ clearSelectControls(rowEl);
76
+ clearDatetimeFilters(rowEl);
77
+ syncDatetimeFilterFields(formEl);
78
+ }
79
+
61
80
  function clearFormFields(formEl) {
62
81
  formEl.querySelectorAll("input, select, textarea").forEach(function(fieldEl) {
63
82
  if (fieldEl.disabled || fieldEl.type === "hidden" || fieldEl.type === "submit") {
@@ -86,6 +105,57 @@
86
105
  syncDatetimeFilterFields(formEl);
87
106
  }
88
107
 
108
+ function clearTextControls(rowEl) {
109
+ rowEl.querySelectorAll("input, textarea").forEach(function(inputEl) {
110
+ var inputType = (inputEl.getAttribute("type") || "").toLowerCase();
111
+
112
+ if (inputType === "checkbox" || inputType === "radio") return;
113
+ if (inputType === "hidden" && inputEl.dataset.datetimePart !== "combined") return;
114
+
115
+ inputEl.value = "";
116
+ inputEl.setAttribute("value", "");
117
+ });
118
+ }
119
+
120
+ function clearChoiceControls(rowEl) {
121
+ rowEl.querySelectorAll('input[type="checkbox"], input[type="radio"]').forEach(function(inputEl) {
122
+ inputEl.checked = false;
123
+ });
124
+ }
125
+
126
+ function clearSelectControls(rowEl) {
127
+ rowEl.querySelectorAll("select").forEach(function(selectEl) {
128
+ if (selectEl.querySelector('option[value=""]')) {
129
+ selectEl.value = "";
130
+ } else if (selectEl.querySelector('option[value="all"]')) {
131
+ selectEl.value = "all";
132
+ } else {
133
+ selectEl.selectedIndex = -1;
134
+ }
135
+ });
136
+ }
137
+
138
+ function clearDatetimeFilters(rowEl) {
139
+ rowEl.querySelectorAll("[data-datetime-filter]").forEach(function(groupEl) {
140
+ var combinedEl = groupEl.querySelector('[data-datetime-part="combined"]');
141
+ var dateEl = groupEl.querySelector('[data-datetime-part="date"]');
142
+
143
+ if (combinedEl) {
144
+ combinedEl.value = "";
145
+ combinedEl.setAttribute("value", "");
146
+ }
147
+
148
+ if (dateEl) {
149
+ dateEl.value = "";
150
+ dateEl.setAttribute("value", "");
151
+ }
152
+
153
+ clearDatetimeTimeParts(groupEl);
154
+ syncDatetimeTimeDisabledState(groupEl);
155
+ syncBlankMinuteOptionState(groupEl);
156
+ });
157
+ }
158
+
89
159
  function setCheckboxGroupState(formEl, groupName, checked) {
90
160
  if (!groupName) return;
91
161
 
@@ -216,4 +286,3 @@
216
286
 
217
287
  document.addEventListener("turbo:load", initializeFromDocument);
218
288
  })();
219
-
@@ -2,6 +2,6 @@
2
2
 
3
3
  module YummyGuide
4
4
  module Administrate
5
- VERSION = "0.6.0"
5
+ VERSION = "0.6.1"
6
6
  end
7
7
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: yummy-guide-generic-administrate
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.0
4
+ version: 0.6.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - akatsuki-kk
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2026-05-25 00:00:00.000000000 Z
11
+ date: 2026-05-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: administrate