Changeset 8580

Show
Ignore:
Timestamp:
05/11/07 18:54:36 (20 months ago)
Author:
peller
Message:

Replace enum-style args with string literals. Refs #2758

Files:
3 modified

Legend:

Unmodified
Added
Removed
  • dijit/trunk/_Calendar.js

    r8578 r8580  
    5858                        var firstDay = month.getDay(); 
    5959                        var daysInMonth = dojo.date.getDaysInMonth(month); 
    60                         var daysInPreviousMonth = dojo.date.getDaysInMonth(dojo.date.add(month, dojo.date.parts.MONTH, -1)); 
     60                        var daysInPreviousMonth = dojo.date.getDaysInMonth(dojo.date.add(month, "month", -1)); 
    6161                        var today = new Date(); 
    6262                        var selected = this.value; 
     
    8585 
    8686                                if(adj){ 
    87                                         date = dojo.date.add(date, dojo.date.parts.MONTH, adj); 
     87                                        date = dojo.date.add(date, "month", adj); 
    8888                                } 
    8989                                date.setDate(number); 
    9090 
    91                                 if(!dojo.date.compare(date, today, dojo.date.types.DATE)){ 
     91                                if(!dojo.date.compare(date, today, "date")){ 
    9292                                        clazz = "calendarCurrentDate " + clazz; 
    9393                                } 
    9494 
    95                                 if(!dojo.date.compare(date, selected, dojo.date.types.DATE)){ 
     95                                if(!dojo.date.compare(date, selected, "date")){ 
    9696                                        clazz = "calendarSelectedDate " + clazz; 
    9797                                } 
     
    160160                        // summary: handler for increment month event 
    161161                        evt.stopPropagation(); 
    162                         this._adjustDate(dojo.date.parts.MONTH, 1); 
     162                        this._adjustDate("month", 1); 
    163163                }, 
    164164         
     
    166166                        // summary: handler for increment month event 
    167167                        evt.stopPropagation(); 
    168                         this._adjustDate(dojo.date.parts.MONTH, -1); 
     168                        this._adjustDate("month", -1); 
    169169                }, 
    170170 
     
    172172                        // summary: handler for increment year event 
    173173                        evt.stopPropagation(); 
    174                         this._adjustDate(dojo.date.parts.YEAR, 1); 
     174                        this._adjustDate("year", 1); 
    175175                }, 
    176176         
     
    178178                        // summary: handler for increment year event 
    179179                        evt.stopPropagation(); 
    180                         this._adjustDate(dojo.date.parts.YEAR, -1); 
     180                        this._adjustDate("year", -1); 
    181181                }, 
    182182 
  • dojo/trunk/date.js

    r8567 r8580  
    1313        var lastDayOfPrevYear = new Date(fullYear-1, 11, 31); 
    1414        return Math.floor((dateObject.getTime() - 
    15                 lastDayOfPrevYear.getTime()) / 86400000); // Number 
     15                lastDayOfPrevYear.getTime()) / (24*60*60*1000)); // Number 
    1616} 
    1717 
     
    3131 
    3232        return Math.floor((dateObject.getTime() - 
    33                 firstDayOfYear.getTime()) / 604800000); 
     33                firstDayOfYear.getTime()) / (7*24*60*60*1000)); // Number 
    3434} 
    3535 
     
    4646                offset = (weeks + week + 1) - currentWeek; 
    4747        } 
    48         return dojo.date.add(dateObject, dojo.date.parts.WEEK, offset); // Date 
     48        return dojo.date.add(dateObject, "week", offset); // Date 
    4949} 
    5050 
     
    7575        var date = new Date(dateObject); 
    7676        date.setHours(0, 0, 0, 0); 
    77         return dojo.date.add(date, dojo.date.parts.DAY, offset); // Date 
     77        return dojo.date.add(date, "day", offset); // Date 
    7878} 
    7979 
     
    161161// Utility methods to do arithmetic calculations with Dates 
    162162 
    163 dojo.date.types={ 
    164         //      summary 
    165         //      bitmask for comparison operations. 
    166         DATE:1, TIME:2  
    167 }; 
    168  
    169 dojo.date.compare = function(/*Date|Number*/date1, /*Date|Number?*/date2, /*dojo.date.types?*/type){ 
     163dojo.date.compare = function(/*Date|Number*/date1, /*Date|Number?*/date2, /*String?*/portion){ 
    170164        //      summary 
    171165        //              Compare two date objects by date, time, or both. 
     
    180174        //              Date object or Number equivalent.  If not specified, the current Date is used. 
    181175        // 
    182         //      type 
    183         //              A constant representing DATE or TIME.  Compares DATE and TIME by default. 
    184         //              See dojo.date.types. 
    185  
    186         date2 = date2 || new Date(); 
    187  
    188         var typeEnum = dojo.date.types; 
    189         var DATE = typeEnum.DATE; 
    190         var TIME = typeEnum.TIME; 
    191         if(type && type != DATE | TIME){ 
    192                 date1 = new Date(date1); 
    193                 date2 = new Date(date2); 
    194                 if(type == DATE){ 
     176        //      portion 
     177        //              A string indicating the "date" or "time" portion of a Date object.  Compares both "date" and "time" by default. 
     178        //              One of the following: {"date", "time", "datetime"} 
     179 
     180        date1 = new Date(date1); 
     181        date2 = new Date(date2 || new Date()); 
     182 
     183        if(typeof portion !== "undefined" && portion != "datetime"){ 
     184                if(portion == "date"){ 
    195185                        // Ignore times and compare dates. 
    196186                        date1.setHours(0, 0, 0, 0); 
    197187                        date2.setHours(0, 0, 0, 0); 
    198                 }else if(type == TIME){ 
     188                }else{ 
    199189                        // Ignore dates and compare times. 
    200190                        date1.setFullYear(0, 0, 0); 
     
    208198}; 
    209199 
    210 dojo.date.parts = { 
     200dojo.date.add = function(/*Date|Number*/date, /*String*/interval, /*int*/amount){ 
    211201        //      summary 
    212         //              constants for use in dojo.date.add and .diff 
    213         YEAR:0, MONTH:1, DAY:2, HOUR:3, MINUTE:4, SECOND:5, MILLISECOND:6, QUARTER:7, WEEK:8, WEEKDAY:9 
    214 }; 
    215  
    216 dojo.date.add = function(/*Date|Number*/date, /*dojo.date.parts*/interval, /*int*/incr){ 
    217 //      summary 
    218 //              Add to a Date in intervals of different size, from milliseconds to years 
    219 // 
    220 //      date 
    221 //              Date object to start with, or Number equivalent 
    222 // 
    223 //      interval 
    224 //              A constant representing the interval, e.g. YEAR, MONTH, DAY.  See dojo.date.parts. 
    225 // 
    226 //      incr 
    227 //              How much to add to the date. 
    228  
    229         if(typeof date == 'number'){date = new Date(date);} 
    230  
    231         function fixOvershoot(){ 
    232                 if (sum.getDate() < date.getDate()){ 
     202        //              Add to a Date in intervals of different size, from milliseconds to years 
     203        // 
     204        //      date 
     205        //              Date object to start with, or Number equivalent 
     206        // 
     207        //      interval 
     208        //              A string representing the interval.  One of the following: 
     209        //              {year, month, day, hour, minute, second, millisecond, quarter, week, weekday} 
     210        // 
     211        //      amount 
     212        //              How much to add to the date. 
     213 
     214        date = new Date(date); 
     215        var sum = new Date(date); 
     216        var fixOvershoot = false; 
     217        var property = "Date"; 
     218 
     219        switch(interval){ 
     220                case "day": 
     221                        break; 
     222                case "weekday": 
     223                        //i18n FIXME: assumes Saturday/Sunday weekend, but even this is not standard.  There are CLDR entries to localize this. 
     224                        var dayOfMonth = date.getDate(); 
     225                        var weeks = 0; 
     226                        var days = 0; 
     227                        var strt = 0; 
     228                        var trgt = 0; 
     229                        var adj = 0; 
     230                        // Divide the increment time span into weekspans plus leftover days 
     231                        // e.g., 8 days is one 5-day weekspan / and two leftover days 
     232                        // Can't have zero leftover days, so numbers divisible by 5 get 
     233                        // a days value of 5, and the remaining days make up the number of weeks 
     234                        var mod = amount % 5; 
     235                        if(!mod){ 
     236                                days = (amount > 0) ? 5 : -5; 
     237                                weeks = (amount > 0) ? ((amount-5)/5) : ((amount+5)/5); 
     238                        }else{ 
     239                                days = mod; 
     240                                weeks = parseInt(amount/5); 
     241                        } 
     242                        // Get weekday value for orig date param 
     243                        strt = date.getDay(); 
     244                        // Orig date is Sat / positive incrementer 
     245                        // Jump over Sun 
     246                        if(strt == 6 && amount > 0){ 
     247                                adj = 1; 
     248                        }else if(strt == 0 && amount < 0){ 
     249                        // Orig date is Sun / negative incrementer 
     250                        // Jump back over Sat 
     251                                adj = -1; 
     252                        } 
     253                        // Get weekday val for the new date 
     254                        trgt = strt + days; 
     255                        // New date is on Sat or Sun 
     256                        if(trgt == 0 || trgt == 6){ 
     257                                adj = (amount > 0) ? 2 : -2; 
     258                        } 
     259                        // Increment by number of weeks plus leftover days plus 
     260                        // weekend adjustments 
     261                        amount = dayOfMonth + 7*weeks + days + adj; 
     262                        break; 
     263                case "year": 
     264                        property = "FullYear"; 
     265                        // Keep increment/decrement from 2/29 out of March 
     266                        fixOvershoot = true; 
     267                        break; 
     268                case "week": 
     269                        amount *= 7; 
     270                        break; 
     271                case "quarter": 
     272                        // Naive quarter is just three months 
     273                        amount *= 3; 
     274                        // fallthrough... 
     275                case "month": 
     276                        // Reset to last day of month if you overshoot 
     277                        fixOvershoot = true; 
     278                        property = "Month"; 
     279                        break; 
     280                case "hour": 
     281                case "minute": 
     282                case "second": 
     283                case "millisecond": 
     284                        property = interval.charAt(0).toUpperCase() + interval.substring(1) + "s"; 
     285        } 
     286 
     287        if(property){ 
     288console.log("property="+property); 
     289                sum["set"+property](sum["get"+property]()+amount); 
     290        } 
     291 
     292        if(fixOvershoot){ 
     293                if(sum.getDate() < date.getDate()){ 
    233294                        sum.setDate(0); 
    234295                } 
    235296        } 
    236          
    237         var sum = new Date(date); 
    238  
    239         with(dojo.date.parts){ 
    240                 switch(interval){ 
    241                         case YEAR: 
    242                                 sum.setFullYear(date.getFullYear()+incr); 
    243                                 // Keep increment/decrement from 2/29 out of March 
    244                                 fixOvershoot(); 
    245                                 break; 
    246                         case QUARTER: 
    247                                 // Naive quarter is just three months 
    248                                 incr*=3; 
    249                                 // fallthrough... 
    250                         case MONTH: 
    251                                 sum.setMonth(date.getMonth()+incr); 
    252                                 // Reset to last day of month if you overshoot 
    253                                 fixOvershoot(); 
    254                                 break; 
    255                         case WEEK: 
    256                                 incr*=7; 
    257                                 // fallthrough... 
    258                         case DAY: 
    259                                 sum.setDate(date.getDate() + incr); 
    260                                 break; 
    261                         case WEEKDAY: 
    262                                 //FIXME: assumes Saturday/Sunday weekend, but even this is not fixed.  There are CLDR entries to localize this. 
    263                                 var dat = date.getDate(); 
    264                                 var weeks = 0; 
    265                                 var days = 0; 
    266                                 var strt = 0; 
    267                                 var trgt = 0; 
    268                                 var adj = 0; 
    269                                 // Divide the increment time span into weekspans plus leftover days 
    270                                 // e.g., 8 days is one 5-day weekspan / and two leftover days 
    271                                 // Can't have zero leftover days, so numbers divisible by 5 get 
    272                                 // a days value of 5, and the remaining days make up the number of weeks 
    273                                 var mod = incr % 5; 
    274                                 if (mod == 0) { 
    275                                         days = (incr > 0) ? 5 : -5; 
    276                                         weeks = (incr > 0) ? ((incr-5)/5) : ((incr+5)/5); 
    277                                 } 
    278                                 else { 
    279                                         days = mod; 
    280                                         weeks = parseInt(incr/5); 
    281                                 } 
    282                                 // Get weekday value for orig date param 
    283                                 strt = date.getDay(); 
    284                                 // Orig date is Sat / positive incrementer 
    285                                 // Jump over Sun 
    286                                 if (strt == 6 && incr > 0) { 
    287                                         adj = 1; 
    288                                 } 
    289                                 // Orig date is Sun / negative incrementer 
    290                                 // Jump back over Sat 
    291                                 else if (strt == 0 && incr < 0) { 
    292                                         adj = -1; 
    293                                 } 
    294                                 // Get weekday val for the new date 
    295                                 trgt = strt + days; 
    296                                 // New date is on Sat or Sun 
    297                                 if (trgt == 0 || trgt == 6) { 
    298                                         adj = (incr > 0) ? 2 : -2; 
    299                                 } 
    300                                 // Increment by number of weeks plus leftover days plus 
    301                                 // weekend adjustments 
    302                                 sum.setDate(dat + (7*weeks) + days + adj); 
    303                                 break; 
    304                         case HOUR: 
    305                                 sum.setHours(sum.getHours()+incr); 
    306                                 break; 
    307                         case MINUTE: 
    308                                 sum.setMinutes(sum.getMinutes()+incr); 
    309                                 break; 
    310                         case SECOND: 
    311                                 sum.setSeconds(sum.getSeconds()+incr); 
    312                                 break; 
    313                         case MILLISECOND: 
    314                                 sum.setMilliseconds(sum.getMilliseconds()+incr); 
    315                                 break; 
    316                         default: 
    317                                 // Do nothing 
    318                                 break; 
    319                 } 
    320         } 
    321297 
    322298        return sum; // Date 
    323299}; 
    324300 
    325 dojo.date.diff = function(/*Date|Number*/date1, /*Date|Number*/date2, /*dojo.date.parts*/interval){ 
    326 //      summary 
    327 //              Get the difference in a specific unit of time (e.g., number of months, weeks, 
    328 //              days, etc.) between two dates. 
    329 // 
    330 //      date1 
    331 //              Date object or Number equivalent 
    332 // 
    333 //      date2 
    334 //              Date object or Number equivalent 
    335 // 
    336 //      interval 
    337 //              A constant representing the interval, e.g. YEAR, MONTH, DAY.  See dojo.date.parts. 
     301dojo.date.diff = function(/*Date|Number*/date1, /*Date|Number*/date2, /*String?*/interval){ 
     302        //      summary 
     303        //              Get the difference in a specific unit of time (e.g., number of months, weeks, 
     304        //              days, etc.) between two dates, rounded to the nearest integer. 
     305        // 
     306        //      date1 
     307        //              Date object or Number equivalent 
     308        // 
     309        //      date2 
     310        //              Date object or Number equivalent 
     311        // 
     312        //      interval 
     313        //              A string representing the interval.  One of the following: 
     314        //              {year, month, day, hour, minute, second, millisecond, quarter, week, weekday} 
    338315 
    339316        // Accept timestamp input 
    340         if(typeof date1 == 'number'){date1 = new Date(date1);} 
    341         if(typeof date2 == 'number'){date2 = new Date(date2);} 
    342         var yeaDiff = date2.getFullYear() - date1.getFullYear(); 
    343         var monDiff = (date2.getMonth() - date1.getMonth()) + (yeaDiff * 12); 
    344         var msDiff = date2.getTime() - date1.getTime(); // Millisecs 
    345         var secDiff = msDiff/1000; 
    346         var minDiff = secDiff/60; 
    347         var houDiff = minDiff/60; 
    348         var dayDiff = houDiff/24; 
    349         var weeDiff = dayDiff/7; 
    350         var delta = 0; // Integer return value 
    351  
    352         with(dojo.date.parts){ 
    353                 switch(interval){ 
    354                         case YEAR: 
    355                                 delta = yeaDiff; 
    356                                 break; 
    357                         case QUARTER: 
    358                                 var m1 = date1.getMonth(); 
    359                                 var m2 = date2.getMonth(); 
    360                                 // Figure out which quarter the months are in 
    361                                 var q1 = Math.floor(m1/3) + 1; 
    362                                 var q2 = Math.floor(m2/3) + 1; 
    363                                 // Add quarters for any year difference between the dates 
    364                                 q2 += (yeaDiff * 4); 
    365                                 delta = q2 - q1; 
    366                                 break; 
    367                         case MONTH: 
    368                                 delta = monDiff; 
    369                                 break; 
    370                         case WEEK: 
    371                                 // Truncate instead of rounding 
    372                                 // Don't use Math.floor -- value may be negative 
    373                                 delta = parseInt(weeDiff); 
    374                                 break; 
    375                         case DAY: 
    376                                 delta = dayDiff; 
    377                                 break; 
    378                         case WEEKDAY: 
    379                                 var days = Math.round(dayDiff); 
    380                                 var weeks = parseInt(days/7); 
    381                                 var mod = days % 7; 
    382  
    383                                 // Even number of weeks 
    384                                 if(mod == 0){ 
    385                                         days = weeks*5; 
    386                                 }else{ 
    387                                         // Weeks plus spare change (< 7 days) 
    388                                         var adj = 0; 
    389                                         var aDay = date1.getDay(); 
    390                                         var bDay = date2.getDay(); 
    391          
    392                                         weeks = parseInt(days/7); 
    393                                         mod = days % 7; 
    394                                         // Mark the date advanced by the number of 
    395                                         // round weeks (may be zero) 
    396                                         var dtMark = new Date(date1); 
    397                                         dtMark.setDate(dtMark.getDate()+(weeks*7)); 
    398                                         var dayMark = dtMark.getDay(); 
    399  
    400                                         // Spare change days -- 6 or less 
    401                                         if(dayDiff > 0){ 
    402                                                 switch(true){ 
    403                                                         // Range starts on Sat 
    404                                                         case aDay == 6: 
    405                                                                 adj = -1; 
    406                                                                 break; 
    407                                                         // Range starts on Sun 
    408                                                         case aDay == 0: 
    409                                                                 adj = 0; 
    410                                                                 break; 
    411                                                         // Range ends on Sat 
    412                                                         case bDay == 6: 
    413                                                                 adj = -1; 
    414                                                                 break; 
    415                                                         // Range ends on Sun 
    416                                                         case bDay == 0: 
    417                                                                 adj = -2; 
    418                                                                 break; 
    419                                                         // Range contains weekend 
    420                                                         case (dayMark + mod) > 5: 
    421                                                                 adj = -2; 
    422                                                                 break; 
    423                                                         default: 
    424                                                                 // Do nothing 
    425                                                                 break; 
    426                                                 } 
    427                                         }else if(dayDiff < 0){ 
    428                                                 switch (true){ 
    429                                                         // Range starts on Sat 
    430                                                         case aDay == 6: 
    431                                                                 adj = 0; 
    432                                                                 break; 
    433                                                         // Range starts on Sun 
    434                                                         case aDay == 0: 
    435                                                                 adj = 1; 
    436                                                                 break; 
    437                                                         // Range ends on Sat 
    438                                                         case bDay == 6: 
    439                                                                 adj = 2; 
    440                                                                 break; 
    441                                                         // Range ends on Sun 
    442                                                         case bDay == 0: 
    443                                                                 adj = 1; 
    444                                                                 break; 
    445                                                         // Range contains weekend 
    446                                                         case (dayMark + mod) < 0: 
    447                                                                 adj = 2; 
    448                                                                 break; 
    449                                                         default: 
    450                                                                 // Do nothing 
    451                                                                 break; 
    452                                                 } 
     317        date1 = new Date(date1); 
     318        date2 = new Date(date2); 
     319 
     320        var yearDiff = date2.getFullYear() - date1.getFullYear(); 
     321        var delta = 1; // Integer return value 
     322 
     323        switch(interval){ 
     324                case "quarter": 
     325                        var m1 = date1.getMonth(); 
     326                        var m2 = date2.getMonth(); 
     327                        // Figure out which quarter the months are in 
     328                        var q1 = Math.floor(m1/3) + 1; 
     329                        var q2 = Math.floor(m2/3) + 1; 
     330                        // Add quarters for any year difference between the dates 
     331                        q2 += (yearDiff * 4); 
     332                        delta = q2 - q1; 
     333                        break; 
     334                case "weekday": 
     335                        var days = Math.round(dojo.date.diff(date1, date2, "day")); 
     336                        var weeks = parseInt(dojo.date.diff(date1, date2, "week")); 
     337                        var mod = days % 7; 
     338 
     339                        // Even number of weeks 
     340                        if(mod == 0){ 
     341                                days = weeks*5; 
     342                        }else{ 
     343                                // Weeks plus spare change (< 7 days) 
     344                                var adj = 0; 
     345                                var aDay = date1.getDay(); 
     346                                var bDay = date2.getDay(); 
     347 
     348                                weeks = parseInt(days/7); 
     349                                mod = days % 7; 
     350                                // Mark the date advanced by the number of 
     351                                // round weeks (may be zero) 
     352                                var dtMark = new Date(date1); 
     353                                dtMark.setDate(dtMark.getDate()+(weeks*7)); 
     354                                var dayMark = dtMark.getDay(); 
     355 
     356                                // Spare change days -- 6 or less 
     357                                if(days > 0){ 
     358                                        switch(true){ 
     359                                                // Range starts on Sat 
     360                                                case aDay == 6: 
     361                                                        adj = -1; 
     362                                                        break; 
     363                                                // Range starts on Sun 
     364  &nb