web/wp-content/plugins/event-calendar/edit_form.js
branchwordpress
changeset 109 03b0d1493584
equal deleted inserted replaced
-1:000000000000 109:03b0d1493584
       
     1 /* EventCalendar.  $Revision: 255 $
       
     2  * Copyright (C) 2005 2006, Alex Tingle.
       
     3  * This file is licensed under the GNU GPL. See LICENSE file for details.
       
     4  */
       
     5 
       
     6 /** Register an onload function. */
       
     7 function WindowOnload(f)
       
     8 {
       
     9   var prev=window.onload;
       
    10   window.onload=function(){ if(prev)prev(); f(); }
       
    11 }
       
    12 
       
    13 /***
       
    14  ***  Set elsewhere: Ec3EditForm.event_cat_id
       
    15  ***                 Ec3EditForm.start_of_week
       
    16  ***/
       
    17 
       
    18 // namespace
       
    19 function Ec3EditForm()
       
    20 {
       
    21   var fmt="%Y-%m-%d %H:%M";
       
    22 
       
    23   WindowOnload( function()
       
    24   {
       
    25     var ELEMENT_NODE=1;
       
    26     var TEXT_NODE=3;
       
    27 
       
    28     Ec3EditForm.fieldset_se=document.getElementById('ec3_schedule_editor');
       
    29     Ec3EditForm.rows=document.getElementById('ec3_rows');
       
    30     Ec3EditForm.catinput=document.getElementById(Ec3EditForm.event_cat_id);
       
    31     
       
    32     if(Ec3EditForm.fieldset_se && Ec3EditForm.rows && Ec3EditForm.catinput)
       
    33     {
       
    34       // Perform some sleight of hand....
       
    35       // What I WANT to do, is set Ec3EditForm.catinput to read only, however
       
    36       // that's not possible for a checkbox. Disabled is good, but disabled
       
    37       // checkboxes are never submitted with the form. So, we HIDE the real
       
    38       // checkbox, and make a new dummy one that is shown but disabled.
       
    39       Ec3EditForm.dummyinput=Ec3EditForm.catinput.cloneNode(true);
       
    40       Ec3EditForm.dummyinput.id='ec3_dummy';
       
    41       Ec3EditForm.dummyinput.name='ec3_dummy';
       
    42       Ec3EditForm.dummyinput.disabled=true;
       
    43       Ec3EditForm.catinput.parentNode.insertBefore(
       
    44         Ec3EditForm.dummyinput, Ec3EditForm.catinput
       
    45       );
       
    46       Ec3EditForm.catinput.style.display='none';
       
    47       update_category();
       
    48       add_row_listeners(Ec3EditForm.fieldset_se);
       
    49     }
       
    50   } );
       
    51 
       
    52   function add_row_listeners(e)
       
    53   {
       
    54     var buttons=e.getElementsByTagName('button');
       
    55     for(var i=0; i<buttons.length; i++)
       
    56       if(buttons[i].id.indexOf('trigger_ec3_')==0)
       
    57       {
       
    58         input_id=buttons[i].id.substr(8);
       
    59         input=document.getElementById(input_id);
       
    60         if(!input)
       
    61           continue;
       
    62         cal=Calendar.setup({
       
    63           inputField:input,
       
    64           ifFormat:fmt,
       
    65           showsTime:true,
       
    66           button:buttons[i].id,
       
    67           step:1,
       
    68           firstDay:Ec3EditForm.start_of_week,
       
    69           singleClick:false,
       
    70           onUpdate:cal_changed
       
    71         });
       
    72         try{
       
    73           input.setAttribute('ec3_date',
       
    74             Date.parseDate(input.value,fmt).getTime());
       
    75         } catch(e) {
       
    76           input.setAttribute('ec3_date',0);
       
    77         }
       
    78         firetree_addEvent(input,'change',on_changed);
       
    79       }
       
    80   }
       
    81 
       
    82   function update_category()
       
    83   {
       
    84     // Set both the real AND dummpy checkboxes to match Ec3EditForm.rows.
       
    85     if(Ec3EditForm.rows.value>0)
       
    86     {
       
    87       Ec3EditForm.catinput.checked=true;
       
    88       Ec3EditForm.dummyinput.checked=true;
       
    89     }
       
    90     else
       
    91     {
       
    92       Ec3EditForm.catinput.checked=false;
       
    93       Ec3EditForm.dummyinput.checked=false;
       
    94     }
       
    95   }
       
    96 
       
    97   Ec3EditForm.add_row=function()
       
    98   {
       
    99     // Get the second-from-last TR
       
   100     var trs=Ec3EditForm.fieldset_se.getElementsByTagName('tr');
       
   101     var tr=trs[trs.length-2];
       
   102     // Make a new row, based on it & add it into the table.
       
   103     var new_tr=tr.cloneNode(1);
       
   104 
       
   105     var selects=new_tr.getElementsByTagName('select'); 
       
   106     for(var i=0; i<selects.length; i++)
       
   107     {
       
   108       selects[i].name+=trs.length-3;
       
   109       selects[i].id=selects[i].name;
       
   110     }
       
   111 
       
   112     var inputs=new_tr.getElementsByTagName('input');                         
       
   113     for(var i=0; i<inputs.length; i++)
       
   114     {
       
   115       inputs[i].name+=trs.length-3;
       
   116       inputs[i].id=inputs[i].name;
       
   117     }
       
   118 
       
   119     var buttons=new_tr.getElementsByTagName('button');                         
       
   120     for(var i=0; i<buttons.length; i++)
       
   121     {
       
   122       buttons[i].id+=trs.length-3;
       
   123     }
       
   124 
       
   125     new_tr.style.display=trs[0].style.display;
       
   126     tr.parentNode.insertBefore(new_tr,tr);
       
   127     Ec3EditForm.rows.value++;
       
   128     update_category();
       
   129     add_row_listeners(new_tr);
       
   130   }
       
   131 
       
   132   Ec3EditForm.del_row=function(element)
       
   133   {
       
   134     tr=element.parentNode.parentNode.parentNode;
       
   135     var inputs=tr.getElementsByTagName('input');
       
   136     for(var i=0; i<inputs.length; i++)
       
   137       if(0 == inputs[i].name.indexOf('ec3_action_'))
       
   138       {
       
   139         inputs[i].value='delete';
       
   140         break;
       
   141       }
       
   142     tr.style.display='none';
       
   143     Ec3EditForm.rows.value--;
       
   144     update_category();
       
   145   }
       
   146   
       
   147   function on_changed(e)
       
   148   {
       
   149     var input;
       
   150     if(e.currentTarget)
       
   151         input=e.currentTarget; // Mozilla/Safari/w3c
       
   152     else if(window.event)
       
   153         input=window.event.srcElement; // IE
       
   154     else
       
   155         return;
       
   156     input_changed(input);
       
   157   }
       
   158 
       
   159   function input_changed(input)
       
   160   {
       
   161     if(input.id.indexOf('ec3_start_')>=0)
       
   162     {
       
   163       // Change the end time to preserve the event duration.
       
   164       var start=input;
       
   165       var end=document.getElementById(start.id.replace('_start_','_end_'));
       
   166       var start_date0=parseInt(start.getAttribute('ec3_date'));
       
   167       var end_date0=parseInt(end.getAttribute('ec3_date'));
       
   168       var start_date1=Date.parseDate(start.value,fmt).getTime();
       
   169       start.setAttribute('ec3_date',start_date1);
       
   170       var delta=start_date1 - start_date0;
       
   171       var end_date1=end_date0+delta;
       
   172       end.setAttribute('ec3_date',end_date1);
       
   173       end.value=(new Date(end_date1)).print(fmt);
       
   174     }
       
   175     else if(input.id.indexOf('ec3_end_')>=0)
       
   176     {
       
   177       // Make sure that the start time is before the end time.
       
   178       var start=document.getElementById(input.id.replace('_end_','_start_'));
       
   179       var end=input;
       
   180       var start_date0=parseInt(start.getAttribute('ec3_date'));
       
   181       var end_date0=parseInt(end.getAttribute('ec3_date'));
       
   182       var end_date1=Date.parseDate(end.value,fmt).getTime();
       
   183       end.setAttribute('ec3_date',end_date1);
       
   184       if(start_date0>end_date1)
       
   185       {
       
   186         var start_date1=end_date1;
       
   187         start.setAttribute('ec3_date',start_date1);
       
   188         start.value=(new Date(start_date1)).print(fmt);
       
   189       }
       
   190     }
       
   191   }
       
   192   
       
   193   function cal_changed(cal)
       
   194   {
       
   195     input_changed(cal.params.inputField);
       
   196   }
       
   197 
       
   198 } // end namespace Ec3EditForm
       
   199 
       
   200 
       
   201 // Export public functions from namespace.
       
   202 Ec3EditForm();