move.js 73 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110
  1. /* vim: set expandtab sw=4 ts=4 sts=4: */
  2. /**
  3. * @package PhpMyAdmin-Designer
  4. */
  5. var _change = 0; // variable to track any change in designer layout.
  6. var _staying = 0; // variable to check if the user stayed after seeing the confirmation prompt.
  7. var show_relation_lines = true;
  8. var always_show_text = false;
  9. AJAX.registerTeardown('designer/move.js', function () {
  10. $(document).off('fullscreenchange');
  11. $('#selflink').show();
  12. });
  13. AJAX.registerOnload('designer/move.js', function () {
  14. $('#page_content').css({ 'margin-left': '3px' });
  15. $(document).on('fullscreenchange', function () {
  16. if (! $.fn.fullScreen()) {
  17. $('#page_content').removeClass('content_fullscreen')
  18. .css({ 'width': 'auto', 'height': 'auto' });
  19. var $img = $('#toggleFullscreen').find('img');
  20. var $span = $img.siblings('span');
  21. $span.text($span.data('enter'));
  22. $img.attr('src', $img.data('enter'))
  23. .attr('title', $span.data('enter'));
  24. }
  25. });
  26. $('#selflink').hide();
  27. });
  28. function make_zero () { // Function called if the user stays after seeing the confirmation prompt.
  29. _staying = 0;
  30. }
  31. function MarkSaved () {
  32. _change = 0;
  33. $('#saved_state').text('');
  34. }
  35. function MarkUnsaved () {
  36. _change = 1;
  37. $('#saved_state').text('*');
  38. }
  39. var dx;
  40. var dy;
  41. var dy2;
  42. var cur_click = null;
  43. // update in Main()
  44. var sm_x = 2;
  45. var sm_y = 2;
  46. var sm_s = 0;
  47. var sm_add = 10;
  48. var s_left = 0;
  49. var s_right = 0;
  50. var ON_relation = 0;
  51. var ON_grid = 0;
  52. var ON_display_field = 0;
  53. // relation_style: 0 - angular 1 - direct
  54. var ON_angular_direct = 1;
  55. var click_field = 0;
  56. var link_relation = '';
  57. var id_hint;
  58. var canvas_width = 0;
  59. var canvas_height = 0;
  60. var osn_tab_width = 0;
  61. var osn_tab_height = 0;
  62. var height_field = 7;
  63. var Glob_X;
  64. var Glob_Y;
  65. var timeoutID;
  66. var layer_menu_cur_click = 0;
  67. var step = 10;
  68. var old_class;
  69. var from_array = [];
  70. var downer;
  71. var menu_moved = false;
  72. var grid_size = 10;
  73. // ------------------------------------------------------------------------------
  74. // ------------------------------------------------------------------------------
  75. // ------------------------------------------------------------------------------
  76. // window.captureEvents(Event.MOUSEDOWN | Event.MOUSEUP);
  77. // ---CROSS
  78. document.onmousedown = MouseDown;
  79. document.onmouseup = MouseUp;
  80. document.onmousemove = MouseMove;
  81. var isIE = document.all && !window.opera;
  82. if (isIE) {
  83. window.onscroll = General_scroll;
  84. document.onselectstart = function () {
  85. return false;
  86. };
  87. }
  88. // document.onmouseup = function (){General_scroll_end();}
  89. function MouseDown (e) {
  90. Glob_X = dx = isIE ? e.clientX + document.body.scrollLeft : e.pageX;
  91. Glob_Y = dy = isIE ? e.clientY + document.body.scrollTop : e.pageY;
  92. if (e.target.tagName === 'SPAN') {
  93. cur_click = e.target.parentNode.parentNode.parentNode.parentNode;
  94. } else if (e.target.className === 'tab_zag_2') {
  95. cur_click = e.target.parentNode.parentNode.parentNode;
  96. } else if (e.target.className === 'icon') {
  97. layer_menu_cur_click = 1;
  98. } else if (e.target.className === 'M_butt') {
  99. return false;
  100. }
  101. if (cur_click !== null) {
  102. document.getElementById('canvas').style.display = 'none';
  103. cur_click.style.zIndex = 2;
  104. }
  105. }
  106. function MouseMove (e) {
  107. if (e.preventDefault) {
  108. e.preventDefault();
  109. }
  110. var new_dx = isIE ? e.clientX + document.body.scrollLeft : e.pageX;
  111. var new_dy = isIE ? e.clientY + document.body.scrollTop : e.pageY;
  112. var delta_x = Glob_X - new_dx;
  113. var delta_y = Glob_Y - new_dy;
  114. Glob_X = new_dx;
  115. Glob_Y = new_dy;
  116. if (cur_click !== null) {
  117. MarkUnsaved();
  118. var $cur_click = $(cur_click);
  119. var cur_x = parseFloat($cur_click.attr('data-left') || $cur_click.css('left'));
  120. var cur_y = parseFloat($cur_click.attr('data-top') || $cur_click.css('top'));
  121. var new_x = cur_x - delta_x;
  122. var new_y = cur_y - delta_y;
  123. dx = new_dx;
  124. dy = new_dy;
  125. $cur_click.attr('data-left', new_x);
  126. $cur_click.attr('data-top', new_y);
  127. if (ON_grid) {
  128. new_x = parseInt(new_x / grid_size) * grid_size;
  129. new_y = parseInt(new_y / grid_size) * grid_size;
  130. }
  131. $cur_click.css('left', new_x + 'px');
  132. $cur_click.css('top', new_y + 'px');
  133. } else if (layer_menu_cur_click) {
  134. dx = new_dx;
  135. dy = new_dy;
  136. if (menu_moved) {
  137. delta_x = -delta_x;
  138. }
  139. var $layer_menu = $('#layer_menu');
  140. var new_width = $layer_menu.width() + delta_x;
  141. if (new_width < 150) {
  142. new_width = 150;
  143. } else {
  144. dx = e.pageX;
  145. }
  146. $layer_menu.width(new_width);
  147. }
  148. if (ON_relation || ON_display_field) {
  149. document.getElementById('designer_hint').style.left = (Glob_X + 20) + 'px';
  150. document.getElementById('designer_hint').style.top = (Glob_Y + 20) + 'px';
  151. }
  152. }
  153. function MouseUp (e) {
  154. if (cur_click !== null) {
  155. document.getElementById('canvas').style.display = 'inline-block';
  156. Re_load();
  157. cur_click.style.zIndex = 1;
  158. cur_click = null;
  159. }
  160. layer_menu_cur_click = 0;
  161. // window.releaseEvents(Event.MOUSEMOVE);
  162. }
  163. // ------------------------------------------------------------------------------
  164. // ------------------------------------------------------------------------------
  165. // ------------------------------------------------------------------------------
  166. // function ToInt(s)
  167. // {
  168. // return s.substring(0,s.length-2)*1; //re = /(\d+)\w*/; newstr = str.replace(re, "$1");
  169. // }
  170. function Canvas_pos () {
  171. canvas_width = document.getElementById('canvas').width = osn_tab_width - 3;
  172. canvas_height = document.getElementById('canvas').height = osn_tab_height - 3;
  173. if (isIE) {
  174. document.getElementById('canvas').style.width = ((osn_tab_width - 3) ? (osn_tab_width - 3) : 0) + 'px';
  175. document.getElementById('canvas').style.height = ((osn_tab_height - 3) ? (osn_tab_height - 3) : 0) + 'px';
  176. }
  177. }
  178. function Osn_tab_pos () {
  179. osn_tab_width = parseInt(document.getElementById('osn_tab').style.width, 10);
  180. osn_tab_height = parseInt(document.getElementById('osn_tab').style.height, 10);
  181. }
  182. function setDefaultValuesFromSavedState () {
  183. if ($('#angular_direct_button').attr('class') === 'M_butt') {
  184. ON_angular_direct = 0;
  185. } else {
  186. ON_angular_direct = 1;
  187. }
  188. Angular_direct();
  189. if ($('#grid_button').attr('class') === 'M_butt') {
  190. ON_grid = 1;
  191. } else {
  192. ON_grid = 0;
  193. }
  194. Grid();
  195. var $relLineInvert = $('#relLineInvert');
  196. if ($relLineInvert.attr('class') === 'M_butt') {
  197. show_relation_lines = false;
  198. $relLineInvert.attr('class', 'M_butt');
  199. } else {
  200. show_relation_lines = true;
  201. $relLineInvert.attr('class', 'M_butt_Selected_down');
  202. }
  203. Relation_lines_invert();
  204. if ($('#pin_Text').attr('class') === 'M_butt_Selected_down') {
  205. always_show_text = true;
  206. Show_text();
  207. } else {
  208. always_show_text = false;
  209. }
  210. var $key_SB_all = $('#key_SB_all');
  211. if ($key_SB_all.attr('class') === 'M_butt_Selected_down') {
  212. $key_SB_all.click();
  213. $key_SB_all.toggleClass('M_butt_Selected_down');
  214. $key_SB_all.toggleClass('M_butt');
  215. }
  216. var $key_Left_Right = $('#key_Left_Right');
  217. if ($key_Left_Right.attr('class') === 'M_butt_Selected_down') {
  218. $key_Left_Right.click();
  219. }
  220. }
  221. function Main () {
  222. // ---CROSS
  223. document.getElementById('layer_menu').style.top = -1000 + 'px'; // fast scroll
  224. // sm_x += document.getElementById('osn_tab').offsetLeft;
  225. // sm_y += document.getElementById('osn_tab').offsetTop;
  226. Osn_tab_pos();
  227. Canvas_pos();
  228. Small_tab_refresh();
  229. Re_load();
  230. setDefaultValuesFromSavedState();
  231. id_hint = document.getElementById('designer_hint');
  232. if (isIE) {
  233. General_scroll();
  234. }
  235. }
  236. // -------------------------------- new -----------------------------------------
  237. function Rezize_osn_tab () {
  238. var max_X = 0;
  239. var max_Y = 0;
  240. for (var key in j_tabs) {
  241. var k_x = parseInt(document.getElementById(key).style.left, 10) + document.getElementById(key).offsetWidth;
  242. var k_y = parseInt(document.getElementById(key).style.top, 10) + document.getElementById(key).offsetHeight;
  243. max_X = max_X < k_x ? k_x : max_X;
  244. max_Y = max_Y < k_y ? k_y : max_Y;
  245. }
  246. osn_tab_width = max_X + 50;
  247. osn_tab_height = max_Y + 50;
  248. Canvas_pos();
  249. document.getElementById('osn_tab').style.width = osn_tab_width + 'px';
  250. document.getElementById('osn_tab').style.height = osn_tab_height + 'px';
  251. }
  252. // ------------------------------------------------------------------------------
  253. /**
  254. * refreshes display, must be called after state changes
  255. */
  256. function Re_load () {
  257. Rezize_osn_tab();
  258. var n;
  259. var x1;
  260. var x2;
  261. var a = [];
  262. var K;
  263. var key;
  264. var key2;
  265. var key3;
  266. Clear();
  267. for (K in contr) {
  268. for (key in contr[K]) {
  269. // contr name
  270. for (key2 in contr[K][key]) {
  271. // table name
  272. for (key3 in contr[K][key][key2]) {
  273. // field name
  274. if (!document.getElementById('check_vis_' + key2).checked ||
  275. !document.getElementById('check_vis_' + contr[K][key][key2][key3][0]).checked) {
  276. // if hide
  277. continue;
  278. }
  279. var x1_left = document.getElementById(key2).offsetLeft + 1;
  280. var x1_right = x1_left + document.getElementById(key2).offsetWidth;
  281. var x2_left = document.getElementById(contr[K][key][key2][key3][0]).offsetLeft;
  282. var x2_right = x2_left + document.getElementById(contr[K][key][key2][key3][0]).offsetWidth;
  283. a[0] = Math.abs(x1_left - x2_left);
  284. a[1] = Math.abs(x1_left - x2_right);
  285. a[2] = Math.abs(x1_right - x2_left);
  286. a[3] = Math.abs(x1_right - x2_right);
  287. n = s_left = s_right = 0;
  288. for (var i = 1; i < 4; i++) {
  289. if (a[n] > a[i]) {
  290. n = i;
  291. }
  292. }
  293. if (n === 1) {
  294. x1 = x1_left - sm_s;
  295. x2 = x2_right + sm_s;
  296. if (x1 < x2) {
  297. n = 0;
  298. }
  299. }
  300. if (n === 2) {
  301. x1 = x1_right + sm_s;
  302. x2 = x2_left - sm_s;
  303. if (x1 > x2) {
  304. n = 0;
  305. }
  306. }
  307. if (n === 3) {
  308. x1 = x1_right + sm_s;
  309. x2 = x2_right + sm_s;
  310. s_right = 1;
  311. }
  312. if (n === 0) {
  313. x1 = x1_left - sm_s;
  314. x2 = x2_left - sm_s;
  315. s_left = 1;
  316. }
  317. var row_offset_top = 0;
  318. var tab_hide_button = document.getElementById('id_hide_tbody_' + key2);
  319. if (tab_hide_button.innerHTML === 'v') {
  320. var fromColumn = document.getElementById(key2 + '.' + key3);
  321. if (fromColumn) {
  322. row_offset_top = fromColumn.offsetTop;
  323. } else {
  324. continue;
  325. }
  326. }
  327. var y1 = document.getElementById(key2).offsetTop +
  328. row_offset_top +
  329. height_field;
  330. row_offset_top = 0;
  331. tab_hide_button = document.getElementById('id_hide_tbody_' + contr[K][key][key2][key3][0]);
  332. if (tab_hide_button.innerHTML === 'v') {
  333. var toColumn = document.getElementById(contr[K][key][key2][key3][0] +
  334. '.' + contr[K][key][key2][key3][1]);
  335. if (toColumn) {
  336. row_offset_top = toColumn.offsetTop;
  337. } else {
  338. continue;
  339. }
  340. }
  341. var y2 =
  342. document.getElementById(contr[K][key][key2][key3][0]).offsetTop +
  343. row_offset_top +
  344. height_field;
  345. var osn_tab = document.getElementById('osn_tab');
  346. Line0(
  347. x1 + osn_tab.offsetLeft,
  348. y1 - osn_tab.offsetTop,
  349. x2 + osn_tab.offsetLeft,
  350. y2 - osn_tab.offsetTop,
  351. getColorByTarget(contr[K][key][key2][key3][0] + '.' + contr[K][key][key2][key3][1])
  352. );
  353. }
  354. }
  355. }
  356. }
  357. }
  358. /**
  359. * draws a line from x1:y1 to x2:y2 with color
  360. */
  361. function Line (x1, y1, x2, y2, color_line) {
  362. var canvas = document.getElementById('canvas');
  363. var ctx = canvas.getContext('2d');
  364. ctx.strokeStyle = color_line;
  365. ctx.lineWidth = 1;
  366. ctx.beginPath();
  367. ctx.moveTo(x1, y1);
  368. ctx.lineTo(x2, y2);
  369. ctx.stroke();
  370. }
  371. /**
  372. * draws a relation/constraint line, whether angular or not
  373. */
  374. function Line0 (x1, y1, x2, y2, color_line) {
  375. if (! show_relation_lines) {
  376. return;
  377. }
  378. Circle(x1, y1, 3, 3, color_line);
  379. Rect(x2 - 1, y2 - 2, 4, 4, color_line);
  380. if (ON_angular_direct) {
  381. Line2(x1, y1, x2, y2, color_line);
  382. } else {
  383. Line3(x1, y1, x2, y2, color_line);
  384. }
  385. }
  386. /**
  387. * draws a angular relation/constraint line
  388. */
  389. function Line2 (x1, y1, x2, y2, color_line) {
  390. var x1_ = x1;
  391. var x2_ = x2;
  392. if (s_right) {
  393. x1_ += sm_add;
  394. x2_ += sm_add;
  395. } else if (s_left) {
  396. x1_ -= sm_add;
  397. x2_ -= sm_add;
  398. } else if (x1 < x2) {
  399. x1_ += sm_add;
  400. x2_ -= sm_add;
  401. } else {
  402. x1_ -= sm_add;
  403. x2_ += sm_add;
  404. }
  405. Line(x1, y1, x1_, y1, color_line);
  406. Line(x2, y2, x2_, y2, color_line);
  407. Line(x1_, y1, x2_, y2, color_line);
  408. }
  409. /**
  410. * draws a relation/constraint line
  411. */
  412. function Line3 (x1, y1, x2, y2, color_line) {
  413. var x1_ = x1;
  414. var x2_ = x2;
  415. if (s_right) {
  416. if (x1 < x2) {
  417. x1_ += x2 - x1 + sm_add;
  418. x2_ += sm_add;
  419. } else {
  420. x2_ += x1 - x2 + sm_add;
  421. x1_ += sm_add;
  422. }
  423. Line(x1, y1, x1_, y1, color_line);
  424. Line(x2, y2, x2_, y2, color_line);
  425. Line(x1_, y1, x2_, y2, color_line);
  426. return;
  427. }
  428. if (s_left) {
  429. if (x1 < x2) {
  430. x2_ -= x2 - x1 + sm_add;
  431. x1_ -= sm_add;
  432. } else {
  433. x1_ -= x1 - x2 + sm_add;
  434. x2_ -= sm_add;
  435. }
  436. Line(x1, y1, x1_, y1, color_line);
  437. Line(x2, y2, x2_, y2, color_line);
  438. Line(x1_, y1, x2_, y2, color_line);
  439. return;
  440. }
  441. var x_s = (x1 + x2) / 2;
  442. Line(x1, y1, x_s, y1, color_line);
  443. Line(x_s, y2, x2, y2, color_line);
  444. Line(x_s, y1, x_s, y2, color_line);
  445. }
  446. function Circle (x, y, r, w, color) {
  447. var ctx = document.getElementById('canvas').getContext('2d');
  448. ctx.beginPath();
  449. ctx.moveTo(x, y);
  450. ctx.lineWidth = w;
  451. ctx.strokeStyle = color;
  452. ctx.arc(x, y, r, 0, 2 * Math.PI, true);
  453. ctx.stroke();
  454. }
  455. function Clear () {
  456. var canvas = document.getElementById('canvas');
  457. var ctx = canvas.getContext('2d');
  458. ctx.clearRect(0, 0, canvas_width, canvas_height);
  459. }
  460. function Rect (x1, y1, w, h, color) {
  461. var ctx = document.getElementById('canvas').getContext('2d');
  462. ctx.fillStyle = color;
  463. ctx.fillRect(x1, y1, w, h);
  464. }
  465. // --------------------------- FULLSCREEN -------------------------------------
  466. function Toggle_fullscreen () {
  467. var value_sent = '';
  468. var $img = $('#toggleFullscreen').find('img');
  469. var $span = $img.siblings('span');
  470. var $content = $('#page_content');
  471. if (! $content.fullScreen()) {
  472. $img.attr('src', $img.data('exit'))
  473. .attr('title', $span.data('exit'));
  474. $span.text($span.data('exit'));
  475. $content
  476. .addClass('content_fullscreen')
  477. .css({ 'width': screen.width - 5, 'height': screen.height - 5 });
  478. value_sent = 'on';
  479. $content.fullScreen(true);
  480. } else {
  481. $content.fullScreen(false);
  482. value_sent = 'off';
  483. }
  484. saveValueInConfig('full_screen', value_sent);
  485. }
  486. function Add_Other_db_tables () {
  487. var button_options = {};
  488. button_options[PMA_messages.strGo] = function () {
  489. var db = $('#add_table_from').val();
  490. var table = $('#add_table').val();
  491. $.post('db_designer.php', {
  492. 'ajax_request' : true,
  493. 'dialog' : 'add_table',
  494. 'db' : db,
  495. 'table' : table
  496. }, function (data) {
  497. $new_table_dom = $(data.message);
  498. $new_table_dom.find('a').first().remove();
  499. $('#container-form').append($new_table_dom);
  500. $('.designer_tab').on('click','.tab_field_2,.tab_field_3,.tab_field', function () {
  501. var params = ($(this).attr('click_field_param')).split(',');
  502. Click_field(params[3], params[0], params[1], params[2]);
  503. });
  504. $('.designer_tab').on('click', '.select_all_store_col', function () {
  505. var params = ($(this).attr('store_column_param')).split(',');
  506. store_column(params[0], params[1], params[2]);
  507. });
  508. $('.designer_tab').on('click', '.small_tab_pref_click_opt', function () {
  509. var params = ($(this).attr('Click_option_param')).split(',');
  510. Click_option(params[0], params[1], params[2]);
  511. });
  512. });
  513. $(this).dialog('close');
  514. };
  515. button_options[PMA_messages.strCancel] = function () {
  516. $(this).dialog('close');
  517. };
  518. var $select_db = $('<select id="add_table_from"></select>');
  519. $select_db.append('<option value="">None</option>');
  520. var $select_table = $('<select id="add_table"></select>');
  521. $select_table.append('<option value="">None</option>');
  522. $.post('sql.php', {
  523. 'ajax_request' : true,
  524. 'sql_query' : 'SHOW databases;'
  525. }, function (data) {
  526. $(data.message).find('table.table_results.data.ajax').find('td.data').each(function () {
  527. var val = $(this)[0].innerHTML;
  528. $select_db.append('<option value="' + val + '">' + val + '</option>');
  529. });
  530. });
  531. var $form = $('<form action="" class="ajax"></form>')
  532. .append($select_db).append($select_table);
  533. $('<div id="page_add_tables_dialog"></div>')
  534. .append($form)
  535. .dialog({
  536. appendTo: '#page_content',
  537. title: PMA_messages.strAddTables,
  538. width: 500,
  539. modal: true,
  540. buttons: button_options,
  541. close: function () {
  542. $(this).remove();
  543. }
  544. });
  545. $('#add_table_from').change(function () {
  546. if ($(this).val()) {
  547. var db_name = $(this).val();
  548. var sql_query = 'SHOW tables;';
  549. $.post('sql.php', {
  550. 'ajax_request' : true,
  551. 'sql_query': sql_query,
  552. 'db' : db_name
  553. }, function (data) {
  554. $select_table.html('');
  555. $(data.message).find('table.table_results.data.ajax').find('td.data').each(function () {
  556. var val = $(this)[0].innerHTML;
  557. $select_table.append('<option value="' + val + '">' + val + '</option>');
  558. });
  559. });
  560. }
  561. });
  562. }
  563. // ------------------------------ NEW ------------------------------------------
  564. function New () {
  565. Prompt_to_save_current_page(function () {
  566. Load_page(-1);
  567. });
  568. }
  569. // ------------------------------ SAVE ------------------------------------------
  570. // (del?) no for pdf
  571. function Save (url) {
  572. for (var key in j_tabs) {
  573. document.getElementById('t_x_' + key + '_').value = parseInt(document.getElementById(key).style.left, 10);
  574. document.getElementById('t_y_' + key + '_').value = parseInt(document.getElementById(key).style.top, 10);
  575. document.getElementById('t_v_' + key + '_').value = document.getElementById('id_tbody_' + key).style.display === 'none' ? 0 : 1;
  576. document.getElementById('t_h_' + key + '_').value = document.getElementById('check_vis_' + key).checked ? 1 : 0;
  577. }
  578. document.form1.action = url;
  579. $(document.form1).submit();
  580. }
  581. function Get_url_pos (forceString) {
  582. if (designer_tables_enabled || forceString) {
  583. var poststr = '';
  584. var argsep = PMA_commonParams.get('arg_separator');
  585. for (var key in j_tabs) {
  586. poststr += argsep + 't_x[' + key + ']=' + parseInt(document.getElementById(key).style.left, 10);
  587. poststr += argsep + 't_y[' + key + ']=' + parseInt(document.getElementById(key).style.top, 10);
  588. poststr += argsep + 't_v[' + key + ']=' + (document.getElementById('id_tbody_' + key).style.display === 'none' ? 0 : 1);
  589. poststr += argsep + 't_h[' + key + ']=' + (document.getElementById('check_vis_' + key).checked ? 1 : 0);
  590. }
  591. return poststr;
  592. } else {
  593. var coords = [];
  594. for (var key in j_tabs) {
  595. if (document.getElementById('check_vis_' + key).checked) {
  596. var x = parseInt(document.getElementById(key).style.left, 10);
  597. var y = parseInt(document.getElementById(key).style.top, 10);
  598. var tbCoords = new TableCoordinate(db, key.split('.')[1], -1, x, y);
  599. coords.push(tbCoords);
  600. }
  601. }
  602. return coords;
  603. }
  604. }
  605. function Save2 (callback) {
  606. if (designer_tables_enabled) {
  607. var argsep = PMA_commonParams.get('arg_separator');
  608. var poststr = argsep + 'operation=savePage' + argsep + 'save_page=same' + argsep + 'ajax_request=true';
  609. poststr += argsep + 'server=' + server + argsep + 'db=' + db + argsep + 'selected_page=' + selected_page;
  610. poststr += Get_url_pos();
  611. var $msgbox = PMA_ajaxShowMessage(PMA_messages.strProcessingRequest);
  612. $.post('db_designer.php', poststr, function (data) {
  613. if (data.success === false) {
  614. PMA_ajaxShowMessage(data.error, false);
  615. } else {
  616. PMA_ajaxRemoveMessage($msgbox);
  617. PMA_ajaxShowMessage(PMA_messages.strModificationSaved);
  618. MarkSaved();
  619. if (typeof callback !== 'undefined') {
  620. callback();
  621. }
  622. }
  623. });
  624. } else {
  625. var name = $('#page_name').html().trim();
  626. Save_to_selected_page(db, selected_page, name, Get_url_pos(), function (page) {
  627. MarkSaved();
  628. if (typeof callback !== 'undefined') {
  629. callback();
  630. }
  631. });
  632. }
  633. }
  634. function submitSaveDialogAndClose (callback) {
  635. var $form = $('#save_page');
  636. var name = $form.find('input[name="selected_value"]').val().trim();
  637. if (name === '') {
  638. PMA_ajaxShowMessage(PMA_messages.strEnterValidPageName, false);
  639. return;
  640. }
  641. $('#page_save_dialog').dialog('close');
  642. if (designer_tables_enabled) {
  643. var $msgbox = PMA_ajaxShowMessage(PMA_messages.strProcessingRequest);
  644. PMA_prepareForAjaxRequest($form);
  645. $.post($form.attr('action'), $form.serialize() + Get_url_pos(), function (data) {
  646. if (data.success === false) {
  647. PMA_ajaxShowMessage(data.error, false);
  648. } else {
  649. PMA_ajaxRemoveMessage($msgbox);
  650. MarkSaved();
  651. if (data.id) {
  652. selected_page = data.id;
  653. }
  654. $('#page_name').text(name);
  655. if (typeof callback !== 'undefined') {
  656. callback();
  657. }
  658. }
  659. });
  660. } else {
  661. Save_to_new_page(db, name, Get_url_pos(), function (page) {
  662. MarkSaved();
  663. if (page.pg_nr) {
  664. selected_page = page.pg_nr;
  665. }
  666. $('#page_name').text(page.page_descr);
  667. if (typeof callback !== 'undefined') {
  668. callback();
  669. }
  670. });
  671. }
  672. }
  673. function Save3 (callback) {
  674. if (parseInt(selected_page) !== -1) {
  675. Save2(callback);
  676. } else {
  677. var button_options = {};
  678. button_options[PMA_messages.strGo] = function () {
  679. var $form = $('#save_page');
  680. $form.submit();
  681. };
  682. button_options[PMA_messages.strCancel] = function () {
  683. $(this).dialog('close');
  684. };
  685. var $form = $('<form action="db_designer.php" method="post" name="save_page" id="save_page" class="ajax"></form>')
  686. .append('<input type="hidden" name="server" value="' + server + '" />')
  687. .append('<input type="hidden" name="db" value="' + db + '" />')
  688. .append('<input type="hidden" name="operation" value="savePage" />')
  689. .append('<input type="hidden" name="save_page" value="new" />')
  690. .append('<label for="selected_value">' + PMA_messages.strPageName +
  691. '</label>:<input type="text" name="selected_value" />');
  692. $form.on('submit', function (e) {
  693. e.preventDefault();
  694. submitSaveDialogAndClose(callback);
  695. });
  696. $('<div id="page_save_dialog"></div>')
  697. .append($form)
  698. .dialog({
  699. appendTo: '#page_content',
  700. title: PMA_messages.strSavePage,
  701. width: 300,
  702. modal: true,
  703. buttons: button_options,
  704. close: function () {
  705. $(this).remove();
  706. }
  707. });
  708. }
  709. }
  710. // ------------------------------ EDIT PAGES ------------------------------------------
  711. function Edit_pages () {
  712. Prompt_to_save_current_page(function () {
  713. var button_options = {};
  714. button_options[PMA_messages.strGo] = function () {
  715. var $form = $('#edit_delete_pages');
  716. var selected = $form.find('select[name="selected_page"]').val();
  717. if (selected === '0') {
  718. PMA_ajaxShowMessage(PMA_messages.strSelectPage, 2000);
  719. return;
  720. }
  721. $(this).dialog('close');
  722. Load_page(selected);
  723. };
  724. button_options[PMA_messages.strCancel] = function () {
  725. $(this).dialog('close');
  726. };
  727. var $msgbox = PMA_ajaxShowMessage();
  728. var argsep = PMA_commonParams.get('arg_separator');
  729. var params = 'ajax_request=true' + argsep + 'dialog=edit' + argsep + 'server=' + server + argsep + 'db=' + db;
  730. $.get('db_designer.php', params, function (data) {
  731. if (data.success === false) {
  732. PMA_ajaxShowMessage(data.error, false);
  733. } else {
  734. PMA_ajaxRemoveMessage($msgbox);
  735. if (! designer_tables_enabled) {
  736. Create_page_list(db, function (options) {
  737. $('#selected_page').append(options);
  738. });
  739. }
  740. $('<div id="page_edit_dialog"></div>')
  741. .append(data.message)
  742. .dialog({
  743. appendTo: '#page_content',
  744. title: PMA_messages.strOpenPage,
  745. width: 350,
  746. modal: true,
  747. buttons: button_options,
  748. close: function () {
  749. $(this).remove();
  750. }
  751. });
  752. }
  753. }); // end $.get()
  754. });
  755. }
  756. // ----------------------------- DELETE PAGES ---------------------------------------
  757. function Delete_pages () {
  758. var button_options = {};
  759. button_options[PMA_messages.strGo] = function () {
  760. var $form = $('#edit_delete_pages');
  761. var selected = $form.find('select[name="selected_page"]').val();
  762. if (selected === '0') {
  763. PMA_ajaxShowMessage(PMA_messages.strSelectPage, 2000);
  764. return;
  765. }
  766. var $msgbox = PMA_ajaxShowMessage(PMA_messages.strProcessingRequest);
  767. var deleting_current_page = selected === selected_page;
  768. PMA_prepareForAjaxRequest($form);
  769. if (designer_tables_enabled) {
  770. $.post($form.attr('action'), $form.serialize(), function (data) {
  771. if (data.success === false) {
  772. PMA_ajaxShowMessage(data.error, false);
  773. } else {
  774. PMA_ajaxRemoveMessage($msgbox);
  775. if (deleting_current_page) {
  776. Load_page(null);
  777. } else {
  778. PMA_ajaxShowMessage(PMA_messages.strSuccessfulPageDelete);
  779. }
  780. }
  781. }); // end $.post()
  782. } else {
  783. Delete_page(selected, function (success) {
  784. if (! success) {
  785. PMA_ajaxShowMessage('Error', false);
  786. } else {
  787. PMA_ajaxRemoveMessage($msgbox);
  788. if (deleting_current_page) {
  789. Load_page(null);
  790. } else {
  791. PMA_ajaxShowMessage(PMA_messages.strSuccessfulPageDelete);
  792. }
  793. }
  794. });
  795. }
  796. $(this).dialog('close');
  797. };
  798. button_options[PMA_messages.strCancel] = function () {
  799. $(this).dialog('close');
  800. };
  801. var $msgbox = PMA_ajaxShowMessage();
  802. var argsep = PMA_commonParams.get('arg_separator');
  803. var params = 'ajax_request=true' + argsep + 'dialog=delete' + argsep + 'server=' + server + argsep + 'db=' + db;
  804. $.get('db_designer.php', params, function (data) {
  805. if (data.success === false) {
  806. PMA_ajaxShowMessage(data.error, false);
  807. } else {
  808. PMA_ajaxRemoveMessage($msgbox);
  809. if (! designer_tables_enabled) {
  810. Create_page_list(db, function (options) {
  811. $('#selected_page').append(options);
  812. });
  813. }
  814. $('<div id="page_delete_dialog"></div>')
  815. .append(data.message)
  816. .dialog({
  817. appendTo: '#page_content',
  818. title: PMA_messages.strDeletePage,
  819. width: 350,
  820. modal: true,
  821. buttons: button_options,
  822. close: function () {
  823. $(this).remove();
  824. }
  825. });
  826. }
  827. }); // end $.get()
  828. }
  829. // ------------------------------ SAVE AS PAGES ---------------------------------------
  830. function Save_as () {
  831. var button_options = {};
  832. button_options[PMA_messages.strGo] = function () {
  833. var $form = $('#save_as_pages');
  834. var selected_value = $form.find('input[name="selected_value"]').val().trim();
  835. var $selected_page = $form.find('select[name="selected_page"]');
  836. var choice = $form.find('input[name="save_page"]:checked').val();
  837. var name = '';
  838. if (choice === 'same') {
  839. if ($selected_page.val() === '0') {
  840. PMA_ajaxShowMessage(PMA_messages.strSelectPage, 2000);
  841. return;
  842. }
  843. name = $selected_page.find('option:selected').text();
  844. } else if (choice === 'new') {
  845. if (selected_value === '') {
  846. PMA_ajaxShowMessage(PMA_messages.strEnterValidPageName, 2000);
  847. return;
  848. }
  849. name = selected_value;
  850. }
  851. var $msgbox = PMA_ajaxShowMessage(PMA_messages.strProcessingRequest);
  852. if (designer_tables_enabled) {
  853. PMA_prepareForAjaxRequest($form);
  854. $.post($form.attr('action'), $form.serialize() + Get_url_pos(), function (data) {
  855. if (data.success === false) {
  856. PMA_ajaxShowMessage(data.error, false);
  857. } else {
  858. PMA_ajaxRemoveMessage($msgbox);
  859. MarkSaved();
  860. if (data.id) {
  861. selected_page = data.id;
  862. }
  863. $('#page_name').text(name);
  864. }
  865. }); // end $.post()
  866. } else {
  867. if (choice === 'same') {
  868. var selected_page_id = $selected_page.find('option:selected').val();
  869. Save_to_selected_page(db, selected_page_id, name, Get_url_pos(), function (page) {
  870. PMA_ajaxRemoveMessage($msgbox);
  871. MarkSaved();
  872. if (page.pg_nr) {
  873. selected_page = page.pg_nr;
  874. }
  875. $('#page_name').text(page.page_descr);
  876. });
  877. } else if (choice === 'new') {
  878. Save_to_new_page(db, name, Get_url_pos(), function (page) {
  879. PMA_ajaxRemoveMessage($msgbox);
  880. MarkSaved();
  881. if (page.pg_nr) {
  882. selected_page = page.pg_nr;
  883. }
  884. $('#page_name').text(page.page_descr);
  885. });
  886. }
  887. }
  888. $(this).dialog('close');
  889. };
  890. button_options[PMA_messages.strCancel] = function () {
  891. $(this).dialog('close');
  892. };
  893. var $msgbox = PMA_ajaxShowMessage();
  894. var argsep = PMA_commonParams.get('arg_separator');
  895. var params = 'ajax_request=true' + argsep + 'dialog=save_as' + argsep + 'server=' + server + argsep + 'token=' + argsep + 'db=' + db;
  896. $.get('db_designer.php', params, function (data) {
  897. if (data.success === false) {
  898. PMA_ajaxShowMessage(data.error, false);
  899. } else {
  900. PMA_ajaxRemoveMessage($msgbox);
  901. if (! designer_tables_enabled) {
  902. Create_page_list(db, function (options) {
  903. $('#selected_page').append(options);
  904. });
  905. }
  906. $('<div id="page_save_as_dialog"></div>')
  907. .append(data.message)
  908. .dialog({
  909. appendTo: '#page_content',
  910. title: PMA_messages.strSavePageAs,
  911. width: 450,
  912. modal: true,
  913. buttons: button_options,
  914. close: function () {
  915. $(this).remove();
  916. }
  917. });
  918. // select current page by default
  919. if (selected_page !== '-1') {
  920. $('select[name="selected_page"]').val(selected_page);
  921. }
  922. }
  923. }); // end $.get()
  924. }
  925. function Prompt_to_save_current_page (callback) {
  926. if (_change === 1 || selected_page === '-1') {
  927. var button_options = {};
  928. button_options[PMA_messages.strYes] = function () {
  929. $(this).dialog('close');
  930. Save3(callback);
  931. };
  932. button_options[PMA_messages.strNo] = function () {
  933. $(this).dialog('close');
  934. callback();
  935. };
  936. button_options[PMA_messages.strCancel] = function () {
  937. $(this).dialog('close');
  938. };
  939. $('<div id="prompt_save_dialog"></div>')
  940. .append('<div>' + PMA_messages.strLeavingPage + '</div>')
  941. .dialog({
  942. appendTo: '#page_content',
  943. title: PMA_messages.strSavePage,
  944. width: 300,
  945. modal: true,
  946. buttons: button_options,
  947. close: function () {
  948. $(this).remove();
  949. }
  950. });
  951. } else {
  952. callback();
  953. }
  954. }
  955. // ------------------------------ EXPORT PAGES ---------------------------------------
  956. function Export_pages () {
  957. var button_options = {};
  958. button_options[PMA_messages.strGo] = function () {
  959. $('#id_export_pages').submit();
  960. $(this).dialog('close');
  961. };
  962. button_options[PMA_messages.strCancel] = function () {
  963. $(this).dialog('close');
  964. };
  965. var $msgbox = PMA_ajaxShowMessage();
  966. var argsep = PMA_commonParams.get('arg_separator');
  967. var params = 'ajax_request=true' + argsep + 'dialog=export' + argsep + 'server=' + server + argsep + 'db=' + db + argsep + 'selected_page=' + selected_page;
  968. $.get('db_designer.php', params, function (data) {
  969. if (data.success === false) {
  970. PMA_ajaxShowMessage(data.error, false);
  971. } else {
  972. PMA_ajaxRemoveMessage($msgbox);
  973. var $form = $(data.message);
  974. if (!designer_tables_enabled) {
  975. $form.append('<input type="hidden" name="offline_export" value="true" />');
  976. }
  977. $.each(Get_url_pos(true).substring(1).split(argsep), function () {
  978. var pair = this.split('=');
  979. var input = $('<input type="hidden" />');
  980. input.attr('name', pair[0]);
  981. input.attr('value', pair[1]);
  982. $form.append(input);
  983. });
  984. var $formatDropDown = $form.find('#plugins');
  985. $formatDropDown.change(function () {
  986. var format = $formatDropDown.val();
  987. $form.find('.format_specific_options').hide();
  988. $form.find('#' + format + '_options').show();
  989. }).trigger('change');
  990. $('<div id="page_export_dialog"></div>')
  991. .append($form)
  992. .dialog({
  993. appendTo: '#page_content',
  994. title: PMA_messages.strExportRelationalSchema,
  995. width: 550,
  996. modal: true,
  997. buttons: button_options,
  998. close: function () {
  999. $(this).remove();
  1000. }
  1001. });
  1002. }
  1003. }); // end $.get()
  1004. }// end export pages
  1005. function Load_page (page) {
  1006. if (designer_tables_enabled) {
  1007. var param_page = '';
  1008. var argsep = PMA_commonParams.get('arg_separator');
  1009. if (page !== null) {
  1010. param_page = argsep + 'page=' + page;
  1011. }
  1012. $('<a href="db_designer.php?server=' + server + argsep + 'db=' + encodeURI(db) + param_page + '"></a>')
  1013. .appendTo($('#page_content'))
  1014. .click();
  1015. } else {
  1016. if (page === null) {
  1017. Show_tables_in_landing_page(db);
  1018. } else if (page > -1) {
  1019. Load_HTML_for_page(page);
  1020. } else if (page === -1) {
  1021. Show_new_page_tables(true);
  1022. }
  1023. }
  1024. MarkSaved();
  1025. }
  1026. function Grid () {
  1027. var value_sent = '';
  1028. if (!ON_grid) {
  1029. ON_grid = 1;
  1030. value_sent = 'on';
  1031. document.getElementById('grid_button').className = 'M_butt_Selected_down';
  1032. } else {
  1033. document.getElementById('grid_button').className = 'M_butt';
  1034. ON_grid = 0;
  1035. value_sent = 'off';
  1036. }
  1037. saveValueInConfig('snap_to_grid', value_sent);
  1038. }
  1039. function Angular_direct () {
  1040. var value_sent = '';
  1041. if (ON_angular_direct) {
  1042. ON_angular_direct = 0;
  1043. value_sent = 'angular';
  1044. document.getElementById('angular_direct_button').className = 'M_butt_Selected_down';
  1045. } else {
  1046. ON_angular_direct = 1;
  1047. value_sent = 'direct';
  1048. document.getElementById('angular_direct_button').className = 'M_butt';
  1049. }
  1050. saveValueInConfig('angular_direct', value_sent);
  1051. Re_load();
  1052. }
  1053. function saveValueInConfig (index_sent, value_sent) {
  1054. $.post('db_designer.php',
  1055. { operation: 'save_setting_value', index: index_sent, ajax_request: true, server: server, value: value_sent },
  1056. function (data) {
  1057. if (data.success === false) {
  1058. PMA_ajaxShowMessage(data.error, false);
  1059. }
  1060. });
  1061. }
  1062. // ++++++++++++++++++++++++++++++ RELATION ++++++++++++++++++++++++++++++++++++++
  1063. function Start_relation () {
  1064. if (ON_display_field) {
  1065. return;
  1066. }
  1067. if (!ON_relation) {
  1068. document.getElementById('foreign_relation').style.display = '';
  1069. ON_relation = 1;
  1070. document.getElementById('designer_hint').innerHTML = PMA_messages.strSelectReferencedKey;
  1071. document.getElementById('designer_hint').style.display = 'block';
  1072. document.getElementById('rel_button').className = 'M_butt_Selected_down';
  1073. } else {
  1074. document.getElementById('designer_hint').innerHTML = '';
  1075. document.getElementById('designer_hint').style.display = 'none';
  1076. document.getElementById('rel_button').className = 'M_butt';
  1077. click_field = 0;
  1078. ON_relation = 0;
  1079. }
  1080. }
  1081. // table field
  1082. function Click_field (db, T, f, PK) {
  1083. PK = parseInt(PK);
  1084. var argsep = PMA_commonParams.get('arg_separator');
  1085. if (ON_relation) {
  1086. if (!click_field) {
  1087. // .style.display=='none' .style.display = 'none'
  1088. if (!PK) {
  1089. alert(PMA_messages.strPleaseSelectPrimaryOrUniqueKey);
  1090. return;// 0;
  1091. }// PK
  1092. if (j_tabs[db + '.' + T] !== '1') {
  1093. document.getElementById('foreign_relation').style.display = 'none';
  1094. }
  1095. click_field = 1;
  1096. link_relation = 'DB1=' + db + argsep + 'T1=' + T + argsep + 'F1=' + f;
  1097. document.getElementById('designer_hint').innerHTML = PMA_messages.strSelectForeignKey;
  1098. } else {
  1099. Start_relation(); // hidden hint...
  1100. if (j_tabs[db + '.' + T] !== '1' || !PK) {
  1101. document.getElementById('foreign_relation').style.display = 'none';
  1102. }
  1103. var left = Glob_X - (document.getElementById('layer_new_relation').offsetWidth >> 1);
  1104. document.getElementById('layer_new_relation').style.left = left + 'px';
  1105. var top = Glob_Y - document.getElementById('layer_new_relation').offsetHeight;
  1106. document.getElementById('layer_new_relation').style.top = top + 'px';
  1107. document.getElementById('layer_new_relation').style.display = 'block';
  1108. link_relation += argsep + 'DB2=' + db + argsep + 'T2=' + T + argsep + 'F2=' + f;
  1109. }
  1110. }
  1111. if (ON_display_field) {
  1112. // if is display field
  1113. if (display_field[T] === f) {
  1114. old_class = 'tab_field';
  1115. delete display_field[T];
  1116. } else {
  1117. old_class = 'tab_field_3';
  1118. if (display_field[T]) {
  1119. document.getElementById('id_tr_' + T + '.' + display_field[T]).className = 'tab_field';
  1120. delete display_field[T];
  1121. }
  1122. display_field[T] = f;
  1123. }
  1124. ON_display_field = 0;
  1125. document.getElementById('designer_hint').innerHTML = '';
  1126. document.getElementById('designer_hint').style.display = 'none';
  1127. document.getElementById('display_field_button').className = 'M_butt';
  1128. var $msgbox = PMA_ajaxShowMessage(PMA_messages.strProcessingRequest);
  1129. $.post('db_designer.php',
  1130. { operation: 'setDisplayField', ajax_request: true, server: server, db: db, table: T, field: f },
  1131. function (data) {
  1132. if (data.success === false) {
  1133. PMA_ajaxShowMessage(data.error, false);
  1134. } else {
  1135. PMA_ajaxRemoveMessage($msgbox);
  1136. PMA_ajaxShowMessage(PMA_messages.strModificationSaved);
  1137. }
  1138. });
  1139. }
  1140. }
  1141. function New_relation () {
  1142. document.getElementById('layer_new_relation').style.display = 'none';
  1143. var argsep = PMA_commonParams.get('arg_separator');
  1144. link_relation += argsep + 'server=' + server + argsep + 'db=' + db + argsep + 'db2=p';
  1145. link_relation += argsep + 'on_delete=' + document.getElementById('on_delete').value + argsep + 'on_update=' + document.getElementById('on_update').value;
  1146. link_relation += argsep + 'operation=addNewRelation' + argsep + 'ajax_request=true';
  1147. var $msgbox = PMA_ajaxShowMessage(PMA_messages.strProcessingRequest);
  1148. $.post('db_designer.php', link_relation, function (data) {
  1149. if (data.success === false) {
  1150. PMA_ajaxShowMessage(data.error, false);
  1151. } else {
  1152. PMA_ajaxRemoveMessage($msgbox);
  1153. Load_page(selected_page);
  1154. }
  1155. }); // end $.post()
  1156. }
  1157. // -------------------------- create tables -------------------------------------
  1158. function Start_table_new () {
  1159. PMA_commonParams.set('table', '');
  1160. PMA_commonActions.refreshMain('tbl_create.php');
  1161. }
  1162. function Start_tab_upd (table) {
  1163. PMA_commonParams.set('table', table);
  1164. PMA_commonActions.refreshMain('tbl_structure.php');
  1165. }
  1166. // --------------------------- hide tables --------------------------------------
  1167. // max/min all tables
  1168. function Small_tab_all (id_this) {
  1169. var icon = id_this.children[0];
  1170. var key;
  1171. var value_sent = '';
  1172. if (icon.alt === 'v') {
  1173. for (key in j_tabs) {
  1174. if (document.getElementById('id_hide_tbody_' + key).innerHTML === 'v') {
  1175. Small_tab(key, 0);
  1176. }
  1177. }
  1178. icon.alt = '>';
  1179. icon.src = icon.dataset.right;
  1180. value_sent = 'v';
  1181. } else {
  1182. for (key in j_tabs) {
  1183. if (document.getElementById('id_hide_tbody_' + key).innerHTML !== 'v') {
  1184. Small_tab(key, 0);
  1185. }
  1186. }
  1187. icon.alt = 'v';
  1188. icon.src = icon.dataset.down;
  1189. value_sent = '>';
  1190. }
  1191. saveValueInConfig('small_big_all', value_sent);
  1192. $('#key_SB_all').toggleClass('M_butt_Selected_down');
  1193. $('#key_SB_all').toggleClass('M_butt');
  1194. Re_load();
  1195. }
  1196. // invert max/min all tables
  1197. function Small_tab_invert () {
  1198. for (var key in j_tabs) {
  1199. Small_tab(key, 0);
  1200. }
  1201. Re_load();
  1202. }
  1203. function Relation_lines_invert () {
  1204. show_relation_lines = ! show_relation_lines;
  1205. saveValueInConfig('relation_lines', show_relation_lines);
  1206. $('#relLineInvert').toggleClass('M_butt_Selected_down');
  1207. $('#relLineInvert').toggleClass('M_butt');
  1208. Re_load();
  1209. }
  1210. function Small_tab_refresh () {
  1211. for (var key in j_tabs) {
  1212. if (document.getElementById('id_hide_tbody_' + key).innerHTML !== 'v') {
  1213. Small_tab(key, 0);
  1214. }
  1215. }
  1216. }
  1217. function Small_tab (t, re_load) {
  1218. var id = document.getElementById('id_tbody_' + t);
  1219. var id_this = document.getElementById('id_hide_tbody_' + t);
  1220. var id_t = document.getElementById(t);
  1221. if (id_this.innerHTML === 'v') {
  1222. // ---CROSS
  1223. id.style.display = 'none';
  1224. id_this.innerHTML = '>';
  1225. } else {
  1226. id.style.display = '';
  1227. id_this.innerHTML = 'v';
  1228. }
  1229. if (re_load) {
  1230. Re_load();
  1231. }
  1232. }
  1233. // ------------------------------------------------------------------------------
  1234. function Select_tab (t) {
  1235. var id_zag = document.getElementById('id_zag_' + t);
  1236. if (id_zag.className !== 'tab_zag_3') {
  1237. document.getElementById('id_zag_' + t).className = 'tab_zag_2';
  1238. } else {
  1239. document.getElementById('id_zag_' + t).className = 'tab_zag';
  1240. }
  1241. // ----------
  1242. var id_t = document.getElementById(t);
  1243. window.scrollTo(parseInt(id_t.style.left, 10) - 300, parseInt(id_t.style.top, 10) - 300);
  1244. setTimeout(
  1245. function () {
  1246. document.getElementById('id_zag_' + t).className = 'tab_zag';
  1247. },
  1248. 800
  1249. );
  1250. }
  1251. // ------------------------------------------------------------------------------
  1252. function Canvas_click (id, event) {
  1253. var n = 0;
  1254. var relation_name = 0;
  1255. var selected = 0;
  1256. var a = [];
  1257. var Key0;
  1258. var Key1;
  1259. var Key2;
  1260. var Key3;
  1261. var Key;
  1262. var x1;
  1263. var x2;
  1264. var K;
  1265. var key;
  1266. var key2;
  1267. var key3;
  1268. var Local_X = isIE ? event.clientX + document.body.scrollLeft : event.pageX;
  1269. var Local_Y = isIE ? event.clientY + document.body.scrollTop : event.pageY;
  1270. Local_X -= $('#osn_tab').offset().left;
  1271. Local_Y -= $('#osn_tab').offset().top;
  1272. Clear();
  1273. for (K in contr) {
  1274. for (key in contr[K]) {
  1275. for (key2 in contr[K][key]) {
  1276. for (key3 in contr[K][key][key2]) {
  1277. if (! document.getElementById('check_vis_' + key2).checked ||
  1278. ! document.getElementById('check_vis_' + contr[K][key][key2][key3][0]).checked) {
  1279. continue; // if hide
  1280. }
  1281. var x1_left = document.getElementById(key2).offsetLeft + 1;// document.getElementById(key2+"."+key3).offsetLeft;
  1282. var x1_right = x1_left + document.getElementById(key2).offsetWidth;
  1283. 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
  1284. var x2_right = x2_left + document.getElementById(contr[K][key][key2][key3][0]).offsetWidth;
  1285. a[0] = Math.abs(x1_left - x2_left);
  1286. a[1] = Math.abs(x1_left - x2_right);
  1287. a[2] = Math.abs(x1_right - x2_left);
  1288. a[3] = Math.abs(x1_right - x2_right);
  1289. n = s_left = s_right = 0;
  1290. for (var i = 1; i < 4; i++) {
  1291. if (a[n] > a[i]) {
  1292. n = i;
  1293. }
  1294. }
  1295. if (n === 1) {
  1296. x1 = x1_left - sm_s;
  1297. x2 = x2_right + sm_s;
  1298. if (x1 < x2) {
  1299. n = 0;
  1300. }
  1301. }
  1302. if (n === 2) {
  1303. x1 = x1_right + sm_s;
  1304. x2 = x2_left - sm_s;
  1305. if (x1 > x2) {
  1306. n = 0;
  1307. }
  1308. }
  1309. if (n === 3) {
  1310. x1 = x1_right + sm_s;
  1311. x2 = x2_right + sm_s;
  1312. s_right = 1;
  1313. }
  1314. if (n === 0) {
  1315. x1 = x1_left - sm_s;
  1316. x2 = x2_left - sm_s;
  1317. s_left = 1;
  1318. }
  1319. var y1 = document.getElementById(key2).offsetTop + document.getElementById(key2 + '.' + key3).offsetTop + height_field;
  1320. var y2 = document.getElementById(contr[K][key][key2][key3][0]).offsetTop +
  1321. document.getElementById(contr[K][key][key2][key3][0] + '.' + contr[K][key][key2][key3][1]).offsetTop + height_field;
  1322. if (!selected && Local_X > x1 - 10 && Local_X < x1 + 10 && Local_Y > y1 - 7 && Local_Y < y1 + 7) {
  1323. Line0(
  1324. x1 + osn_tab.offsetLeft,
  1325. y1 - osn_tab.offsetTop,
  1326. x2 + osn_tab.offsetLeft,
  1327. y2 - osn_tab.offsetTop,
  1328. 'rgba(255,0,0,1)');
  1329. selected = 1; // Rect(x1-sm_x,y1-sm_y,10,10,"rgba(0,255,0,1)");
  1330. relation_name = key; //
  1331. Key0 = contr[K][key][key2][key3][0];
  1332. Key1 = contr[K][key][key2][key3][1];
  1333. Key2 = key2;
  1334. Key3 = key3;
  1335. Key = K;
  1336. } else {
  1337. Line0(
  1338. x1 + osn_tab.offsetLeft,
  1339. y1 - osn_tab.offsetTop,
  1340. x2 + osn_tab.offsetLeft,
  1341. y2 - osn_tab.offsetTop,
  1342. getColorByTarget(contr[K][key][key2][key3][0] + '.' + contr[K][key][key2][key3][1])
  1343. );
  1344. }
  1345. }
  1346. }
  1347. }
  1348. }
  1349. if (selected) {
  1350. // select relations
  1351. var left = Glob_X - (document.getElementById('layer_upd_relation').offsetWidth >> 1);
  1352. document.getElementById('layer_upd_relation').style.left = left + 'px';
  1353. var top = Glob_Y - document.getElementById('layer_upd_relation').offsetHeight - 10;
  1354. document.getElementById('layer_upd_relation').style.top = top + 'px';
  1355. document.getElementById('layer_upd_relation').style.display = 'block';
  1356. var argsep = PMA_commonParams.get('arg_separator');
  1357. link_relation = 'T1=' + Key0 + argsep + 'F1=' + Key1 + argsep + 'T2=' + Key2 + argsep + 'F2=' + Key3 + argsep + 'K=' + Key;
  1358. }
  1359. }
  1360. function Upd_relation () {
  1361. document.getElementById('layer_upd_relation').style.display = 'none';
  1362. var argsep = PMA_commonParams.get('arg_separator');
  1363. link_relation += argsep + 'server=' + server + argsep + 'db=' + db;
  1364. link_relation += argsep + 'operation=removeRelation' + argsep + 'ajax_request=true';
  1365. var $msgbox = PMA_ajaxShowMessage(PMA_messages.strProcessingRequest);
  1366. $.post('db_designer.php', link_relation, function (data) {
  1367. if (data.success === false) {
  1368. PMA_ajaxShowMessage(data.error, false);
  1369. } else {
  1370. PMA_ajaxRemoveMessage($msgbox);
  1371. Load_page(selected_page);
  1372. }
  1373. }); // end $.post()
  1374. }
  1375. function VisibleTab (id, t_n) {
  1376. if (id.checked) {
  1377. document.getElementById(t_n).style.display = 'block';
  1378. } else {
  1379. document.getElementById(t_n).style.display = 'none';
  1380. }
  1381. Re_load();
  1382. }
  1383. // max/min all tables
  1384. function Hide_tab_all (id_this) {
  1385. if (id_this.alt === 'v') {
  1386. id_this.alt = '>';
  1387. id_this.src = id_this.dataset.right;
  1388. } else {
  1389. id_this.alt = 'v';
  1390. id_this.src = id_this.dataset.down;
  1391. }
  1392. var E = document.form1;
  1393. for (var i = 0; i < E.elements.length; i++) {
  1394. if (E.elements[i].type === 'checkbox' && E.elements[i].id.substring(0, 10) === 'check_vis_') {
  1395. if (id_this.alt === 'v') {
  1396. E.elements[i].checked = true;
  1397. document.getElementById(E.elements[i].value).style.display = '';
  1398. } else {
  1399. E.elements[i].checked = false;
  1400. document.getElementById(E.elements[i].value).style.display = 'none';
  1401. }
  1402. }
  1403. }
  1404. Re_load();
  1405. }
  1406. function in_array_k (x, m) {
  1407. var b = 0;
  1408. for (var u in m) {
  1409. if (x === u) {
  1410. b = 1;
  1411. break;
  1412. }
  1413. }
  1414. return b;
  1415. }
  1416. function No_have_constr (id_this) {
  1417. var a = [];
  1418. var K;
  1419. var key;
  1420. var key2;
  1421. var key3;
  1422. for (K in contr) {
  1423. for (key in contr[K]) {
  1424. // contr name
  1425. for (key2 in contr[K][key]) {
  1426. // table name
  1427. for (key3 in contr[K][key][key2]) {
  1428. // field name
  1429. a[key2] = a[contr[K][key][key2][key3][0]] = 1; // exist constr
  1430. }
  1431. }
  1432. }
  1433. }
  1434. if (id_this.alt === 'v') {
  1435. id_this.alt = '>';
  1436. id_this.src = id_this.dataset.right;
  1437. } else {
  1438. id_this.alt = 'v';
  1439. id_this.src = id_this.dataset.down;
  1440. }
  1441. var E = document.form1;
  1442. for (var i = 0; i < E.elements.length; i++) {
  1443. if (E.elements[i].type === 'checkbox' && E.elements[i].id.substring(0, 10) === 'check_vis_') {
  1444. if (!in_array_k(E.elements[i].value, a)) {
  1445. if (id_this.alt === 'v') {
  1446. E.elements[i].checked = true;
  1447. document.getElementById(E.elements[i].value).style.display = '';
  1448. } else {
  1449. E.elements[i].checked = false;
  1450. document.getElementById(E.elements[i].value).style.display = 'none';
  1451. }
  1452. }
  1453. }
  1454. }
  1455. }
  1456. function General_scroll () {
  1457. /*
  1458. if (!document.getElementById('show_relation_olways').checked) {
  1459. document.getElementById("canvas").style.display = 'none';
  1460. clearTimeout(timeoutID);
  1461. timeoutID = setTimeout(General_scroll_end, 500);
  1462. }
  1463. */
  1464. // if (timeoutID)
  1465. clearTimeout(timeoutID);
  1466. timeoutID = setTimeout(
  1467. function () {
  1468. document.getElementById('top_menu').style.left = document.body.scrollLeft + 'px';
  1469. document.getElementById('top_menu').style.top = document.body.scrollTop + 'px';
  1470. },
  1471. 200
  1472. );
  1473. }
  1474. // max/min all tables
  1475. function Show_left_menu (id_this) {
  1476. var icon = id_this.children[0];
  1477. $('#key_Show_left_menu').toggleClass('M_butt_Selected_down');
  1478. if (icon.alt === 'v') {
  1479. document.getElementById('layer_menu').style.top = '0px';
  1480. document.getElementById('layer_menu').style.display = 'block';
  1481. icon.alt = '>';
  1482. icon.src = icon.dataset.up;
  1483. if (isIE) {
  1484. General_scroll();
  1485. }
  1486. } else {
  1487. document.getElementById('layer_menu').style.top = -1000 + 'px'; // fast scroll
  1488. document.getElementById('layer_menu').style.display = 'none';
  1489. icon.alt = 'v';
  1490. icon.src = icon.dataset.down;
  1491. }
  1492. }
  1493. // ------------------------------------------------------------------------------
  1494. function Side_menu_right (id_this) {
  1495. $('#side_menu').toggleClass('right');
  1496. $('#layer_menu').toggleClass('left');
  1497. var icon = $(id_this.childNodes[0]);
  1498. var current = icon.attr('src');
  1499. icon.attr('src', icon.attr('data-right')).attr('data-right', current);
  1500. icon = $(document.getElementById('layer_menu_sizer').childNodes[0])
  1501. .toggleClass('floatleft')
  1502. .toggleClass('floatright')
  1503. .children();
  1504. current = icon.attr('src');
  1505. icon.attr('src', icon.attr('data-right'));
  1506. icon.attr('data-right', current);
  1507. menu_moved = !menu_moved;
  1508. saveValueInConfig('side_menu', $('#side_menu').hasClass('right'));
  1509. $('#key_Left_Right').toggleClass('M_butt_Selected_down');
  1510. $('#key_Left_Right').toggleClass('M_butt');
  1511. }
  1512. // ------------------------------------------------------------------------------
  1513. function Show_text () {
  1514. $('#side_menu').find('.hidable').show();
  1515. }
  1516. function Hide_text () {
  1517. if (!always_show_text) {
  1518. $('#side_menu').find('.hidable').hide();
  1519. }
  1520. }
  1521. function Pin_text () {
  1522. always_show_text = !always_show_text;
  1523. $('#pin_Text').toggleClass('M_butt_Selected_down');
  1524. $('#pin_Text').toggleClass('M_butt');
  1525. saveValueInConfig('pin_text', always_show_text);
  1526. }
  1527. // ------------------------------------------------------------------------------
  1528. function Start_display_field () {
  1529. if (ON_relation) {
  1530. return;
  1531. }
  1532. if (!ON_display_field) {
  1533. ON_display_field = 1;
  1534. document.getElementById('designer_hint').innerHTML = PMA_messages.strChangeDisplay;
  1535. document.getElementById('designer_hint').style.display = 'block';
  1536. document.getElementById('display_field_button').className = 'M_butt_Selected_down';// '#FFEE99';gray #AAAAAA
  1537. if (isIE) { // correct for IE
  1538. document.getElementById('display_field_button').className = 'M_butt_Selected_down_IE';
  1539. }
  1540. } else {
  1541. document.getElementById('designer_hint').innerHTML = '';
  1542. document.getElementById('designer_hint').style.display = 'none';
  1543. document.getElementById('display_field_button').className = 'M_butt';
  1544. ON_display_field = 0;
  1545. }
  1546. }
  1547. // ------------------------------------------------------------------------------
  1548. var TargetColors = [];
  1549. function getColorByTarget (target) {
  1550. var color = ''; // "rgba(0,100,150,1)";
  1551. for (var a in TargetColors) {
  1552. if (TargetColors[a][0] === target) {
  1553. color = TargetColors[a][1];
  1554. break;
  1555. }
  1556. }
  1557. if (color.length === 0) {
  1558. var i = TargetColors.length + 1;
  1559. var d = i % 6;
  1560. var j = (i - d) / 6;
  1561. j = j % 4;
  1562. j++;
  1563. var color_case = [
  1564. [1, 0, 0],
  1565. [0, 1, 0],
  1566. [0, 0, 1],
  1567. [1, 1, 0],
  1568. [1, 0, 1],
  1569. [0, 1, 1]
  1570. ];
  1571. var a = color_case[d][0];
  1572. var b = color_case[d][1];
  1573. var c = color_case[d][2];
  1574. var e = (1 - (j - 1) / 6);
  1575. var r = Math.round(a * 200 * e);
  1576. var g = Math.round(b * 200 * e);
  1577. b = Math.round(c * 200 * e);
  1578. color = 'rgba(' + r + ',' + g + ',' + b + ',1)';
  1579. TargetColors.push([target, color]);
  1580. }
  1581. return color;
  1582. }
  1583. function Click_option (id_this, column_name, table_name) {
  1584. var left = Glob_X - (document.getElementById(id_this).offsetWidth >> 1);
  1585. document.getElementById(id_this).style.left = left + 'px';
  1586. // var top = Glob_Y - document.getElementById(id_this).offsetHeight - 10;
  1587. document.getElementById(id_this).style.top = (screen.height / 4) + 'px';
  1588. document.getElementById(id_this).style.display = 'block';
  1589. document.getElementById('option_col_name').innerHTML = '<strong>' + PMA_sprintf(PMA_messages.strAddOption, decodeURI(column_name)) + '</strong>';
  1590. col_name = column_name;
  1591. tab_name = table_name;
  1592. }
  1593. function Close_option () {
  1594. document.getElementById('designer_optionse').style.display = 'none';
  1595. document.getElementById('rel_opt').value = '--';
  1596. document.getElementById('Query').value = '';
  1597. document.getElementById('new_name').value = '';
  1598. document.getElementById('operator').value = '---';
  1599. document.getElementById('groupby').checked = false;
  1600. document.getElementById('h_rel_opt').value = '--';
  1601. document.getElementById('h_operator').value = '---';
  1602. document.getElementById('having').value = '';
  1603. document.getElementById('orderby').value = '---';
  1604. }
  1605. function Select_all (id_this, owner) {
  1606. var parent = document.form1;
  1607. downer = owner;
  1608. var i;
  1609. var k;
  1610. var tab = [];
  1611. for (i = 0; i < parent.elements.length; i++) {
  1612. if (parent.elements[i].type === 'checkbox' && parent.elements[i].id.substring(0, (9 + id_this.length)) === 'select_' + id_this + '._') {
  1613. if (document.getElementById('select_all_' + id_this).checked === true) {
  1614. parent.elements[i].checked = true;
  1615. parent.elements[i].disabled = true;
  1616. var temp = '`' + id_this.substring(owner.length + 1) + '`.*';
  1617. } else {
  1618. parent.elements[i].checked = false;
  1619. parent.elements[i].disabled = false;
  1620. }
  1621. }
  1622. }
  1623. if (document.getElementById('select_all_' + id_this).checked === true) {
  1624. select_field.push('`' + id_this.substring(owner.length + 1) + '`.*');
  1625. tab = id_this.split('.');
  1626. from_array.push(tab[1]);
  1627. } else {
  1628. for (i = 0; i < select_field.length; i++) {
  1629. if (select_field[i] === ('`' + id_this.substring(owner.length + 1) + '`.*')) {
  1630. select_field.splice(i, 1);
  1631. }
  1632. }
  1633. for (k = 0; k < from_array.length; k++) {
  1634. if (from_array[k] === id_this) {
  1635. from_array.splice(k, 1);
  1636. break;
  1637. }
  1638. }
  1639. }
  1640. Re_load();
  1641. }
  1642. function Table_onover (id_this, val, buil) {
  1643. buil = parseInt(buil);
  1644. if (!val) {
  1645. document.getElementById('id_zag_' + id_this).className = 'tab_zag_2';
  1646. if (buil) {
  1647. document.getElementById('id_zag_' + id_this + '_2').className = 'tab_zag_2';
  1648. }
  1649. } else {
  1650. document.getElementById('id_zag_' + id_this).className = 'tab_zag';
  1651. if (buil) {
  1652. document.getElementById('id_zag_' + id_this + '_2').className = 'tab_zag';
  1653. }
  1654. }
  1655. }
  1656. /* This function stores selected column information in select_field[]
  1657. * In case column is checked it add else it deletes
  1658. *
  1659. */
  1660. function store_column (id_this, owner, col) {
  1661. var i;
  1662. var k;
  1663. if (document.getElementById('select_' + owner + '.' + id_this + '._' + col).checked === true) {
  1664. select_field.push('`' + id_this + '`.`' + col + '`');
  1665. from_array.push(id_this);
  1666. } else {
  1667. for (i = 0; i < select_field.length; i++) {
  1668. if (select_field[i] === ('`' + id_this + '`.`' + col + '`')) {
  1669. select_field.splice(i, 1);
  1670. break;
  1671. }
  1672. }
  1673. for (k = 0; k < from_array.length; k++) {
  1674. if (from_array[k] === id_this) {
  1675. from_array.splice(k, 1);
  1676. break;
  1677. }
  1678. }
  1679. }
  1680. }
  1681. /**
  1682. * This function builds object and adds them to history_array
  1683. * first it does a few checks on each object, then makes an object(where,rename,groupby,aggregate,orderby)
  1684. * then a new history object is made and finally all these history objects are added to history_array[]
  1685. *
  1686. **/
  1687. function add_object () {
  1688. var p;
  1689. var where_obj;
  1690. var rel = document.getElementById('rel_opt');
  1691. var sum = 0;
  1692. var init = history_array.length;
  1693. if (rel.value !== '--') {
  1694. if (document.getElementById('Query').value === '') {
  1695. PMA_ajaxShowMessage(PMA_sprintf(PMA_messages.strQueryEmpty));
  1696. return;
  1697. }
  1698. p = document.getElementById('Query');
  1699. where_obj = new where(rel.value, p.value);// make where object
  1700. history_array.push(new history_obj(col_name, where_obj, tab_name, h_tabs[downer + '.' + tab_name], 'Where'));
  1701. sum = sum + 1;
  1702. }
  1703. if (document.getElementById('new_name').value !== '') {
  1704. var rename_obj = new rename(document.getElementById('new_name').value);// make Rename object
  1705. history_array.push(new history_obj(col_name, rename_obj, tab_name, h_tabs[downer + '.' + tab_name], 'Rename'));
  1706. sum = sum + 1;
  1707. }
  1708. if (document.getElementById('operator').value !== '---') {
  1709. var aggregate_obj = new aggregate(document.getElementById('operator').value);
  1710. history_array.push(new history_obj(col_name, aggregate_obj, tab_name, h_tabs[downer + '.' + tab_name], 'Aggregate'));
  1711. sum = sum + 1;
  1712. // make aggregate operator
  1713. }
  1714. if (document.getElementById('groupby').checked === true) {
  1715. history_array.push(new history_obj(col_name, 'GroupBy', tab_name, h_tabs[downer + '.' + tab_name], 'GroupBy'));
  1716. sum = sum + 1;
  1717. // make groupby
  1718. }
  1719. if (document.getElementById('h_rel_opt').value !== '--') {
  1720. if (document.getElementById('having').value === '') {
  1721. return;
  1722. }
  1723. where_obj = new having(
  1724. document.getElementById('h_rel_opt').value,
  1725. document.getElementById('having').value,
  1726. document.getElementById('h_operator').value
  1727. );// make where object
  1728. history_array.push(new history_obj(col_name, where_obj, tab_name, h_tabs[downer + '.' + tab_name], 'Having'));
  1729. sum = sum + 1;
  1730. // make having
  1731. }
  1732. if (document.getElementById('orderby').value !== '---') {
  1733. var oderby_obj = new orderby(document.getElementById('orderby').value);
  1734. history_array.push(new history_obj(col_name, oderby_obj, tab_name, h_tabs[downer + '.' + tab_name], 'OrderBy'));
  1735. sum = sum + 1;
  1736. // make orderby
  1737. }
  1738. PMA_ajaxShowMessage(PMA_sprintf(PMA_messages.strObjectsCreated, sum));
  1739. // output sum new objects created
  1740. var existingDiv = document.getElementById('ab');
  1741. existingDiv.innerHTML = display(init, history_array.length);
  1742. Close_option();
  1743. $('#ab').accordion('refresh');
  1744. }
  1745. AJAX.registerTeardown('designer/move.js', function () {
  1746. $('#side_menu').off('mouseenter mouseleave');
  1747. $('#key_Show_left_menu').off('click');
  1748. $('#toggleFullscreen').off('click');
  1749. $('#newPage').off('click');
  1750. $('#editPage').off('click');
  1751. $('#savePos').off('click');
  1752. $('#SaveAs').off('click');
  1753. $('#delPages').off('click');
  1754. $('#StartTableNew').off('click');
  1755. $('#rel_button').off('click');
  1756. $('#StartTableNew').off('click');
  1757. $('#display_field_button').off('click');
  1758. $('#reloadPage').off('click');
  1759. $('#angular_direct_button').off('click');
  1760. $('#grid_button').off('click');
  1761. $('#key_SB_all').off('click');
  1762. $('#SmallTabInvert').off('click');
  1763. $('#relLineInvert').off('click');
  1764. $('#exportPages').off('click');
  1765. $('#query_builder').off('click');
  1766. $('#key_Left_Right').off('click');
  1767. $('#pin_Text').off('click');
  1768. $('#canvas').off('click');
  1769. $('#key_HS_all').off('click');
  1770. $('#key_HS').off('click');
  1771. $('.scroll_tab_struct').off('click');
  1772. $('.scroll_tab_checkbox').off('click');
  1773. $('#id_scroll_tab').find('tr').off('click', '.designer_Tabs2,.designer_Tabs');
  1774. $('.designer_tab').off('click', '.select_all_1');
  1775. $('.designer_tab').off('click', '.small_tab,.small_tab2');
  1776. $('.designer_tab').off('click', '.small_tab_pref_1');
  1777. $('.tab_zag_noquery').off('mouseover');
  1778. $('.tab_zag_noquery').off('mouseout');
  1779. $('.tab_zag_query').off('mouseover');
  1780. $('.tab_zag_query').off('mouseout');
  1781. $('.designer_tab').off('click','.tab_field_2,.tab_field_3,.tab_field');
  1782. $('.designer_tab').off('click', '.select_all_store_col');
  1783. $('.designer_tab').off('click', '.small_tab_pref_click_opt');
  1784. $('#del_button').off('click');
  1785. $('#cancel_button').off('click');
  1786. $('#ok_add_object').off('click');
  1787. $('#cancel_close_option').off('click');
  1788. $('#ok_new_rel_panel').off('click');
  1789. $('#cancel_new_rel_panel').off('click');
  1790. });
  1791. AJAX.registerOnload('designer/move.js', function () {
  1792. $('#key_Show_left_menu').click(function () {
  1793. Show_left_menu(this);
  1794. return false;
  1795. });
  1796. $('#toggleFullscreen').click(function () {
  1797. Toggle_fullscreen();
  1798. return false;
  1799. });
  1800. $('#addOtherDbTables').click(function () {
  1801. Add_Other_db_tables();
  1802. return false;
  1803. });
  1804. $('#newPage').click(function () {
  1805. New();
  1806. return false;
  1807. });
  1808. $('#editPage').click(function () {
  1809. Edit_pages();
  1810. return false;
  1811. });
  1812. $('#savePos').click(function () {
  1813. Save3();
  1814. return false;
  1815. });
  1816. $('#SaveAs').click(function () {
  1817. Save_as();
  1818. return false;
  1819. });
  1820. $('#delPages').click(function () {
  1821. Delete_pages();
  1822. return false;
  1823. });
  1824. $('#StartTableNew').click(function () {
  1825. Start_table_new();
  1826. return false;
  1827. });
  1828. $('#rel_button').click(function () {
  1829. Start_relation();
  1830. return false;
  1831. });
  1832. $('#display_field_button').click(function () {
  1833. Start_display_field();
  1834. return false;
  1835. });
  1836. $('#reloadPage').click(function () {
  1837. $('#designer_tab').click();
  1838. });
  1839. $('#angular_direct_button').click(function () {
  1840. Angular_direct();
  1841. return false;
  1842. });
  1843. $('#grid_button').click(function () {
  1844. Grid();
  1845. return false;
  1846. });
  1847. $('#key_SB_all').click(function () {
  1848. Small_tab_all(this);
  1849. return false;
  1850. });
  1851. $('#SmallTabInvert').click(function () {
  1852. Small_tab_invert();
  1853. return false;
  1854. });
  1855. $('#relLineInvert').click(function () {
  1856. Relation_lines_invert();
  1857. return false;
  1858. });
  1859. $('#exportPages').click(function () {
  1860. Export_pages();
  1861. return false;
  1862. });
  1863. $('#query_builder').click(function () {
  1864. build_query('SQL Query on Database', 0);
  1865. });
  1866. $('#key_Left_Right').click(function () {
  1867. Side_menu_right(this);
  1868. return false;
  1869. });
  1870. $('#side_menu').hover(function () {
  1871. Show_text();
  1872. return false;
  1873. }, function () {
  1874. Hide_text();
  1875. return false;
  1876. });
  1877. $('#pin_Text').click(function () {
  1878. Pin_text(this);
  1879. return false;
  1880. });
  1881. $('#canvas').click(function (event) {
  1882. Canvas_click(this, event);
  1883. });
  1884. $('#key_HS_all').click(function () {
  1885. Hide_tab_all(this);
  1886. return false;
  1887. });
  1888. $('#key_HS').click(function () {
  1889. No_have_constr(this);
  1890. return false;
  1891. });
  1892. $('.scroll_tab_struct').click(function () {
  1893. Start_tab_upd($(this).attr('table_name'));
  1894. });
  1895. $('.scroll_tab_checkbox').click(function () {
  1896. VisibleTab(this,$(this).val());
  1897. });
  1898. $('#id_scroll_tab').find('tr').on('click', '.designer_Tabs2,.designer_Tabs', function () {
  1899. Select_tab($(this).attr('designer_url_table_name'));
  1900. });
  1901. $('.designer_tab').on('click', '.select_all_1', function () {
  1902. Select_all($(this).attr('designer_url_table_name'), $(this).attr('designer_out_owner'));
  1903. });
  1904. $('.designer_tab').on('click', '.small_tab,.small_tab2', function () {
  1905. Small_tab($(this).attr('table_name'), 1);
  1906. });
  1907. $('.designer_tab').on('click', '.small_tab_pref_1', function () {
  1908. Start_tab_upd($(this).attr('table_name_small'));
  1909. });
  1910. $('.tab_zag_noquery').mouseover(function () {
  1911. Table_onover($(this).attr('table_name'),0, $(this).attr('query_set'));
  1912. });
  1913. $('.tab_zag_noquery').mouseout(function () {
  1914. Table_onover($(this).attr('table_name'),1, $(this).attr('query_set'));
  1915. });
  1916. $('.tab_zag_query').mouseover(function () {
  1917. Table_onover($(this).attr('table_name'),0, 1);
  1918. });
  1919. $('.tab_zag_query').mouseout(function () {
  1920. Table_onover($(this).attr('table_name'),1, 1);
  1921. });
  1922. $('.designer_tab').on('click','.tab_field_2,.tab_field_3,.tab_field', function () {
  1923. var params = ($(this).attr('click_field_param')).split(',');
  1924. Click_field(params[3], params[0], params[1], params[2]);
  1925. });
  1926. $('.designer_tab').on('click', '.select_all_store_col', function () {
  1927. var params = ($(this).attr('store_column_param')).split(',');
  1928. store_column(params[0], params[1], params[2]);
  1929. });
  1930. $('.designer_tab').on('click', '.small_tab_pref_click_opt', function () {
  1931. var params = ($(this).attr('Click_option_param')).split(',');
  1932. Click_option(params[0], params[1], params[2]);
  1933. });
  1934. $('input#del_button').click(function () {
  1935. Upd_relation();
  1936. });
  1937. $('input#cancel_button').click(function () {
  1938. document.getElementById('layer_upd_relation').style.display = 'none';
  1939. Re_load();
  1940. });
  1941. $('input#ok_add_object').click(function () {
  1942. add_object();
  1943. });
  1944. $('input#cancel_close_option').click(function () {
  1945. Close_option();
  1946. });
  1947. $('input#ok_new_rel_panel').click(function () {
  1948. New_relation();
  1949. });
  1950. $('input#cancel_new_rel_panel').click(function () {
  1951. document.getElementById('layer_new_relation').style.display = 'none';
  1952. });
  1953. });