|
26 | 26 |
|
27 | 27 | innerHTML: { value: innerHTMLBind, writable: true, configurable: false, enumerable: false }, |
28 | 28 | value: { value: valueBind, writable: true, configurable: false, enumerable: false }, |
| 29 | + getvalue: { value: getValueBind, writable: true, configurable: false, enumerable: false }, |
| 30 | + setvalue: { value: setValueBind, writable: true, configurable: false, enumerable: false }, |
29 | 31 | check: { value: checkBind, writable: true, configurable: false, enumerable: false }, |
30 | 32 | hidden: { value: hiddenBind, writable: true, configurable: false, enumerable: false }, |
31 | 33 | enabled: { value: enabledBind, writable: true, configurable: false, enumerable: false }, |
|
193 | 195 | var templateElement = null; |
194 | 196 |
|
195 | 197 | try { templateElement = element.querySelector(selectors) || document.querySelector(selectors); } |
196 | | - catch { |
| 198 | + catch { templateElement = null; } |
| 199 | + |
| 200 | + |
| 201 | + if (!templateElement) { return fetchContent(); } |
| 202 | + |
| 203 | + bindTemplate(); |
| 204 | + |
| 205 | + return; |
| 206 | + |
| 207 | + function fetchContent() { |
197 | 208 |
|
198 | 209 | fetch(selectors).then(function (res) { |
199 | 210 |
|
200 | | - res.text().then(function (strHTML) { |
| 211 | + res.text().then(function (textContent) { |
201 | 212 |
|
202 | 213 | templateElement = document.createElement("template"); |
203 | | - templateElement.innerHTML = strHTML; |
| 214 | + selectors.endsWith('.html') |
| 215 | + ? templateElement.innerHTML = textContent |
| 216 | + : templateElement.innerHTML = '<div>' + encodeHTML(textContent) + '</div>'; |
204 | 217 | bindTemplate(); |
205 | 218 | }); |
206 | 219 | }); |
207 | | - } |
208 | | - |
209 | | - if (!templateElement) { return; } |
210 | | - |
211 | | - bindTemplate(); |
212 | 220 |
|
213 | | - return; |
| 221 | + function encodeHTML(str) { |
| 222 | + |
| 223 | + return str.replace(/&/g, '&') |
| 224 | + .replace(/</g, '<') |
| 225 | + .replace(/>/g, '>') |
| 226 | + .replace(/"/g, '"') |
| 227 | + .replace(/'/g, ''') |
| 228 | + .replace(/ /g, " ") |
| 229 | + .replace(/\r\n/g, '<br>') // Windows-style newlines |
| 230 | + .replace(/\r/g, '<br>') // Old Mac-style newlines |
| 231 | + .replace(/\n/g, '<br>'); // Unix-style newlines |
| 232 | + } |
| 233 | + } |
214 | 234 |
|
215 | 235 | function bindTemplate() { |
216 | 236 |
|
|
796 | 816 | // I am alive! |
797 | 817 | return true; |
798 | 818 | } |
| 819 | + function getValueBind(event) { |
| 820 | + |
| 821 | + if (event.eventName === "unbind") { |
| 822 | + |
| 823 | + this.onchange = null; |
| 824 | + this.onkeydown = null; |
| 825 | + |
| 826 | + this.value = ''; |
| 827 | + |
| 828 | + // I am dead! |
| 829 | + return false; |
| 830 | + } |
| 831 | + |
| 832 | + this.value = event.newValue; |
| 833 | + |
| 834 | + // I am alive! |
| 835 | + return true; |
| 836 | + } |
| 837 | + function setValueBind(event) { |
| 838 | + |
| 839 | + if (event.eventName === "unbind") { |
| 840 | + |
| 841 | + this.onchange = null; |
| 842 | + this.onkeydown = null; |
| 843 | + |
| 844 | + this.value = ''; |
| 845 | + |
| 846 | + // I am dead! |
| 847 | + return false; |
| 848 | + } |
| 849 | + |
| 850 | + // Init |
| 851 | + if (event.eventName === "bind") { |
| 852 | + |
| 853 | + this.onchange = function () { this.contextValue(this.value); }; |
| 854 | + this.onkeydown = function (ev) { if (ev.keyCode === 27) { this.value = his.contextValue(); } }; |
| 855 | + } |
| 856 | + |
| 857 | + // I am alive! |
| 858 | + return true; |
| 859 | + } |
799 | 860 | function checkBind(event) { |
800 | 861 |
|
801 | 862 | if (event.eventName === "unbind") { |
|
0 commit comments