~ubuntu-branches/ubuntu/lucid/phpmyadmin/lucid

« back to all changes in this revision

Viewing changes to js/functions.js

  • Committer: Bazaar Package Importer
  • Author(s): Michal Čihař
  • Date: 2010-03-08 15:25:00 UTC
  • mfrom: (1.2.8 upstream)
  • Revision ID: james.westby@ubuntu.com-20100308152500-6e8hmuqc5co39de5
Tags: 4:3.3.0-1
* New upstream version.
* Rediff debian/patches.
* Fix permissions on mediawiki export extension.

Show diffs side-by-side

added added

removed removed

Lines of Context:
2
2
/**
3
3
 * general function, usally for data manipulation pages
4
4
 *
5
 
 * @version $Id: functions.js 12919 2009-09-04 16:39:03Z lem9 $
 
5
 * @version $Id: functions.js 13182 2009-12-27 19:01:59Z helmo $
6
6
 */
7
7
 
8
8
/**
279
279
    return true;
280
280
} // end of the 'checkSqlQuery()' function
281
281
 
282
 
 
 
282
// Global variable row_class is set to even
 
283
var row_class = 'even';
 
284
 
 
285
/** 
 
286
* Generates a row dynamically in the differences table displaying
 
287
* the complete statistics of difference in  table like number of 
 
288
* rows to be updated, number of rows to be inserted, number of 
 
289
* columns to be added, number of columns to be removed, etc.
 
290
*
 
291
* @param  index         index of matching table
 
292
* @param  update_size   number of rows/column to be updated
 
293
* @param  insert_size   number of rows/coulmns to be inserted
 
294
* @param  remove_size   number of columns to be removed
 
295
* @param  insert_index  number of indexes to be inserted
 
296
* @param  remove_index  number of indexes to be removed
 
297
* @param  img_obj       image object 
 
298
* @param  table_name    name of the table
 
299
*/
 
300
 
 
301
function showDetails(i, update_size, insert_size, remove_size, insert_index, remove_index, img_obj, table_name)
 
