1 /* vim: set expandtab sw=4 ts=4 sts=4: */
3 * @package PhpMyAdmin-Designer
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;
10 AJAX.registerTeardown('designer/move.js', function () {
11 $(document).off('fullscreenchange');
12 $('#selflink').show();
15 AJAX.registerOnload('designer/move.js', function () {
16 $('#page_content').css({ 'margin-left': '3px' });
17 $(document).on('fullscreenchange', function () {
18 if (! $.fn.fullScreen()) {
19 $('#page_content').removeClass('content_fullscreen')
20 .css({ 'width': 'auto', 'height': 'auto' });
21 var $img = $('#toggleFullscreen').find('img');
22 var $span = $img.siblings('span');
23 $span.text($span.data('enter'));
24 $img.attr('src', $img.data('enter'))
25 .attr('title', $span.data('enter'));
29 $('#selflink').hide();
32 function make_zero () { // Function called if the user stays after seeing the confirmation prompt.
36 function MarkSaved () {
38 $('#saved_state').text('');
41 function MarkUnsaved () {
43 $('#saved_state').text('*');
59 var ON_display_field = 0;
60 // relation_style: 0 - angular 1 - direct
61 var ON_angular_direct = 1;
63 var link_relation = '';
66 var canvas_height = 0;
67 var osn_tab_width = 0;
68 var osn_tab_height = 0;
73 var layer_menu_cur_click = 0;
78 var menu_moved = false;
81 // ------------------------------------------------------------------------------
82 // ------------------------------------------------------------------------------
83 // ------------------------------------------------------------------------------
86 // window.captureEvents(Event.MOUSEDOWN | Event.MOUSEUP);
89 var isIE = document.all && !window.opera;
92 window.onscroll = General_scroll;
93 document.onselectstart = function () {
98 // document.onmouseup = function (){General_scroll_end();}
99 function MouseDown (e) {
100 Glob_X = dx = isIE ? e.clientX + document.body.scrollLeft : e.pageX;
101 Glob_Y = dy = isIE ? e.clientY + document.body.scrollTop : e.pageY;
103 if (e.target.tagName === 'SPAN') {
104 cur_click = e.target.parentNode.parentNode.parentNode.parentNode;
105 } else if (e.target.className === 'tab_zag_2') {
106 cur_click = e.target.parentNode.parentNode.parentNode;
107 } else if (e.target.className === 'icon') {
108 layer_menu_cur_click = 1;
109 } else if (e.target.className === 'M_butt') {
113 if (cur_click !== null) {
114 document.getElementById('canvas').style.display = 'none';
115 cur_click.style.zIndex = 2;
119 function MouseMove (e) {
120 if (e.preventDefault) {
124 var new_dx = isIE ? e.clientX + document.body.scrollLeft : e.pageX;
125 var new_dy = isIE ? e.clientY + document.body.scrollTop : e.pageY;
127 var delta_x = Glob_X - new_dx;
128 var delta_y = Glob_Y - new_dy;
133 if (cur_click !== null) {
136 var $cur_click = $(cur_click);
138 var cur_x = parseFloat($cur_click.attr('data-left') || $cur_click.css('left'));
139 var cur_y = parseFloat($cur_click.attr('data-top') || $cur_click.css('top'));
141 var new_x = cur_x - delta_x;
142 var new_y = cur_y - delta_y;
147 $cur_click.attr('data-left', new_x);
148 $cur_click.attr('data-top', new_y);
151 new_x = parseInt(new_x / grid_size) * grid_size;
152 new_y = parseInt(new_y / grid_size) * grid_size;
155 $cur_click.css('left', new_x + 'px');
156 $cur_click.css('top', new_y + 'px');
157 } else if (layer_menu_cur_click) {
163 var $layer_menu = $('#layer_menu');
164 var new_width = $layer_menu.width() + delta_x;
165 if (new_width < 150) {
170 $layer_menu.width(new_width);
173 if (ON_relation || ON_display_field) {
174 document.getElementById('designer_hint').style.left = (Glob_X + 20) + 'px';
175 document.getElementById('designer_hint').style.top = (Glob_Y + 20) + 'px';
179 function MouseUp (e) {
180 if (cur_click !== null) {
181 document.getElementById('canvas').style.display = 'inline-block';
183 cur_click.style.zIndex = 1;
186 layer_menu_cur_click = 0;
187 // window.releaseEvents(Event.MOUSEMOVE);
189 // ------------------------------------------------------------------------------
190 // ------------------------------------------------------------------------------
191 // ------------------------------------------------------------------------------
196 // return s.substring(0,s.length-2)*1; //re = /(\d+)\w*/; newstr = str.replace(re, "$1");
199 function Canvas_pos () {
200 canvas_width = document.getElementById('canvas').width = osn_tab_width - 3;
201 canvas_height = document.getElementById('canvas').height = osn_tab_height - 3;
204 document.getElementById('canvas').style.width = ((osn_tab_width - 3) ? (osn_tab_width - 3) : 0) + 'px';
205 document.getElementById('canvas').style.height = ((osn_tab_height - 3) ? (osn_tab_height - 3) : 0) + 'px';
209 function Osn_tab_pos () {
210 osn_tab_width = parseInt(document.getElementById('osn_tab').style.width, 10);
211 osn_tab_height = parseInt(document.getElementById('osn_tab').style.height, 10);
214 function setDefaultValuesFromSavedState () {
215 if ($('#angular_direct_button').attr('class') === 'M_butt') {
216 ON_angular_direct = 0;
218 ON_angular_direct = 1;
222 if ($('#grid_button').attr('class') === 'M_butt') {
229 var $relLineInvert = $('#relLineInvert');
230 if ($relLineInvert.attr('class') === 'M_butt') {
231 show_relation_lines = false;
232 $relLineInvert.attr('class', 'M_butt');
234 show_relation_lines = true;
235 $relLineInvert.attr('class', 'M_butt_Selected_down');
237 Relation_lines_invert();
239 if ($('#pin_Text').attr('class') === 'M_butt_Selected_down') {
240 always_show_text = true;
243 always_show_text = false;
246 var $key_SB_all = $('#key_SB_all');
247 if ($key_SB_all.attr('class') === 'M_butt_Selected_down') {
249 $key_SB_all.toggleClass('M_butt_Selected_down');
250 $key_SB_all.toggleClass('M_butt');
253 var $key_Left_Right = $('#key_Left_Right');
254 if ($key_Left_Right.attr('class') === 'M_butt_Selected_down') {
255 $key_Left_Right.click();
262 document.getElementById('layer_menu').style.top = -1000 + 'px'; // fast scroll
263 // sm_x += document.getElementById('osn_tab').offsetLeft;
264 // sm_y += document.getElementById('osn_tab').offsetTop;
269 setDefaultValuesFromSavedState();
270 id_hint = document.getElementById('designer_hint');
277 // -------------------------------- new -----------------------------------------
278 function Rezize_osn_tab () {
281 for (var key in j_tabs) {
282 var k_x = parseInt(document.getElementById(key).style.left, 10) + document.getElementById(key).offsetWidth;
283 var k_y = parseInt(document.getElementById(key).style.top, 10) + document.getElementById(key).offsetHeight;
284 max_X = max_X < k_x ? k_x : max_X;
285 max_Y = max_Y < k_y ? k_y : max_Y;
288 osn_tab_width = max_X + 50;
289 osn_tab_height = max_Y + 50;
291 document.getElementById('osn_tab').style.width = osn_tab_width + 'px';
292 document.getElementById('osn_tab').style.height = osn_tab_height + 'px';
294 // ------------------------------------------------------------------------------
297 * refreshes display, must be called after state changes
299 function Re_load () {
311 for (key in contr[K]) {
313 for (key2 in contr[K][key]) {
315 for (key3 in contr[K][key][key2]) {
317 if (!document.getElementById('check_vis_' + key2).checked ||
318 !document.getElementById('check_vis_' + contr[K][key][key2][key3][0]).checked) {
322 var x1_left = document.getElementById(key2).offsetLeft + 1;
323 var x1_right = x1_left + document.getElementById(key2).offsetWidth;
324 var x2_left = document.getElementById(contr[K][key][key2][key3][0]).offsetLeft;
325 var x2_right = x2_left + document.getElementById(contr[K][key][key2][key3][0]).offsetWidth;
326 a[0] = Math.abs(x1_left - x2_left);
327 a[1] = Math.abs(x1_left - x2_right);
328 a[2] = Math.abs(x1_right - x2_left);
329 a[3] = Math.abs(x1_right - x2_right);
330 n = s_left = s_right = 0;
331 for (var i = 1; i < 4; i++) {
338 x2 = x2_right + sm_s;
344 x1 = x1_right + sm_s;
351 x1 = x1_right + sm_s;
352 x2 = x2_right + sm_s;
361 var row_offset_top = 0;
362 var tab_hide_button = document.getElementById('id_hide_tbody_' + key2);
364 if (tab_hide_button.innerHTML === 'v') {
365 var fromColumn = document.getElementById(key2 + '.' + key3);
367 row_offset_top = fromColumn.offsetTop;
373 var y1 = document.getElementById(key2).offsetTop +
379 tab_hide_button = document.getElementById('id_hide_tbody_' + contr[K][key][key2][key3][0]);
380 if (tab_hide_button.innerHTML === 'v') {
381 var toColumn = document.getElementById(contr[K][key][key2][key3][0] +
382 '.' + contr[K][key][key2][key3][1]);
384 row_offset_top = toColumn.offsetTop;
391 document.getElementById(contr[K][key][key2][key3][0]).offsetTop +
395 var osn_tab = document.getElementById('osn_tab');
398 x1 + osn_tab.offsetLeft,
399 y1 - osn_tab.offsetTop,
400 x2 + osn_tab.offsetLeft,
401 y2 - osn_tab.offsetTop,
402 getColorByTarget(contr[K][key][key2][key3][0] + '.' + contr[K][key][key2][key3][1])
411 * draws a line from x1:y1 to x2:y2 with color
413 function Line (x1, y1, x2, y2, color_line) {
414 var canvas = document.getElementById('canvas');
415 var ctx = canvas.getContext('2d');
416 ctx.strokeStyle = color_line;
425 * draws a relation/constraint line, whether angular or not
427 function Line0 (x1, y1, x2, y2, color_line) {
428 if (! show_relation_lines) {
431 Circle(x1, y1, 3, 3, color_line);
432 Rect(x2 - 1, y2 - 2, 4, 4, color_line);
434 if (ON_angular_direct) {
435 Line2(x1, y1, x2, y2, color_line);
437 Line3(x1, y1, x2, y2, color_line);
442 * draws a angular relation/constraint line
444 function Line2 (x1, y1, x2, y2, color_line) {
454 } else if (x1 < x2) {
462 Line(x1, y1, x1_, y1, color_line);
463 Line(x2, y2, x2_, y2, color_line);
464 Line(x1_, y1, x2_, y2, color_line);
468 * draws a relation/constraint line
470 function Line3 (x1, y1, x2, y2, color_line) {
476 x1_ += x2 - x1 + sm_add;
479 x2_ += x1 - x2 + sm_add;
483 Line(x1, y1, x1_, y1, color_line);
484 Line(x2, y2, x2_, y2, color_line);
485 Line(x1_, y1, x2_, y2, color_line);
490 x2_ -= x2 - x1 + sm_add;
493 x1_ -= x1 - x2 + sm_add;
497 Line(x1, y1, x1_, y1, color_line);
498 Line(x2, y2, x2_, y2, color_line);
499 Line(x1_, y1, x2_, y2, color_line);
503 var x_s = (x1 + x2) / 2;
504 Line(x1, y1, x_s, y1, color_line);
505 Line(x_s, y2, x2, y2, color_line);
506 Line(x_s, y1, x_s, y2, color_line);
509 function Circle (x, y, r, w, color) {
510 var ctx = document.getElementById('canvas').getContext('2d');
514 ctx.strokeStyle = color;
515 ctx.arc(x, y, r, 0, 2 * Math.PI, true);
520 var canvas = document.getElementById('canvas');
521 var ctx = canvas.getContext('2d');
522 ctx.clearRect(0, 0, canvas_width, canvas_height);
525 function Rect (x1, y1, w, h, color) {
526 var ctx = document.getElementById('canvas').getContext('2d');
527 ctx.fillStyle = color;
528 ctx.fillRect(x1, y1, w, h);
530 // --------------------------- FULLSCREEN -------------------------------------
531 function Toggle_fullscreen () {
533 var $img = $('#toggleFullscreen').find('img');
534 var $span = $img.siblings('span');
535 var $content = $('#page_content');
536 if (! $content.fullScreen()) {
537 $img.attr('src', $img.data('exit'))
538 .attr('title', $span.data('exit'));
539 $span.text($span.data('exit'));
541 .addClass('content_fullscreen')
542 .css({ 'width': screen.width - 5, 'height': screen.height - 5 });
544 $content.fullScreen(true);
546 $img.attr('src', $img.data('enter'))
547 .attr('title', $span.data('enter'));
548 $span.text($span.data('enter'));
549 $content.fullScreen(false);
552 saveValueInConfig('full_screen', value_sent);
555 function addTableToTablesList (index, table_dom) {
556 var db = $(table_dom).find('.small_tab_pref').attr('db');
557 var table = $(table_dom).find('.small_tab_pref').attr('table_name');
558 var db_encoded = $(table_dom).find('.small_tab_pref').attr('db_url');
559 var table_encoded = $(table_dom).find('.small_tab_pref').attr('table_name_url');
560 var $new_table_line = $('<tr>' +
561 ' <td title="' + PMA_messages.strStructure + '"' +
563 ' class="L_butt2_1">' +
565 ' db="' + db_encoded + '"' +
566 ' table_name="' + table_encoded + '"' +
567 ' class="scroll_tab_struct"' +
568 ' src="' + pmaThemeImage + 'designer/exec.png"/>' +
570 ' <td width="1px">' +
571 ' <input class="scroll_tab_checkbox"' +
572 ' title="' + PMA_messages.strHide + '"' +
573 ' id="check_vis_' + db_encoded + '.' + table_encoded + '"' +
574 ' style="margin:0;"' +
576 ' value="' + db_encoded + '.' + table_encoded + '"' +
577 ' checked="checked"' +
580 ' <td class="designer_Tabs"' +
581 ' designer_url_table_name="' + db_encoded + '.' + table_encoded + '">' + db + '.' + table + '</td>' +
583 $('#id_scroll_tab table').first().append($new_table_line);
584 $($new_table_line).find('.scroll_tab_struct').click(function () {
585 Start_tab_upd(db, table);
587 $($new_table_line).on('click', '.designer_Tabs2,.designer_Tabs', function () {
588 Select_tab($(this).attr('designer_url_table_name'));
590 $($new_table_line).find('.scroll_tab_checkbox').click(function () {
591 VisibleTab(this,$(this).val());
593 var $tables_counter = $('#tables_counter');
594 $tables_counter.text(parseInt($tables_counter.text(), 10) + 1);
597 function Add_Other_db_tables () {
598 var button_options = {};
599 button_options[PMA_messages.strGo] = function () {
600 var db = $('#add_table_from').val();
601 var table = $('#add_table').val();
603 // Check if table already imported or not.
604 var $table = $('[id="' + encodeURIComponent(db) + '.' + encodeURIComponent(table) + '"]');
605 if ($table.length !== 0) {
607 PMA_sprintf(PMA_messages.strTableAlreadyExists, db + '.' + table),
614 $.post('db_designer.php', {
615 'ajax_request' : true,
616 'dialog' : 'add_table',
619 'server': PMA_commonParams.get('server')
621 var $newTableDom = $(data.message);
622 $newTableDom.find('a').first().remove();
623 $('#container-form').append($newTableDom);
624 enableTableEvents(null, $newTableDom);
625 addTableToTablesList(null, $newTableDom);
626 var dbEncoded = $($newTableDom).find('.small_tab_pref').attr('db_url');
627 var tableEncoded = $($newTableDom).find('.small_tab_pref').attr('table_name_url');
628 j_tabs[dbEncoded + '.' + tableEncoded] = 1;
631 $(this).dialog('close');
633 button_options[PMA_messages.strCancel] = function () {
634 $(this).dialog('close');
637 var $select_db = $('<select id="add_table_from"></select>');
638 $select_db.append('<option value="">' + PMA_messages.strNone + '</option>');
640 var $select_table = $('<select id="add_table"></select>');
641 $select_table.append('<option value="">' + PMA_messages.strNone + '</option>');
644 'ajax_request' : true,
645 'sql_query' : 'SHOW databases;',
646 'server': PMA_commonParams.get('server')
648 $(data.message).find('table.table_results.data.ajax').find('td.data').each(function () {
649 var val = $(this)[0].innerText;
650 $select_db.append($('<option></option>').val(val).text(val));
654 var $form = $('<form action="" class="ajax"></form>')
655 .append($select_db).append($select_table);
656 $('<div id="page_add_tables_dialog"></div>')
659 appendTo: '#page_content',
660 title: PMA_messages.strAddTables,
663 buttons: button_options,
669 $('#add_table_from').change(function () {
671 var db_name = $(this).val();
672 var sql_query = 'SHOW tables;';
674 'ajax_request' : true,
675 'sql_query': sql_query,
677 'server': PMA_commonParams.get('server')
679 $select_table.html('');
680 var rows = $(data.message).find('table.table_results.data.ajax').find('td.data');
681 if (rows.length === 0) {
682 $select_table.append('<option value="">' + PMA_messages.strNone + '</option>');
684 rows.each(function () {
685 var val = $(this)[0].innerText;
686 $select_table.append($('<option></option>').val(val).text(val));
694 // ------------------------------ NEW ------------------------------------------
697 Prompt_to_save_current_page(function () {
702 // ------------------------------ SAVE ------------------------------------------
704 function Save (url) {
705 for (var key in j_tabs) {
706 document.getElementById('t_x_' + key + '_').value = parseInt(document.getElementById(key).style.left, 10);
707 document.getElementById('t_y_' + key + '_').value = parseInt(document.getElementById(key).style.top, 10);
708 document.getElementById('t_v_' + key + '_').value = document.getElementById('id_tbody_' + key).style.display === 'none' ? 0 : 1;
709 document.getElementById('t_h_' + key + '_').value = document.getElementById('check_vis_' + key).checked ? 1 : 0;
711 document.form1.action = url;
712 $(document.form1).submit();
715 function Get_url_pos (forceString) {
716 if (designer_tables_enabled || forceString) {
718 var argsep = PMA_commonParams.get('arg_separator');
720 for (var key in j_tabs) {
721 poststr += argsep + 't_x[' + i + ']=' + parseInt(document.getElementById(key).style.left, 10);
722 poststr += argsep + 't_y[' + i + ']=' + parseInt(document.getElementById(key).style.top, 10);
723 poststr += argsep + 't_v[' + i + ']=' + (document.getElementById('id_tbody_' + key).style.display === 'none' ? 0 : 1);
724 poststr += argsep + 't_h[' + i + ']=' + (document.getElementById('check_vis_' + key).checked ? 1 : 0);
725 poststr += argsep + 't_db[' + i + ']=' + $(document.getElementById(key)).attr('db_url');
726 poststr += argsep + 't_tbl[' + i + ']=' + $(document.getElementById(key)).attr('table_name_url');
732 for (var key in j_tabs) {
733 if (document.getElementById('check_vis_' + key).checked) {
734 var x = parseInt(document.getElementById(key).style.left, 10);
735 var y = parseInt(document.getElementById(key).style.top, 10);
736 var tbCoords = new TableCoordinate(
737 $(document.getElementById(key)).attr('db_url'),
738 $(document.getElementById(key)).attr('table_name_url'),
740 coords.push(tbCoords);
747 function Save2 (callback) {
748 if (designer_tables_enabled) {
749 var argsep = PMA_commonParams.get('arg_separator');
750 var poststr = 'operation=savePage' + argsep + 'save_page=same' + argsep + 'ajax_request=true';
751 poststr += argsep + 'server=' + server + argsep + 'db=' + encodeURIComponent(db) + argsep + 'selected_page=' + selected_page;
752 poststr += Get_url_pos();
754 var $msgbox = PMA_ajaxShowMessage(PMA_messages.strProcessingRequest);
755 $.post('db_designer.php', poststr, function (data) {
756 if (data.success === false) {
757 PMA_ajaxShowMessage(data.error, false);
759 PMA_ajaxRemoveMessage($msgbox);
760 PMA_ajaxShowMessage(PMA_messages.strModificationSaved);
762 if (typeof callback !== 'undefined') {
768 var name = $('#page_name').html().trim();
769 Save_to_selected_page(db, selected_page, name, Get_url_pos(), function (page) {
771 if (typeof callback !== 'undefined') {
779 function submitSaveDialogAndClose (callback) {
780 var $form = $('#save_page');
781 var name = $form.find('input[name="selected_value"]').val().trim();
783 PMA_ajaxShowMessage(PMA_messages.strEnterValidPageName, false);
786 $('#page_save_dialog').dialog('close');
788 if (designer_tables_enabled) {
789 var $msgbox = PMA_ajaxShowMessage(PMA_messages.strProcessingRequest);
790 PMA_prepareForAjaxRequest($form);
791 $.post($form.attr('action'), $form.serialize() + Get_url_pos(), function (data) {
792 if (data.success === false) {
793 PMA_ajaxShowMessage(data.error, false);
795 PMA_ajaxRemoveMessage($msgbox);
798 selected_page = data.id;
800 $('#page_name').text(name);
801 if (typeof callback !== 'undefined') {
807 Save_to_new_page(db, name, Get_url_pos(), function (page) {
810 selected_page = page.pg_nr;
812 $('#page_name').text(page.page_descr);
813 if (typeof callback !== 'undefined') {
820 function Save3 (callback) {
821 if (selected_page !== -1) {
824 var button_options = {};
825 button_options[PMA_messages.strGo] = function () {
826 var $form = $('#save_page');
829 button_options[PMA_messages.strCancel] = function () {
830 $(this).dialog('close');
833 var $form = $('<form action="db_designer.php" method="post" name="save_page" id="save_page" class="ajax"></form>')
834 .append('<input type="hidden" name="server" value="' + server + '" />')
835 .append($('<input type="hidden" name="db" />').val(db))
836 .append('<input type="hidden" name="operation" value="savePage" />')
837 .append('<input type="hidden" name="save_page" value="new" />')
838 .append('<label for="selected_value">' + PMA_messages.strPageName +
839 '</label>:<input type="text" name="selected_value" />');
840 $form.on('submit', function (e) {
842 submitSaveDialogAndClose(callback);
844 $('<div id="page_save_dialog"></div>')
847 appendTo: '#page_content',
848 title: PMA_messages.strSavePage,
851 buttons: button_options,
859 // ------------------------------ EDIT PAGES ------------------------------------------
860 function Edit_pages () {
861 Prompt_to_save_current_page(function () {
862 var button_options = {};
863 button_options[PMA_messages.strGo] = function () {
864 var $form = $('#edit_delete_pages');
865 var selected = $form.find('select[name="selected_page"]').val();
866 if (selected === '0') {
867 PMA_ajaxShowMessage(PMA_messages.strSelectPage, 2000);
870 $(this).dialog('close');
873 button_options[PMA_messages.strCancel] = function () {
874 $(this).dialog('close');
877 var $msgbox = PMA_ajaxShowMessage();
878 $.post('db_designer.php', {
879 'ajax_request': true,
884 if (data.success === false) {
885 PMA_ajaxShowMessage(data.error, false);
887 PMA_ajaxRemoveMessage($msgbox);
889 if (! designer_tables_enabled) {
890 Create_page_list(db, function (options) {
891 $('#selected_page').append(options);
894 $('<div id="page_edit_dialog"></div>')
895 .append(data.message)
897 appendTo: '#page_content',
898 title: PMA_messages.strOpenPage,
901 buttons: button_options,
911 // ----------------------------- DELETE PAGES ---------------------------------------
912 function Delete_pages () {
913 var button_options = {};
914 button_options[PMA_messages.strGo] = function () {
915 var $form = $('#edit_delete_pages');
916 var selected = $form.find('select[name="selected_page"]').val();
917 if (selected === '0') {
918 PMA_ajaxShowMessage(PMA_messages.strSelectPage, 2000);
922 var $msgbox = PMA_ajaxShowMessage(PMA_messages.strProcessingRequest);
923 var deleting_current_page = selected === selected_page;
924 PMA_prepareForAjaxRequest($form);
926 if (designer_tables_enabled) {
927 $.post($form.attr('action'), $form.serialize(), function (data) {
928 if (data.success === false) {
929 PMA_ajaxShowMessage(data.error, false);
931 PMA_ajaxRemoveMessage($msgbox);
932 if (deleting_current_page) {
935 PMA_ajaxShowMessage(PMA_messages.strSuccessfulPageDelete);
940 Delete_page(selected, function (success) {
942 PMA_ajaxShowMessage('Error', false);
944 PMA_ajaxRemoveMessage($msgbox);
945 if (deleting_current_page) {
948 PMA_ajaxShowMessage(PMA_messages.strSuccessfulPageDelete);
954 $(this).dialog('close');
956 button_options[PMA_messages.strCancel] = function () {
957 $(this).dialog('close');
960 var $msgbox = PMA_ajaxShowMessage();
961 $.post('db_designer.php', {
962 'ajax_request': true,
967 if (data.success === false) {
968 PMA_ajaxShowMessage(data.error, false);
970 PMA_ajaxRemoveMessage($msgbox);
972 if (! designer_tables_enabled) {
973 Create_page_list(db, function (options) {
974 $('#selected_page').append(options);
978 $('<div id="page_delete_dialog"></div>')
979 .append(data.message)
981 appendTo: '#page_content',
982 title: PMA_messages.strDeletePage,
985 buttons: button_options,
994 // ------------------------------ SAVE AS PAGES ---------------------------------------
995 function Save_as () {
996 var button_options = {};
997 button_options[PMA_messages.strGo] = function () {
998 var $form = $('#save_as_pages');
999 var selected_value = $form.find('input[name="selected_value"]').val().trim();
1000 var $selected_page = $form.find('select[name="selected_page"]');
1001 var choice = $form.find('input[name="save_page"]:checked').val();
1004 if (choice === 'same') {
1005 if ($selected_page.val() === '0') {
1006 PMA_ajaxShowMessage(PMA_messages.strSelectPage, 2000);
1009 name = $selected_page.find('option:selected').text();
1010 } else if (choice === 'new') {
1011 if (selected_value === '') {
1012 PMA_ajaxShowMessage(PMA_messages.strEnterValidPageName, 2000);
1015 name = selected_value;
1018 var $msgbox = PMA_ajaxShowMessage(PMA_messages.strProcessingRequest);
1019 if (designer_tables_enabled) {
1020 PMA_prepareForAjaxRequest($form);
1021 $.post($form.attr('action'), $form.serialize() + Get_url_pos(), function (data) {
1022 if (data.success === false) {
1023 PMA_ajaxShowMessage(data.error, false);
1025 PMA_ajaxRemoveMessage($msgbox);
1028 selected_page = data.id;
1030 Load_page(selected_page);
1034 if (choice === 'same') {
1035 var selected_page_id = $selected_page.find('option:selected').val();
1036 Save_to_selected_page(db, selected_page_id, name, Get_url_pos(), function (page) {
1037 PMA_ajaxRemoveMessage($msgbox);
1040 selected_page = page.pg_nr;
1042 Load_page(selected_page);
1044 } else if (choice === 'new') {
1045 Save_to_new_page(db, name, Get_url_pos(), function (page) {
1046 PMA_ajaxRemoveMessage($msgbox);
1049 selected_page = page.pg_nr;
1051 Load_page(selected_page);
1056 $(this).dialog('close');
1058 button_options[PMA_messages.strCancel] = function () {
1059 $(this).dialog('close');
1062 var $msgbox = PMA_ajaxShowMessage();
1063 $.post('db_designer.php', {
1064 'ajax_request': true,
1068 }, function (data) {
1069 if (data.success === false) {
1070 PMA_ajaxShowMessage(data.error, false);
1072 PMA_ajaxRemoveMessage($msgbox);
1074 if (! designer_tables_enabled) {
1075 Create_page_list(db, function (options) {
1076 $('#selected_page').append(options);
1080 $('<div id="page_save_as_dialog"></div>')
1081 .append(data.message)
1083 appendTo: '#page_content',
1084 title: PMA_messages.strSavePageAs,
1087 buttons: button_options,
1088 close: function () {
1092 // select current page by default
1093 if (selected_page !== -1) {
1094 $('select[name="selected_page"]').val(selected_page);
1100 function Prompt_to_save_current_page (callback) {
1101 if (_change === 1 || selected_page === -1) {
1102 var button_options = {};
1103 button_options[PMA_messages.strYes] = function () {
1104 $(this).dialog('close');
1107 button_options[PMA_messages.strNo] = function () {
1108 $(this).dialog('close');
1111 button_options[PMA_messages.strCancel] = function () {
1112 $(this).dialog('close');
1114 $('<div id="prompt_save_dialog"></div>')
1115 .append('<div>' + PMA_messages.strLeavingPage + '</div>')
1117 appendTo: '#page_content',
1118 title: PMA_messages.strSavePage,
1121 buttons: button_options,
1122 close: function () {
1131 // ------------------------------ EXPORT PAGES ---------------------------------------
1132 function Export_pages () {
1133 var button_options = {};
1134 button_options[PMA_messages.strGo] = function () {
1135 $('#id_export_pages').submit();
1136 $(this).dialog('close');
1138 button_options[PMA_messages.strCancel] = function () {
1139 $(this).dialog('close');
1141 var $msgbox = PMA_ajaxShowMessage();
1142 var argsep = PMA_commonParams.get('arg_separator');
1144 $.post('db_designer.php', {
1145 'ajax_request': true,
1149 'selected_page': selected_page
1150 }, function (data) {
1151 if (data.success === false) {
1152 PMA_ajaxShowMessage(data.error, false);
1154 PMA_ajaxRemoveMessage($msgbox);
1156 var $form = $(data.message);
1157 if (!designer_tables_enabled) {
1158 $form.append('<input type="hidden" name="offline_export" value="true" />');
1160 $.each(Get_url_pos(true).substring(1).split(argsep), function () {
1161 var pair = this.split('=');
1162 var input = $('<input type="hidden" />');
1163 input.attr('name', pair[0]);
1164 input.attr('value', pair[1]);
1165 $form.append(input);
1167 var $formatDropDown = $form.find('#plugins');
1168 $formatDropDown.change(function () {
1169 var format = $formatDropDown.val();
1170 $form.find('.format_specific_options').hide();
1171 $form.find('#' + format + '_options').show();
1172 }).trigger('change');
1174 $('<div id="page_export_dialog"></div>')
1177 appendTo: '#page_content',
1178 title: PMA_messages.strExportRelationalSchema,
1181 buttons: button_options,
1182 close: function () {
1188 }// end export pages
1190 function Load_page (page) {
1191 if (designer_tables_enabled) {
1192 var param_page = '';
1193 var argsep = PMA_commonParams.get('arg_separator');
1194 if (page !== null) {
1195 param_page = argsep + 'page=' + page;
1197 $('<a href="db_designer.php?server=' + server + argsep + 'db=' + encodeURIComponent(db) + param_page + '"></a>')
1198 .appendTo($('#page_content'))
1201 if (page === null) {
1202 Show_tables_in_landing_page(db);
1203 } else if (page > -1) {
1204 Load_HTML_for_page(page);
1205 } else if (page === -1) {
1206 Show_new_page_tables(true);
1213 var value_sent = '';
1217 document.getElementById('grid_button').className = 'M_butt_Selected_down';
1219 document.getElementById('grid_button').className = 'M_butt';
1223 saveValueInConfig('snap_to_grid', value_sent);
1226 function Angular_direct () {
1227 var value_sent = '';
1228 if (ON_angular_direct) {
1229 ON_angular_direct = 0;
1230 value_sent = 'angular';
1231 document.getElementById('angular_direct_button').className = 'M_butt_Selected_down';
1233 ON_angular_direct = 1;
1234 value_sent = 'direct';
1235 document.getElementById('angular_direct_button').className = 'M_butt';
1237 saveValueInConfig('angular_direct', value_sent);
1241 function saveValueInConfig (index_sent, value_sent) {
1242 $.post('db_designer.php',
1243 { operation: 'save_setting_value', index: index_sent, ajax_request: true, server: server, value: value_sent },
1245 if (data.success === false) {
1246 PMA_ajaxShowMessage(data.error, false);
1251 // ++++++++++++++++++++++++++++++ RELATION ++++++++++++++++++++++++++++++++++++++
1252 function Start_relation () {
1253 if (ON_display_field) {
1258 document.getElementById('foreign_relation').style.display = '';
1260 document.getElementById('designer_hint').innerHTML = PMA_messages.strSelectReferencedKey;
1261 document.getElementById('designer_hint').style.display = 'block';
1262 document.getElementById('rel_button').className = 'M_butt_Selected_down';
1264 document.getElementById('designer_hint').innerHTML = '';
1265 document.getElementById('designer_hint').style.display = 'none';
1266 document.getElementById('rel_button').className = 'M_butt';
1273 function Click_field (db, T, f, PK) {
1275 var argsep = PMA_commonParams.get('arg_separator');
1278 // .style.display=='none' .style.display = 'none'
1280 alert(PMA_messages.strPleaseSelectPrimaryOrUniqueKey);
1283 if (j_tabs[db + '.' + T] !== 1) {
1284 document.getElementById('foreign_relation').style.display = 'none';
1287 link_relation = 'DB1=' + db + argsep + 'T1=' + T + argsep + 'F1=' + f;
1288 document.getElementById('designer_hint').innerHTML = PMA_messages.strSelectForeignKey;
1290 Start_relation(); // hidden hint...
1291 if (j_tabs[db + '.' + T] !== 1 || !PK) {
1292 document.getElementById('foreign_relation').style.display = 'none';
1294 var left = Glob_X - (document.getElementById('layer_new_relation').offsetWidth >> 1);
1295 document.getElementById('layer_new_relation').style.left = left + 'px';
1296 var top = Glob_Y - document.getElementById('layer_new_relation').offsetHeight;
1297 document.getElementById('layer_new_relation').style.top = top + 'px';
1298 document.getElementById('layer_new_relation').style.display = 'block';
1299 link_relation += argsep + 'DB2=' + db + argsep + 'T2=' + T + argsep + 'F2=' + f;
1303 if (ON_display_field) {
1304 // if is display field
1305 if (display_field[T] === f) {
1306 old_class = 'tab_field';
1307 delete display_field[T];
1309 old_class = 'tab_field_3';
1310 if (display_field[T]) {
1311 document.getElementById('id_tr_' + T + '.' + display_field[T]).className = 'tab_field';
1312 delete display_field[T];
1314 display_field[T] = f;
1316 ON_display_field = 0;
1317 document.getElementById('designer_hint').innerHTML = '';
1318 document.getElementById('designer_hint').style.display = 'none';
1319 document.getElementById('display_field_button').className = 'M_butt';
1321 var $msgbox = PMA_ajaxShowMessage(PMA_messages.strProcessingRequest);
1322 $.post('db_designer.php',
1323 { operation: 'setDisplayField', ajax_request: true, server: server, db: db, table: T, field: f },
1325 if (data.success === false) {
1326 PMA_ajaxShowMessage(data.error, false);
1328 PMA_ajaxRemoveMessage($msgbox);
1329 PMA_ajaxShowMessage(PMA_messages.strModificationSaved);
1335 function New_relation () {
1336 document.getElementById('layer_new_relation').style.display = 'none';
1337 var argsep = PMA_commonParams.get('arg_separator');
1338 link_relation += argsep + 'server=' + server + argsep + 'db=' + db + argsep + 'db2=p';
1339 link_relation += argsep + 'on_delete=' + document.getElementById('on_delete').value + argsep + 'on_update=' + document.getElementById('on_update').value;
1340 link_relation += argsep + 'operation=addNewRelation' + argsep + 'ajax_request=true';
1342 var $msgbox = PMA_ajaxShowMessage(PMA_messages.strProcessingRequest);
1343 $.post('db_designer.php', link_relation, function (data) {
1344 if (data.success === false) {
1345 PMA_ajaxShowMessage(data.error, false);
1347 PMA_ajaxRemoveMessage($msgbox);
1348 Load_page(selected_page);
1353 // -------------------------- create tables -------------------------------------
1355 function Start_table_new () {
1356 PMA_commonParams.set('table', '');
1357 PMA_commonActions.refreshMain('tbl_create.php');
1360 function Start_tab_upd (db, table) {
1361 PMA_commonParams.set('db', db);
1362 PMA_commonParams.set('table', table);
1363 PMA_commonActions.refreshMain('tbl_structure.php');
1365 // --------------------------- hide tables --------------------------------------
1367 // max/min all tables
1368 function Small_tab_all (id_this) {
1369 var icon = id_this.children[0];
1370 var value_sent = '';
1372 if (icon.alt === 'v') {
1373 $('.designer_tab .small_tab,.small_tab2').each(function(index, element) {
1374 if ($(element).text() === 'v') {
1375 Small_tab($(element).attr('table_name'), 0);
1379 icon.src = icon.dataset.right;
1382 $('.designer_tab .small_tab,.small_tab2').each(function(index, element) {
1383 if ($(element).text() !== 'v') {
1384 Small_tab($(element).attr('table_name'), 0);
1388 icon.src = icon.dataset.down;
1391 saveValueInConfig('small_big_all', value_sent);
1392 $('#key_SB_all').toggleClass('M_butt_Selected_down');
1393 $('#key_SB_all').toggleClass('M_butt');
1397 // invert max/min all tables
1398 function Small_tab_invert () {
1399 $('.designer_tab .small_tab,.small_tab2').each(function(index, element) {
1400 Small_tab($(element).attr('table_name'), 0);
1405 function Relation_lines_invert () {
1406 show_relation_lines = ! show_relation_lines;
1407 saveValueInConfig('relation_lines', show_relation_lines);
1408 $('#relLineInvert').toggleClass('M_butt_Selected_down');
1409 $('#relLineInvert').toggleClass('M_butt');
1413 function Small_tab_refresh () {
1414 for (var key in j_tabs) {
1415 if (document.getElementById('id_hide_tbody_' + key).innerHTML !== 'v') {
1421 function Small_tab (t, re_load) {
1422 var id = document.getElementById('id_tbody_' + t);
1423 var id_this = document.getElementById('id_hide_tbody_' + t);
1424 var id_t = document.getElementById(t);
1425 if (id_this.innerHTML === 'v') {
1427 id.style.display = 'none';
1428 id_this.innerHTML = '>';
1430 id.style.display = '';
1431 id_this.innerHTML = 'v';
1437 // ------------------------------------------------------------------------------
1438 function Select_tab (t) {
1439 var id_zag = document.getElementById('id_zag_' + t);
1440 if (id_zag.className !== 'tab_zag_3') {
1441 document.getElementById('id_zag_' + t).className = 'tab_zag_2';
1443 document.getElementById('id_zag_' + t).className = 'tab_zag';
1446 var id_t = document.getElementById(t);
1447 window.scrollTo(parseInt(id_t.style.left, 10) - 300, parseInt(id_t.style.top, 10) - 300);
1450 document.getElementById('id_zag_' + t).className = 'tab_zag';
1455 // ------------------------------------------------------------------------------
1457 function Canvas_click (id, event) {
1459 var relation_name = 0;
1473 var Local_X = isIE ? event.clientX + document.body.scrollLeft : event.pageX;
1474 var Local_Y = isIE ? event.clientY + document.body.scrollTop : event.pageY;
1475 Local_X -= $('#osn_tab').offset().left;
1476 Local_Y -= $('#osn_tab').offset().top;
1479 for (key in contr[K]) {
1480 for (key2 in contr[K][key]) {
1481 for (key3 in contr[K][key][key2]) {
1482 if (! document.getElementById('check_vis_' + key2).checked ||
1483 ! document.getElementById('check_vis_' + contr[K][key][key2][key3][0]).checked) {
1484 continue; // if hide
1486 var x1_left = document.getElementById(key2).offsetLeft + 1;// document.getElementById(key2+"."+key3).offsetLeft;
1487 var x1_right = x1_left + document.getElementById(key2).offsetWidth;
1488 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
1489 var x2_right = x2_left + document.getElementById(contr[K][key][key2][key3][0]).offsetWidth;
1490 a[0] = Math.abs(x1_left - x2_left);
1491 a[1] = Math.abs(x1_left - x2_right);
1492 a[2] = Math.abs(x1_right - x2_left);
1493 a[3] = Math.abs(x1_right - x2_right);
1494 n = s_left = s_right = 0;
1495 for (var i = 1; i < 4; i++) {
1501 x1 = x1_left - sm_s;
1502 x2 = x2_right + sm_s;
1508 x1 = x1_right + sm_s;
1509 x2 = x2_left - sm_s;
1515 x1 = x1_right + sm_s;
1516 x2 = x2_right + sm_s;
1520 x1 = x1_left - sm_s;
1521 x2 = x2_left - sm_s;
1525 var y1 = document.getElementById(key2).offsetTop + document.getElementById(key2 + '.' + key3).offsetTop + height_field;
1526 var y2 = document.getElementById(contr[K][key][key2][key3][0]).offsetTop +
1527 document.getElementById(contr[K][key][key2][key3][0] + '.' + contr[K][key][key2][key3][1]).offsetTop + height_field;
1529 if (!selected && Local_X > x1 - 10 && Local_X < x1 + 10 && Local_Y > y1 - 7 && Local_Y < y1 + 7) {
1531 x1 + osn_tab.offsetLeft,
1532 y1 - osn_tab.offsetTop,
1533 x2 + osn_tab.offsetLeft,
1534 y2 - osn_tab.offsetTop,
1537 selected = 1; // Rect(x1-sm_x,y1-sm_y,10,10,"rgba(0,255,0,1)");
1538 relation_name = key; //
1539 Key0 = contr[K][key][key2][key3][0];
1540 Key1 = contr[K][key][key2][key3][1];
1546 x1 + osn_tab.offsetLeft,
1547 y1 - osn_tab.offsetTop,
1548 x2 + osn_tab.offsetLeft,
1549 y2 - osn_tab.offsetTop,
1550 getColorByTarget(contr[K][key][key2][key3][0] + '.' + contr[K][key][key2][key3][1])
1559 var left = Glob_X - (document.getElementById('layer_upd_relation').offsetWidth >> 1);
1560 document.getElementById('layer_upd_relation').style.left = left + 'px';
1561 var top = Glob_Y - document.getElementById('layer_upd_relation').offsetHeight - 10;
1562 document.getElementById('layer_upd_relation').style.top = top + 'px';
1563 document.getElementById('layer_upd_relation').style.display = 'block';
1564 var argsep = PMA_commonParams.get('arg_separator');
1565 link_relation = 'T1=' + Key0 + argsep + 'F1=' + Key1 + argsep + 'T2=' + Key2 + argsep + 'F2=' + Key3 + argsep + 'K=' + Key;
1569 function Upd_relation () {
1570 document.getElementById('layer_upd_relation').style.display = 'none';
1571 var argsep = PMA_commonParams.get('arg_separator');
1572 link_relation += argsep + 'server=' + server + argsep + 'db=' + db;
1573 link_relation += argsep + 'operation=removeRelation' + argsep + 'ajax_request=true';
1575 var $msgbox = PMA_ajaxShowMessage(PMA_messages.strProcessingRequest);
1576 $.post('db_designer.php', link_relation, function (data) {
1577 if (data.success === false) {
1578 PMA_ajaxShowMessage(data.error, false);
1580 PMA_ajaxRemoveMessage($msgbox);
1581 Load_page(selected_page);
1586 function VisibleTab (id, t_n) {
1588 document.getElementById(t_n).style.display = 'block';
1590 document.getElementById(t_n).style.display = 'none';
1595 // max/min all tables
1596 function Hide_tab_all (id_this) {
1597 if (id_this.alt === 'v') {
1599 id_this.src = id_this.dataset.right;
1602 id_this.src = id_this.dataset.down;
1604 var E = document.form1;
1605 for (var i = 0; i < E.elements.length; i++) {
1606 if (E.elements[i].type === 'checkbox' && E.elements[i].id.substring(0, 10) === 'check_vis_') {
1607 if (id_this.alt === 'v') {
1608 E.elements[i].checked = true;
1609 document.getElementById(E.elements[i].value).style.display = '';
1611 E.elements[i].checked = false;
1612 document.getElementById(E.elements[i].value).style.display = 'none';
1619 function in_array_k (x, m) {
1630 function No_have_constr (id_this) {
1637 for (key in contr[K]) {
1639 for (key2 in contr[K][key]) {
1641 for (key3 in contr[K][key][key2]) {
1643 a[key2] = a[contr[K][key][key2][key3][0]] = 1; // exist constr
1649 if (id_this.alt === 'v') {
1651 id_this.src = id_this.dataset.right;
1654 id_this.src = id_this.dataset.down;
1656 var E = document.form1;
1657 for (var i = 0; i < E.elements.length; i++) {
1658 if (E.elements[i].type === 'checkbox' && E.elements[i].id.substring(0, 10) === 'check_vis_') {
1659 if (!in_array_k(E.elements[i].value, a)) {
1660 if (id_this.alt === 'v') {
1661 E.elements[i].checked = true;
1662 document.getElementById(E.elements[i].value).style.display = '';
1664 E.elements[i].checked = false;
1665 document.getElementById(E.elements[i].value).style.display = 'none';
1672 function General_scroll () {
1674 if (!document.getElementById('show_relation_olways').checked) {
1675 document.getElementById("canvas").style.display = 'none';
1676 clearTimeout(timeoutID);
1677 timeoutID = setTimeout(General_scroll_end, 500);
1681 clearTimeout(timeoutID);
1682 timeoutID = setTimeout(
1684 document.getElementById('top_menu').style.left = document.body.scrollLeft + 'px';
1685 document.getElementById('top_menu').style.top = document.body.scrollTop + 'px';
1691 // max/min all tables
1692 function Show_left_menu (id_this) {
1693 var icon = id_this.children[0];
1694 $('#key_Show_left_menu').toggleClass('M_butt_Selected_down');
1695 if (icon.alt === 'v') {
1696 document.getElementById('layer_menu').style.top = '0px';
1697 document.getElementById('layer_menu').style.display = 'block';
1699 icon.src = icon.dataset.up;
1704 document.getElementById('layer_menu').style.top = -1000 + 'px'; // fast scroll
1705 document.getElementById('layer_menu').style.display = 'none';
1707 icon.src = icon.dataset.down;
1710 // ------------------------------------------------------------------------------
1711 function Side_menu_right (id_this) {
1712 $('#side_menu').toggleClass('right');
1713 $('#layer_menu').toggleClass('left');
1714 var icon = $(id_this.childNodes[0]);
1715 var current = icon.attr('src');
1716 icon.attr('src', icon.attr('data-right')).attr('data-right', current);
1718 icon = $(document.getElementById('layer_menu_sizer').childNodes[0])
1719 .toggleClass('floatleft')
1720 .toggleClass('floatright')
1722 current = icon.attr('src');
1723 icon.attr('src', icon.attr('data-right'));
1724 icon.attr('data-right', current);
1725 menu_moved = !menu_moved;
1726 saveValueInConfig('side_menu', $('#side_menu').hasClass('right'));
1727 $('#key_Left_Right').toggleClass('M_butt_Selected_down');
1728 $('#key_Left_Right').toggleClass('M_butt');
1730 // ------------------------------------------------------------------------------
1731 function Show_text () {
1732 $('#side_menu').find('.hidable').show();
1734 function Hide_text () {
1735 if (!always_show_text) {
1736 $('#side_menu').find('.hidable').hide();
1739 function Pin_text () {
1740 always_show_text = !always_show_text;
1741 $('#pin_Text').toggleClass('M_butt_Selected_down');
1742 $('#pin_Text').toggleClass('M_butt');
1743 saveValueInConfig('pin_text', always_show_text);
1745 // ------------------------------------------------------------------------------
1746 function Start_display_field () {
1750 if (!ON_display_field) {
1751 ON_display_field = 1;
1752 document.getElementById('designer_hint').innerHTML = PMA_messages.strChangeDisplay;
1753 document.getElementById('designer_hint').style.display = 'block';
1754 document.getElementById('display_field_button').className = 'M_butt_Selected_down';// '#FFEE99';gray #AAAAAA
1756 if (isIE) { // correct for IE
1757 document.getElementById('display_field_button').className = 'M_butt_Selected_down_IE';
1760 document.getElementById('designer_hint').innerHTML = '';
1761 document.getElementById('designer_hint').style.display = 'none';
1762 document.getElementById('display_field_button').className = 'M_butt';
1763 ON_display_field = 0;
1766 // ------------------------------------------------------------------------------
1767 var TargetColors = [];
1768 function getColorByTarget (target) {
1769 var color = ''; // "rgba(0,100,150,1)";
1771 for (var a in TargetColors) {
1772 if (TargetColors[a][0] === target) {
1773 color = TargetColors[a][1];
1778 if (color.length === 0) {
1779 var i = TargetColors.length + 1;
1781 var j = (i - d) / 6;
1792 var a = color_case[d][0];
1793 var b = color_case[d][1];
1794 var c = color_case[d][2];
1795 var e = (1 - (j - 1) / 6);
1797 var r = Math.round(a * 200 * e);
1798 var g = Math.round(b * 200 * e);
1799 b = Math.round(c * 200 * e);
1800 color = 'rgba(' + r + ',' + g + ',' + b + ',1)';
1802 TargetColors.push([target, color]);
1808 function Click_option (id_this, column_name, table_name) {
1809 var left = Glob_X - (document.getElementById(id_this).offsetWidth >> 1);
1810 document.getElementById(id_this).style.left = left + 'px';
1811 // var top = Glob_Y - document.getElementById(id_this).offsetHeight - 10;
1812 document.getElementById(id_this).style.top = (screen.height / 4) + 'px';
1813 document.getElementById(id_this).style.display = 'block';
1814 document.getElementById('option_col_name').innerHTML = '<strong>' + PMA_sprintf(PMA_messages.strAddOption, decodeURI(column_name)) + '</strong>';
1815 col_name = column_name;
1816 tab_name = table_name;
1819 function Close_option () {
1820 document.getElementById('designer_optionse').style.display = 'none';
1821 document.getElementById('rel_opt').value = '--';
1822 document.getElementById('Query').value = '';
1823 document.getElementById('new_name').value = '';
1824 document.getElementById('operator').value = '---';
1825 document.getElementById('groupby').checked = false;
1826 document.getElementById('h_rel_opt').value = '--';
1827 document.getElementById('h_operator').value = '---';
1828 document.getElementById('having').value = '';
1829 document.getElementById('orderby').value = '---';
1833 function Select_all (id_this, owner) {
1834 var parent = document.form1;
1839 for (i = 0; i < parent.elements.length; i++) {
1840 if (parent.elements[i].type === 'checkbox' && parent.elements[i].id.substring(0, (9 + id_this.length)) === 'select_' + id_this + '._') {
1841 if (document.getElementById('select_all_' + id_this).checked === true) {
1842 parent.elements[i].checked = true;
1843 parent.elements[i].disabled = true;
1844 var temp = '`' + id_this.substring(owner.length + 1) + '`.*';
1846 parent.elements[i].checked = false;
1847 parent.elements[i].disabled = false;
1851 if (document.getElementById('select_all_' + id_this).checked === true) {
1852 select_field.push('`' + id_this.substring(owner.length + 1) + '`.*');
1853 tab = id_this.split('.');
1854 from_array.push(tab[1]);
1856 for (i = 0; i < select_field.length; i++) {
1857 if (select_field[i] === ('`' + id_this.substring(owner.length + 1) + '`.*')) {
1858 select_field.splice(i, 1);
1861 for (k = 0; k < from_array.length; k++) {
1862 if (from_array[k] === id_this) {
1863 from_array.splice(k, 1);
1871 function Table_onover (id_this, val, buil) {
1872 buil = parseInt(buil);
1874 document.getElementById('id_zag_' + id_this).className = 'tab_zag_2';
1876 document.getElementById('id_zag_' + id_this + '_2').className = 'tab_zag_2';
1879 document.getElementById('id_zag_' + id_this).className = 'tab_zag';
1881 document.getElementById('id_zag_' + id_this + '_2').className = 'tab_zag';
1886 /* This function stores selected column information in select_field[]
1887 * In case column is checked it add else it deletes
1890 function store_column (id_this, owner, col) {
1893 if (document.getElementById('select_' + owner + '.' + id_this + '._' + col).checked === true) {
1894 select_field.push('`' + id_this + '`.`' + col + '`');
1895 from_array.push(id_this);
1897 for (i = 0; i < select_field.length; i++) {
1898 if (select_field[i] === ('`' + id_this + '`.`' + col + '`')) {
1899 select_field.splice(i, 1);
1903 for (k = 0; k < from_array.length; k++) {
1904 if (from_array[k] === id_this) {
1905 from_array.splice(k, 1);
1913 * This function builds object and adds them to history_array
1914 * first it does a few checks on each object, then makes an object(where,rename,groupby,aggregate,orderby)
1915 * then a new history object is made and finally all these history objects are added to history_array[]
1919 function add_object () {
1922 var rel = document.getElementById('rel_opt');
1924 var init = history_array.length;
1925 if (rel.value !== '--') {
1926 if (document.getElementById('Query').value === '') {
1927 PMA_ajaxShowMessage(PMA_sprintf(PMA_messages.strQueryEmpty));
1930 p = document.getElementById('Query');
1931 where_obj = new where(rel.value, p.value);// make where object
1932 history_array.push(new history_obj(col_name, where_obj, tab_name, h_tabs[downer + '.' + tab_name], 'Where'));
1935 if (document.getElementById('new_name').value !== '') {
1936 var rename_obj = new rename(document.getElementById('new_name').value);// make Rename object
1937 history_array.push(new history_obj(col_name, rename_obj, tab_name, h_tabs[downer + '.' + tab_name], 'Rename'));
1940 if (document.getElementById('operator').value !== '---') {
1941 var aggregate_obj = new aggregate(document.getElementById('operator').value);
1942 history_array.push(new history_obj(col_name, aggregate_obj, tab_name, h_tabs[downer + '.' + tab_name], 'Aggregate'));
1944 // make aggregate operator
1946 if (document.getElementById('groupby').checked === true) {
1947 history_array.push(new history_obj(col_name, 'GroupBy', tab_name, h_tabs[downer + '.' + tab_name], 'GroupBy'));
1951 if (document.getElementById('h_rel_opt').value !== '--') {
1952 if (document.getElementById('having').value === '') {
1955 where_obj = new having(
1956 document.getElementById('h_rel_opt').value,
1957 document.getElementById('having').value,
1958 document.getElementById('h_operator').value
1959 );// make where object
1960 history_array.push(new history_obj(col_name, where_obj, tab_name, h_tabs[downer + '.' + tab_name], 'Having'));
1964 if (document.getElementById('orderby').value !== '---') {
1965 var oderby_obj = new orderby(document.getElementById('orderby').value);
1966 history_array.push(new history_obj(col_name, oderby_obj, tab_name, h_tabs[downer + '.' + tab_name], 'OrderBy'));
1970 PMA_ajaxShowMessage(PMA_sprintf(PMA_messages.strObjectsCreated, sum));
1971 // output sum new objects created
1972 var existingDiv = document.getElementById('ab');
1973 existingDiv.innerHTML = display(init, history_array.length);
1975 $('#ab').accordion('refresh');
1978 function enablePageContentEvents() {
1979 $('#page_content').off('mousedown', MouseDown);
1980 $('#page_content').off('mouseup', MouseUp);
1981 $('#page_content').off('mousemove', MouseMove);
1982 $('#page_content').on('mousedown', MouseDown);
1983 $('#page_content').on('mouseup', MouseUp);
1984 $('#page_content').on('mousemove', MouseMove);
1988 * This function enables the events on table items.
1989 * It helps to enable them on page loading and when a table is added on the fly.
1991 function enableTableEvents(index, element) {
1992 $(element).on('click', '.select_all_1', function () {
1993 Select_all($(this).attr('designer_url_table_name'), $(this).attr('designer_out_owner'));
1995 $(element).on('click', '.small_tab,.small_tab2', function () {
1996 Small_tab($(this).attr('table_name'), 1);
1998 $(element).on('click', '.small_tab_pref_1', function () {
1999 Start_tab_upd($(this).attr('db_url'), $(this).attr('table_name_url'));
2001 $(element).on('click', '.select_all_store_col', function () {
2002 var params = ($(this).attr('store_column_param')).split(',');
2003 store_column(params[0], params[1], params[2]);
2005 $(element).on('click', '.small_tab_pref_click_opt', function () {
2006 var params = ($(this).attr('Click_option_param')).split(',');
2007 Click_option(params[0], params[1], params[2]);
2009 $(element).on('click', '.tab_field_2,.tab_field_3,.tab_field', function () {
2010 var params = ($(this).attr('click_field_param')).split(',');
2011 Click_field(params[3], params[0], params[1], params[2]);
2014 $(element).find('.tab_zag_noquery').mouseover(function () {
2015 Table_onover($(this).attr('table_name'),0, $(this).attr('query_set'));
2017 $(element).find('.tab_zag_noquery').mouseout(function () {
2018 Table_onover($(this).attr('table_name'),1, $(this).attr('query_set'));
2020 $(element).find('.tab_zag_query').mouseover(function () {
2021 Table_onover($(this).attr('table_name'),0, 1);
2023 $(element).find('.tab_zag_query').mouseout(function () {
2024 Table_onover($(this).attr('table_name'),1, 1);
2027 enablePageContentEvents();
2030 AJAX.registerTeardown('designer/move.js', function () {
2031 $('#side_menu').off('mouseenter mouseleave');
2032 $('#key_Show_left_menu').off('click');
2033 $('#toggleFullscreen').off('click');
2034 $('#newPage').off('click');
2035 $('#editPage').off('click');
2036 $('#savePos').off('click');
2037 $('#SaveAs').off('click');
2038 $('#delPages').off('click');
2039 $('#StartTableNew').off('click');
2040 $('#rel_button').off('click');
2041 $('#StartTableNew').off('click');
2042 $('#display_field_button').off('click');
2043 $('#reloadPage').off('click');
2044 $('#angular_direct_button').off('click');
2045 $('#grid_button').off('click');
2046 $('#key_SB_all').off('click');
2047 $('#SmallTabInvert').off('click');
2048 $('#relLineInvert').off('click');
2049 $('#exportPages').off('click');
2050 $('#query_builder').off('click');
2051 $('#key_Left_Right').off('click');
2052 $('#pin_Text').off('click');
2053 $('#canvas').off('click');
2054 $('#key_HS_all').off('click');
2055 $('#key_HS').off('click');
2056 $('.scroll_tab_struct').off('click');
2057 $('.scroll_tab_checkbox').off('click');
2058 $('#id_scroll_tab').find('tr').off('click', '.designer_Tabs2,.designer_Tabs');
2059 $('.designer_tab').off('click', '.select_all_1');
2060 $('.designer_tab').off('click', '.small_tab,.small_tab2');
2061 $('.designer_tab').off('click', '.small_tab_pref_1');
2062 $('.tab_zag_noquery').off('mouseover');
2063 $('.tab_zag_noquery').off('mouseout');
2064 $('.tab_zag_query').off('mouseover');
2065 $('.tab_zag_query').off('mouseout');
2066 $('.designer_tab').off('click','.tab_field_2,.tab_field_3,.tab_field');
2067 $('.designer_tab').off('click', '.select_all_store_col');
2068 $('.designer_tab').off('click', '.small_tab_pref_click_opt');
2069 $('#del_button').off('click');
2070 $('#cancel_button').off('click');
2071 $('#ok_add_object').off('click');
2072 $('#cancel_close_option').off('click');
2073 $('#ok_new_rel_panel').off('click');
2074 $('#cancel_new_rel_panel').off('click');
2075 $('#page_content').off('mouseup');
2076 $('#page_content').off('mousedown');
2077 $('#page_content').off('mousemove');
2080 AJAX.registerOnload('designer/move.js', function () {
2081 $('#key_Show_left_menu').click(function () {
2082 Show_left_menu(this);
2085 $('#toggleFullscreen').click(function () {
2086 Toggle_fullscreen();
2089 $('#addOtherDbTables').click(function () {
2090 Add_Other_db_tables();
2093 $('#newPage').click(function () {
2097 $('#editPage').click(function () {
2101 $('#savePos').click(function () {
2105 $('#SaveAs').click(function () {
2109 $('#delPages').click(function () {
2113 $('#StartTableNew').click(function () {
2117 $('#rel_button').click(function () {
2121 $('#display_field_button').click(function () {
2122 Start_display_field();
2125 $('#reloadPage').click(function () {
2126 Load_page(selected_page);
2128 $('#angular_direct_button').click(function () {
2132 $('#grid_button').click(function () {
2136 $('#key_SB_all').click(function () {
2137 Small_tab_all(this);
2140 $('#SmallTabInvert').click(function () {
2144 $('#relLineInvert').click(function () {
2145 Relation_lines_invert();
2148 $('#exportPages').click(function () {
2152 $('#query_builder').click(function () {
2153 build_query('SQL Query on Database', 0);
2155 $('#key_Left_Right').click(function () {
2156 Side_menu_right(this);
2159 $('#side_menu').hover(function () {
2166 $('#pin_Text').click(function () {
2170 $('#canvas').click(function (event) {
2171 Canvas_click(this, event);
2173 $('#key_HS_all').click(function () {
2177 $('#key_HS').click(function () {
2178 No_have_constr(this);
2182 $('.designer_tab').each(enableTableEvents);
2183 $('.designer_tab').each(addTableToTablesList);
2185 $('input#del_button').click(function () {
2188 $('input#cancel_button').click(function () {
2189 document.getElementById('layer_upd_relation').style.display = 'none';
2192 $('input#ok_add_object').click(function () {
2195 $('input#cancel_close_option').click(function () {
2198 $('input#ok_new_rel_panel').click(function () {
2201 $('input#cancel_new_rel_panel').click(function () {
2202 document.getElementById('layer_new_relation').style.display = 'none';
2204 enablePageContentEvents();