ui.js 4.0 KB

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