@stimulus-library/mixins 1.2.2 → 1.3.0
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.
- package/dist/use_dirty_form_tracking.js +32 -5
- package/package.json +11 -10
|
@@ -61,15 +61,35 @@ export function useDirtyFormTracking(controller, form) {
|
|
|
61
61
|
};
|
|
62
62
|
}
|
|
63
63
|
function getElementValue(element) {
|
|
64
|
-
|
|
64
|
+
if (isElementCheckable(element)) {
|
|
65
|
+
return element.checked;
|
|
66
|
+
}
|
|
67
|
+
else if (isHTMLSelectElement(element) && element.multiple) {
|
|
68
|
+
return JSON.stringify(getMultiSelectValues(element));
|
|
69
|
+
}
|
|
70
|
+
else {
|
|
71
|
+
return element.value;
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
function getMultiSelectLoadValues(element) {
|
|
75
|
+
let options = Array.from(element.options);
|
|
76
|
+
options = options.filter(option => option.defaultSelected);
|
|
77
|
+
return options.map(option => option.value);
|
|
78
|
+
}
|
|
79
|
+
function getMultiSelectValues(element) {
|
|
80
|
+
let options = Array.from(element.selectedOptions);
|
|
81
|
+
return options.map(option => option.value);
|
|
65
82
|
}
|
|
66
83
|
function getElementLoadValue(element) {
|
|
67
84
|
const value = element.getAttribute(CACHE_ATTR_NAME);
|
|
68
85
|
if (isElementCheckable(element)) {
|
|
69
86
|
return value == null ? element.defaultChecked : value == "true";
|
|
70
87
|
}
|
|
71
|
-
else if (isHTMLSelectElement(element)) {
|
|
88
|
+
else if (isHTMLSelectElement(element) && value == null) {
|
|
72
89
|
const options = Array.from(element.options);
|
|
90
|
+
if (element.multiple) {
|
|
91
|
+
return JSON.stringify(getMultiSelectLoadValues(element));
|
|
92
|
+
}
|
|
73
93
|
options.forEach((option) => {
|
|
74
94
|
if (option.defaultSelected) {
|
|
75
95
|
return option.value;
|
|
@@ -124,23 +144,30 @@ function restoreElementFromLoadValue(element) {
|
|
|
124
144
|
const options = Array.from(element.options);
|
|
125
145
|
options.forEach((option) => {
|
|
126
146
|
if (option.defaultSelected) {
|
|
127
|
-
|
|
128
|
-
return;
|
|
147
|
+
option.selected = true;
|
|
129
148
|
}
|
|
130
149
|
});
|
|
131
150
|
}
|
|
132
151
|
else {
|
|
133
|
-
element.value = cacheValue;
|
|
152
|
+
element.multiple ? restoreMultiSelect(element, cacheValue) : element.value = cacheValue;
|
|
134
153
|
}
|
|
135
154
|
}
|
|
136
155
|
else {
|
|
137
156
|
element.value = cacheValue == null ? element.defaultValue : cacheValue;
|
|
138
157
|
}
|
|
158
|
+
checkDirty(element);
|
|
159
|
+
}
|
|
160
|
+
function restoreMultiSelect(element, cacheValue) {
|
|
161
|
+
let selectedOptions = JSON.parse(cacheValue);
|
|
162
|
+
Array.from(element.options).forEach((option) => option.selected = selectedOptions.includes(option.value));
|
|
139
163
|
}
|
|
140
164
|
function cacheLoadValues(element) {
|
|
141
165
|
if (!elementHasCachedLoadValue(element) && isElementCheckable(element)) {
|
|
142
166
|
element.setAttribute(CACHE_ATTR_NAME, element.checked.toString());
|
|
143
167
|
}
|
|
168
|
+
else if (isHTMLSelectElement(element) && element.multiple) {
|
|
169
|
+
element.setAttribute(CACHE_ATTR_NAME, JSON.stringify(getMultiSelectLoadValues(element)));
|
|
170
|
+
}
|
|
144
171
|
else {
|
|
145
172
|
element.setAttribute(CACHE_ATTR_NAME, element.value.toString());
|
|
146
173
|
}
|
package/package.json
CHANGED
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
"ruby on rails",
|
|
10
10
|
"ruby-on-rails"
|
|
11
11
|
],
|
|
12
|
-
"version": "1.
|
|
12
|
+
"version": "1.3.0",
|
|
13
13
|
"license": "MIT",
|
|
14
14
|
"author": {
|
|
15
15
|
"name": "Sub-Xaero",
|
|
@@ -37,25 +37,26 @@
|
|
|
37
37
|
},
|
|
38
38
|
"dependencies": {
|
|
39
39
|
"@hotwired/stimulus": "^3.0.0",
|
|
40
|
-
"@stimulus-library/utilities": "^1.
|
|
40
|
+
"@stimulus-library/utilities": "^1.3.0"
|
|
41
41
|
},
|
|
42
42
|
"devDependencies": {
|
|
43
|
-
"@types/chai": "^
|
|
43
|
+
"@types/chai": "^5.0.1",
|
|
44
44
|
"@types/mocha": "^10.0.1",
|
|
45
|
+
"@types/node": "^22.13.17",
|
|
45
46
|
"@types/sinon": "^17.0.1",
|
|
46
|
-
"@types/sinon-chai": "^
|
|
47
|
+
"@types/sinon-chai": "^4.0.0",
|
|
47
48
|
"agadoo": "^3.0.0",
|
|
48
49
|
"chai": "^5.1.1",
|
|
49
50
|
"fast-glob": "^3.2.12",
|
|
50
51
|
"lerna": "^8.0.0",
|
|
51
|
-
"mocha": "^
|
|
52
|
+
"mocha": "^11.1.0",
|
|
52
53
|
"rimraf": "^6.0.1",
|
|
53
|
-
"sinon": "^
|
|
54
|
+
"sinon": "^20.0.0",
|
|
54
55
|
"sinon-chai": "^4.0.0",
|
|
55
56
|
"standard-version": "^9.5.0",
|
|
56
|
-
"ts-node": "^10.9.
|
|
57
|
-
"typescript": "^5.
|
|
58
|
-
"vite": "^
|
|
57
|
+
"ts-node": "^10.9.2",
|
|
58
|
+
"typescript": "^5.8.2",
|
|
59
|
+
"vite": "^6.2.4"
|
|
59
60
|
},
|
|
60
|
-
"gitHead": "
|
|
61
|
+
"gitHead": "3b4c2c325aeffcfaef66e6a06ff68f00049289de"
|
|
61
62
|
}
|