Sorry, there's one additional "helper funciton" (see below) that
you'll need in the "custom functions" library.

-Mark


/* -------------------------------------------------------------
Adapted this from code at:
http://lawrence.ecorp.net/inet/samples/js-date-fx.shtml
Useful for identifying each of the Saturday and Sunday dates in a
range.
This, in turn, is used to create SIMILE Timeline decorators to
highlight weekends.
------------------------------------------------------------- */
Date.prototype.sameDayEachWeek = function (d, date)
{
        /* Returns array of dates of same day each week in range */
        var aDays = new Array();
        var eDate, nextDate, adj;

        if (this > date)
        {
                eDate = this;
                nextDate = new Date(date.getTime());
        }
        else
        {
                eDate = date;
                nextDate = new Date(this.getTime());
        }
        /* Find when the first week day of interest occurs */
        adj = (d - nextDate.getDay() + 7) %7;
        nextDate.setDate(nextDate.getDate() + adj);
        while (nextDate < eDate)
        {
                aDays[aDays.length] = new Date(nextDate.getTime() );
                nextDate.setDate(nextDate.getDate() + 7);
        }

        return aDays
};





On Aug 7, 8:49 am, mleden <mle...@yahoo.com> wrote:
> Hi Gabriel,
>
> Sure, I'll try to summarize what I did.  Again, just to reiterate, I'm
> using Exhibit with the Timeline extension.
>
> I include this in the <head> tag of my page(s) AFTER loading the
> SIMILE libraries:
>         <!-- This library includes custom functions and overrides to
> supplement SIMILE's codebase -->
>         <script src="../javascript/ce-re-exhibit.v1.2.js" type="text/
> javascript"></script>
>
> My Timeline view <div> tag includes:
>                         
> ex:timelineConstructor="calendarAppTimelineConstructor"
>
> The "custom functions" library referenced in the <head> tag includes:
> /* -------------------------------------------------------------
> Override "Timeline Constructor" for Calendar App Timeline view to
> include Weekend and Today highlighters.
> ------------------------------------------------------------- */
> function calendarAppTimelineConstructor(div, eventSource)
> {
>         var HIGHLIGHT_WEEKENDS = true;
>         var HIGHLIGHT_TODAY = true;
>         var INCLUDE_TOP_DATE_BAND = true;
>         var HIGHLIGHT_WEEKEND_COLOR = "#A4A4A4"; // gray for WEEKEND
>         var HIGHLIGHT_TODAY_COLOR = "#A9D0F5"; // transparent blue for TODAY
>         var TIMELINE_FIRST_DATE = new Date(2009, 00, 01);
>         var TIMELINE_LAST_DATE = new Date(2009, 11, 31);
>         var TIMELINE_DIV_HEIGHT = "400px";
>
>         var theme = Timeline.ClassicTheme.create();
>       theme.timeline_start = new Date(TIMELINE_FIRST_DATE);
>       theme.timeline_stop  = new Date(TIMELINE_LAST_DATE);
>
>         if (INCLUDE_TOP_DATE_BAND)
>         {
>                 var bandInfos = [
>                 Timeline.createBandInfo({
>                 width:          "5%",
>                 intervalUnit: Timeline.DateTime.DAY,
>                 intervalPixels: 50,
>                 theme:          theme
>                 }),
>                 Timeline.createBandInfo({
>                 width:          "80%",
>                 intervalUnit: Timeline.DateTime.DAY,
>                 intervalPixels: 50,
>                 eventSource:    eventSource,
>                 theme:          theme
>                 }),
>                 Timeline.createBandInfo({
>                 width:          "15%",
>                 intervalUnit: Timeline.DateTime.MONTH,
>                 intervalPixels: 150,
>                 eventSource:    eventSource,
>             overview:       true,
>                 theme:          theme
>                 })
>                 ];
>
>                 bandInfos[0].highlight = true;
>                 bandInfos[1].highlight = true;
>                 bandInfos[1].syncWith = 0;
>                 bandInfos[2].syncWith = 0;
>         }
>         else
>         {
>                 var bandInfos = [
>                 Timeline.createBandInfo({
>                 width:          "85%",
>                 intervalUnit: Timeline.DateTime.DAY,
>                 intervalPixels: 50,
>                 eventSource:    eventSource,
>                 theme:          theme
>                 }),
>                 Timeline.createBandInfo({
>                 width:          "15%",
>                 intervalUnit: Timeline.DateTime.MONTH,
>                 intervalPixels: 150,
>                 eventSource:    eventSource,
>             overview:       true,
>                 theme:          theme
>                 })
>                 ];
>
>                 bandInfos[0].highlight = true;
>                 bandInfos[1].highlight = true;
>                 bandInfos[1].syncWith = 0;
>         }
>
>         for (var i = 0; i < bandInfos.length; i++)
>         {
>                 bandInfos[i].decorators = [];
>         }
>
>         var today = new Date();
>         var offsetHours = today.getTimezoneOffset()/60;
>
>         if (HIGHLIGHT_TODAY)
>         {
>                 var todaysDateBegin = new Date(today);
>                 var todaysDateEnd = new Date(today);
>                 todaysDateBegin.setHours(00-offsetHours);
>                 todaysDateBegin.setMinutes(00);
>                 todaysDateBegin.setSeconds(00);
>                 todaysDateEnd.setHours(23-offsetHours);
>                 todaysDateEnd.setMinutes(59);
>                 todaysDateEnd.setSeconds(59);
>
>                 for (var i = 0; i < bandInfos.length; i++)
>                 {
>                         bandInfos[i].decorators.push(new 
> Timeline.SpanHighlightDecorator({
>                         startDate:      
> Timeline.DateTime.parseGregorianDateTime
> (todaysDateBegin),
>                         endDate:        
> Timeline.DateTime.parseGregorianDateTime(todaysDateEnd),
>               color:      HIGHLIGHT_TODAY_COLOR,
>                     opacity:    50,
>                     theme:      theme
>                         }));
>                 }
>         }
>
>         if (HIGHLIGHT_WEEKENDS)
>         {
>                 var listOfSaturdays = TIMELINE_FIRST_DATE.sameDayEachWeek(6,
> TIMELINE_LAST_DATE); //6 = Saturday
>                 var listOfSundays = TIMELINE_FIRST_DATE.sameDayEachWeek(0,
> TIMELINE_LAST_DATE); //0 = Sunday
>                 var weekendStartDateTime = new Date();
>                 var weekendStopDateTime = new Date();
>
>                 for (var i = 0; i < bandInfos.length; i++)
>                 {
>                         for (var i2 = 0; i2 < listOfSaturdays.length; i2++)
>                         {
>                                 weekendStartDateTime = new 
> Date(listOfSaturdays[i2]);
>                                 weekendStartDateTime.setHours(00-offsetHours);
>                                 weekendStartDateTime.setMinutes(00);
>                                 weekendStartDateTime.setSeconds(00);
>
>                                 weekendEndDateTime = new 
> Date(listOfSundays[i2]);
>                                 weekendEndDateTime.setHours(23-offsetHours);
>                                 weekendEndDateTime.setMinutes(59);
>                                 weekendEndDateTime.setSeconds(59);
>
>                                 bandInfos[i].decorators.push(new 
> Timeline.SpanHighlightDecorator({
>                                 startDate:      
> Timeline.DateTime.parseGregorianDateTime
> (weekendStartDateTime),
>                                 endDate:        
> Timeline.DateTime.parseGregorianDateTime
> (weekendEndDateTime),
>                       color:      HIGHLIGHT_WEEKEND_COLOR,
>                         opacity:    50,
>                                 theme:      theme
>                                 }));
>                         }
>                 }
>         }
>
>         div.style.height = TIMELINE_DIV_HEIGHT;
>         tl = Timeline.create(div, bandInfos, Timeline.HORIZONTAL);
>
>         return tl;
>
> }
>
> HTH,
> -Mark
>
> On Aug 7, 7:17 am, Gabriel Jurado <gabriel.jur...@gmail.com> wrote:
>
> > Hi Mark, can you please let me know how you implement the decorator?
>
> > Thanks and regards,
>
> > Gabriel
>
> > On Wed, Aug 5, 2009 at 7:53 PM, mleden<mle...@yahoo.com> wrote:
>
> > > Hi Gabriel,
>
> > > I have implemented a "today highlighter" on the Timeline view.
> > > However, I used a decorator.  I didn't even know about the "instant
> > > highlight painter".  If you're interested in how I did it, just let me
> > > know.  May not be the best/most elegant solution but it works for me.
>
> > > -Mark
>
> > > On Aug 5, 11:23 am, Gabriel Jurado <gabriel.jur...@gmail.com> wrote:
> > >> Has anyone implemented the instant highlight painter to display a
> > >> vertical line corresponding to the actual date (like today)
>
> > >> Something like 
> > >> this:http://simile-widgets.googlegroups.com/attach/f126a21ef367683c/today....
>
> > >> Taken 
> > >> fromhttp://groups.google.com/group/simile-widgets/browse_thread/thread/39...
>
> > >> Regards,
>
> > >> Gabriel
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"SIMILE Widgets" group.
To post to this group, send email to simile-widgets@googlegroups.com
To unsubscribe from this group, send email to 
simile-widgets+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/simile-widgets?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to