Translated using Weblate (Turkish)
[phpmyadmin.git] / js / normalization.js
bloba4cdb0e66060621cced30a0aeffa9c4be3a6b8c1
1 /* vim: set expandtab sw=4 ts=4 sts=4: */
2 /**
3  * @fileoverview   events handling from normalization page
4  * @name            normalization
5  *
6  * @requires    jQuery
7  */
9 // eslint-disable-next-line no-unused-vars
10 /* global centralColumnList:writable */ // js/functions.js
12 /**
13  * AJAX scripts for normalization.php
14  *
15  */
17 var normalizeto = '1nf';
18 var primaryKey;
19 var dataParsed = null;
21 function appendHtmlColumnsList () {
22     $.post(
23         'normalization.php',
24         {
25             'ajax_request': true,
26             'db': CommonParams.get('db'),
27             'table': CommonParams.get('table'),
28             'server': CommonParams.get('server'),
29             'getColumns': true
30         },
31         function (data) {
32             if (data.success === true) {
33                 $('select[name=makeAtomic]').html(data.message);
34             }
35         }
36     );
39 function goTo3NFStep1 (newTables) {
40     var tables = newTables;
41     if (Object.keys(tables).length === 1) {
42         tables = [CommonParams.get('table')];
43     }
44     $.post(
45         'normalization.php',
46         {
47             'ajax_request': true,
48             'db': CommonParams.get('db'),
49             'server': CommonParams.get('server'),
50             'tables': tables,
51             'step': '3.1'
52         }, function (data) {
53             $('#page_content').find('h3').html(Messages.str3NFNormalization);
54             $('#mainContent').find('legend').html(data.legendText);
55             $('#mainContent').find('h4').html(data.headText);
56             $('#mainContent').find('p').html(data.subText);
57             $('#mainContent').find('#extra').html(data.extra);
58             $('#extra').find('form').each(function () {
59                 var formId = $(this).attr('id');
60                 var colName = $(this).data('colname');
61                 $('#' + formId + ' input[value=\'' + colName + '\']').next().remove();
62                 $('#' + formId + ' input[value=\'' + colName + '\']').remove();
63             });
64             $('#mainContent').find('#newCols').html('');
65             $('.tblFooters').html('');
67             if (data.subText !== '') {
68                 $('<input>')
69                     .attr({ type: 'button', value: Messages.strDone })
70                     .on('click', function () {
71                         processDependencies('', true);
72                     })
73                     .appendTo('.tblFooters');
74             }
75         }
76     );
79 function goTo2NFStep1 () {
80     $.post(
81         'normalization.php',
82         {
83             'ajax_request': true,
84             'db': CommonParams.get('db'),
85             'table': CommonParams.get('table'),
86             'server': CommonParams.get('server'),
87             'step': '2.1'
88         }, function (data) {
89             $('#page_content h3').html(Messages.str2NFNormalization);
90             $('#mainContent legend').html(data.legendText);
91             $('#mainContent h4').html(data.headText);
92             $('#mainContent p').html(data.subText);
93             $('#mainContent #extra').html(data.extra);
94             $('#mainContent #newCols').html('');
95             if (data.subText !== '') {
96                 $('<input>')
97                     .attr({ type: 'submit', value: Messages.strDone, })
98                     .on('click', function () {
99                         processDependencies(data.primary_key);
100                     })
101                     .appendTo('.tblFooters');
102             } else {
103                 if (normalizeto === '3nf') {
104                     $('#mainContent #newCols').html(Messages.strToNextStep);
105                     setTimeout(function () {
106                         goTo3NFStep1([CommonParams.get('table')]);
107                     }, 3000);
108                 }
109             }
110         });
113 function goToFinish1NF () {
114     if (normalizeto !== '1nf') {
115         goTo2NFStep1();
116         return true;
117     }
118     $('#mainContent legend').html(Messages.strEndStep);
119     $('#mainContent h4').html(
120         '<h3>' + Functions.sprintf(Messages.strFinishMsg, Functions.escapeHtml(CommonParams.get('table'))) + '</h3>'
121     );
122     $('#mainContent p').html('');
123     $('#mainContent #extra').html('');
124     $('#mainContent #newCols').html('');
125     $('.tblFooters').html('');
128 // eslint-disable-next-line no-unused-vars
129 function goToStep4 () {
130     $.post(
131         'normalization.php',
132         {
133             'ajax_request': true,
134             'db': CommonParams.get('db'),
135             'table': CommonParams.get('table'),
136             'server': CommonParams.get('server'),
137             'step4': true
138         }, function (data) {
139             $('#mainContent legend').html(data.legendText);
140             $('#mainContent h4').html(data.headText);
141             $('#mainContent p').html(data.subText);
142             $('#mainContent #extra').html(data.extra);
143             $('#mainContent #newCols').html('');
144             $('.tblFooters').html('');
145             for (var pk in primaryKey) {
146                 $('#extra input[value=\'' + Functions.escapeJsString(primaryKey[pk]) + '\']').attr('disabled','disabled');
147             }
148         }
149     );
152 function goToStep3 () {
153     $.post(
154         'normalization.php',
155         {
156             'ajax_request': true,
157             'db': CommonParams.get('db'),
158             'table': CommonParams.get('table'),
159             'server': CommonParams.get('server'),
160             'step3': true
161         }, function (data) {
162             $('#mainContent legend').html(data.legendText);
163             $('#mainContent h4').html(data.headText);
164             $('#mainContent p').html(data.subText);
165             $('#mainContent #extra').html(data.extra);
166             $('#mainContent #newCols').html('');
167             $('.tblFooters').html('');
168             primaryKey = JSON.parse(data.primary_key);
169             for (var pk in primaryKey) {
170                 $('#extra input[value=\'' + Functions.escapeJsString(primaryKey[pk]) + '\']').attr('disabled','disabled');
171             }
172         }
173     );
176 function goToStep2 (extra) {
177     $.post(
178         'normalization.php',
179         {
180             'ajax_request': true,
181             'db': CommonParams.get('db'),
182             'table': CommonParams.get('table'),
183             'server': CommonParams.get('server'),
184             'step2': true
185         }, function (data) {
186             $('#mainContent legend').html(data.legendText);
187             $('#mainContent h4').html(data.headText);
188             $('#mainContent p').html(data.subText);
189             $('#mainContent #extra,#mainContent #newCols').html('');
190             $('.tblFooters').html('');
191             if (data.hasPrimaryKey === '1') {
192                 if (extra === 'goToStep3') {
193                     $('#mainContent h4').html(Messages.strPrimaryKeyAdded);
194                     $('#mainContent p').html(Messages.strToNextStep);
195                 }
196                 if (extra === 'goToFinish1NF') {
197                     goToFinish1NF();
198                 } else {
199                     setTimeout(function () {
200                         goToStep3();
201                     }, 3000);
202                 }
203             } else {
204                 // form to select columns to make primary
205                 $('#mainContent #extra').html(data.extra);
206             }
207         }
208     );
211 function goTo2NFFinish (pd) {
212     var tables = {};
213     for (var dependson in pd) {
214         tables[dependson] = $('#extra input[name="' + dependson + '"]').val();
215     }
216     var datastring = {
217         'ajax_request': true,
218         'db': CommonParams.get('db'),
219         'table': CommonParams.get('table'),
220         'server': CommonParams.get('server'),
221         'pd': JSON.stringify(pd),
222         'newTablesName':JSON.stringify(tables),
223         'createNewTables2NF':1 };
224     $.ajax({
225         type: 'POST',
226         url: 'normalization.php',
227         data: datastring,
228         async:false,
229         success: function (data) {
230             if (data.success === true) {
231                 if (data.queryError === false) {
232                     if (normalizeto === '3nf') {
233                         $('#pma_navigation_reload').trigger('click');
234                         goTo3NFStep1(tables);
235                         return true;
236                     }
237                     $('#mainContent legend').html(data.legendText);
238                     $('#mainContent h4').html(data.headText);
239                     $('#mainContent p').html('');
240                     $('#mainContent #extra').html('');
241                     $('.tblFooters').html('');
242                 } else {
243                     Functions.ajaxShowMessage(data.extra, false);
244                 }
245                 $('#pma_navigation_reload').trigger('click');
246             } else {
247                 Functions.ajaxShowMessage(data.error, false);
248             }
249         }
250     });
253 function goTo3NFFinish (newTables) {
254     for (var table in newTables) {
255         for (var newtbl in newTables[table]) {
256             var updatedname = $('#extra input[name="' + newtbl + '"]').val();
257             newTables[table][updatedname] = newTables[table][newtbl];
258             if (updatedname !== newtbl) {
259                 delete newTables[table][newtbl];
260             }
261         }
262     }
263     var datastring = {
264         'ajax_request': true,
265         'db': CommonParams.get('db'),
266         'server': CommonParams.get('server'),
267         'newTables':JSON.stringify(newTables),
268         'createNewTables3NF':1 };
269     $.ajax({
270         type: 'POST',
271         url: 'normalization.php',
272         data: datastring,
273         async:false,
274         success: function (data) {
275             if (data.success === true) {
276                 if (data.queryError === false) {
277                     $('#mainContent legend').html(data.legendText);
278                     $('#mainContent h4').html(data.headText);
279                     $('#mainContent p').html('');
280                     $('#mainContent #extra').html('');
281                     $('.tblFooters').html('');
282                 } else {
283                     Functions.ajaxShowMessage(data.extra, false);
284                 }
285                 $('#pma_navigation_reload').trigger('click');
286             } else {
287                 Functions.ajaxShowMessage(data.error, false);
288             }
289         }
290     });
293 var backup = '';
295 function goTo2NFStep2 (pd, primaryKey) {
296     $('#newCols').html('');
297     $('#mainContent legend').html(Messages.strStep + ' 2.2 ' + Messages.strConfirmPd);
298     $('#mainContent h4').html(Messages.strSelectedPd);
299     $('#mainContent p').html(Messages.strPdHintNote);
300     var extra = '<div class="dependencies_box">';
301     var pdFound = false;
302     for (var dependson in pd) {
303         if (dependson !== primaryKey) {
304             pdFound = true;
305             extra += '<p class="displayblock desc">' + Functions.escapeHtml(dependson) + ' -> ' + Functions.escapeHtml(pd[dependson].toString()) + '</p>';
306         }
307     }
308     if (!pdFound) {
309         extra += '<p class="displayblock desc">' + Messages.strNoPdSelected + '</p>';
310         extra += '</div>';
311     } else {
312         extra += '</div>';
313         var datastring = {
314             'ajax_request': true,
315             'db': CommonParams.get('db'),
316             'table': CommonParams.get('table'),
317             'server': CommonParams.get('server'),
318             'pd': JSON.stringify(pd),
319             'getNewTables2NF':1 };
320         $.ajax({
321             type: 'POST',
322             url: 'normalization.php',
323             data: datastring,
324             async:false,
325             success: function (data) {
326                 if (data.success === true) {
327                     extra += data.message;
328                 } else {
329                     Functions.ajaxShowMessage(data.error, false);
330                 }
331             }
332         });
333     }
334     $('#mainContent #extra').html(extra);
335     $('.tblFooters').html('<input type="button" class="btn btn-primary" value="' + Messages.strBack + '" id="backEditPd"><input type="button" class="btn btn-primary" id="goTo2NFFinish" value="' + Messages.strGo + '">');
336     $('#goTo2NFFinish').on('click', function () {
337         goTo2NFFinish(pd);
338     });
341 function goTo3NFStep2 (pd, tablesTds) {
342     $('#newCols').html('');
343     $('#mainContent legend').html(Messages.strStep + ' 3.2 ' + Messages.strConfirmTd);
344     $('#mainContent h4').html(Messages.strSelectedTd);
345     $('#mainContent p').html(Messages.strPdHintNote);
346     var extra = '<div class="dependencies_box">';
347     var pdFound = false;
348     for (var table in tablesTds) {
349         for (var i in tablesTds[table]) {
350             var dependson = tablesTds[table][i];
351             if (dependson !== '' && dependson !== table) {
352                 pdFound = true;
353                 extra += '<p class="displayblock desc">' + Functions.escapeHtml(dependson) + ' -> ' + Functions.escapeHtml(pd[dependson].toString()) + '</p>';
354             }
355         }
356     }
357     if (!pdFound) {
358         extra += '<p class="displayblock desc">' + Messages.strNoTdSelected + '</p>';
359         extra += '</div>';
360     } else {
361         extra += '</div>';
362         var datastring = {
363             'ajax_request': true,
364             'db': CommonParams.get('db'),
365             'tables': JSON.stringify(tablesTds),
366             'server': CommonParams.get('server'),
367             'pd': JSON.stringify(pd),
368             'getNewTables3NF':1 };
369         $.ajax({
370             type: 'POST',
371             url: 'normalization.php',
372             data: datastring,
373             async:false,
374             success: function (data) {
375                 dataParsed = data;
376                 if (data.success === true) {
377                     extra += dataParsed.html;
378                 } else {
379                     Functions.ajaxShowMessage(data.error, false);
380                 }
381             }
382         });
383     }
384     $('#mainContent #extra').html(extra);
385     $('.tblFooters').html('<input type="button" class="btn btn-primary" value="' + Messages.strBack + '" id="backEditPd"><input type="button" class="btn btn-primary" id="goTo3NFFinish" value="' + Messages.strGo + '">');
386     $('#goTo3NFFinish').on('click', function () {
387         if (!pdFound) {
388             goTo3NFFinish([]);
389         } else {
390             goTo3NFFinish(dataParsed.newTables);
391         }
392     });
394 function processDependencies (primaryKey, isTransitive) {
395     var pk = primaryKey;
396     var pd = {};
397     var tablesTds = {};
398     var dependsOn;
399     pd[pk] = [];
400     $('#extra form').each(function () {
401         var tblname;
402         if (isTransitive === true) {
403             tblname = $(this).data('tablename');
404             pk = tblname;
405             if (!(tblname in tablesTds)) {
406                 tablesTds[tblname] = [];
407             }
408             tablesTds[tblname].push(pk);
409         }
410         var formId = $(this).attr('id');
411         $('#' + formId + ' input[type=checkbox]:not(:checked)').prop('checked', false);
412         dependsOn = '';
413         $('#' + formId + ' input[type=checkbox]:checked').each(function () {
414             dependsOn += $(this).val() + ', ';
415             $(this).attr('checked','checked');
416         });
417         if (dependsOn === '') {
418             dependsOn = pk;
419         } else {
420             dependsOn = dependsOn.slice(0, -2);
421         }
422         if (! (dependsOn in pd)) {
423             pd[dependsOn] = [];
424         }
425         pd[dependsOn].push($(this).data('colname'));
426         if (isTransitive === true) {
427             if (!(tblname in tablesTds)) {
428                 tablesTds[tblname] = [];
429             }
430             if ($.inArray(dependsOn, tablesTds[tblname]) === -1) {
431                 tablesTds[tblname].push(dependsOn);
432             }
433         }
434     });
435     backup = $('#mainContent').html();
436     if (isTransitive === true) {
437         goTo3NFStep2(pd, tablesTds);
438     } else {
439         goTo2NFStep2(pd, pk);
440     }
441     return false;
444 function moveRepeatingGroup (repeatingCols) {
445     var newTable = $('input[name=repeatGroupTable]').val();
446     var newColumn = $('input[name=repeatGroupColumn]').val();
447     if (!newTable) {
448         $('input[name=repeatGroupTable]').trigger('focus');
449         return false;
450     }
451     if (!newColumn) {
452         $('input[name=repeatGroupColumn]').trigger('focus');
453         return false;
454     }
455     var datastring = {
456         'ajax_request': true,
457         'db': CommonParams.get('db'),
458         'table': CommonParams.get('table'),
459         'server': CommonParams.get('server'),
460         'repeatingColumns': repeatingCols,
461         'newTable':newTable,
462         'newColumn':newColumn,
463         'primary_columns':primaryKey.toString()
464     };
465     $.ajax({
466         type: 'POST',
467         url: 'normalization.php',
468         data: datastring,
469         async:false,
470         success: function (data) {
471             if (data.success === true) {
472                 if (data.queryError === false) {
473                     goToStep3();
474                 }
475                 Functions.ajaxShowMessage(data.message, false);
476                 $('#pma_navigation_reload').trigger('click');
477             } else {
478                 Functions.ajaxShowMessage(data.error, false);
479             }
480         }
481     });
483 AJAX.registerTeardown('normalization.js', function () {
484     $('#extra').off('click', '#selectNonAtomicCol');
485     $('#splitGo').off('click');
486     $('.tblFooters').off('click', '#saveSplit');
487     $('#extra').off('click', '#addNewPrimary');
488     $('.tblFooters').off('click', '#saveNewPrimary');
489     $('#extra').off('click', '#removeRedundant');
490     $('#mainContent p').off('click', '#createPrimaryKey');
491     $('#mainContent').off('click', '#backEditPd');
492     $('#mainContent').off('click', '#showPossiblePd');
493     $('#mainContent').off('click', '.pickPd');
496 AJAX.registerOnload('normalization.js', function () {
497     var selectedCol;
498     normalizeto = $('#mainContent').data('normalizeto');
499     $('#extra').on('click', '#selectNonAtomicCol', function () {
500         if ($(this).val() === 'no_such_col') {
501             goToStep2();
502         } else {
503             selectedCol = $(this).val();
504         }
505     });
507     $('#splitGo').on('click', function () {
508         if (!selectedCol || selectedCol === '') {
509             return false;
510         }
511         var numField = $('#numField').val();
512         $.post(
513             'normalization.php',
514             {
515                 'ajax_request': true,
516                 'db': CommonParams.get('db'),
517                 'table': CommonParams.get('table'),
518                 'server': CommonParams.get('server'),
519                 'splitColumn': true,
520                 'numFields': numField
521             },
522             function (data) {
523                 if (data.success === true) {
524                     $('#newCols').html(data.message);
525                     $('.default_value').hide();
526                     $('.enum_notice').hide();
528                     $('<input>')
529                         .attr({ type: 'submit', id: 'saveSplit', value: Messages.strSave })
530                         .appendTo('.tblFooters');
532                     $('<input>')
533                         .attr({ type: 'submit', id: 'cancelSplit', value: Messages.strCancel })
534                         .on('click', function () {
535                             $('#newCols').html('');
536                             $(this).parent().html('');
537                         })
538                         .appendTo('.tblFooters');
539                 }
540             }
541         );
542         return false;
543     });
544     $('.tblFooters').on('click','#saveSplit', function () {
545         centralColumnList = [];
546         if ($('#newCols #field_0_1').val() === '') {
547             $('#newCols #field_0_1').trigger('focus');
548             return false;
549         }
550         var argsep = CommonParams.get('arg_separator');
551         var datastring = $('#newCols :input').serialize();
552         datastring += argsep + 'ajax_request=1' + argsep + 'do_save_data=1' + argsep + 'field_where=last';
553         $.post('tbl_addfield.php', datastring, function (data) {
554             if (data.success) {
555                 $.post(
556                     'sql.php',
557                     {
558                         'ajax_request': true,
559                         'db': CommonParams.get('db'),
560                         'table': CommonParams.get('table'),
561                         'server': CommonParams.get('server'),
562                         'dropped_column': selectedCol,
563                         'purge' : 1,
564                         'sql_query': 'ALTER TABLE `' + CommonParams.get('table') + '` DROP `' + selectedCol + '`;',
565                         'is_js_confirmed': 1
566                     },
567                     function (data) {
568                         if (data.success === true) {
569                             appendHtmlColumnsList();
570                             $('#newCols').html('');
571                             $('.tblFooters').html('');
572                         } else {
573                             Functions.ajaxShowMessage(data.error, false);
574                         }
575                         selectedCol = '';
576                     }
577                 );
578             } else {
579                 Functions.ajaxShowMessage(data.error, false);
580             }
581         });
582     });
584     $('#extra').on('click', '#addNewPrimary', function () {
585         $.post(
586             'normalization.php',
587             {
588                 'ajax_request': true,
589                 'db': CommonParams.get('db'),
590                 'table': CommonParams.get('table'),
591                 'server': CommonParams.get('server'),
592                 'addNewPrimary': true
593             },
594             function (data) {
595                 if (data.success === true) {
596                     $('#newCols').html(data.message);
597                     $('.default_value').hide();
598                     $('.enum_notice').hide();
600                     $('<input>')
601                         .attr({ type: 'submit', id: 'saveNewPrimary', value: Messages.strSave })
602                         .appendTo('.tblFooters');
603                     $('<input>')
604                         .attr({ type: 'submit', id: 'cancelSplit', value: Messages.strCancel })
605                         .on('click', function () {
606                             $('#newCols').html('');
607                             $(this).parent().html('');
608                         })
609                         .appendTo('.tblFooters');
610                 } else {
611                     Functions.ajaxShowMessage(data.error, false);
612                 }
613             }
614         );
615         return false;
616     });
617     $('.tblFooters').on('click', '#saveNewPrimary', function () {
618         var datastring = $('#newCols :input').serialize();
619         var argsep = CommonParams.get('arg_separator');
620         datastring += argsep + 'field_key[0]=primary_0' + argsep + 'ajax_request=1' + argsep + 'do_save_data=1' + argsep + 'field_where=last';
621         $.post('tbl_addfield.php', datastring, function (data) {
622             if (data.success === true) {
623                 $('#mainContent h4').html(Messages.strPrimaryKeyAdded);
624                 $('#mainContent p').html(Messages.strToNextStep);
625                 $('#mainContent #extra').html('');
626                 $('#mainContent #newCols').html('');
627                 $('.tblFooters').html('');
628                 setTimeout(function () {
629                     goToStep3();
630                 }, 2000);
631             } else {
632                 Functions.ajaxShowMessage(data.error, false);
633             }
634         });
635     });
636     $('#extra').on('click', '#removeRedundant', function () {
637         var dropQuery = 'ALTER TABLE `' + CommonParams.get('table') + '` ';
638         $('#extra input[type=checkbox]:checked').each(function () {
639             dropQuery += 'DROP `' + $(this).val() + '`, ';
640         });
641         dropQuery = dropQuery.slice(0, -2);
642         $.post(
643             'sql.php',
644             {
645                 'ajax_request': true,
646                 'db': CommonParams.get('db'),
647                 'table': CommonParams.get('table'),
648                 'server': CommonParams.get('server'),
649                 'sql_query': dropQuery,
650                 'is_js_confirmed': 1
651             },
652             function (data) {
653                 if (data.success === true) {
654                     goToStep2('goToFinish1NF');
655                 } else {
656                     Functions.ajaxShowMessage(data.error, false);
657                 }
658             }
659         );
660     });
661     $('#extra').on('click', '#moveRepeatingGroup', function () {
662         var repeatingCols = '';
663         $('#extra input[type=checkbox]:checked').each(function () {
664             repeatingCols += $(this).val() + ', ';
665         });
667         if (repeatingCols !== '') {
668             var newColName = $('#extra input[type=checkbox]:checked:first').val();
669             repeatingCols = repeatingCols.slice(0, -2);
670             var confirmStr = Functions.sprintf(Messages.strMoveRepeatingGroup, Functions.escapeHtml(repeatingCols), Functions.escapeHtml(CommonParams.get('table')));
671             confirmStr += '<input type="text" name="repeatGroupTable" placeholder="' + Messages.strNewTablePlaceholder + '">' +
672                 '( ' + Functions.escapeHtml(primaryKey.toString()) + ', <input type="text" name="repeatGroupColumn" placeholder="' + Messages.strNewColumnPlaceholder + '" value="' + Functions.escapeHtml(newColName) + '">)' +
673                 '</ol>';
674             $('#newCols').html(confirmStr);
676             $('<input>')
677                 .attr({ type: 'submit', value: Messages.strCancel })
678                 .on('click', function () {
679                     $('#newCols').html('');
680                     $('#extra input[type=checkbox]').prop('checked', false);
681                 })
682                 .appendTo('.tblFooters');
683             $('<input>')
684                 .attr({ type: 'submit', value: Messages.strGo })
685                 .on('click', function () {
686                     moveRepeatingGroup(repeatingCols);
687                 })
688                 .appendTo('.tblFooters');
689         }
690     });
691     $('#mainContent p').on('click', '#createPrimaryKey', function (event) {
692         event.preventDefault();
693         var url = {
694             'create_index': 1,
695             'server':  CommonParams.get('server'),
696             'db': CommonParams.get('db'),
697             'table': CommonParams.get('table'),
698             'added_fields': 1,
699             'add_fields':1,
700             'index': { 'Key_name':'PRIMARY' },
701             'ajax_request': true
702         };
703         var title = Messages.strAddPrimaryKey;
704         Functions.indexEditorDialog(url, title, function () {
705             // on success
706             $('.sqlqueryresults').remove();
707             $('.result_query').remove();
708             $('.tblFooters').html('');
709             goToStep2('goToStep3');
710         });
711         return false;
712     });
713     $('#mainContent').on('click', '#backEditPd', function () {
714         $('#mainContent').html(backup);
715     });
716     $('#mainContent').on('click', '#showPossiblePd', function () {
717         if ($(this).hasClass('hideList')) {
718             $(this).html('+ ' + Messages.strShowPossiblePd);
719             $(this).removeClass('hideList');
720             $('#newCols').slideToggle('slow');
721             return false;
722         }
723         if ($('#newCols').html() !== '') {
724             $('#showPossiblePd').html('- ' + Messages.strHidePd);
725             $('#showPossiblePd').addClass('hideList');
726             $('#newCols').slideToggle('slow');
727             return false;
728         }
729         $('#newCols').insertAfter('#mainContent h4');
730         $('#newCols').html('<div class="center">' + Messages.strLoading + '<br>' + Messages.strWaitForPd + '</div>');
731         $.post(
732             'normalization.php',
733             {
734                 'ajax_request': true,
735                 'db': CommonParams.get('db'),
736                 'table': CommonParams.get('table'),
737                 'server': CommonParams.get('server'),
738                 'findPdl': true
739             }, function (data) {
740                 $('#showPossiblePd').html('- ' + Messages.strHidePd);
741                 $('#showPossiblePd').addClass('hideList');
742                 $('#newCols').html(data.message);
743             });
744     });
745     $('#mainContent').on('click', '.pickPd', function () {
746         var strColsLeft = $(this).next('.determinants').html();
747         var colsLeft = strColsLeft.split(',');
748         var strColsRight = $(this).next().next().html();
749         var colsRight = strColsRight.split(',');
750         for (var i in colsRight) {
751             $('form[data-colname="' + colsRight[i].trim() + '"] input[type="checkbox"]').prop('checked', false);
752             for (var j in colsLeft) {
753                 $('form[data-colname="' + colsRight[i].trim() + '"] input[value="' + colsLeft[j].trim() + '"]').prop('checked', true);
754             }
755         }
756     });