ui.js 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193
  1. function doFac(r, f, classes)
  2. {
  3. if(f.facultative)
  4. {
  5. r.append(HTMLBuilder.switch({id: f.id+"_elem_cb", on:"<br>on", off:"off"},{},
  6. { onclick: 'toggleEnable(\''+f.id+'_elem\')'}));
  7. /*var sw = r.append('<div class="switch col '+((classes)?classes:"")+'" ><br><label>\
  8. <input type="checkbox" id="'+f.id+'_elem_cb" onclick="toggleEnable(\''+f.id+'_elem\')"> \
  9. <span class="lever"></span></label> </div>')*/
  10. }
  11. }
  12. class UIElement {
  13. constructor(rootData, data, root, parent=undefined)
  14. {
  15. this.type="ui";
  16. Object.assign(this, data);
  17. this.rootData=rootData;
  18. this.root=$("#"+root);
  19. this.rootId=root;
  20. this.uiId=registerUI(this);
  21. this.root.data( { "id" :this.uiId });
  22. this.prefix=root;
  23. this.parent=parent;
  24. this.subConstructor();
  25. this.elemId=this.rootId+"_elem";
  26. console.log("constructor #"+this.elemId)
  27. this.initStart();
  28. this.init();
  29. this.initEnd();
  30. }
  31. initStart(){}
  32. initEnd(){}
  33. subConstructor(){}
  34. resolveElement(e)
  35. {
  36. if(typeof e == "string" && e.length>1 && e[0]=='@' && e[1]=='/')
  37. {
  38. var l = e.substr(2).split(':');
  39. var path = l[0];
  40. var mod = {};
  41. if(l.length>1)
  42. {
  43. var m = l.slice(1).join(':');
  44. var mm = m.replace(/(['"])?([a-z0-9A-Z_]+)(['"])?:/g, '"$2": ');
  45. mod=JSON.parse(mm.replace(/'/g, "\""));
  46. }
  47. return findPathInObject(this.rootData, path, mod);
  48. }
  49. return e;
  50. }
  51. getJson()
  52. {
  53. return $("#"+this.elemId).val();
  54. }
  55. setJson(e)
  56. {
  57. $("#"+this.elemId).val(e);
  58. return this;
  59. }
  60. val(f)
  61. {
  62. if(f==undefined) return this.getJson();
  63. this.setJson(f);
  64. }
  65. onDelete()
  66. {
  67. deleteUI(this);
  68. if(this.parent)
  69. this.parent.deleteChild(this.rootId);
  70. }
  71. reset(){this.val("")}
  72. }
  73. registerUiClass("element", UIElement);
  74. class UIContainer extends UIElement {
  75. subConstructor(){
  76. this.index = {};
  77. }
  78. initFieldStart(f) {}
  79. initFieldEnd(f){}
  80. init_text(f) {return this._init_text(f, f.size?f.size:12); }
  81. init_textarea(f) { return this._init_textarea(f, f.size?f.size:12);}
  82. init_select(f){return this._init_select(f, f.size?f.size:12); }
  83. init()
  84. {
  85. this.root.empty();
  86. this.fields=this.resolveElement(this.fields);
  87. if(this.fields)
  88. {
  89. for(var i=0; i<this.fields.length; i++)
  90. {
  91. this.fields[i]=this.resolveElement(this.fields[i]);
  92. this.initFieldStart(this.fields[i]);
  93. this._init(this.root, this.fields[i]);
  94. this.initFieldEnd(this.fields[i]);
  95. }
  96. }
  97. this.root.find("select").formSelect();
  98. }
  99. _init(r, f)
  100. {
  101. var id = this.prefix+"_"+f.name;
  102. f.id=id;
  103. this.root.append(r);
  104. r.append(HTMLBuilder.div({id: id}));
  105. this.index[f.name]=newUiClass(f.type, this.rootData, f,id, this);
  106. return true;
  107. }
  108. getValue(name)
  109. {
  110. var id = this.prefix+"_"+name;
  111. var f = this.index[name];
  112. return f.val();
  113. }
  114. setValue(name, val)
  115. {
  116. var id = this.prefix+"_"+name;
  117. var f = this.index[name];
  118. if(f.facultative)
  119. $("#"+id+"_cb").prop('checked', val?true:false);
  120. f.val(val);
  121. }
  122. reset()
  123. {
  124. for (var key in this.index) {
  125. if (this.index.hasOwnProperty(key)) {
  126. this.setValue(key, undefined);
  127. }
  128. }
  129. }
  130. setJson(p)
  131. {
  132. for (var key in this.index) {
  133. if (this.index.hasOwnProperty(key)) {
  134. this.setValue(key, p[key]);
  135. }
  136. }
  137. }
  138. deleteChild(id)
  139. {
  140. delete this.index[id];
  141. }
  142. getJson()
  143. {
  144. var out={};
  145. for (var key in this.index) {
  146. if (this.index.hasOwnProperty(key)) {
  147. var p = this.index[key];
  148. if(p.facultative && !$("#"+p.id+"_cb").is(':checked'))
  149. continue;
  150. out[key]=this.getValue(key);
  151. }
  152. }
  153. return out;
  154. }
  155. foreach(fct)
  156. {
  157. for (var key in this.index) {
  158. if (this.index.hasOwnProperty(key)) {
  159. fct(key, this.index[key])
  160. }
  161. }
  162. }
  163. }
  164. registerUiClass("container", UIContainer);