move.js 43 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264
  1. /* vim: set expandtab sw=4 ts=4 sts=4: */
  2. /**
  3. * @package PhpMyAdmin-Designer
  4. */
  5. /**
  6. * init
  7. */
  8. var _change = 0; // variable to track any change in designer layout.
  9. var _staying = 0; // variable to check if the user stayed after seeing the confirmation prompt.
  10. var show_relation_lines = true;
  11. AJAX.registerTeardown('pmd/move.js', function() {
  12. if ($.FullScreen.supported) {
  13. $(document).unbind($.FullScreen.prefix + 'fullscreenchange');
  14. }
  15. });
  16. AJAX.registerOnload('pmd/move.js', function() {
  17. $('#page_content').css({'margin-left': '3px'});
  18. $('#exitFullscreen').hide();
  19. if ($.FullScreen.supported) {
  20. $(document).fullScreenChange(function() {
  21. if (! $.FullScreen.isFullScreen()) {
  22. $('#page_content').removeClass('content_fullscreen')
  23. .css({'width': 'auto', 'height': 'auto'});
  24. $('#enterFullscreen').show();
  25. $('#exitFullscreen').hide();
  26. Top_menu_reposition($('#key_Left_Right')[0]);
  27. }
  28. });
  29. } else {
  30. $('#enterFullscreen').hide();
  31. }
  32. });
  33. // Below is the function to bind onbeforeunload events with the content_frame as well as the top window.
  34. /*
  35. FIXME: we can't register the beforeonload event because it will persist between pageloads
  36. AJAX.registerOnload('pmd/move.js', function(){
  37. $(window).bind('beforeunload', function() { // onbeforeunload for the frame window.
  38. if (_change == 1 && _staying == 0) {
  39. return PMA_messages['strLeavingDesigner'];
  40. } else if (_change == 1 && _staying == 1) {
  41. _staying = 0;
  42. }
  43. });
  44. $(window).unload(function() {
  45. _change = 0;
  46. });
  47. window.top.onbeforeunload = function() { // onbeforeunload for the browser main window.
  48. if (_change == 1 && _staying == 0) {
  49. _staying = 1; // Helps if the user stays on the page as there
  50. setTimeout('make_zero();', 100); // is no other way of knowing whether the user stayed or not.
  51. return PMA_messages['strLeavingDesigner'];
  52. }
  53. };
  54. });*/
  55. function make_zero() { // Function called if the user stays after seeing the confirmation prompt.
  56. _staying = 0;
  57. }
  58. var dx, dy, dy2;
  59. var cur_click;
  60. // update in Main()
  61. var sm_x = 2, sm_y = 2;
  62. var sm_s = 0;
  63. var sm_add = 10;
  64. var s_left = 0;
  65. var s_right = 0;
  66. var ON_relation = 0;
  67. var ON_grid = 0;
  68. var ON_display_field = 0;
  69. // relation_style: 0 - angular 1 - direct
  70. var ON_angular_direct = 1;
  71. var click_field = 0;
  72. var link_relation = "";
  73. var id_hint;
  74. var canvas_width = 0;
  75. var canvas_height = 0;
  76. var osn_tab_width = 0;
  77. var osn_tab_height = 0;
  78. var height_field = 7;
  79. var Glob_X, Glob_Y;
  80. var timeoutID;
  81. var layer_menu_cur_click = 0;
  82. var step = 10;
  83. var old_class;
  84. var from_array = [];
  85. var downer;
  86. //------------------------------------------------------------------------------
  87. //------------------------------------------------------------------------------
  88. //------------------------------------------------------------------------------
  89. //window.captureEvents(Event.MOUSEDOWN | Event.MOUSEUP);
  90. //---CROSS
  91. document.onmousedown = MouseDown;
  92. document.onmouseup = MouseUp;
  93. document.onmousemove = MouseMove;
  94. var isIE = document.all && !window.opera;
  95. var isNN = !document.all && document.getElementById;
  96. var isN4 = document.layers;
  97. if (isIE) {
  98. window.onscroll = General_scroll;
  99. document.onselectstart = function () {return false;};
  100. }
  101. //document.onmouseup = function(){General_scroll_end();}
  102. function MouseDown(e)
  103. {
  104. var offsetx, offsety;
  105. if (cur_click != null) {
  106. offsetx = isIE ? event.clientX + document.body.scrollLeft : e.pageX;
  107. offsety = isIE ? event.clientY + document.body.scrollTop : e.pageY;
  108. dx = offsetx - parseInt(cur_click.style.left);
  109. dy = offsety - parseInt(cur_click.style.top);
  110. //alert(" dx = " + dx + " dy = " +dy);
  111. document.getElementById("canvas").style.display = 'none';
  112. /*
  113. var left = parseInt(cur_click.style.left);
  114. var top = parseInt(cur_click.style.top);
  115. dx = e.pageX - left;
  116. dy = e.pageY - top;
  117. alert(" dx = " + dx + " dy = " +dy);
  118. */
  119. cur_click.style.zIndex = 2;
  120. }
  121. if (layer_menu_cur_click) {
  122. offsetx = e.pageX;
  123. dx = offsetx - parseInt(document.getElementById("layer_menu").style.width);
  124. }
  125. }
  126. function MouseMove(e)
  127. {
  128. //Glob_X = e.pageX;
  129. //Glob_Y = e.pageY;
  130. Glob_X = isIE ? event.clientX + document.body.scrollLeft : e.pageX;
  131. Glob_Y = isIE ? event.clientY + document.body.scrollTop : e.pageY;
  132. //mouseX = (bw.ns4||bw.ns6)? e.pageX: bw.ie&&bw.win&&!bw.ie4? (event.clientX-2)+document.body.scrollLeft : event.clientX+document.body.scrollLeft;
  133. //mouseY = (bw.ns4||bw.ns6)? e.pageY: bw.ie&&bw.win&&!bw.ie4? (event.clientY-2)+document.body.scrollTop : event.clientY+document.body.scrollTop;
  134. //window.status = "X = "+ Glob_X + " Y = "+ Glob_Y;
  135. if (cur_click != null) {
  136. _change = 1;
  137. var mGx = Glob_X - dx;
  138. var mGy = Glob_Y - dy;
  139. mGx = mGx > 0 ? mGx : 0;
  140. mGy = mGy > 0 ? mGy : 0;
  141. if (ON_grid) {
  142. mGx = mGx % step < step / 2 ? mGx - mGx % step : mGx - mGx % step + step;
  143. mGy = mGy % step < step / 2 ? mGy - mGy % step : mGy - mGy % step + step;
  144. }
  145. cur_click.style.left = mGx + 'px';
  146. cur_click.style.top = mGy + 'px';
  147. }
  148. if (ON_relation || ON_display_field) {
  149. document.getElementById('pmd_hint').style.left = (Glob_X + 20) + 'px';
  150. document.getElementById('pmd_hint').style.top = (Glob_Y + 20) + 'px';
  151. }
  152. if (layer_menu_cur_click) {
  153. document.getElementById("layer_menu").style.width = ((Glob_X - dx) >= 150 ? Glob_X - dx : 150) + 'px';
  154. //document.getElementById("layer_menu").style.height = Glob_Y - dy>=200?Glob_Y - dy:200;
  155. //document.getElementById("id_scroll_tab").style.height = Glob_Y - dy2;
  156. }
  157. }
  158. function MouseUp(e)
  159. {
  160. if (cur_click != null) {
  161. document.getElementById("canvas").style.display = 'inline-block';
  162. Re_load();
  163. cur_click.style.zIndex = 1;
  164. cur_click = null;
  165. }
  166. layer_menu_cur_click = 0;
  167. //window.releaseEvents(Event.MOUSEMOVE);
  168. }
  169. //------------------------------------------------------------------------------
  170. //------------------------------------------------------------------------------
  171. //------------------------------------------------------------------------------
  172. //function ToInt(s)
  173. //{
  174. // return s.substring(0,s.length-2)*1; //re = /(\d+)\w*/; newstr = str.replace(re, "$1");
  175. //}
  176. function Canvas_pos()
  177. {
  178. canvas_width = document.getElementById('canvas').width = osn_tab_width - 3;
  179. canvas_height = document.getElementById('canvas').height = osn_tab_height - 3;
  180. if (isIE) {
  181. document.getElementById('canvas').style.width = ((osn_tab_width - 3)?(osn_tab_width - 3):0) + 'px';
  182. document.getElementById('canvas').style.height = ((osn_tab_height - 3)?(osn_tab_height - 3):0) + 'px';
  183. }
  184. }
  185. function Osn_tab_pos()
  186. {
  187. osn_tab_width = parseInt(document.getElementById('osn_tab').style.width);
  188. osn_tab_height = parseInt(document.getElementById('osn_tab').style.height);
  189. }
  190. function Main()
  191. {
  192. //alert( document.getElementById('osn_tab').offsetTop);
  193. //---CROSS
  194. document.getElementById("layer_menu").style.top = -1000 + 'px'; //fast scroll
  195. sm_x += document.getElementById('osn_tab').offsetLeft;
  196. sm_y += document.getElementById('osn_tab').offsetTop;
  197. Osn_tab_pos();
  198. Canvas_pos();
  199. Small_tab_refresh();
  200. Re_load();
  201. id_hint = document.getElementById('pmd_hint');
  202. if (isIE) {
  203. General_scroll();
  204. }
  205. }
  206. //-------------------------------- new -----------------------------------------
  207. function Rezize_osn_tab()
  208. {
  209. var max_X = 0;
  210. var max_Y = 0;
  211. for (var key in j_tabs) {
  212. var k_x = parseInt(document.getElementById(key).style.left) + document.getElementById(key).offsetWidth;
  213. var k_y = parseInt(document.getElementById(key).style.top) + document.getElementById(key).offsetHeight;
  214. max_X = max_X < k_x ? k_x : max_X;
  215. max_Y = max_Y < k_y ? k_y : max_Y;
  216. }
  217. osn_tab_width = max_X + 50;
  218. osn_tab_height = max_Y + 50;
  219. Canvas_pos();
  220. document.getElementById('osn_tab').style.width = osn_tab_width + 'px';
  221. document.getElementById('osn_tab').style.height = osn_tab_height + 'px';
  222. }
  223. //------------------------------------------------------------------------------
  224. /**
  225. * refreshes display, must be called after state changes
  226. */
  227. function Re_load()
  228. {
  229. Rezize_osn_tab();
  230. var n;
  231. var x1;
  232. var x2;
  233. var a = [];
  234. var K;
  235. var key;
  236. var key2;
  237. var key3;
  238. Clear();
  239. for (K in contr) {
  240. for (key in contr[K]) {
  241. // contr name
  242. for (key2 in contr[K][key]) {
  243. // table name
  244. for (key3 in contr[K][key][key2]) {
  245. // field name
  246. if (!document.getElementById("check_vis_" + key2).checked ||
  247. !document.getElementById("check_vis_" + contr[K][key][key2][key3][0]).checked) {
  248. // if hide
  249. continue;
  250. }
  251. var x1_left = document.getElementById(key2).offsetLeft+1;
  252. var x1_right = x1_left + document.getElementById(key2).offsetWidth;
  253. var x2_left = document.getElementById(contr[K][key][key2][key3][0]).offsetLeft;
  254. var x2_right = x2_left + document.getElementById(contr[K][key][key2][key3][0]).offsetWidth;
  255. a[0] = Math.abs(x1_left - x2_left);
  256. a[1] = Math.abs(x1_left - x2_right);
  257. a[2] = Math.abs(x1_right - x2_left);
  258. a[3] = Math.abs(x1_right - x2_right);
  259. n = s_left = s_right = 0;
  260. for (var i = 1; i < 4; i++) {
  261. if (a[n] > a[i]) {
  262. n = i;
  263. }
  264. }
  265. if (n == 1) {
  266. x1 = x1_left - sm_s;
  267. x2 = x2_right + sm_s;
  268. if (x1 < x2) {
  269. n = 0;
  270. }
  271. }
  272. if (n == 2) {
  273. x1 = x1_right + sm_s;
  274. x2 = x2_left - sm_s;
  275. if (x1 > x2) {
  276. n = 0;
  277. }
  278. }
  279. if (n == 3) {
  280. x1 = x1_right + sm_s;
  281. x2 = x2_right + sm_s;
  282. s_right = 1;
  283. }
  284. if (n == 0) {
  285. x1 = x1_left - sm_s;
  286. x2 = x2_left - sm_s;
  287. s_left = 1;
  288. }
  289. //alert(key2 + "." + key3);
  290. var row_offset_top = 0;
  291. //alert('id_tbody_' + key2);
  292. //alert(document.getElementById('id_hide_tbody_' + key2));
  293. var tab_hide_button = document.getElementById('id_hide_tbody_' + key2);
  294. //alert(tab_hide_button.innerHTML);
  295. if (tab_hide_button.innerHTML == 'v') {
  296. row_offset_top = document.getElementById(key2 + "." + key3).offsetTop;
  297. }
  298. var y1 = document.getElementById(key2).offsetTop
  299. + row_offset_top
  300. + height_field;
  301. //alert(1);
  302. row_offset_top = 0;
  303. var tab_hide_button = document.getElementById('id_hide_tbody_' + contr[K][key][key2][key3][0]);
  304. if (tab_hide_button.innerHTML == 'v') {
  305. row_offset_top = document.getElementById(contr[K][key][key2][key3][0]
  306. + '.' + contr[K][key][key2][key3][1]).offsetTop;
  307. }
  308. var y2 =
  309. document.getElementById(contr[K][key][key2][key3][0]).offsetTop
  310. + row_offset_top
  311. + height_field;
  312. //alert(y1 + ' - ' + key2 + "." + key3);
  313. Line0(x1 - sm_x, y1 - sm_y, x2 - sm_x, y2 - sm_y, getColorByTarget( contr[K][key][key2][key3][0]+'.'+contr[K][key][key2][key3][1] ) );
  314. }
  315. }
  316. }
  317. }
  318. }
  319. /**
  320. * draws a line from x1:y1 to x2:y2 with color
  321. */
  322. function Line(x1, y1, x2, y2, color_line)
  323. {
  324. var canvas = document.getElementById("canvas");
  325. var ctx = canvas.getContext("2d");
  326. ctx.strokeStyle = color_line;
  327. ctx.lineWidth = 1;
  328. ctx.beginPath();
  329. ctx.moveTo(x1, y1);
  330. ctx.lineTo(x2, y2);
  331. ctx.stroke();
  332. }
  333. /**
  334. * draws a relation/constraint line, whether angular or not
  335. */
  336. function Line0(x1, y1, x2, y2, color_line)
  337. {
  338. if (! show_relation_lines) {
  339. return;
  340. }
  341. Circle(x1, y1, 3, 3, color_line);
  342. Rect(x2 - 1, y2 - 2, 4, 4, color_line);
  343. if (ON_angular_direct) {
  344. Line2(x1, y1, x2, y2, color_line);
  345. } else {
  346. Line3(x1, y1, x2, y2, color_line);
  347. }
  348. }
  349. /**
  350. * draws a angualr relation/constraint line
  351. */
  352. function Line2(x1, y1, x2, y2, color_line)
  353. {
  354. var x1_ = x1;
  355. var x2_ = x2;
  356. if (s_right) {
  357. x1_ += sm_add;
  358. x2_ += sm_add;
  359. } else if (s_left) {
  360. x1_ -= sm_add;
  361. x2_ -= sm_add;
  362. } else if (x1 < x2) {
  363. x1_ += sm_add;
  364. x2_ -= sm_add;
  365. } else {
  366. x1_ -= sm_add;
  367. x2_ += sm_add;
  368. }
  369. Line(x1, y1, x1_, y1, color_line);
  370. Line(x2, y2, x2_, y2, color_line);
  371. Line(x1_, y1, x2_, y2, color_line);
  372. }
  373. /**
  374. * draws a relation/constraint line
  375. */
  376. function Line3(x1, y1, x2, y2, color_line)
  377. {
  378. var x1_ = x1;
  379. var x2_ = x2;
  380. if (s_right) {
  381. if (x1 < x2) {
  382. x1_ += x2 - x1 + sm_add;
  383. x2_ += sm_add;
  384. } else {
  385. x2_ += x1 - x2 + sm_add;
  386. x1_ += sm_add;
  387. }
  388. Line(x1, y1, x1_, y1, color_line);
  389. Line(x2, y2, x2_, y2, color_line);
  390. Line(x1_, y1, x2_, y2, color_line);
  391. return;
  392. }
  393. if (s_left) {
  394. if (x1 < x2) {
  395. x2_ -= x2 - x1 + sm_add;
  396. x1_ -= sm_add;
  397. } else {
  398. x1_ -= x1 - x2 + sm_add;
  399. x2_ -= sm_add;
  400. }
  401. Line(x1, y1, x1_, y1, color_line);
  402. Line(x2, y2, x2_, y2, color_line);
  403. Line(x1_, y1, x2_, y2, color_line);
  404. return;
  405. }
  406. var x_s = (x1 + x2) / 2;
  407. Line(x1, y1, x_s, y1, color_line);
  408. Line(x_s, y2, x2, y2, color_line);
  409. Line(x_s, y1, x_s, y2, color_line);
  410. }
  411. function Circle(x, y, r, w, color)
  412. {
  413. var ctx = document.getElementById('canvas').getContext('2d');
  414. ctx.beginPath();
  415. ctx.moveTo(x, y);
  416. ctx.lineWidth = w;
  417. ctx.strokeStyle = color;
  418. ctx.arc(x, y, r, 0, 2 * Math.PI, true);
  419. ctx.stroke();
  420. }
  421. function Clear()
  422. {
  423. var canvas = document.getElementById("canvas");
  424. var ctx = canvas.getContext("2d");
  425. ctx.clearRect(0, 0, canvas_width, canvas_height);
  426. }
  427. function Rect(x1, y1, w, h, color)
  428. {
  429. var ctx = document.getElementById('canvas').getContext('2d');
  430. ctx.fillStyle = color;
  431. ctx.fillRect(x1, y1, w, h);
  432. }
  433. //--------------------------- FULLSCREEN -------------------------------------
  434. function Enter_fullscreen()
  435. {
  436. if (! $.FullScreen.isFullScreen()) {
  437. $('#enterFullscreen').hide();
  438. $('#exitFullscreen').show();
  439. $('#page_content')
  440. .addClass('content_fullscreen')
  441. .css({'width': screen.width - 5, 'height': screen.height - 5})
  442. .requestFullScreen();
  443. Top_menu_reposition($('#key_Left_Right')[0]);
  444. }
  445. }
  446. function Exit_fullscreen()
  447. {
  448. if ($.FullScreen.isFullScreen()) {
  449. $.FullScreen.cancelFullScreen();
  450. }
  451. }
  452. //------------------------------ SAVE ------------------------------------------
  453. function Save(url) // (del?) no for pdf
  454. {
  455. for (var key in j_tabs) {
  456. document.getElementById('t_x_' + key + '_').value = parseInt(document.getElementById(key).style.left);
  457. document.getElementById('t_y_' + key + '_').value = parseInt(document.getElementById(key).style.top);
  458. document.getElementById('t_v_' + key + '_').value = document.getElementById('id_tbody_' + key).style.display == 'none' ? 0 : 1;
  459. document.getElementById('t_h_' + key + '_').value = document.getElementById('check_vis_' + key).checked ? 1 : 0;
  460. }
  461. document.form1.action = url;
  462. $(document.form1).submit();
  463. }
  464. function Get_url_pos()
  465. {
  466. var poststr = '';
  467. for (var key in j_tabs) {
  468. poststr += '&t_x[' + key + ']=' + parseInt(document.getElementById(key).style.left);
  469. poststr += '&t_y[' + key + ']=' + parseInt(document.getElementById(key).style.top);
  470. poststr += '&t_v[' + key + ']=' + (document.getElementById('id_tbody_' + key).style.display == 'none' ? 0 : 1);
  471. poststr += '&t_h[' + key + ']=' + (document.getElementById('check_vis_' + key).checked ? 1 : 0);
  472. }
  473. return poststr;
  474. }
  475. function Save2()
  476. {
  477. _change = 0;
  478. var poststr = 'IS_AJAX=1&server='+server+'&db=' + db + '&token=' + token + '&die_save_pos=1';
  479. poststr += Get_url_pos();
  480. makeRequest('pmd_save_pos.php', poststr);
  481. }
  482. function Grid()
  483. {
  484. if (!ON_grid) {
  485. ON_grid = 1;
  486. document.getElementById('grid_button').className = 'M_butt_Selected_down';
  487. } else {
  488. document.getElementById('grid_button').className = 'M_butt';
  489. ON_grid = 0;
  490. }
  491. }
  492. function Angular_direct()
  493. {
  494. if (ON_angular_direct) {
  495. ON_angular_direct = 0;
  496. document.getElementById('angular_direct_button').className = 'M_butt_Selected_down';
  497. } else {
  498. ON_angular_direct = 1;
  499. document.getElementById('angular_direct_button').className = 'M_butt';
  500. }
  501. Re_load();
  502. }
  503. //++++++++++++++++++++++++++++++ RELATION ++++++++++++++++++++++++++++++++++++++
  504. function Start_relation()
  505. {
  506. if (ON_display_field) {
  507. return;
  508. }
  509. if (!ON_relation) {
  510. document.getElementById('foreign_relation').style.display = '';
  511. ON_relation = 1;
  512. document.getElementById('pmd_hint').innerHTML = PMA_messages['strSelectReferencedKey'];
  513. document.getElementById('pmd_hint').style.display = 'block';
  514. document.getElementById('rel_button').className = 'M_butt_Selected_down';
  515. } else {
  516. document.getElementById('pmd_hint').innerHTML = "";
  517. document.getElementById('pmd_hint').style.display = 'none';
  518. document.getElementById('rel_button').className = 'M_butt';
  519. click_field = 0;
  520. ON_relation = 0;
  521. }
  522. }
  523. function Click_field(T, f, PK) // table field
  524. {
  525. if (ON_relation) {
  526. if (!click_field) {
  527. //.style.display=='none' .style.display = 'none'
  528. if (!PK) {
  529. alert(PMA_messages['strPleaseSelectPrimaryOrUniqueKey']);
  530. return;// 0;
  531. }//PK
  532. if (j_tabs[db + '.' + T] != '1') {
  533. document.getElementById('foreign_relation').style.display = 'none';
  534. }
  535. click_field = 1;
  536. link_relation = "T1=" + T + "&F1=" + f;
  537. document.getElementById('pmd_hint').innerHTML = PMA_messages['strSelectForeignKey'];
  538. } else {
  539. Start_relation(); // hidden hint...
  540. if (j_tabs[db + '.' + T] != '1' || !PK) {
  541. document.getElementById('foreign_relation').style.display = 'none';
  542. }
  543. var left = Glob_X - (document.getElementById('layer_new_relation').offsetWidth>>1);
  544. document.getElementById('layer_new_relation').style.left = left + 'px';
  545. var top = Glob_Y - document.getElementById('layer_new_relation').offsetHeight;
  546. document.getElementById('layer_new_relation').style.top = top + 'px';
  547. document.getElementById('layer_new_relation').style.display = 'block';
  548. link_relation += '&T2=' + T + '&F2=' + f;
  549. }
  550. }
  551. if (ON_display_field) {
  552. // if is display field
  553. if (display_field[T] == f) {
  554. //alert(T);
  555. //s = '';for(k in display_field)s += k + ' = ' + display_field[k] + ',';alert(s);
  556. old_class = 'tab_field';
  557. //display_field.splice(T, 1);
  558. delete display_field[T];
  559. //s = '';for(k in display_field)s += k + ' = ' + display_field[k] + ', ';alert(s);
  560. //n = 0;for(k in display_field)n++;alert(n);
  561. } else {
  562. old_class = 'tab_field_3';
  563. if (display_field[T]) {
  564. document.getElementById('id_tr_' + T + '.' + display_field[T]).className = 'tab_field';
  565. //display_field.splice(T, 1);
  566. delete display_field[T];
  567. }
  568. display_field[T] = f;
  569. }
  570. ON_display_field = 0;
  571. document.getElementById('pmd_hint').innerHTML = "";
  572. document.getElementById('pmd_hint').style.display = 'none';
  573. document.getElementById('display_field_button').className = 'M_butt';
  574. makeRequest('pmd_display_field.php', 'T=' + T + '&F=' + f + '&server=' + server + '&db=' + db + '&token=' + token);
  575. }
  576. }
  577. function New_relation()
  578. {
  579. document.getElementById('layer_new_relation').style.display = 'none';
  580. link_relation += '&server=' + server + '&db=' + db + '&token=' + token + '&die_save_pos=0';
  581. link_relation += '&on_delete=' + document.getElementById('on_delete').value + '&on_update=' + document.getElementById('on_update').value;
  582. link_relation += Get_url_pos();
  583. //alert(link_relation);
  584. makeRequest('pmd_relation_new.php', link_relation);
  585. }
  586. //-------------------------- create tables -------------------------------------
  587. function Start_table_new()
  588. {
  589. PMA_commonParams.set('table', '');
  590. PMA_commonActions.refreshMain('tbl_create.php');
  591. }
  592. function Start_tab_upd(table)
  593. {
  594. PMA_commonParams.set('table', table);
  595. PMA_commonActions.refreshMain('tbl_structure.php');
  596. }
  597. //--------------------------- hide tables --------------------------------------
  598. function Small_tab_all(id_this) // max/min all tables
  599. {
  600. if (id_this.alt == "v") {
  601. for (var key in j_tabs) {
  602. if (document.getElementById('id_hide_tbody_'+key).innerHTML == "v") {
  603. Small_tab(key, 0);
  604. }
  605. }
  606. id_this.alt = ">";
  607. id_this.src = pmaThemeImage + "pmd/rightarrow1.png";
  608. } else {
  609. for (var key in j_tabs) {
  610. if (document.getElementById('id_hide_tbody_'+key).innerHTML != "v") {
  611. Small_tab(key, 0);
  612. }
  613. }
  614. id_this.alt = "v";
  615. id_this.src = pmaThemeImage + "pmd/downarrow1.png";
  616. }
  617. Re_load();
  618. }
  619. function Small_tab_invert() // invert max/min all tables
  620. {
  621. for (var key in j_tabs) {
  622. Small_tab(key, 0);
  623. }
  624. Re_load();
  625. }
  626. function Relation_lines_invert()
  627. {
  628. show_relation_lines = ! show_relation_lines;
  629. Re_load();
  630. }
  631. function Small_tab_refresh()
  632. {
  633. for (var key in j_tabs) {
  634. if(document.getElementById('id_hide_tbody_'+key).innerHTML != "v") {
  635. Small_tab(key, 0);
  636. Small_tab(key, 0);
  637. }
  638. }
  639. }
  640. function Small_tab(t, re_load)
  641. {
  642. var id = document.getElementById('id_tbody_' + t);
  643. var id_this = document.getElementById('id_hide_tbody_' + t);
  644. var id_t = document.getElementById(t);
  645. id_t.style.width = id_t.offsetWidth + 'px';
  646. if (id_this.innerHTML == "v") {
  647. //---CROSS
  648. id.style.display = 'none';
  649. id_this.innerHTML = '>';
  650. } else {
  651. id.style.display = '';
  652. id_this.innerHTML = 'v';
  653. }
  654. if (re_load) {
  655. Re_load();
  656. }
  657. }
  658. //------------------------------------------------------------------------------
  659. function Select_tab(t)
  660. {
  661. var id_zag = document.getElementById('id_zag_' + t);
  662. if (id_zag.className != 'tab_zag_3') {
  663. document.getElementById('id_zag_' + t).className = 'tab_zag_2';
  664. } else {
  665. document.getElementById('id_zag_' + t).className = 'tab_zag';
  666. }
  667. //----------
  668. var id_t = document.getElementById(t);
  669. window.scrollTo(parseInt(id_t.style.left) - 300, parseInt(id_t.style.top) - 300);
  670. setTimeout(function(){document.getElementById('id_zag_' + t).className = 'tab_zag';}, 800);
  671. }
  672. //------------------------------------------------------------------------------
  673. function Canvas_click(id)
  674. {
  675. var n = 0;
  676. var relation_name = 0;
  677. var selected = 0;
  678. var a = [];
  679. var Key0, Key1, Key2, Key3, Key, x1, x2;
  680. var K, key, key2, key3;
  681. var Local_X = $.FullScreen.isFullScreen() ? Glob_X : Glob_X - document.getElementById("canvas_outer").offsetLeft;
  682. var Local_Y = Glob_Y - document.getElementById("canvas_outer").offsetTop;
  683. Clear();
  684. for (K in contr) {
  685. for (key in contr[K]) {
  686. for (key2 in contr[K][key]) {
  687. for (key3 in contr[K][key][key2]) {
  688. if (!document.getElementById("check_vis_"+key2).checked
  689. || !document.getElementById("check_vis_"+contr[K][key][key2][key3][0]).checked) {
  690. continue; // if hide
  691. }
  692. var x1_left = document.getElementById(key2).offsetLeft + 1;//document.getElementById(key2+"."+key3).offsetLeft;
  693. var x1_right = x1_left + document.getElementById(key2).offsetWidth;
  694. var x2_left = document.getElementById(contr[K][key][key2][key3][0]).offsetLeft;//+document.getElementById(contr[K][key2][key3][0]+"."+contr[K][key2][key3][1]).offsetLeft
  695. var x2_right = x2_left + document.getElementById(contr[K][key][key2][key3][0]).offsetWidth;
  696. a[0] = Math.abs(x1_left - x2_left);
  697. a[1] = Math.abs(x1_left - x2_right);
  698. a[2] = Math.abs(x1_right - x2_left);
  699. a[3] = Math.abs(x1_right - x2_right);
  700. n = s_left = s_right = 0;
  701. for (var i = 1; i < 4; i++) {
  702. if (a[n] > a[i]) {
  703. n = i;
  704. }
  705. }
  706. if (n == 1) {
  707. x1 = x1_left - sm_s;
  708. x2 = x2_right + sm_s;
  709. if (x1 < x2) {
  710. n = 0;
  711. }
  712. }
  713. if (n == 2) {
  714. x1 = x1_right + sm_s;
  715. x2 = x2_left - sm_s;
  716. if (x1 > x2) {
  717. n = 0;
  718. }
  719. }
  720. if (n == 3) {
  721. x1 = x1_right + sm_s;
  722. x2 = x2_right + sm_s;
  723. s_right = 1;
  724. }
  725. if (n == 0) {
  726. x1 = x1_left - sm_s;
  727. x2 = x2_left - sm_s;
  728. s_left = 1;
  729. }
  730. var y1 = document.getElementById(key2).offsetTop + document.getElementById(key2+"."+key3).offsetTop + height_field;
  731. var y2 = document.getElementById(contr[K][key][key2][key3][0]).offsetTop +
  732. document.getElementById(contr[K][key][key2][key3][0]+"."+contr[K][key][key2][key3][1]).offsetTop + height_field;
  733. if (!selected && Local_X > x1 - 10 && Local_X < x1 + 10 && Local_Y > y1 - 7 && Local_Y < y1 + 7) {
  734. Line0(x1 - sm_x, y1 - sm_y, x2 - sm_x, y2 - sm_y, "rgba(255,0,0,1)");
  735. selected = 1; // Rect(x1-sm_x,y1-sm_y,10,10,"rgba(0,255,0,1)");
  736. relation_name = key; //
  737. Key0 = contr[K][key][key2][key3][0];
  738. Key1 = contr[K][key][key2][key3][1];
  739. Key2 = key2; Key3 = key3;
  740. Key = K;
  741. } else {
  742. Line0(x1 - sm_x, y1 - sm_y, x2 - sm_x, y2 - sm_y, getColorByTarget( contr[K][key][key2][key3][0]+'.'+contr[K][key][key2][key3][1] ));
  743. }
  744. }
  745. }
  746. }
  747. }
  748. if (selected) {
  749. // select relations
  750. //alert(Key0+' - '+Key1+' - '+Key2+' - '+Key3);
  751. var left = Glob_X - (document.getElementById('layer_upd_relation').offsetWidth>>1);
  752. document.getElementById('layer_upd_relation').style.left = left + 'px';
  753. var top = Glob_Y - document.getElementById('layer_upd_relation').offsetHeight - 10;
  754. document.getElementById('layer_upd_relation').style.top = top + 'px';
  755. document.getElementById('layer_upd_relation').style.display = 'block';
  756. link_relation = 'T1=' + Key0 + '&F1=' + Key1 + '&T2=' + Key2 + '&F2=' + Key3 + '&K=' + Key;
  757. }
  758. }
  759. function Upd_relation()
  760. {
  761. document.getElementById('layer_upd_relation').style.display = 'none';
  762. link_relation += '&server=' + server + '&db=' + db + '&token=' + token + '&die_save_pos=0';
  763. link_relation += Get_url_pos();
  764. makeRequest('pmd_relation_upd.php', link_relation);
  765. }
  766. function VisibleTab(id, t_n)
  767. {
  768. if (id.checked) {
  769. document.getElementById(t_n).style.display = 'block';
  770. } else {
  771. document.getElementById(t_n).style.display = 'none';
  772. }
  773. Re_load();
  774. }
  775. function Hide_tab_all(id_this) // max/min all tables
  776. {
  777. if (id_this.alt == 'v') {
  778. id_this.alt = '>';
  779. id_this.src = pmaThemeImage + "pmd/rightarrow1.png";
  780. } else {
  781. id_this.alt = 'v';
  782. id_this.src = pmaThemeImage + "pmd/downarrow1.png";
  783. }
  784. var E = document.form1;
  785. for (var i = 0; i < E.elements.length; i++) {
  786. if (E.elements[i].type == "checkbox" && E.elements[i].id.substring(0, 10) == 'check_vis_') {
  787. if (id_this.alt == 'v') {
  788. E.elements[i].checked = true;
  789. document.getElementById(E.elements[i].value).style.display = '';
  790. } else {
  791. E.elements[i].checked = false;
  792. document.getElementById(E.elements[i].value).style.display = 'none';
  793. }
  794. }
  795. }
  796. Re_load();
  797. }
  798. function in_array_k(x, m)
  799. {
  800. var b = 0;
  801. for (var u in m) {
  802. if (x == u) {
  803. b=1;
  804. break;
  805. }
  806. }
  807. return b;
  808. }
  809. function No_have_constr(id_this)
  810. {
  811. var a = [];
  812. var K, key, key2, key3;
  813. for (K in contr) {
  814. for (key in contr[K]) {
  815. // contr name
  816. for (key2 in contr[K][key]) {
  817. // table name
  818. for (key3 in contr[K][key][key2]) {
  819. // field name
  820. a[key2] = a[contr[K][key][key2][key3][0]] = 1; // exist constr
  821. }
  822. }
  823. }
  824. }
  825. if (id_this.alt == 'v') {
  826. id_this.alt = '>';
  827. id_this.src = pmaThemeImage + "pmd/rightarrow2.png";
  828. } else {
  829. id_this.alt = 'v';
  830. id_this.src = pmaThemeImage + "pmd/downarrow2.png";
  831. }
  832. var E = document.form1;
  833. for (var i = 0; i < E.elements.length; i++) {
  834. if (E.elements[i].type == "checkbox" && E.elements[i].id.substring(0, 10) == 'check_vis_') {
  835. if (!in_array_k(E.elements[i].value, a)) {
  836. if (id_this.alt == 'v') {
  837. E.elements[i].checked = true;
  838. document.getElementById(E.elements[i].value).style.display = '';
  839. } else {
  840. E.elements[i].checked = false;
  841. document.getElementById(E.elements[i].value).style.display = 'none';
  842. }
  843. }
  844. }
  845. }
  846. }
  847. function PDF_save()
  848. {
  849. // var WinPDF =
  850. // window.open("pmd_pdf.php?token="+token+"&db="+db,"wind1", "top=200,left=200,width=200,height=100,resizable=yes,scrollbars=yes,menubar=no");
  851. Save('pmd_pdf.php?server=' + server + '&token=' + token + '&db=' + db);
  852. }
  853. function General_scroll()
  854. {
  855. /*
  856. if (!document.getElementById('show_relation_olways').checked) {
  857. document.getElementById("canvas").style.display = 'none';
  858. clearTimeout(timeoutID);
  859. timeoutID = setTimeout(General_scroll_end, 500);
  860. }
  861. */
  862. //if (timeoutID)
  863. clearTimeout(timeoutID);
  864. timeoutID = setTimeout
  865. (
  866. function()
  867. {
  868. document.getElementById('top_menu').style.left = document.body.scrollLeft + 'px';
  869. document.getElementById('top_menu').style.top = document.body.scrollTop + 'px';
  870. }
  871. ,200
  872. );
  873. }
  874. /*
  875. function General_scroll_end()
  876. {
  877. document.getElementById('layer_menu').style.left = document.body.scrollLeft;
  878. document.getElementById('layer_menu').style.top = document.body.scrollTop + document.getElementById('top_menu').offsetHeight;
  879. if (isIE) {
  880. document.getElementById('layer_menu').style.left = document.body.scrollLeft;
  881. document.getElementById('layer_menu').style.top = document.body.scrollTop + document.getElementById('top_menu').offsetHeight;
  882. }
  883. document.getElementById("canvas").style.display = 'block';
  884. }
  885. */
  886. function Show_left_menu(id_this) // max/min all tables
  887. {
  888. if (id_this.alt == "v") {
  889. var pos = $("#top_menu").offset();
  890. var height = $("#top_menu").height();
  891. document.getElementById("layer_menu").style.top = '0px';
  892. document.getElementById("layer_menu").style.display = 'block';
  893. id_this.alt = ">";
  894. id_this.src = pmaThemeImage + "pmd/uparrow2_m.png";
  895. if (isIE) {
  896. General_scroll();
  897. }
  898. } else {
  899. document.getElementById("layer_menu").style.top = -1000 + 'px'; //fast scroll
  900. document.getElementById("layer_menu").style.display = 'none';
  901. id_this.alt = "v";
  902. id_this.src = pmaThemeImage + "pmd/downarrow2_m.png";
  903. }
  904. }
  905. //------------------------------------------------------------------------------
  906. function Top_menu_right(id_this)
  907. {
  908. if (id_this.alt == ">") {
  909. moveTopMenuToRight(id_this);
  910. id_this.alt = "<";
  911. id_this.src = pmaThemeImage + "pmd/2leftarrow_m.png";
  912. } else {
  913. document.getElementById('top_menu').style.paddingLeft = 0;
  914. id_this.alt = ">";
  915. id_this.src = pmaThemeImage + "pmd/2rightarrow_m.png";
  916. }
  917. }
  918. function Top_menu_reposition(id_this)
  919. {
  920. if (id_this.alt == "<") {
  921. moveTopMenuToRight(id_this);
  922. }
  923. }
  924. function moveTopMenuToRight(id_this)
  925. {
  926. var top_menu_width = 10;
  927. $('#top_menu').children().each(function () {
  928. top_menu_width += $(this).outerWidth(true);
  929. });
  930. var offset = parseInt(document.getElementById('canvas_outer').offsetWidth - top_menu_width, 10);
  931. document.getElementById('top_menu').style.paddingLeft = offset + 'px';
  932. }
  933. //------------------------------------------------------------------------------
  934. function Start_display_field()
  935. {
  936. if (ON_relation) {
  937. return;
  938. }
  939. if (!ON_display_field) {
  940. ON_display_field = 1;
  941. document.getElementById('pmd_hint').innerHTML = PMA_messages['strChangeDisplay'];
  942. document.getElementById('pmd_hint').style.display = 'block';
  943. document.getElementById('display_field_button').className = 'M_butt_Selected_down';//'#FFEE99';gray #AAAAAA
  944. if (isIE) { // correct for IE
  945. document.getElementById('display_field_button').className = 'M_butt_Selected_down_IE';
  946. }
  947. } else {
  948. document.getElementById('pmd_hint').innerHTML = "";
  949. document.getElementById('pmd_hint').style.display = 'none';
  950. document.getElementById('display_field_button').className = 'M_butt';
  951. ON_display_field = 0;
  952. }
  953. }
  954. //------------------------------------------------------------------------------
  955. var TargetColors = [];
  956. function getColorByTarget( target )
  957. {
  958. var color = ''; //"rgba(0,100,150,1)";
  959. for (var i in TargetColors) {
  960. if (TargetColors[i][0]==target) {
  961. color = TargetColors[i][1];
  962. break;
  963. }
  964. }
  965. if (color.length==0) {
  966. var i = TargetColors.length+1;
  967. var d = i % 6;
  968. var j = (i - d) / 6;
  969. j = j % 4;
  970. j++;
  971. var color_case = new Array(
  972. new Array(1, 0, 0),
  973. new Array(0, 1, 0),
  974. new Array(0, 0, 1),
  975. new Array(1, 1, 0),
  976. new Array(1, 0, 1),
  977. new Array(0, 1, 1)
  978. );
  979. var a = color_case[d][0];
  980. var b = color_case[d][1];
  981. var c = color_case[d][2];
  982. var e = (1 - (j - 1) / 6);
  983. var r = Math.round(a * 200 * e);
  984. var g = Math.round(b * 200 * e);
  985. var b = Math.round(c * 200 * e);
  986. var color = "rgba("+r+","+g+","+b+",1)";
  987. TargetColors.push( new Array(target, color) );
  988. }
  989. return color;
  990. }
  991. function Click_option(id_this,column_name,table_name)
  992. {
  993. var left = Glob_X - (document.getElementById(id_this).offsetWidth>>1);
  994. document.getElementById(id_this).style.left = left + 'px';
  995. // var top = Glob_Y - document.getElementById(id_this).offsetHeight - 10;
  996. document.getElementById(id_this).style.top = (screen.height / 4) + 'px';
  997. document.getElementById(id_this).style.display = 'block';
  998. document.getElementById('option_col_name').innerHTML = '<strong>' + PMA_messages['strAddOption'] +'"' +column_name+ '"</strong>';
  999. col_name = column_name;
  1000. tab_name = table_name;
  1001. }
  1002. function Close_option()
  1003. {
  1004. document.getElementById('pmd_optionse').style.display = 'none';
  1005. }
  1006. function Select_all(id_this,owner)
  1007. {
  1008. var parent= document.form1;
  1009. downer =owner;
  1010. var i;
  1011. var k;
  1012. var tab = [];
  1013. for (i = 0; i < parent.elements.length; i++) {
  1014. if (parent.elements[i].type == "checkbox" && parent.elements[i].id.substring(0,(9 + id_this.length)) == 'select_' + id_this + '._') {
  1015. if(document.getElementById('select_all_' + id_this).checked == true) {
  1016. parent.elements[i].checked = true;
  1017. parent.elements[i].disabled = true;
  1018. var temp = '`' + id_this.substring(owner.length +1) + '`.*';
  1019. }
  1020. else {
  1021. parent.elements[i].checked = false;
  1022. parent.elements[i].disabled = false;
  1023. }
  1024. }
  1025. }
  1026. if (document.getElementById('select_all_' + id_this).checked == true) {
  1027. select_field.push('`' + id_this.substring(owner.length +1) + '`.*');
  1028. tab = id_this.split(".");
  1029. from_array.push(tab[1]);
  1030. }
  1031. else {
  1032. for (i =0; i < select_field.length; i++) {
  1033. if (select_field[i] == ('`' + id_this.substring(owner.length +1) + '`.*')) {
  1034. select_field.splice(i,1);
  1035. }
  1036. }
  1037. for (k =0 ;k < from_array.length; k++){
  1038. if (from_array[k] == id_this){
  1039. from_array.splice(k,1);
  1040. break;
  1041. }
  1042. }
  1043. }
  1044. Re_load();
  1045. }
  1046. function Table_onover(id_this,val,buil)
  1047. {
  1048. if(!val) {
  1049. document.getElementById("id_zag_" + id_this).className="tab_zag_2";
  1050. if(buil) {
  1051. document.getElementById("id_zag_" + id_this + "_2").className="tab_zag_2";
  1052. }
  1053. }
  1054. else {
  1055. document.getElementById("id_zag_" + id_this).className="tab_zag";
  1056. if(buil) {
  1057. document.getElementById("id_zag_" + id_this + "_2").className="tab_zag";
  1058. }
  1059. }
  1060. }
  1061. /* This function stores selected column information in select_field[]
  1062. * In case column is checked it add else it deletes
  1063. *
  1064. */
  1065. function store_column(id_this,owner,col)
  1066. {
  1067. var i;
  1068. var k;
  1069. if (document.getElementById('select_' + owner + '.' + id_this + '._' + col).checked == true) {
  1070. select_field.push('`' + id_this + '`.`' + col +'`');
  1071. from_array.push(id_this);
  1072. }
  1073. else {
  1074. for (i = 0; i < select_field.length ;i++) {
  1075. if (select_field[i] == ('`' + id_this + '`.`' + col +'`')) {
  1076. select_field.splice(i,1);
  1077. break;
  1078. }
  1079. }
  1080. for (k = 0 ;k < from_array.length;k++){
  1081. if(from_array[k] == id_this){
  1082. from_array.splice(k,1);
  1083. break;
  1084. }
  1085. }
  1086. }
  1087. }
  1088. /**
  1089. * This function builds object and adds them to history_array
  1090. * first it does a few checks on each object, then makes an object(where,rename,groupby,aggregate,orderby)
  1091. * then a new history object is made and finally all these history objects are addded to history_array[]
  1092. *
  1093. **/
  1094. function add_object()
  1095. {
  1096. var rel = document.getElementById('rel_opt');
  1097. var sum = 0;
  1098. var init = history_array.length;
  1099. if (rel.value != '--') {
  1100. if (document.getElementById('Query').value == "") {
  1101. document.getElementById('pmd_hint').innerHTML = "value/subQuery is empty" ;
  1102. document.getElementById('pmd_hint').style.display = 'block';
  1103. return;
  1104. }
  1105. var p = document.getElementById('Query');
  1106. var where_obj = new where(rel.value,p.value);//make where object
  1107. history_array.push(new history(col_name,where_obj,tab_name,h_tabs[downer + '.' + tab_name],"Where"));
  1108. sum = sum + 1;
  1109. rel.value = '--';
  1110. p.value = "";
  1111. }
  1112. if (document.getElementById('new_name').value !="") {
  1113. var rename_obj = new rename(document.getElementById('new_name').value);//make Rename object
  1114. history_array.push(new history(col_name,rename_obj,tab_name,h_tabs[downer + '.' + tab_name],"Rename"));
  1115. sum = sum + 1;
  1116. document.getElementById('new_name').value = "" ;
  1117. }
  1118. if (document.getElementById('operator').value != '---') {
  1119. var aggregate_obj = new aggregate(document.getElementById('operator').value) ;
  1120. history_array.push(new history(col_name,aggregate_obj,tab_name,h_tabs[downer + '.' + tab_name],"Aggregate"));
  1121. sum = sum + 1;
  1122. document.getElementById('operator').value = '---';
  1123. //make aggregate operator
  1124. }
  1125. if (document.getElementById('groupby').checked == true ) {
  1126. history_array.push(new history(col_name,'GroupBy',tab_name,h_tabs[downer + '.' +tab_name],"GroupBy"));
  1127. sum = sum + 1;
  1128. document.getElementById('groupby').checked = false;
  1129. //make groupby
  1130. }
  1131. if (document.getElementById('h_rel_opt').value != '--') {
  1132. if (document.getElementById('having').value == "") {
  1133. document.getElementById('pmd_hint').innerHTML = "value/subQuery is empty" ;
  1134. document.getElementById('pmd_hint').style.display = 'block';
  1135. return;
  1136. }
  1137. var p = document.getElementById('having');
  1138. var where_obj = new having(document.getElementById('h_rel_opt').value,p.value,document.getElementById('h_operator').value);//make where object
  1139. history_array.push(new history(col_name,where_obj,tab_name,h_tabs[downer + '.' + tab_name],"Having"));
  1140. sum = sum + 1;
  1141. document.getElementById('h_rel_opt').value = '--';
  1142. document.getElementById('h_operator').value = '---';
  1143. p.value = ""; //make having
  1144. }
  1145. if (document.getElementById('orderby').checked == true) {
  1146. history_array.push(new history(col_name,'OrderBy',tab_name,h_tabs[downer + '.' + tab_name],"OrderBy"));
  1147. sum = sum + 1;
  1148. document.getElementById('orderby').checked = false;
  1149. //make orderby
  1150. }
  1151. PMA_ajaxShowMessage($.sprintf(PMA_messages['strObjectsCreated'], sum));
  1152. //output sum new objects created
  1153. var existingDiv = document.getElementById('ab');
  1154. existingDiv.innerHTML = display(init,history_array.length);
  1155. Close_option();
  1156. panel(0);
  1157. }