302
{   
 
303
    // The path of the image is split to facilitate comparison
 
304
    var relative_path = (img_obj.src).split("themes/"); 
 
305
    
 
306
    // The image source is changed when the showDetails function is called.
 
307
    if (relative_path[1] == 'original/img/new_data_hovered.jpg') {    
 
308
        img_obj.src = "./themes/original/img/new_data_selected_hovered.jpg";
 
309
        img_obj.alt = PMA_messages['strClickToUnselect'];  //only for IE browser
 
310
    } else if (relative_path[1] == 'original/img/new_struct_hovered.jpg') {
 
311
        img_obj.src = "./themes/original/img/new_struct_selected_hovered.jpg";
 
312
        img_obj.alt = PMA_messages['strClickToUnselect'];
 
313
    } else if (relative_path[1] == 'original/img/new_struct_selected_hovered.jpg') {
 
314
        img_obj.src = "./themes/original/img/new_struct_hovered.jpg";
 
315
        img_obj.alt = PMA_messages['strClickToSelect'];
 
316
    } else if (relative_path[1] == 'original/img/new_data_selected_hovered.jpg') {    
 
317
        img_obj.src = "./themes/original/img/new_data_hovered.jpg";
 
318
        img_obj.alt = PMA_messages['strClickToSelect'];
 
319
    } 
 
320
    
 
321
    var div = document.getElementById("list");    
 
322
    var table = div.getElementsByTagName("table")[0]; 
 
323
    var table_body = table.getElementsByTagName("tbody")[0];
 
324
    
 
325
    //Global variable row_class is being used
 
326
    if (row_class == 'even') {
 
327
        row_class = 'odd';
 
328
    } else {
 
329
        row_class = 'even'; 
 
330
    }
 
331
    // If the red or green button against a table name is pressed then append a new row to show the details of differences of this table. 
 
332
    if ((relative_path[1] != 'original/img/new_struct_selected_hovered.jpg') && (relative_path[1] != 'original/img/new_data_selected_hovered.jpg')) { 
 
333
        
 
334
        var newRow = document.createElement("tr");    
 
335
        newRow.setAttribute("class", row_class);
 
336
        newRow.className = row_class; 
 
337
        // Id assigned to this row element is same as the index of this table name in the  matching_tables/source_tables_uncommon array  
 
338
        newRow.setAttribute("id" , i);
 
339
            
 
340
        var table_name_cell = document.createElement("td");
 
341
        table_name_cell.align = "center";
 
342
        table_name_cell.innerHTML = table_name ;
 
343
        
 
344
        newRow.appendChild(table_name_cell);
 
345
       
 
346
        var create_table = document.createElement("td");
 
347
        create_table.align = "center";
 
348
           
 
349
        var add_cols = document.createElement("td");
 
350
        add_cols.align = "center";
 
351
        
 
352
        var remove_cols = document.createElement("td");
 
353
        remove_cols.align = "center";
 
354
        
 
355
        var alter_cols = document.createElement("td");
 
356
        alter_cols.align = "center";
 
357
        
 
358
        var add_index = document.createElement("td");
 
359
        add_index.align = "center";
 
360
        
 
361
        var delete_index = document.createElement("td");
 
362
        delete_index.align = "center";
 
363
        
 
364
        var update_rows = document.createElement("td");
 
365
        update_rows.align = "center";
 
366
        
 
367
        var insert_rows = document.createElement("td");
 
368
        insert_rows.align = "center";
 
369
        
 
370
        var tick_image = document.createElement("img");
 
371
        tick_image.src = "./themes/original/img/s_success.png"; 
 
372
 
 
373
        if (update_size == '' && insert_size == '' && remove_size == '') {
 
374
          /**
 
375
          This is the case when the table needs to be created in target database. 
 
376
          */
 
377
            create_table.appendChild(tick_image);
 
378
            add_cols.innerHTML = "--";
 
379
            remove_cols.innerHTML = "--";         
 
380
            alter_cols.innerHTML = "--";
 
381
            delete_index.innerHTML = "--";
 
382
            add_index.innerHTML = "--";
 
383
            update_rows.innerHTML = "--";
 
384
            insert_rows.innerHTML = "--";
 
385
 
 
386
            newRow.appendChild(create_table);
 
387
            newRow.appendChild(add_cols);
 
388
            newRow.appendChild(remove_cols);
 
389
            newRow.appendChild(alter_cols);
 
390
            newRow.appendChild(delete_index);
 
391
            newRow.appendChild(add_index);
 
392
            newRow.appendChild(update_rows);
 
393
            newRow.appendChild(insert_rows);
 
394
            
 
395
        } else if (update_size == '' && remove_size == '') {
 
396
           /**
 
397
           This is the case when data difference is displayed in the 
 
398
           table which is present in source but absent from target database 
 
399
          */
 
400
            create_table.innerHTML = "--";
 
401
            add_cols.innerHTML = "--";
 
402
            remove_cols.innerHTML = "--";         
 
403
            alter_cols.innerHTML = "--";
 
404
            add_index.innerHTML = "--";
 
405
            delete_index.innerHTML = "--";
 
406
            update_rows.innerHTML = "--";
 
407
            insert_rows.innerHTML = insert_size;
 
408
            
 
409
            newRow.appendChild(create_table);
 
410
            newRow.appendChild(add_cols);
 
411
            newRow.appendChild(remove_cols);
 
412
            newRow.appendChild(alter_cols);
 
413
            newRow.appendChild(delete_index); 
 
414
            newRow.appendChild(add_index);
 
415
            newRow.appendChild(update_rows);
 
416
            newRow.appendChild(insert_rows);
 
417
            
 
418
        } else if (remove_size == '') {
 
419
            /**
 
420
             This is the case when data difference between matching_tables is displayed. 
 
421
            */
 
422
            create_table.innerHTML = "--";
 
423
            add_cols.innerHTML = "--";
 
424
            remove_cols.innerHTML = "--";         
 
425
            alter_cols.innerHTML = "--";
 
426
            add_index.innerHTML = "--";
 
427
            delete_index.innerHTML = "--";
 
428
            update_rows.innerHTML = update_size;
 
429
            insert_rows.innerHTML = insert_size;
 
430
            
 
431
            newRow.appendChild(create_table);
 
432
            newRow.appendChild(add_cols);
 
433
            newRow.appendChild(remove_cols);
 
434
            newRow.appendChild(alter_cols);
 
435
            newRow.appendChild(delete_index);
 
436
            newRow.appendChild(add_index);
 
437
            newRow.appendChild(update_rows);
 
438
            newRow.appendChild(insert_rows);
 
439
            
 
440
        } else {
 
441
            /**
 
442
            This is the case when structure difference between matching_tables id displayed
 
443
            */
 
444
            create_table.innerHTML = "--";
 
445
            add_cols.innerHTML = insert_size;
 
446
            remove_cols.innerHTML = remove_size;         
 
447
            alter_cols.innerHTML = update_size;
 
448
            delete_index.innerHTML = remove_index;
 
449
            add_index.innerHTML = insert_index;
 
450
            update_rows.innerHTML = "--";
 
451
            insert_rows.innerHTML = "--";
 
452
           
 
453
            newRow.appendChild(create_table);
 
454
            newRow.appendChild(add_cols);
 
455
            newRow.appendChild(remove_cols);
 
456
            newRow.appendChild(alter_cols); 
 
457
            newRow.appendChild(delete_index);
 
458
            newRow.appendChild(add_index);
 
459
            newRow.appendChild(update_rows);
 
460
            newRow.appendChild(insert_rows);
 
461
        }
 
462
        table_body.appendChild(newRow);
 
463
      
 
464
    } else if ((relative_path[1] != 'original/img/new_struct_hovered.jpg') && (relative_path[1] != 'original/img/new_data_hovered.jpg')) {
 
465
      //The case when the row showing the details need to be removed from the table i.e. the difference button is deselected now.
 
466
        var table_rows = table_body.getElementsByTagName("tr");
 
467
        var j;
 
468
        var index; 
 
469
        for (j=0; j < table_rows.length; j++) 
 
470
        {   
 
471
            if (table_rows[j].id == i) { 
 
472
                index = j;
 
473
                table_rows[j].parentNode.removeChild(table_rows[j]);     
 
474
            }
 
475
        }
 
476
        //The table row css is being adjusted. Class "odd" for odd rows and "even" for even rows should be maintained.
 
477
        for(index; index < table_rows.length; index++)
 
478
        {
 
479
            row_class_element = table_rows[index].getAttribute('class');
 
480
            if (row_class_element == "even") {
 
481
                table_rows[index].setAttribute("class","odd");  // for Mozilla firefox
 
482
                table_rows[index].className = "odd";            // for IE browser
 
483
            } else {
 
484
                table_rows[index].setAttribute("class","even"); // for Mozilla firefox  
 
485
                table_rows[index].className = "even";           // for IE browser       
 
486
            }
 
487
        }    
 
488
    }     
 
489
}
 
