nitro.js 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. // Nitrogen Compatibility Layer
  2. function unbase64(base64) {
  3. var binary_string = window.atob(base64);
  4. var len = binary_string.length;
  5. var bytes = new Uint8Array(len);
  6. for (var i = 0; i < len; i++) bytes[i] = binary_string.charCodeAt(i);
  7. return bytes.buffer;
  8. }
  9. function direct(term) { ws.send(enc(tuple(atom('direct'),term))); }
  10. function validateSources() { return true; }
  11. function querySourceRaw(Id) {
  12. var val, el = document.getElementById(Id);
  13. if (!el) {
  14. val = qs('input[name='+Id+']:checked'); val = val ? bin(val.value) : bin("");
  15. } else switch (el.tagName) {
  16. case 'FIELDSET':
  17. val = qs('[id="'+Id+'"]:checked'); val = val ? bin(val.value) : bin(""); break;
  18. case 'INPUT':
  19. switch (el.getAttribute("type")) {
  20. case 'radio': case 'checkbox': val = qs('input[name='+Id+']:checked'); val = val ? val.value : ""; break;
  21. case 'date': val = Date.parse(el.value); val = val && new Date(val) || ""; break;
  22. case 'text': var x = el.getAttribute('data-bind'); if (x) val=dec(unbase64(x)); break;
  23. case 'calendar': var x = pickers[el.id]._d; val = tuple(number(x.getFullYear()),number(x.getMonth()+1),number(x.getDate())); break;
  24. default:
  25. var edit = el.contentEditable;
  26. if (edit && edit === 'true') val = bin(el.innerHTML);
  27. else val = bin(el.value);
  28. }
  29. break;
  30. default:
  31. if (el.getAttribute('data-vector-input')) {
  32. val = querySourceRaw(el.children[1].id);
  33. } else if (el.getAttribute('data-sortable-list')) {
  34. val = getSortableValues('#' + el.id);
  35. } else if (el.contentEditable === 'true') {
  36. val = el.innerHTML;
  37. } else {
  38. val = el.value;
  39. switch (val) {
  40. case "true": val = atom('true'); break;
  41. case "false": val = atom('false'); break;
  42. }
  43. }
  44. }
  45. return val;
  46. }
  47. function querySource(Id) {
  48. var qs = querySourceRaw(Id);
  49. if (qs && qs.t && qs.v) return qs;
  50. else if (qs instanceof Array) { return list.apply(null, qs.map(bin)); }
  51. else { return bin(qs); }
  52. }