Mercurial > urweb
comparison lib/js/urweb.js @ 2206:c1a62ce47083
Merge.
author | Ziv Scully <ziv@mit.edu> |
---|---|
date | Tue, 27 May 2014 21:38:01 -0400 |
parents | 2b2d07946e65 |
children | 534577e429e1 |
comparison
equal
deleted
inserted
replaced
2205:cdea39473c78 | 2206:c1a62ce47083 |
---|---|
1007 | 1007 |
1008 function active(s) { | 1008 function active(s) { |
1009 if (suspendScripts) | 1009 if (suspendScripts) |
1010 return; | 1010 return; |
1011 | 1011 |
1012 var span = document.createElement("span"); | |
1013 addNode(span); | |
1014 var ms = maySuspend; | 1012 var ms = maySuspend; |
1015 maySuspend = false; | 1013 maySuspend = false; |
1016 try { | 1014 try { |
1017 var html = execF(s); | 1015 var html = execF(s); |
1018 } catch (e) { | 1016 } catch (e) { |
1019 maySuspend = ms; | 1017 maySuspend = ms; |
1020 throw e; | 1018 throw e; |
1021 } | 1019 } |
1022 maySuspend = ms; | 1020 maySuspend = ms; |
1023 setInnerHTML(span, html); | 1021 if (html != "") { |
1022 var span = document.createElement("span"); | |
1023 addNode(span); | |
1024 setInnerHTML(span, html); | |
1025 } | |
1024 } | 1026 } |
1025 | 1027 |
1026 function input(x, s, recreate, type, name) { | 1028 function input(x, s, recreate, type, name) { |
1027 if (name) x.name = name; | 1029 if (name) x.name = name; |
1028 if (type) x.type = type; | 1030 if (type) x.type = type; |
1109 x.onkeyup = x.oninput = x.onchange = x.onpropertychange = function() { sv(s, x.value) }; | 1111 x.onkeyup = x.oninput = x.onchange = x.onpropertychange = function() { sv(s, x.value) }; |
1110 | 1112 |
1111 return x; | 1113 return x; |
1112 } | 1114 } |
1113 | 1115 |
1114 function dynClass(html, s_class, s_style) { | 1116 function dynClass(pnode, html, s_class, s_style) { |
1115 if (suspendScripts) | 1117 if (suspendScripts) |
1116 return; | 1118 return; |
1117 | 1119 |
1118 var htmlCls = {v : null}; | 1120 var htmlCls = {v : null}; |
1119 html = flatten(htmlCls, html); | 1121 html = flatten(htmlCls, html); |
1120 htmlCls = htmlCls.v; | 1122 htmlCls = htmlCls.v; |
1121 | 1123 |
1122 var dummy = document.createElement("body"); | 1124 var dummy = document.createElement(pnode); |
1123 suspendScripts = true; | 1125 suspendScripts = true; |
1124 dummy.innerHTML = html; | 1126 dummy.innerHTML = html; |
1125 suspendScripts = false; | 1127 suspendScripts = false; |
1126 var html = dummy.firstChild; | 1128 var html = dummy.firstChild; |
1127 dummy.removeChild(html); | 1129 dummy.removeChild(html); |
1148 populate(x); | 1150 populate(x); |
1149 } | 1151 } |
1150 | 1152 |
1151 if (s_style) { | 1153 if (s_style) { |
1152 var htmlCls2 = s_class ? null : htmlCls; | 1154 var htmlCls2 = s_class ? null : htmlCls; |
1153 var x = document.createElement("script"); | 1155 var y = document.createElement("script"); |
1154 x.dead = false; | 1156 y.dead = false; |
1155 x.signal = s_style; | 1157 y.signal = s_style; |
1156 x.sources = null; | 1158 y.sources = null; |
1157 x.closures = htmlCls2; | 1159 y.closures = htmlCls2; |
1158 | 1160 |
1159 x.recreate = function(v) { | 1161 y.recreate = function(v) { |
1160 for (var ls = x.closures; ls != htmlCls2; ls = ls.next) | 1162 for (var ls = y.closures; ls != htmlCls2; ls = ls.next) |
1161 freeClosure(ls.data); | 1163 freeClosure(ls.data); |
1162 | 1164 |
1163 var cls = {v : null}; | 1165 var cls = {v : null}; |
1164 html.style.cssText = flatten(cls, v); | 1166 html.style.cssText = flatten(cls, v); |
1165 x.closures = concat(cls.v, htmlCls2); | 1167 y.closures = concat(cls.v, htmlCls2); |
1166 } | 1168 } |
1167 | 1169 |
1168 html.appendChild(x); | 1170 html.appendChild(y); |
1169 populate(x); | 1171 populate(y); |
1170 } | 1172 } |
1171 } | 1173 } |
1172 | 1174 |
1173 function addOnChange(x, f) { | 1175 function addOnChange(x, f) { |
1174 var old = x.onchange; | 1176 var old = x.onchange; |
1938 er("Disallowed URL: " + s); | 1940 er("Disallowed URL: " + s); |
1939 return u; | 1941 return u; |
1940 } | 1942 } |
1941 | 1943 |
1942 | 1944 |
1945 // Attribute name blessing | |
1946 | |
1947 function blessData(s) { | |
1948 for (var i = 0; i < s.length; ++i) { | |
1949 var c = s[i]; | |
1950 if (!isAlnum(c) && c != '-' && c != '_') | |
1951 er("Disallowed character in data-* attribute name"); | |
1952 } | |
1953 | |
1954 return s; | |
1955 } | |
1956 | |
1957 | |
1943 // CSS validation | 1958 // CSS validation |
1944 | 1959 |
1945 function atom(s) { | 1960 function atom(s) { |
1946 for (var i = 0; i < s.length; ++i) { | 1961 for (var i = 0; i < s.length; ++i) { |
1947 var c = s[i]; | 1962 var c = s[i]; |