490
 
 
491
/**
 
492
 * Changes the image on hover effects
 
493
 *
 
494
 * @param   img_obj   the image object whose source needs to be changed
 
495
 *
 
496
 */
 
497
 
 
498
function change_Image(img_obj)
 
499
{
 
500
     var relative_path = (img_obj.src).split("themes/"); 
 
501
    
 
502
    if (relative_path[1] == 'original/img/new_data.jpg') {    
 
503
        img_obj.src = "./themes/original/img/new_data_hovered.jpg";  
 
504
    } else if (relative_path[1] == 'original/img/new_struct.jpg') {
 
505
        img_obj.src = "./themes/original/img/new_struct_hovered.jpg";
 
506
    } else if (relative_path[1] == 'original/img/new_struct_hovered.jpg') {
 
507
        img_obj.src = "./themes/original/img/new_struct.jpg";
 
508
    } else if (relative_path[1] == 'original/img/new_data_hovered.jpg') {    
 
509
        img_obj.src = "./themes/original/img/new_data.jpg";  
 
510
    } else if (relative_path[1] == 'original/img/new_data_selected.jpg') {    
 
511
        img_obj.src = "./themes/original/img/new_data_selected_hovered.jpg";  
 
512
    } else if(relative_path[1] == 'original/img/new_struct_selected.jpg') {    
 
513
        img_obj.src = "./themes/original/img/new_struct_selected_hovered.jpg";  
 
514
    } else if (relative_path[1] == 'original/img/new_struct_selected_hovered.jpg') {    
 
515
        img_obj.src = "./themes/original/img/new_struct_selected.jpg";  
 
516
    } else if (relative_path[1] == 'original/img/new_data_selected_hovered.jpg') {    
 
517
        img_obj.src = "./themes/original/img/new_data_selected.jpg";  
 
518
    }
 
519
}
 
520
 
 
521
/**
 
522
 * Generates the URL containing the list of selected table ids for synchronization and 
 
523
 * a variable checked for confirmation of deleting previous rows from target tables 
 
524
 *
 
525
 * @param   token   the token generated for each PMA form 
 
526
 *
 
527
 */
 
528
 
 
529
function ApplySelectedChanges(token)
 
530
{
 
531
    var div =  document.getElementById("list");
 
532
    var table = div.getElementsByTagName('table')[0];
 
533
    var table_body = table.getElementsByTagName('tbody')[0];
 
534
    // Get all the rows from the details table
 
535
    var table_rows = table_body.getElementsByTagName('tr');
 
536
    var x = table_rows.length;
 
537
    var i;
 
538
    /**
 
539
     Append the token at the beginning of the query string followed by  
 
540
    Table_ids that shows that "Apply Selected Changes" button is pressed            
 
541
    */
 
542
    var append_string = "?token="+token+"&Table_ids="+1;
 
543
    for(i=0; i<x; i++){
 
544
           append_string += "&";    
 
545
           append_string += i+"="+table_rows[i].id; 
 
546
    }
 
547
    
 
548
    // Getting the value of checkbox delete_rows
 
549
    var checkbox = document.getElementById("delete_rows");
 
550
    if (checkbox.checked){
 
551
        append_string += "&checked=true";
 
552
    } else {
 
553
         append_string += "&checked=false";
 
554
    }
 
555
    //Appending the token and list of table ids in the URL 
 
556
    location.href += token;
 
557
    location.href += append_string;
 
558
}
 
