nitro.js 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  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){
  10. ws.send(enc(tuple(atom('direct'), term)));
  11. }
  12. function validateSources(){ return true; }
  13. function querySourceRaw(Id){
  14. var val,
  15. el = document.getElementById(Id);
  16. if(!el){
  17. val = qs('input[name=' + Id + ']:checked');
  18. val = val ? val.value : "";
  19. }else switch (el.tagName){
  20. case 'FIELDSET':
  21. val = qs('[id="'+Id+'"]:checked'); val = val ? val.value : ""; break;
  22. case 'INPUT':
  23. switch(el.getAttribute("type")){
  24. case 'radio':
  25. val = qs('input[name=' + Id + ']:checked');
  26. val = val ? val.value : "";
  27. break;
  28. case 'checkbox':
  29. val = qs('input[id=' + Id + ']:checked');
  30. val = val ? val.value : "";
  31. break;
  32. case 'date':
  33. val = Date.parse(el.value);
  34. val = val && new Date(val) || "";
  35. break;
  36. case 'calendar':
  37. val = pickers[el.id]._d || "";
  38. break;
  39. case 'comboLookup':
  40. case 'hidden':
  41. if(el.hasAttribute('data-bind')){
  42. val = {'text' : el.value, 'bind' : el.getAttribute('data-bind')};
  43. }else{
  44. val = el.value;
  45. }
  46. break;
  47. default:
  48. var edit = el.contentEditable;
  49. if(edit && edit === 'true'){
  50. val = el.innerHTML;
  51. }else{
  52. val = el.value;
  53. }
  54. }
  55. break;
  56. default:
  57. if(el.getAttribute('data-text-input')){
  58. val = querySourceRaw(el.children[1].children[0].id);
  59. }else if(el.getAttribute('data-vector-input')){
  60. val = querySourceRaw(el.children[1].id);
  61. }else if(el.getAttribute('data-edit-input')){
  62. val = querySourceRaw(el.children[0].children[0].children[0].id);
  63. }else if(el.getAttribute('data-sortable-list')){
  64. val = getSortableValues('#' + el.id);
  65. }else if(el.contentEditable === 'true'){
  66. val = el.innerHTML;
  67. }else{
  68. val = el.value;
  69. switch(val){
  70. case "true":
  71. val = new Boolean(true);
  72. break;
  73. case "false":
  74. val = new Boolean(false);
  75. break;
  76. }
  77. }
  78. }
  79. return val;
  80. }
  81. function querySourceConvert(qs){
  82. if(qs && qs.hasOwnProperty('text') && qs.hasOwnProperty('bind')){
  83. return dec(unbase64(qs.bind));
  84. }else if(qs instanceof Date){
  85. return tuple(number(qs.getFullYear()),
  86. number(qs.getMonth() + 1),
  87. number(qs.getDate()));
  88. }else if(qs instanceof Boolean){
  89. return atom(qs.valueOf());
  90. }else if(qs instanceof Array){
  91. return list.apply(null, qs.map(querySourceConvert));
  92. }else{
  93. return bin(qs);
  94. }
  95. }
  96. function querySource(Id){
  97. var qs = querySourceRaw(Id);
  98. return querySourceConvert(qs);
  99. }