123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081 |
- <!DOCTYPE html>
- <html>
- <body>
- <form action="javascript:updateDom()">
- <label for="typer">New label text:</label>
- <input name="typer" type="text"/>
- <br/>
- <label for="color">Select label color:</label>
- <input name="color" id="red" value="red" type="radio"/>Red
- <input name="color" id="green" value="green" type="radio"/>Green
- <br/>
- <input name="submit" type="submit" value="Add Label"/>
- </form>
- <div id="update_butter" style="display:none"></div>
- <script>
- var butter = document.getElementById('update_butter');
- var textProperty = butter['innerText'] ? 'innerText' : 'textContent';
- var listeners = [];
- function registerListener(fn) {
- listeners.push(fn);
- }
- function updateDom() {
- butter.style.display = 'block';
- butter[textProperty] = 'Updating';
- disableForm();
- tick();
- }
- function disableForm() {
- var inputs = document.getElementsByTagName('input');
- for (var i = 0, input; input = inputs[i]; ++i) {
- input.disabled = true;
- }
- }
- function enableForm() {
- var inputs = document.getElementsByTagName('input');
- for (var i = 0, input; input = inputs[i]; ++i) {
- input.disabled = false;
- }
- }
- function tick() {
- var length = butter[textProperty].substring('Updating'.length).length;
- if (length != 10) {
- butter[textProperty] += '.';
- window.setTimeout(tick, 500);
- } else {
- enableForm();
- var div = document.createElement('div');
- var colors = document.forms[0].color;
- for (var i = 0, color; color = colors[i]; ++i) {
- if (color.checked) {
- div.style.backgroundColor = color.value;
- break;
- }
- }
- div[textProperty] = document.forms[0].typer.value;
- div.className = 'label';
- document.forms[0].typer.value = '';
- document.body.appendChild(div);
- butter[textProperty] = 'Done!';
- window.setTimeout(function() {
- while (listeners.length) {
- try {
- listeners.shift()(div[textProperty]);
- } catch (e) {
- butter[textProperty] = "Exception seen: " + e;
- }
- }
- }, 500);
- }
- }
- </script>
- </body>
- </html>
|