559
 
 
560
/** 
 
561
* Displays error message if any text field 
 
562
* is left empty other than port field.
 
563
*
 
564
* @param  string   the form name
 
565
* @param  object   the form
 
566
*
 
567
* @return  boolean  whether the form field is empty or not
 
568
*/
 
569
function validateConnection(form_name, form_obj)
 
570
{   
 
571
    var check = true;
 
572
    var src_hostfilled = true;
 
573
    var trg_hostfilled = true;
 
574
 
 
575
    for (var i=1; i<form_name.elements.length; i++)
 
576
    {
 
577
        // All the text fields are checked excluding the port field because the default port can be used.
 
578
        if ((form_name.elements[i].type == 'text') && (form_name.elements[i].name != 'src_port') && (form_name.elements[i].name != 'trg_port')) {
 
579
            check = true;
 
580
            check = emptyFormElements(form_obj, form_name.elements[i].name);
 
581
 
 
582
            if (check==false) {
 
583
              element = form_name.elements[i].name;
 
584
              if (form_name.elements[i].name == 'src_host') {
 
585
                src_hostfilled = false;
 
586
                continue;
 
587
              }
 
588
              if (form_name.elements[i].name == 'trg_host') {
 
589
                trg_hostfilled = false;
 
590
                continue;
 
591
              }
 
592
              if ((form_name.elements[i].name == 'src_socket' && src_hostfilled==false) || (form_name.elements[i].name == 'trg_socket' && trg_hostfilled==false))
 
593
                break;
 
594
              else
 
595
                continue;
 
596
              break;
 
597
            }
 
598
        } 
 
599
    }
 
600
    if (!check) {
 
601
        form_obj.reset();
 
602
        element.select();
 
603
        alert(PMA_messages['strFormEmpty']);
 
604
        element.focus();
 
605
    }
 
606
    return check;
 
607
}
 
608
    
283
609
/**
284
610
 * Check if a form's element is empty
285
611
 * should be
308
634
 
309
635
 
310
636
/**
311
 
 * Displays an error message if an element of a form hasn't been completed and
312
 
 * should be
313
637
 *
314
638
 * @param   object   the form
315
639
 * @param   string   the name of the form field to put the focus on
321
645
    var theField = theForm.elements[theFieldName];
322
646
    var isEmpty = emptyCheckTheField(theForm, theFieldName);
323
647
 
324
 
    if (isEmpty) {
325
 
        theForm.reset();
326
 
        theField.select();
327
 
        alert(PMA_messages['strFormEmpty']);
328
 
        theField.focus();
329
 
        return false;
330
 
    }
331
648
 
332
 
    return true;
 
649
    return isEmpty;
333
650
} // end of the 'emptyFormElements()' function
334
651
 
335
652
 
519
836
            continue;
520
837
        }
521
838
        // ... and to mark the row on click ...
522
 
        rows[i].onmousedown = function() {
 
839
        rows[i].onmousedown = function(event) {
523
840
            var unique_id;
524
841
            var checkbox;
 
842
            var table;
525
843
 
 
844
            // Somehow IE8 has this not set
 
845
            if (!event) var event = window.event
 
846
                        
526
847
            checkbox = this.getElementsByTagName( 'input' )[0];
527
848
            if ( checkbox && checkbox.type == 'checkbox' ) {
528
849
                unique_id = checkbox.name + checkbox.value;
546
867
 
547
868
            if ( checkbox && checkbox.disabled == false ) {
548
869
                checkbox.checked = marked_row[unique_id];
 
870
                if (typeof(event) == 'object') {
 
871
                    table = this.parentNode;
 
872
                    i = 0;
 
873
                    while (table.tagName.toLowerCase() != 'table' && i < 20) {
 
874
                        i++;
 
875
                        table = table.parentNode;
 
876
                    }
 
877
 
 
878
                    if (event.shiftKey == true && table.lastClicked != undefined) {
 
879
                        if (event.preventDefault) { event.preventDefault(); } else { event.returnValue = false; }
 
880
                        i = table.lastClicked;
 
881
 
 
882
                        if (i < this.rowIndex) {
 
883
                            i++;
 
884
                        } else {
 
885
                            i--;
 
886
                        }
 
887
 
 
888
                        while (i != this.rowIndex) {
 
889
                            table.rows[i].onmousedown();
 
890
                            if (i < this.rowIndex) {
 
891
                                i++;
 
892
                            } else {
 
893
                                i--;
 
894
                            }
 
895
                        }
 
896
                    }
 
897
 
 
898
                    table.lastClicked = this.rowIndex;
 
899
                }
549
900
            }
550
901
        }
551
902