116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
|
- Add an invert option which activates if the timeout is reached and
"times out" if the element is clicked again. e.g. a button which says
"Saving..." and cancels the op if it's clicked again, else it saves
after X time/ticks.
- Internally we save/restore the initial text of non-INPUT elements
using innerHTML. We should instead move their child nodes aside (into
an internal out-of-DOM element) and restore them as needed.
Terse Change history:
- 20200811
- Added pinSize option.
- 20200507:
|
>
|
|
|
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
|
- Add an invert option which activates if the timeout is reached and
"times out" if the element is clicked again. e.g. a button which says
"Saving..." and cancels the op if it's clicked again, else it saves
after X time/ticks.
- Internally we save/restore the initial text of non-INPUT elements
using a relatively expensive bit of DOMParser hoop-jumping. We
"should" instead move their child nodes aside (into an internal
out-of-DOM element) and restore them as needed.
Terse Change history:
- 20200811
- Added pinSize option.
- 20200507:
|
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
|
this.target = target;
this.opt = opt;
this.timerID = undefined;
this.state = this.states.initial;
const isInput = f.isInput(target);
const updateText = function(msg){
if(isInput) target.value = msg;
else target.innerHTML = msg;
}
const formatCountdown = (txt, number) => txt + " ["+number+"]";
if(opt.pinSize && opt.confirmText){
/* Try to pin the element's width the the greater of its
current width or its waiting-on-confirmation width
to avoid layout reflow when it's activated. */
const digits = (''+(opt.timeout/1000 || opt.ticks)).length;
|
>
>
>
>
>
|
>
>
|
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
|
this.target = target;
this.opt = opt;
this.timerID = undefined;
this.state = this.states.initial;
const isInput = f.isInput(target);
const updateText = function(msg){
if(isInput) target.value = msg;
else{
/* Jump through some hoops to avoid assigning to innerHTML... */
const newNode = new DOMParser().parseFromString(msg, 'text/html');
let childs = newNode.documentElement.querySelector('body');
childs = childs ? Array.prototype.slice.call(childs.childNodes, 0) : [];
target.innerText = '';
childs.forEach((e)=>target.appendChild(e));
}
}
const formatCountdown = (txt, number) => txt + " ["+number+"]";
if(opt.pinSize && opt.confirmText){
/* Try to pin the element's width the the greater of its
current width or its waiting-on-confirmation width
to avoid layout reflow when it's activated. */
const digits = (''+(opt.timeout/1000 || opt.ticks)).length;
|