info.js 7.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326
  1. /*
  2. * This program is free software: you can redistribute it and/or modify
  3. it under the terms of the GNU General Public License as published by
  4. the Free Software Foundation, either version 3 of the License, or
  5. (at your option) any later version.
  6. This program is distributed in the hope that it will be useful,
  7. but WITHOUT ANY WARRANTY; without even the implied warranty of
  8. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  9. GNU General Public License for more details.
  10. You should have received a copy of the GNU General Public License
  11. along with this program. If not, see <http://www.gnu.org/licenses/>.
  12. */
  13. var cat_count=0;
  14. var cat_active=-1;
  15. var info_cats=[];
  16. var tmpids;
  17. var kv_count=0;
  18. function print()
  19. {
  20. var x = "[";
  21. var i;
  22. for(i=0; i<info_cats.length; i++)
  23. {
  24. x+=" "+info_cats[i].id;
  25. }
  26. console.log(x+" ]");
  27. }
  28. function info_open(list)
  29. {
  30. var i;
  31. tmpids=0;
  32. info_cats=[];
  33. $('#input_1_cat_list').empty();
  34. for(i=0; i<list.length; i++)
  35. info_cat_add(i, list[i]);
  36. $('#input_1_root').hide();
  37. $("#input_1_cat_list a").removeClass("active");
  38. cat_active=-1;
  39. }
  40. function info_get_active_cat_index(cat)
  41. {
  42. if(cat<0) return -1;
  43. var i;
  44. for(i=0; i<info_cats.length; i++)
  45. {
  46. if(info_cats[i].id==cat)
  47. {
  48. return i;
  49. }
  50. }
  51. }
  52. function info_cat_active(x)
  53. {
  54. var y = false;
  55. $("#input_1_cat_list a").removeClass("active");
  56. $("#input_1_cat_"+x).addClass('active');
  57. if(cat_active==-1) y=true;
  58. cat_active=x;
  59. info_kv_show();
  60. $('#input_1_root').hide();
  61. $('#input_1_root').show(400);
  62. }
  63. function info_cat_up()
  64. {
  65. if(cat_active<0) return 0;
  66. var i;
  67. for(i=1; i<info_cats.length; i++)
  68. {
  69. if(info_cats[i].id==cat_active)
  70. {
  71. var x = $('#input_1_cat_'+info_cats[i].id);
  72. x.remove();
  73. x.insertBefore('#input_1_cat_'+info_cats[i-1].id);
  74. var a = info_cats[i];
  75. info_cats[i]=info_cats[i-1];
  76. info_cats[i-1]=a;
  77. break;
  78. }
  79. }
  80. print();
  81. }
  82. function info_cat_down()
  83. {
  84. if(cat_active<0) return 0;
  85. var i;
  86. for(i=0; i<info_cats.length-1; i++)
  87. {
  88. if(info_cats[i].id==cat_active)
  89. {
  90. var x = $('#input_1_cat_'+info_cats[i].id);
  91. x.remove();
  92. x.insertAfter('#input_1_cat_'+info_cats[i+1].id);
  93. var a = info_cats[i];
  94. info_cats[i]=info_cats[i+1];
  95. info_cats[i+1]=a;
  96. break;
  97. }
  98. }
  99. print();
  100. }
  101. function info_cat_del()
  102. {
  103. var i;
  104. if(cat_active<0) return 0;
  105. for(i=0; i<info_cats.length; i++)
  106. {
  107. if(info_cats[i].id==cat_active)
  108. {
  109. $('#input_1_cat_'+info_cats[i].id).remove();
  110. info_cats.splice(i, 1);
  111. break;
  112. }
  113. }
  114. cat_active=-1;
  115. $('#input_1_root').hide(400);
  116. print();
  117. }
  118. function info_cat_add(i, obj)
  119. {
  120. obj = (typeof obj === 'undefined') ? null : obj;
  121. i = (typeof i === 'undefined') ? -1 : i;
  122. cat_count++;
  123. var n;
  124. var val;
  125. var text;
  126. if(obj==null)
  127. {
  128. n=cat_count;
  129. text=$('#input_1_cat').val();
  130. val=[];
  131. }
  132. else
  133. {
  134. n=i;
  135. text=obj.title;
  136. val=obj.content;
  137. var j;
  138. for(j=0; j<val.length; j++)
  139. {
  140. val[j].unshift(tmpids++);
  141. }
  142. }
  143. var o = $('<a onclick="info_cat_active('+n+')" class="list-group-item" id="input_1_cat_'+n+'"></a>');
  144. o.append($('<h4 class="list-group-item-heading">'+text+'</h4>'));
  145. info_cats.push({ "title" : text, "id" : n, "content" : val});
  146. $('#input_1_cat_list').append(o);
  147. $('#input_1_cat').val("");
  148. }
  149. function info_cat_rename()
  150. {
  151. if(cat_active<0) return;
  152. var cat = info_get_active_cat_index(cat_active);
  153. var text = $('#input_1_cat_rename').val();
  154. $("#input_1_cat_"+cat_active).html($('<h4 class="list-group-item-heading">'+text+'</h4>'));
  155. info_cats[cat].title=text;
  156. }
  157. // [index, key, value]
  158. function info_get_kv_index(icat, kv)
  159. {
  160. if(icat<0) return;
  161. var i;
  162. for( i=0; i<info_cats[icat].content.length; i++)
  163. if(info_cats[icat].content[i][0]==kv)
  164. return i;
  165. return -1;
  166. }
  167. function info_kv_valid(index)
  168. {
  169. if(cat_active<0) return;
  170. var cat = info_get_active_cat_index(cat_active);
  171. var kv = info_get_kv_index(cat, index);
  172. var isValid = $('#input_1_kv_valid_'+index).hasClass('glyphicon-ok');
  173. var key = isValid ? $('#input_1_key_'+index).val() : $('#input_1_key_'+index).html();
  174. var value = isValid ? $('#input_1_value_'+index).val() : $('#input_1_value_'+index).html();
  175. var kp = $('#input_1_key_'+index).parent();
  176. var vp = $('#input_1_value_'+index).parent();
  177. kp.empty();
  178. vp.empty();
  179. if(isValid)
  180. {
  181. if(kv<0)
  182. {
  183. info_cats[cat].content.push([index,
  184. key,
  185. value]);
  186. }else
  187. {
  188. info_cats[cat].content[kv]=[index,
  189. key,
  190. value] ;
  191. }
  192. kp.append($('<span><h4 class="col-md-2" id="input_1_key_'+index+'" >'+key+'</h4></span>'));
  193. vp.append($('<span><h4 class="col-md-8" id="input_1_value_'+index+'">'+value+'</h4></span>'));
  194. $('#input_1_kv_valid_'+index).removeClass('glyphicon-ok');
  195. $('#input_1_kv_valid_'+index).addClass('glyphicon-pencil');
  196. }else
  197. {
  198. kp.append($('<span><input text="text" class="col-md-2" id="input_1_key_'+index+'" value="'+key+'" placeholder="Intitulé"></input></span>'));
  199. vp.append($('<span><input text="text" class="col-md-8" id="input_1_value_'+index+'" value="'+value+'" placeholder="Description (facultatif)"></input></span>'));
  200. $('#input_1_kv_valid_'+index).removeClass('glyphicon-pencil');
  201. $('#input_1_kv_valid_'+index).addClass('glyphicon-ok');
  202. }
  203. console.log("KV Valid: val='"+JSON.stringify(info_cats[cat].content)+"'");
  204. }
  205. function info_kv_del(index)
  206. {
  207. if(cat_active<0) return;
  208. var cat = info_get_active_cat_index(cat_active);
  209. var kv = info_get_kv_index(cat, index);
  210. if(kv<0)
  211. {
  212. $('#input_1_kv_'+index).remove();
  213. return;
  214. }
  215. $('#input_1_kv_'+info_cats[cat].content[kv][0]).remove();
  216. info_cats[cat].content.splice(kv, 1);
  217. }
  218. function info_kv_add(i, k, v)
  219. {
  220. i = (typeof i === 'undefined') ? -1 : i;
  221. k = (typeof k === 'undefined') ? '' : k;
  222. v = (typeof v === 'undefined') ? '' : v;
  223. console.log("i="+i+", v="+k+", v="+v);
  224. if(cat_active<0) return;
  225. var nb;
  226. if(i<0) nb=(kv_count++);
  227. else
  228. {
  229. if(i>kv_count) kv_count=i;
  230. nb=i;
  231. }
  232. console.log("N="+nb);
  233. var disable=(i==-1)?"":"disabled=true";
  234. var o = $("<div id='input_1_kv_"+nb+"' class='row'></div>");
  235. if(i==-1)o.append($('<span><input text="text" class="col-md-2" id="input_1_key_'+nb+'" value="'+k+'" placeholder="Intitulé" '+disable+'></input></span>'));
  236. else o.append($('<span><h4 class="col-md-2" id="input_1_key_'+nb+'" >'+k+'</h4></span>'));
  237. if(i==-1)o.append($('<span><input text="text" class="col-md-8" id="input_1_value_'+nb+'" value="'+v+'" placeholder="Description (facultatif)" '+disable+'></input></span>'));
  238. else o.append($('<span><h4 class="col-md-8" id="input_1_value_'+nb+'">'+v+'</h4></span>'));
  239. if(i==-1) o.append($('<span><button class="col-md-1 btn btn-default glyphicon glyphicon-ok" onclick="info_kv_valid('+nb+')" id="input_1_kv_valid_'+nb+'"></button></span>'));
  240. else o.append($('<span><button class="col-md-1 btn btn-default glyphicon glyphicon-pencil" onclick="info_kv_valid('+nb+')" id="input_1_kv_valid_'+nb+'"></button></span>'));
  241. o.append($('<span><button class="col-md-1 btn btn-default glyphicon glyphicon-minus" onclick="info_kv_del('+nb+')"></button></span>'));
  242. $('#input_1_kv_list').append(o);
  243. }
  244. function info_kv_show()
  245. {
  246. var cat = info_get_active_cat_index(cat_active);
  247. var i;
  248. $('#input_1_kv_list').empty();
  249. $('#input_1_cat_rename').val($($("#input_1_cat_"+cat_active).html()).html());
  250. for(i=0; i<info_cats[cat].content.length; i++)
  251. {
  252. info_kv_add(info_cats[cat].content[i][0],info_cats[cat].content[i][1],info_cats[cat].content[i][2]);
  253. }
  254. }
  255. function get_cats()
  256. {
  257. var ic= JSON.parse(JSON.stringify(info_cats));
  258. var i,j;
  259. for(i=0; i< info_cats.length; i++)
  260. for(j=0; j<info_cats[i].content.length; j++)
  261. ic[i].content[j].splice(0,1);
  262. return ic;
  263. }