From: Josh P. <jos...@gm...> - 2008-10-23 22:44:29
|
I'd like to provide an indicator to clients in regard to where they are in a specific workflow. Each step relates to (essentially) a page, and I'd like to highlight the current step they are on in the flow through an html style. I've done this before by doing some comparison of the current page name to an item in the array of steps, but I'm wondering if there's a more efficient or "correct" way to do it. For example, assume there are 4 steps. The "trail" would look like this, if the user was on Step 02: Step 01 | *Step 02* | Step 03 | Step 04 Thoughts? |
From: David H. <pro...@ma...> - 2008-10-24 16:22:12
|
Hi Josh, I'd use ERXNavigationMenu which automatically takes care of changing the css on the current link for you. I am using it to track users through a multipage form. The only caveat I have is that you'll need to do some tinkering if you want to submit the form with the hyperlinks (I don't bother). Another option might be a tabbed component which could give the user an indication where they are in the process as well. A final option might be something as simple as a WOSwitchComponent where the links change their css class depending on which component is being displayed. David On 23-Oct-08, at 3:44 PM, Josh Paul wrote: > I'd like to provide an indicator to clients in regard to where they > are in a specific workflow. Each step relates to (essentially) a page, > and I'd like to highlight the current step they are on in the flow > through an html style. I've done this before by doing some comparison > of the current page name to an item in the array of steps, but I'm > wondering if there's a more efficient or "correct" way to do it. > > For example, assume there are 4 steps. The "trail" would look like > this, if the user was on Step 02: > > Step 01 | *Step 02* | Step 03 | Step 04 > > Thoughts? > > ---------------------------------------------------------------------- > --- > This SF.Net email is sponsored by the Moblin Your Move Developer's > challenge > Build the coolest Linux based applications with Moblin SDK & win > great prizes > Grand prize is a trip for two to an Open Source event anywhere in > the world > http://moblin-contest.org/redirect.php?banner_id=100&url=/ > _______________________________________________ > Wonder-disc mailing list > Won...@li... > https://lists.sourceforge.net/lists/listinfo/wonder-disc |
From: Josh P. <jos...@gm...> - 2008-10-24 21:02:35
|
Thanks! After looking at the documentation, I still have a few questions... Does anyone have an example of usage outside of a D2W app? On Oct 24, 2008, at 9:22 AM, David Holt wrote: > Hi Josh, > > I'd use ERXNavigationMenu which automatically takes care of changing > the css on the current link for you. I am using it to track users > through a multipage form. The only caveat I have is that you'll need > to do some tinkering if you want to submit the form with the > hyperlinks (I don't bother). > > Another option might be a tabbed component which could give the user > an indication where they are in the process as well. > > A final option might be something as simple as a WOSwitchComponent > where the links change their css class depending on which component > is being displayed. > > David > > > On 23-Oct-08, at 3:44 PM, Josh Paul wrote: > >> I'd like to provide an indicator to clients in regard to where they >> are in a specific workflow. Each step relates to (essentially) a >> page, >> and I'd like to highlight the current step they are on in the flow >> through an html style. I've done this before by doing some comparison >> of the current page name to an item in the array of steps, but I'm >> wondering if there's a more efficient or "correct" way to do it. >> >> For example, assume there are 4 steps. The "trail" would look like >> this, if the user was on Step 02: >> >> Step 01 | *Step 02* | Step 03 | Step 04 >> >> Thoughts? >> >> ------------------------------------------------------------------------- >> This SF.Net email is sponsored by the Moblin Your Move Developer's >> challenge >> Build the coolest Linux based applications with Moblin SDK & win >> great prizes >> Grand prize is a trip for two to an Open Source event anywhere in >> the world >> http://moblin-contest.org/redirect.php?banner_id=100&url=/ >> _______________________________________________ >> Wonder-disc mailing list >> Won...@li... >> https://lists.sourceforge.net/lists/listinfo/wonder-disc > |
From: David H. <pro...@ma...> - 2008-10-24 22:05:29
|
Hi Josh, ERMovies is easier to digest. The key is the CSS. You have to create CSS for the different states and it will be picked up automatically. Here are the essentials. I hope they're enough to get/keep you going: In Application.java // initialize the navigation public void finishInitialization() { super.finishInitialization(); ERXNavigationManager.manager().configureNavigation(); NSLog.debug.appendln("finishInitialization called."); } Example actions in Session: // Don't forget to set the navigation state for every action // (setSelection() is used in the WOSwitchComponent in MainSurvey) public WOComponent toUserPage() { ERXNavigationManager.manager().navigationStateForSession(session ()).setState(new NSArray(new Object[] { "my profile" })); // ... do real action... return context().page().pageWithName(UserProfile.class.getName()); } public WOActionResults toSurvey() { ERXNavigationManager.manager().navigationStateForSession(session ()).setState(new NSArray(new Object[] { "my survey", "instructions" })); return context().page().pageWithName(MainSurvey.class.getName()); } public WOActionResults toSurvey1() { ERXNavigationManager.manager().navigationStateForSession(session ()).setState(new NSArray(new Object[] { "my survey", "section I" })); MainSurvey nextPage = (MainSurvey)context().page().pageWithName (MainSurvey.class.getName()); nextPage.setSelection("Survey1"); return nextPage; } Navigation.plist: // there are more options than I am using below. See the docs for more examples { name = "Root"; children = ("my profile","my survey"); }, { name = "my profile"; action = session.toUserPage; }, { name = "my survey"; children = ("instructions","section I"); action = session.toSurvey; }, { name = "instructions"; action = session.toSurvey; }, { name = "section I"; action = session.toSurvey1; }, HTML Source you'll see generated by ERXNavigationMenu when the app is run <div class="ERXNavigationMenu"> <ul class="Level1Items"> <li nowrap="nowrap" class="Nav1" id="id1"><a href="/cgi-bin/ WebObjects/MyApp.woa/wo/ 49YrOFk9VT0wc2WYDlZ8b0/5.0.11.0.0.1.1.2.1.0.0.1.1.0.0">my profile</ a></li> <li nowrap="nowrap" class="Nav1Selected" id="id2"><a href="/cgi-bin/ WebObjects/MyApp.woa/wo/ 49YrOFk9VT0wc2WYDlZ8b0/5.0.11.0.0.1.1.2.1.1.0.1.1.0.0">my survey</a></ li> </ul> <ul class="Level2Items"> <li nowrap="nowrap" class="Nav2" id="id3"><a href="/cgi-bin/ WebObjects/MyApp.woa/wo/ 49YrOFk9VT0wc2WYDlZ8b0/5.0.11.0.0.1.1.2.3.1.0.0.1.1.0.0">instructions</a ></li> <li nowrap="nowrap" class="Nav2Selected" id="id4"><a href="/cgi-bin/ WebObjects/MyApp.woa/wo/ 49YrOFk9VT0wc2WYDlZ8b0/5.0.11.0.0.1.1.2.3.1.1.0.1.1.0.0">section I</ a></li> </ul> </div> CSS items that I defined in my application: .ERXNavigationMenu { } .Level1Items { } .Level1Items li { } .Level1Items a { } .Level1Items .Nav1Selected a { } .Level1Items li.Nav1 a:hover { } .Level2Items { } .Level2Items li { } .Level2Items a { } .Level2Items .Nav2Selected a, .Level2Items li.Nav2 a:hover { } On 24-Oct-08, at 2:31 PM, Josh Paul wrote: > Thanks. > > I looked at bugtracker, and it's still a little bit much to digest. > I think I'm getting there, though. > > On Oct 24, 2008, at 2:29 PM, David Holt wrote: > >> Yes! >> >> I'll write up a little tutorial for you this weekend. In the >> meantime, you can look at bugtracker and ermovies for examples of >> its use. >> >> David >> >> >> On 24-Oct-08, at 2:02 PM, Josh Paul wrote: >> >>> Thanks! After looking at the documentation, I still have a few >>> questions... >>> >>> Does anyone have an example of usage outside of a D2W app? >>> >>> On Oct 24, 2008, at 9:22 AM, David Holt wrote: >>> >>>> Hi Josh, >>>> >>>> I'd use ERXNavigationMenu which automatically takes care of >>>> changing >>>> the css on the current link for you. I am using it to track users >>>> through a multipage form. The only caveat I have is that you'll >>>> need >>>> to do some tinkering if you want to submit the form with the >>>> hyperlinks (I don't bother). >>>> >>>> Another option might be a tabbed component which could give the >>>> user >>>> an indication where they are in the process as well. >>>> >>>> A final option might be something as simple as a WOSwitchComponent >>>> where the links change their css class depending on which component >>>> is being displayed. >>>> >>>> David >>>> >>>> >>>> On 23-Oct-08, at 3:44 PM, Josh Paul wrote: >>>> >>>>> I'd like to provide an indicator to clients in regard to where >>>>> they >>>>> are in a specific workflow. Each step relates to (essentially) a >>>>> page, >>>>> and I'd like to highlight the current step they are on in the flow >>>>> through an html style. I've done this before by doing some >>>>> comparison >>>>> of the current page name to an item in the array of steps, but I'm >>>>> wondering if there's a more efficient or "correct" way to do it. >>>>> >>>>> For example, assume there are 4 steps. The "trail" would look like >>>>> this, if the user was on Step 02: >>>>> >>>>> Step 01 | *Step 02* | Step 03 | Step 04 >>>>> >>>>> Thoughts? >>>>> >>>>> ------------------------------------------------------------------ >>>>> ------- >>>>> This SF.Net email is sponsored by the Moblin Your Move Developer's >>>>> challenge >>>>> Build the coolest Linux based applications with Moblin SDK & win >>>>> great prizes >>>>> Grand prize is a trip for two to an Open Source event anywhere in >>>>> the world >>>>> http://moblin-contest.org/redirect.php?banner_id=100&url=/ >>>>> _______________________________________________ >>>>> Wonder-disc mailing list >>>>> Won...@li... >>>>> https://lists.sourceforge.net/lists/listinfo/wonder-disc >>>> >>> >>> >>> -------------------------------------------------------------------- >>> ----- >>> This SF.Net email is sponsored by the Moblin Your Move >>> Developer's challenge >>> Build the coolest Linux based applications with Moblin SDK & win >>> great prizes >>> Grand prize is a trip for two to an Open Source event anywhere in >>> the world >>> http://moblin-contest.org/redirect.php?banner_id=100&url=/ >>> _______________________________________________ >>> Wonder-disc mailing list >>> Won...@li... >>> https://lists.sourceforge.net/lists/listinfo/wonder-disc >> > |
From: Josh P. <jos...@gm...> - 2008-10-24 22:11:08
|
That actually make things a lot more clear. Many thanks! On Oct 24, 2008, at 3:04 PM, David Holt wrote: > Hi Josh, > > ERMovies is easier to digest. The key is the CSS. You have to create > CSS for the different states and it will be picked up automatically. > > Here are the essentials. I hope they're enough to get/keep you going: > > In Application.java > // initialize the navigation > > public void finishInitialization() { > super.finishInitialization(); > ERXNavigationManager.manager().configureNavigation(); > NSLog.debug.appendln("finishInitialization called."); > } > > Example actions in Session: > // Don't forget to set the navigation state for every action > // (setSelection() is used in the WOSwitchComponent in MainSurvey) > > public WOComponent toUserPage() { > > ERXNavigationManager > .manager().navigationStateForSession(session()).setState(new > NSArray(new Object[] { > "my profile" > })); > // ... do real action... > return context().page().pageWithName(UserProfile.class.getName()); > } > public WOActionResults toSurvey() { > > ERXNavigationManager > .manager().navigationStateForSession(session()).setState(new > NSArray(new Object[] { > "my survey", > "instructions" > })); > return context().page().pageWithName(MainSurvey.class.getName()); > } > > > > public WOActionResults toSurvey1() { > > ERXNavigationManager > .manager().navigationStateForSession(session()).setState(new > NSArray(new Object[] { > "my survey", > "section I" > })); > MainSurvey nextPage = > (MainSurvey)context().page().pageWithName(MainSurvey.class.getName()); > nextPage.setSelection("Survey1"); > return nextPage; > } > > Navigation.plist: > // there are more options than I am using below. See the docs for > more examples > > { > name = "Root"; > children = ("my profile","my survey"); > }, > { > name = "my profile"; > action = session.toUserPage; > }, > { > name = "my survey"; > children = ("instructions","section I"); > action = session.toSurvey; > }, > { > name = "instructions"; > action = session.toSurvey; > }, > { > name = "section I"; > action = session.toSurvey1; > }, > > HTML Source you'll see generated by ERXNavigationMenu when the app > is run > > <div class="ERXNavigationMenu"> > <ul class="Level1Items"> > <li nowrap="nowrap" class="Nav1" id="id1"><a href="/cgi-bin/ > WebObjects/MyApp.woa/wo/ > 49YrOFk9VT0wc2WYDlZ8b0/5.0.11.0.0.1.1.2.1.0.0.1.1.0.0">my profile</ > a></li> > > <li nowrap="nowrap" class="Nav1Selected" id="id2"><a href="/cgi-bin/ > WebObjects/MyApp.woa/wo/ > 49YrOFk9VT0wc2WYDlZ8b0/5.0.11.0.0.1.1.2.1.1.0.1.1.0.0">my survey</ > a></li> > </ul> > <ul class="Level2Items"> > <li nowrap="nowrap" class="Nav2" id="id3"><a href="/cgi-bin/ > WebObjects/MyApp.woa/wo/ > 49YrOFk9VT0wc2WYDlZ8b0 > /5.0.11.0.0.1.1.2.3.1.0.0.1.1.0.0">instructions</a></li> > > <li nowrap="nowrap" class="Nav2Selected" id="id4"><a href="/cgi-bin/ > WebObjects/MyApp.woa/wo/ > 49YrOFk9VT0wc2WYDlZ8b0/5.0.11.0.0.1.1.2.3.1.1.0.1.1.0.0">section I</ > a></li> > </ul> > > > </div> > > CSS items that I defined in my application: > > .ERXNavigationMenu { > } > .Level1Items { > } > .Level1Items li { > } > .Level1Items a { > } > .Level1Items .Nav1Selected a { > > } > .Level1Items li.Nav1 a:hover { > } > .Level2Items { > } > .Level2Items li { > } > .Level2Items a { > } > > .Level2Items .Nav2Selected a, .Level2Items li.Nav2 a:hover { > > } > > > On 24-Oct-08, at 2:31 PM, Josh Paul wrote: > >> Thanks. >> >> I looked at bugtracker, and it's still a little bit much to digest. >> I think I'm getting there, though. >> >> On Oct 24, 2008, at 2:29 PM, David Holt wrote: >> >>> Yes! >>> >>> I'll write up a little tutorial for you this weekend. In the >>> meantime, you can look at bugtracker and ermovies for examples of >>> its use. >>> >>> David >>> >>> >>> On 24-Oct-08, at 2:02 PM, Josh Paul wrote: >>> >>>> Thanks! After looking at the documentation, I still have a few >>>> questions... >>>> >>>> Does anyone have an example of usage outside of a D2W app? >>>> >>>> On Oct 24, 2008, at 9:22 AM, David Holt wrote: >>>> >>>>> Hi Josh, >>>>> >>>>> I'd use ERXNavigationMenu which automatically takes care of >>>>> changing >>>>> the css on the current link for you. I am using it to track users >>>>> through a multipage form. The only caveat I have is that you'll >>>>> need >>>>> to do some tinkering if you want to submit the form with the >>>>> hyperlinks (I don't bother). >>>>> >>>>> Another option might be a tabbed component which could give the >>>>> user >>>>> an indication where they are in the process as well. >>>>> >>>>> A final option might be something as simple as a WOSwitchComponent >>>>> where the links change their css class depending on which >>>>> component >>>>> is being displayed. >>>>> >>>>> David >>>>> >>>>> >>>>> On 23-Oct-08, at 3:44 PM, Josh Paul wrote: >>>>> >>>>>> I'd like to provide an indicator to clients in regard to where >>>>>> they >>>>>> are in a specific workflow. Each step relates to (essentially) a >>>>>> page, >>>>>> and I'd like to highlight the current step they are on in the >>>>>> flow >>>>>> through an html style. I've done this before by doing some >>>>>> comparison >>>>>> of the current page name to an item in the array of steps, but >>>>>> I'm >>>>>> wondering if there's a more efficient or "correct" way to do it. >>>>>> >>>>>> For example, assume there are 4 steps. The "trail" would look >>>>>> like >>>>>> this, if the user was on Step 02: >>>>>> >>>>>> Step 01 | *Step 02* | Step 03 | Step 04 >>>>>> >>>>>> Thoughts? >>>>>> >>>>>> ------------------------------------------------------------------------- >>>>>> This SF.Net email is sponsored by the Moblin Your Move >>>>>> Developer's >>>>>> challenge >>>>>> Build the coolest Linux based applications with Moblin SDK & win >>>>>> great prizes >>>>>> Grand prize is a trip for two to an Open Source event anywhere in >>>>>> the world >>>>>> http://moblin-contest.org/redirect.php?banner_id=100&url=/ >>>>>> _______________________________________________ >>>>>> Wonder-disc mailing list >>>>>> Won...@li... >>>>>> https://lists.sourceforge.net/lists/listinfo/wonder-disc >>>>> >>>> >>>> >>>> ------------------------------------------------------------------------- >>>> This SF.Net email is sponsored by the Moblin Your Move >>>> Developer's challenge >>>> Build the coolest Linux based applications with Moblin SDK & win >>>> great prizes >>>> Grand prize is a trip for two to an Open Source event anywhere in >>>> the world >>>> http://moblin-contest.org/redirect.php?banner_id=100&url=/ >>>> _______________________________________________ >>>> Wonder-disc mailing list >>>> Won...@li... >>>> https://lists.sourceforge.net/lists/listinfo/wonder-disc >>> >> > |
From: s. t. t. <vi...@fi...> - 2008-10-25 16:45:00
|
where do i find ERMovies? team firstsightmedia s. tunji turner On Oct 23, 2008, at 6:44 PM, Josh Paul wrote: > I'd like to provide an indicator to clients in regard to where they > are in a specific workflow. Each step relates to (essentially) a page, > and I'd like to highlight the current step they are on in the flow > through an html style. I've done this before by doing some comparison > of the current page name to an item in the array of steps, but I'm > wondering if there's a more efficient or "correct" way to do it. > > For example, assume there are 4 steps. The "trail" would look like > this, if the user was on Step 02: > > Step 01 | *Step 02* | Step 03 | Step 04 > > Thoughts? > > ------------------------------------------------------------------------- > This SF.Net email is sponsored by the Moblin Your Move Developer's > challenge > Build the coolest Linux based applications with Moblin SDK & win > great prizes > Grand prize is a trip for two to an Open Source event anywhere in > the world > http://moblin-contest.org/redirect.php?banner_id=100&url=/ > _______________________________________________ > Wonder-disc mailing list > Won...@li... > https://lists.sourceforge.net/lists/listinfo/wonder-disc |
From: Johann W. <we...@is...> - 2008-10-25 20:13:49
Attachments:
smime.p7s
|
when you check out Wonder from svn you will find the ERMovies projekt under Examples/D2W/ERMovies. jw Am 25.10.2008 um 18:44 schrieb s. tunji turner: > where do i find ERMovies? > > team firstsightmedia > s. tunji turner > > On Oct 23, 2008, at 6:44 PM, Josh Paul wrote: > >> I'd like to provide an indicator to clients in regard to where they >> are in a specific workflow. Each step relates to (essentially) a >> page, >> and I'd like to highlight the current step they are on in the flow >> through an html style. I've done this before by doing some comparison >> of the current page name to an item in the array of steps, but I'm >> wondering if there's a more efficient or "correct" way to do it. >> >> For example, assume there are 4 steps. The "trail" would look like >> this, if the user was on Step 02: >> >> Step 01 | *Step 02* | Step 03 | Step 04 >> >> Thoughts? >> >> ------------------------------------------------------------------------- >> This SF.Net email is sponsored by the Moblin Your Move Developer's >> challenge >> Build the coolest Linux based applications with Moblin SDK & win >> great prizes >> Grand prize is a trip for two to an Open Source event anywhere in >> the world >> http://moblin-contest.org/redirect.php?banner_id=100&url=/ >> _______________________________________________ >> Wonder-disc mailing list >> Won...@li... >> https://lists.sourceforge.net/lists/listinfo/wonder-disc > > > ------------------------------------------------------------------------- > This SF.Net email is sponsored by the Moblin Your Move Developer's > challenge > Build the coolest Linux based applications with Moblin SDK & win > great prizes > Grand prize is a trip for two to an Open Source event anywhere in > the world > http://moblin-contest.org/redirect.php?banner_id=100&url=/ > _______________________________________________ > Wonder-disc mailing list > Won...@li... > https://lists.sourceforge.net/lists/listinfo/wonder-disc |
From: s. t. t. <vi...@fi...> - 2008-10-25 23:09:40
|
thanks On Oct 25, 2008, at 12:44 PM, s. tunji turner wrote: > where do i find ERMovies? > > team firstsightmedia > s. tunji turner > > On Oct 23, 2008, at 6:44 PM, Josh Paul wrote: > >> I'd like to provide an indicator to clients in regard to where they >> are in a specific workflow. Each step relates to (essentially) a >> page, >> and I'd like to highlight the current step they are on in the flow >> through an html style. I've done this before by doing some comparison >> of the current page name to an item in the array of steps, but I'm >> wondering if there's a more efficient or "correct" way to do it. >> >> For example, assume there are 4 steps. The "trail" would look like >> this, if the user was on Step 02: >> >> Step 01 | *Step 02* | Step 03 | Step 04 >> >> Thoughts? >> >> ------------------------------------------------------------------------- >> This SF.Net email is sponsored by the Moblin Your Move Developer's >> challenge >> Build the coolest Linux based applications with Moblin SDK & win >> great prizes >> Grand prize is a trip for two to an Open Source event anywhere in >> the world >> http://moblin-contest.org/redirect.php?banner_id=100&url=/ >> _______________________________________________ >> Wonder-disc mailing list >> Won...@li... >> https://lists.sourceforge.net/lists/listinfo/wonder-disc > > > ------------------------------------------------------------------------- > This SF.Net email is sponsored by the Moblin Your Move Developer's > challenge > Build the coolest Linux based applications with Moblin SDK & win > great prizes > Grand prize is a trip for two to an Open Source event anywhere in > the world > http://moblin-contest.org/redirect.php?banner_id=100&url=/ > _______________________________________________ > Wonder-disc mailing list > Won...@li... > https://lists.sourceforge.net/lists/listinfo/wonder-disc |
From: Anjo K. <an...@kr...> - 2008-10-27 07:57:17
|
Do NOT use ERXNavManager for pushing the context. You will end up with totally fragged navigation when your user opens pages in tabs. Pull the string from the session or current page or whereever. Cheers, Anjo Am 25.10.2008 um 00:04 schrieb David Holt: > Hi Josh, > > ERMovies is easier to digest. The key is the CSS. You have to create > CSS for the different states and it will be picked up automatically. > > Here are the essentials. I hope they're enough to get/keep you going: > > In Application.java > // initialize the navigation > > public void finishInitialization() { > super.finishInitialization(); > ERXNavigationManager.manager().configureNavigation(); > NSLog.debug.appendln("finishInitialization called."); > } > > Example actions in Session: > // Don't forget to set the navigation state for every action > // (setSelection() is used in the WOSwitchComponent in MainSurvey) > > public WOComponent toUserPage() { > > ERXNavigationManager > .manager().navigationStateForSession(session()).setState(new > NSArray(new Object[] { > "my profile" > })); > // ... do real action... > return context().page().pageWithName(UserProfile.class.getName()); > } > public WOActionResults toSurvey() { > > ERXNavigationManager > .manager().navigationStateForSession(session()).setState(new > NSArray(new Object[] { > "my survey", > "instructions" > })); > return context().page().pageWithName(MainSurvey.class.getName()); > } > > > > public WOActionResults toSurvey1() { > > ERXNavigationManager > .manager().navigationStateForSession(session()).setState(new > NSArray(new Object[] { > "my survey", > "section I" > })); > MainSurvey nextPage = > (MainSurvey)context().page().pageWithName(MainSurvey.class.getName()); > nextPage.setSelection("Survey1"); > return nextPage; > } > > Navigation.plist: > // there are more options than I am using below. See the docs for > more examples > > { > name = "Root"; > children = ("my profile","my survey"); > }, > { > name = "my profile"; > action = session.toUserPage; > }, > { > name = "my survey"; > children = ("instructions","section I"); > action = session.toSurvey; > }, > { > name = "instructions"; > action = session.toSurvey; > }, > { > name = "section I"; > action = session.toSurvey1; > }, > > HTML Source you'll see generated by ERXNavigationMenu when the app > is run > > <div class="ERXNavigationMenu"> > <ul class="Level1Items"> > <li nowrap="nowrap" class="Nav1" id="id1"><a href="/cgi-bin/ > WebObjects/MyApp.woa/wo/ > 49YrOFk9VT0wc2WYDlZ8b0/5.0.11.0.0.1.1.2.1.0.0.1.1.0.0">my profile</ > a></li> > > <li nowrap="nowrap" class="Nav1Selected" id="id2"><a href="/cgi-bin/ > WebObjects/MyApp.woa/wo/ > 49YrOFk9VT0wc2WYDlZ8b0/5.0.11.0.0.1.1.2.1.1.0.1.1.0.0">my survey</ > a></li> > </ul> > <ul class="Level2Items"> > <li nowrap="nowrap" class="Nav2" id="id3"><a href="/cgi-bin/ > WebObjects/MyApp.woa/wo/ > 49YrOFk9VT0wc2WYDlZ8b0 > /5.0.11.0.0.1.1.2.3.1.0.0.1.1.0.0">instructions</a></li> > > <li nowrap="nowrap" class="Nav2Selected" id="id4"><a href="/cgi-bin/ > WebObjects/MyApp.woa/wo/ > 49YrOFk9VT0wc2WYDlZ8b0/5.0.11.0.0.1.1.2.3.1.1.0.1.1.0.0">section I</ > a></li> > </ul> > > > </div> > > CSS items that I defined in my application: > > .ERXNavigationMenu { > } > .Level1Items { > } > .Level1Items li { > } > .Level1Items a { > } > .Level1Items .Nav1Selected a { > > } > .Level1Items li.Nav1 a:hover { > } > .Level2Items { > } > .Level2Items li { > } > .Level2Items a { > } > > .Level2Items .Nav2Selected a, .Level2Items li.Nav2 a:hover { > > } > > > On 24-Oct-08, at 2:31 PM, Josh Paul wrote: > >> Thanks. >> >> I looked at bugtracker, and it's still a little bit much to digest. >> I think I'm getting there, though. >> >> On Oct 24, 2008, at 2:29 PM, David Holt wrote: >> >>> Yes! >>> >>> I'll write up a little tutorial for you this weekend. In the >>> meantime, you can look at bugtracker and ermovies for examples of >>> its use. >>> >>> David >>> >>> >>> On 24-Oct-08, at 2:02 PM, Josh Paul wrote: >>> >>>> Thanks! After looking at the documentation, I still have a few >>>> questions... >>>> >>>> Does anyone have an example of usage outside of a D2W app? >>>> >>>> On Oct 24, 2008, at 9:22 AM, David Holt wrote: >>>> >>>>> Hi Josh, >>>>> >>>>> I'd use ERXNavigationMenu which automatically takes care of >>>>> changing >>>>> the css on the current link for you. I am using it to track users >>>>> through a multipage form. The only caveat I have is that you'll >>>>> need >>>>> to do some tinkering if you want to submit the form with the >>>>> hyperlinks (I don't bother). >>>>> >>>>> Another option might be a tabbed component which could give the >>>>> user >>>>> an indication where they are in the process as well. >>>>> >>>>> A final option might be something as simple as a WOSwitchComponent >>>>> where the links change their css class depending on which >>>>> component >>>>> is being displayed. >>>>> >>>>> David >>>>> >>>>> >>>>> On 23-Oct-08, at 3:44 PM, Josh Paul wrote: >>>>> >>>>>> I'd like to provide an indicator to clients in regard to where >>>>>> they >>>>>> are in a specific workflow. Each step relates to (essentially) a >>>>>> page, >>>>>> and I'd like to highlight the current step they are on in the >>>>>> flow >>>>>> through an html style. I've done this before by doing some >>>>>> comparison >>>>>> of the current page name to an item in the array of steps, but >>>>>> I'm >>>>>> wondering if there's a more efficient or "correct" way to do it. >>>>>> >>>>>> For example, assume there are 4 steps. The "trail" would look >>>>>> like >>>>>> this, if the user was on Step 02: >>>>>> >>>>>> Step 01 | *Step 02* | Step 03 | Step 04 >>>>>> >>>>>> Thoughts? >>>>>> >>>>>> ------------------------------------------------------------------------- >>>>>> This SF.Net email is sponsored by the Moblin Your Move >>>>>> Developer's >>>>>> challenge >>>>>> Build the coolest Linux based applications with Moblin SDK & win >>>>>> great prizes >>>>>> Grand prize is a trip for two to an Open Source event anywhere in >>>>>> the world >>>>>> http://moblin-contest.org/redirect.php?banner_id=100&url=/ >>>>>> _______________________________________________ >>>>>> Wonder-disc mailing list >>>>>> Won...@li... >>>>>> https://lists.sourceforge.net/lists/listinfo/wonder-disc >>>>> >>>> >>>> >>>> ------------------------------------------------------------------------- >>>> This SF.Net email is sponsored by the Moblin Your Move >>>> Developer's challenge >>>> Build the coolest Linux based applications with Moblin SDK & win >>>> great prizes >>>> Grand prize is a trip for two to an Open Source event anywhere in >>>> the world >>>> http://moblin-contest.org/redirect.php?banner_id=100&url=/ >>>> _______________________________________________ >>>> Wonder-disc mailing list >>>> Won...@li... >>>> https://lists.sourceforge.net/lists/listinfo/wonder-disc >>> >> > > ------------------------------------------------------------------------- > This SF.Net email is sponsored by the Moblin Your Move Developer's > challenge > Build the coolest Linux based applications with Moblin SDK & win > great prizes > Grand prize is a trip for two to an Open Source event anywhere in > the world > http://moblin-contest.org/redirect.php?banner_id=100&url=/_______________________________________________ > Wonder-disc mailing list > Won...@li... > https://lists.sourceforge.net/lists/listinfo/wonder-disc |
From: David H. <pro...@ma...> - 2008-10-27 16:36:35
|
Hi Anjo, Thanks for your feedback. I am not using D2W with this component. I must confess to not understanding what I need to do differently when there is no D2W context available. On 27-Oct-08, at 12:57 AM, Anjo Krank wrote: > Do NOT use ERXNavManager for pushing the context. Where am I doing this? > You will end up with totally fragged navigation when your user > opens pages in tabs. Pull the string Which string?? > from the session or current page or whereever. How is this done? All the examples are for D2W so I was going from directions I found in an email (I think). David > > Cheers, Anjo > > Am 25.10.2008 um 00:04 schrieb David Holt: > >> Hi Josh, >> >> ERMovies is easier to digest. The key is the CSS. You have to >> create CSS for the different states and it will be picked up >> automatically. >> >> Here are the essentials. I hope they're enough to get/keep you going: >> >> In Application.java >> // initialize the navigation >> >> public void finishInitialization() { >> super.finishInitialization(); >> ERXNavigationManager.manager().configureNavigation(); >> NSLog.debug.appendln("finishInitialization called."); >> } >> >> Example actions in Session: >> // Don't forget to set the navigation state for every action >> // (setSelection() is used in the WOSwitchComponent in MainSurvey) >> >> public WOComponent toUserPage() { >> ERXNavigationManager.manager().navigationStateForSession(session >> ()).setState(new NSArray(new Object[] { >> "my profile" >> })); >> // ... do real action... >> return context().page().pageWithName(UserProfile.class.getName()); >> } >> public WOActionResults toSurvey() { >> ERXNavigationManager.manager().navigationStateForSession(session >> ()).setState(new NSArray(new Object[] { >> "my survey", >> "instructions" >> })); >> return context().page().pageWithName(MainSurvey.class.getName()); >> } >> >> >> >> public WOActionResults toSurvey1() { >> ERXNavigationManager.manager().navigationStateForSession(session >> ()).setState(new NSArray(new Object[] { >> "my survey", >> "section I" >> })); >> MainSurvey nextPage = (MainSurvey)context().page().pageWithName >> (MainSurvey.class.getName()); >> nextPage.setSelection("Survey1"); >> return nextPage; >> } >> >> Navigation.plist: >> // there are more options than I am using below. See the docs for >> more examples >> >> { >> name = "Root"; >> children = ("my profile","my survey"); >> }, >> { >> name = "my profile"; >> action = session.toUserPage; >> }, >> { >> name = "my survey"; >> children = ("instructions","section I"); >> action = session.toSurvey; >> }, >> { >> name = "instructions"; >> action = session.toSurvey; >> }, >> { >> name = "section I"; >> action = session.toSurvey1; >> }, >> >> HTML Source you'll see generated by ERXNavigationMenu when the app >> is run >> >> <div class="ERXNavigationMenu"> >> <ul class="Level1Items"> >> <li nowrap="nowrap" class="Nav1" id="id1"><a href="/cgi-bin/ >> WebObjects/MyApp.woa/wo/ >> 49YrOFk9VT0wc2WYDlZ8b0/5.0.11.0.0.1.1.2.1.0.0.1.1.0.0">my profile</ >> a></li> >> >> <li nowrap="nowrap" class="Nav1Selected" id="id2"><a href="/cgi- >> bin/WebObjects/MyApp.woa/wo/ >> 49YrOFk9VT0wc2WYDlZ8b0/5.0.11.0.0.1.1.2.1.1.0.1.1.0.0">my survey</ >> a></li> >> </ul> >> <ul class="Level2Items"> >> <li nowrap="nowrap" class="Nav2" id="id3"><a href="/cgi-bin/ >> WebObjects/MyApp.woa/wo/ >> 49YrOFk9VT0wc2WYDlZ8b0/5.0.11.0.0.1.1.2.3.1.0.0.1.1.0.0">instructions >> </a></li> >> >> <li nowrap="nowrap" class="Nav2Selected" id="id4"><a href="/cgi- >> bin/WebObjects/MyApp.woa/wo/ >> 49YrOFk9VT0wc2WYDlZ8b0/5.0.11.0.0.1.1.2.3.1.1.0.1.1.0.0">section >> I</a></li> >> </ul> >> >> >> </div> >> >> CSS items that I defined in my application: >> >> .ERXNavigationMenu { >> } >> .Level1Items { >> } >> .Level1Items li { >> } >> .Level1Items a { >> } >> .Level1Items .Nav1Selected a { >> >> } >> .Level1Items li.Nav1 a:hover { >> } >> .Level2Items { >> } >> .Level2Items li { >> } >> .Level2Items a { >> } >> >> .Level2Items .Nav2Selected a, .Level2Items li.Nav2 a:hover { >> >> } >> >> >> On 24-Oct-08, at 2:31 PM, Josh Paul wrote: >> >>> Thanks. >>> >>> I looked at bugtracker, and it's still a little bit much to >>> digest. I think I'm getting there, though. >>> >>> On Oct 24, 2008, at 2:29 PM, David Holt wrote: >>> >>>> Yes! >>>> >>>> I'll write up a little tutorial for you this weekend. In the >>>> meantime, you can look at bugtracker and ermovies for examples >>>> of its use. >>>> >>>> David >>>> >>>> >>>> On 24-Oct-08, at 2:02 PM, Josh Paul wrote: >>>> >>>>> Thanks! After looking at the documentation, I still have a few >>>>> questions... >>>>> >>>>> Does anyone have an example of usage outside of a D2W app? >>>>> >>>>> On Oct 24, 2008, at 9:22 AM, David Holt wrote: >>>>> >>>>>> Hi Josh, >>>>>> >>>>>> I'd use ERXNavigationMenu which automatically takes care of >>>>>> changing >>>>>> the css on the current link for you. I am using it to track users >>>>>> through a multipage form. The only caveat I have is that >>>>>> you'll need >>>>>> to do some tinkering if you want to submit the form with the >>>>>> hyperlinks (I don't bother). >>>>>> >>>>>> Another option might be a tabbed component which could give >>>>>> the user >>>>>> an indication where they are in the process as well. >>>>>> >>>>>> A final option might be something as simple as a >>>>>> WOSwitchComponent >>>>>> where the links change their css class depending on which >>>>>> component >>>>>> is being displayed. >>>>>> >>>>>> David >>>>>> >>>>>> >>>>>> On 23-Oct-08, at 3:44 PM, Josh Paul wrote: >>>>>> >>>>>>> I'd like to provide an indicator to clients in regard to >>>>>>> where they >>>>>>> are in a specific workflow. Each step relates to (essentially) a >>>>>>> page, >>>>>>> and I'd like to highlight the current step they are on in the >>>>>>> flow >>>>>>> through an html style. I've done this before by doing some >>>>>>> comparison >>>>>>> of the current page name to an item in the array of steps, >>>>>>> but I'm >>>>>>> wondering if there's a more efficient or "correct" way to do it. >>>>>>> >>>>>>> For example, assume there are 4 steps. The "trail" would look >>>>>>> like >>>>>>> this, if the user was on Step 02: >>>>>>> >>>>>>> Step 01 | *Step 02* | Step 03 | Step 04 >>>>>>> >>>>>>> Thoughts? >>>>>>> >>>>>>> ---------------------------------------------------------------- >>>>>>> --------- >>>>>>> This SF.Net email is sponsored by the Moblin Your Move >>>>>>> Developer's >>>>>>> challenge >>>>>>> Build the coolest Linux based applications with Moblin SDK & win >>>>>>> great prizes >>>>>>> Grand prize is a trip for two to an Open Source event >>>>>>> anywhere in >>>>>>> the world >>>>>>> http://moblin-contest.org/redirect.php?banner_id=100&url=/ >>>>>>> _______________________________________________ >>>>>>> Wonder-disc mailing list >>>>>>> Won...@li... >>>>>>> https://lists.sourceforge.net/lists/listinfo/wonder-disc >>>>>> >>>>> >>>>> >>>>> ------------------------------------------------------------------ >>>>> ------- >>>>> This SF.Net email is sponsored by the Moblin Your Move >>>>> Developer's challenge >>>>> Build the coolest Linux based applications with Moblin SDK & >>>>> win great prizes >>>>> Grand prize is a trip for two to an Open Source event anywhere >>>>> in the world >>>>> http://moblin-contest.org/redirect.php?banner_id=100&url=/ >>>>> _______________________________________________ >>>>> Wonder-disc mailing list >>>>> Won...@li... >>>>> https://lists.sourceforge.net/lists/listinfo/wonder-disc >>>> >>> >> >> --------------------------------------------------------------------- >> ---- >> This SF.Net email is sponsored by the Moblin Your Move Developer's >> challenge >> Build the coolest Linux based applications with Moblin SDK & win >> great prizes >> Grand prize is a trip for two to an Open Source event anywhere in >> the world >> http://moblin-contest.org/redirect.php?banner_id=100&url=/ >> _______________________________________________ >> Wonder-disc mailing list >> Won...@li... >> https://lists.sourceforge.net/lists/listinfo/wonder-disc > |
From: David H. <pro...@ma...> - 2008-11-04 00:22:44
|
Hi all, Anjo, thanks for pointing out the dangers of users opening multiple tabs. It was a case I hadn't considered. I figured out the mistake I was making that Anjo pointed out below. If several pages are opened in multiple browser tabs and the user reloads any individual one, the nav state of the page gets reset to the most recent tab that was opened but the page content stays the same. I can set the nav state for a page level component in the awake() method. One page has a switch component with 10 possible choices. I don't know how to set the value of the selection variable and call awake() at the page level with the proper value for the nav tab. How can I set the nav state of the page based on the selection variable of the switch component? Thanks guys, David On 27-Oct-08, at 12:57 AM, Anjo Krank wrote: > Do NOT use ERXNavManager for pushing the context. You will end up with > totally fragged navigation when your user opens pages in tabs. Pull > the string from the session or current page or whereever. > > Cheers, Anjo > > Am 25.10.2008 um 00:04 schrieb David Holt: > >> Hi Josh, >> >> ERMovies is easier to digest. The key is the CSS. You have to create >> CSS for the different states and it will be picked up automatically. >> >> Here are the essentials. I hope they're enough to get/keep you going: >> >> In Application.java >> // initialize the navigation >> >> public void finishInitialization() { >> super.finishInitialization(); >> ERXNavigationManager.manager().configureNavigation(); >> NSLog.debug.appendln("finishInitialization called."); >> } >> >> Example actions in Session: >> // Don't forget to set the navigation state for every action >> // (setSelection() is used in the WOSwitchComponent in MainSurvey) >> >> public WOComponent toUserPage() { >> >> ERXNavigationManager >> .manager().navigationStateForSession(session()).setState(new >> NSArray(new Object[] { >> "my profile" >> })); >> // ... do real action... >> return context().page().pageWithName(UserProfile.class.getName()); >> } >> public WOActionResults toSurvey() { >> >> ERXNavigationManager >> .manager().navigationStateForSession(session()).setState(new >> NSArray(new Object[] { >> "my survey", >> "instructions" >> })); >> return context().page().pageWithName(MainSurvey.class.getName()); >> } >> >> >> >> public WOActionResults toSurvey1() { >> >> ERXNavigationManager >> .manager().navigationStateForSession(session()).setState(new >> NSArray(new Object[] { >> "my survey", >> "section I" >> })); >> MainSurvey nextPage = >> (MainSurvey)context().page().pageWithName(MainSurvey.class.getName >> ()); >> nextPage.setSelection("Survey1"); >> return nextPage; >> } >> >> Navigation.plist: >> // there are more options than I am using below. See the docs for >> more examples >> >> { >> name = "Root"; >> children = ("my profile","my survey"); >> }, >> { >> name = "my profile"; >> action = session.toUserPage; >> }, >> { >> name = "my survey"; >> children = ("instructions","section I"); >> action = session.toSurvey; >> }, >> { >> name = "instructions"; >> action = session.toSurvey; >> }, >> { >> name = "section I"; >> action = session.toSurvey1; >> }, >> >> HTML Source you'll see generated by ERXNavigationMenu when the app >> is run >> >> <div class="ERXNavigationMenu"> >> <ul class="Level1Items"> >> <li nowrap="nowrap" class="Nav1" id="id1"><a href="/cgi-bin/ >> WebObjects/MyApp.woa/wo/ >> 49YrOFk9VT0wc2WYDlZ8b0/5.0.11.0.0.1.1.2.1.0.0.1.1.0.0">my profile</ >> a></li> >> >> <li nowrap="nowrap" class="Nav1Selected" id="id2"><a href="/cgi-bin/ >> WebObjects/MyApp.woa/wo/ >> 49YrOFk9VT0wc2WYDlZ8b0/5.0.11.0.0.1.1.2.1.1.0.1.1.0.0">my survey</ >> a></li> >> </ul> >> <ul class="Level2Items"> >> <li nowrap="nowrap" class="Nav2" id="id3"><a href="/cgi-bin/ >> WebObjects/MyApp.woa/wo/ >> 49YrOFk9VT0wc2WYDlZ8b0 >> /5.0.11.0.0.1.1.2.3.1.0.0.1.1.0.0">instructions</a></li> >> >> <li nowrap="nowrap" class="Nav2Selected" id="id4"><a href="/cgi-bin/ >> WebObjects/MyApp.woa/wo/ >> 49YrOFk9VT0wc2WYDlZ8b0/5.0.11.0.0.1.1.2.3.1.1.0.1.1.0.0">section I</ >> a></li> >> </ul> >> >> >> </div> >> >> CSS items that I defined in my application: >> >> .ERXNavigationMenu { >> } >> .Level1Items { >> } >> .Level1Items li { >> } >> .Level1Items a { >> } >> .Level1Items .Nav1Selected a { >> >> } >> .Level1Items li.Nav1 a:hover { >> } >> .Level2Items { >> } >> .Level2Items li { >> } >> .Level2Items a { >> } >> >> .Level2Items .Nav2Selected a, .Level2Items li.Nav2 a:hover { >> >> } >> >> >> On 24-Oct-08, at 2:31 PM, Josh Paul wrote: >> >>> Thanks. >>> >>> I looked at bugtracker, and it's still a little bit much to digest. >>> I think I'm getting there, though. >>> >>> On Oct 24, 2008, at 2:29 PM, David Holt wrote: >>> >>>> Yes! >>>> >>>> I'll write up a little tutorial for you this weekend. In the >>>> meantime, you can look at bugtracker and ermovies for examples of >>>> its use. >>>> >>>> David >>>> >>>> >>>> On 24-Oct-08, at 2:02 PM, Josh Paul wrote: >>>> >>>>> Thanks! After looking at the documentation, I still have a few >>>>> questions... >>>>> >>>>> Does anyone have an example of usage outside of a D2W app? >>>>> >>>>> On Oct 24, 2008, at 9:22 AM, David Holt wrote: >>>>> >>>>>> Hi Josh, >>>>>> >>>>>> I'd use ERXNavigationMenu which automatically takes care of >>>>>> changing >>>>>> the css on the current link for you. I am using it to track users >>>>>> through a multipage form. The only caveat I have is that you'll >>>>>> need >>>>>> to do some tinkering if you want to submit the form with the >>>>>> hyperlinks (I don't bother). >>>>>> >>>>>> Another option might be a tabbed component which could give the >>>>>> user >>>>>> an indication where they are in the process as well. >>>>>> >>>>>> A final option might be something as simple as a >>>>>> WOSwitchComponent >>>>>> where the links change their css class depending on which >>>>>> component >>>>>> is being displayed. >>>>>> >>>>>> David >>>>>> >>>>>> >>>>>> On 23-Oct-08, at 3:44 PM, Josh Paul wrote: >>>>>> >>>>>>> I'd like to provide an indicator to clients in regard to where >>>>>>> they >>>>>>> are in a specific workflow. Each step relates to (essentially) a >>>>>>> page, >>>>>>> and I'd like to highlight the current step they are on in the >>>>>>> flow >>>>>>> through an html style. I've done this before by doing some >>>>>>> comparison >>>>>>> of the current page name to an item in the array of steps, but >>>>>>> I'm >>>>>>> wondering if there's a more efficient or "correct" way to do it. >>>>>>> >>>>>>> For example, assume there are 4 steps. The "trail" would look >>>>>>> like >>>>>>> this, if the user was on Step 02: >>>>>>> >>>>>>> Step 01 | *Step 02* | Step 03 | Step 04 >>>>>>> >>>>>>> Thoughts? >>>>>>> >>>>>>> ---------------------------------------------------------------- >>>>>>> --------- >>>>>>> This SF.Net email is sponsored by the Moblin Your Move >>>>>>> Developer's >>>>>>> challenge >>>>>>> Build the coolest Linux based applications with Moblin SDK & win >>>>>>> great prizes >>>>>>> Grand prize is a trip for two to an Open Source event >>>>>>> anywhere in >>>>>>> the world >>>>>>> http://moblin-contest.org/redirect.php?banner_id=100&url=/ >>>>>>> _______________________________________________ >>>>>>> Wonder-disc mailing list >>>>>>> Won...@li... >>>>>>> https://lists.sourceforge.net/lists/listinfo/wonder-disc >>>>>> >>>>> >>>>> >>>>> ------------------------------------------------------------------ >>>>> ------- >>>>> This SF.Net email is sponsored by the Moblin Your Move >>>>> Developer's challenge >>>>> Build the coolest Linux based applications with Moblin SDK & win >>>>> great prizes >>>>> Grand prize is a trip for two to an Open Source event anywhere in >>>>> the world >>>>> http://moblin-contest.org/redirect.php?banner_id=100&url=/ >>>>> _______________________________________________ >>>>> Wonder-disc mailing list >>>>> Won...@li... >>>>> https://lists.sourceforge.net/lists/listinfo/wonder-disc >>>> >>> >> >> --------------------------------------------------------------------- >> ---- >> This SF.Net email is sponsored by the Moblin Your Move Developer's >> challenge >> Build the coolest Linux based applications with Moblin SDK & win >> great prizes >> Grand prize is a trip for two to an Open Source event anywhere in >> the world >> http://moblin-contest.org/redirect.php?banner_id=100&url=/ >> _______________________________________________ >> Wonder-disc mailing list >> Won...@li... >> https://lists.sourceforge.net/lists/listinfo/wonder-disc > > > ---------------------------------------------------------------------- > --- > This SF.Net email is sponsored by the Moblin Your Move Developer's > challenge > Build the coolest Linux based applications with Moblin SDK & win > great prizes > Grand prize is a trip for two to an Open Source event anywhere in > the world > http://moblin-contest.org/redirect.php?banner_id=100&url=/ > _______________________________________________ > Wonder-disc mailing list > Won...@li... > https://lists.sourceforge.net/lists/listinfo/wonder-disc |
From: Anjo K. <an...@kr...> - 2008-11-04 03:28:25
|
Am 04.11.2008 um 01:22 schrieb David Holt: > How can I set the nav state of the page based on the selection > variable of the switch component? Push it as a binding? Cheers, Anjo |
From: David H. <pro...@ma...> - 2008-11-04 00:45:17
|
Rather than fighting the ERXNavigationManager I am turning the components being switched into page level components. Thanks guys, David On 3-Nov-08, at 4:22 PM, David Holt wrote: > Hi all, > > Anjo, thanks for pointing out the dangers of users opening multiple > tabs. It was a case I hadn't considered. > > I figured out the mistake I was making that Anjo pointed out below. > If several pages are opened in multiple browser tabs and the user > reloads any individual one, the nav state of the page gets reset to > the most recent tab that was opened but the page content stays the > same. > > I can set the nav state for a page level component in the awake() > method. > > One page has a switch component with 10 possible choices. I don't > know how to set the value of the selection variable and call awake() > at the page level with the proper value for the nav tab. How can I > set the nav state of the page based on the selection variable of the > switch component? > > Thanks guys, > > David > > > On 27-Oct-08, at 12:57 AM, Anjo Krank wrote: > >> Do NOT use ERXNavManager for pushing the context. You will end up >> with >> totally fragged navigation when your user opens pages in tabs. Pull >> the string from the session or current page or whereever. >> >> Cheers, Anjo >> >> Am 25.10.2008 um 00:04 schrieb David Holt: >> >>> Hi Josh, >>> >>> ERMovies is easier to digest. The key is the CSS. You have to create >>> CSS for the different states and it will be picked up automatically. >>> >>> Here are the essentials. I hope they're enough to get/keep you >>> going: >>> >>> In Application.java >>> // initialize the navigation >>> >>> public void finishInitialization() { >>> super.finishInitialization(); >>> ERXNavigationManager.manager().configureNavigation(); >>> NSLog.debug.appendln("finishInitialization called."); >>> } >>> >>> Example actions in Session: >>> // Don't forget to set the navigation state for every action >>> // (setSelection() is used in the WOSwitchComponent in MainSurvey) >>> >>> public WOComponent toUserPage() { >>> >>> ERXNavigationManager >>> .manager().navigationStateForSession(session()).setState(new >>> NSArray(new Object[] { >>> "my profile" >>> })); >>> // ... do real action... >>> return context().page().pageWithName(UserProfile.class.getName()); >>> } >>> public WOActionResults toSurvey() { >>> >>> ERXNavigationManager >>> .manager().navigationStateForSession(session()).setState(new >>> NSArray(new Object[] { >>> "my survey", >>> "instructions" >>> })); >>> return context().page().pageWithName(MainSurvey.class.getName()); >>> } >>> >>> >>> >>> public WOActionResults toSurvey1() { >>> >>> ERXNavigationManager >>> .manager().navigationStateForSession(session()).setState(new >>> NSArray(new Object[] { >>> "my survey", >>> "section I" >>> })); >>> MainSurvey nextPage = >>> (MainSurvey)context().page().pageWithName(MainSurvey.class.getName >>> ()); >>> nextPage.setSelection("Survey1"); >>> return nextPage; >>> } >>> >>> Navigation.plist: >>> // there are more options than I am using below. See the docs for >>> more examples >>> >>> { >>> name = "Root"; >>> children = ("my profile","my survey"); >>> }, >>> { >>> name = "my profile"; >>> action = session.toUserPage; >>> }, >>> { >>> name = "my survey"; >>> children = ("instructions","section I"); >>> action = session.toSurvey; >>> }, >>> { >>> name = "instructions"; >>> action = session.toSurvey; >>> }, >>> { >>> name = "section I"; >>> action = session.toSurvey1; >>> }, >>> >>> HTML Source you'll see generated by ERXNavigationMenu when the app >>> is run >>> >>> <div class="ERXNavigationMenu"> >>> <ul class="Level1Items"> >>> <li nowrap="nowrap" class="Nav1" id="id1"><a href="/cgi-bin/ >>> WebObjects/MyApp.woa/wo/ >>> 49YrOFk9VT0wc2WYDlZ8b0/5.0.11.0.0.1.1.2.1.0.0.1.1.0.0">my profile</ >>> a></li> >>> >>> <li nowrap="nowrap" class="Nav1Selected" id="id2"><a href="/cgi-bin/ >>> WebObjects/MyApp.woa/wo/ >>> 49YrOFk9VT0wc2WYDlZ8b0/5.0.11.0.0.1.1.2.1.1.0.1.1.0.0">my survey</ >>> a></li> >>> </ul> >>> <ul class="Level2Items"> >>> <li nowrap="nowrap" class="Nav2" id="id3"><a href="/cgi-bin/ >>> WebObjects/MyApp.woa/wo/ >>> 49YrOFk9VT0wc2WYDlZ8b0 >>> /5.0.11.0.0.1.1.2.3.1.0.0.1.1.0.0">instructions</a></li> >>> >>> <li nowrap="nowrap" class="Nav2Selected" id="id4"><a href="/cgi-bin/ >>> WebObjects/MyApp.woa/wo/ >>> 49YrOFk9VT0wc2WYDlZ8b0/5.0.11.0.0.1.1.2.3.1.1.0.1.1.0.0">section I</ >>> a></li> >>> </ul> >>> >>> >>> </div> >>> >>> CSS items that I defined in my application: >>> >>> .ERXNavigationMenu { >>> } >>> .Level1Items { >>> } >>> .Level1Items li { >>> } >>> .Level1Items a { >>> } >>> .Level1Items .Nav1Selected a { >>> >>> } >>> .Level1Items li.Nav1 a:hover { >>> } >>> .Level2Items { >>> } >>> .Level2Items li { >>> } >>> .Level2Items a { >>> } >>> >>> .Level2Items .Nav2Selected a, .Level2Items li.Nav2 a:hover { >>> >>> } >>> >>> >>> On 24-Oct-08, at 2:31 PM, Josh Paul wrote: >>> >>>> Thanks. >>>> >>>> I looked at bugtracker, and it's still a little bit much to digest. >>>> I think I'm getting there, though. >>>> >>>> On Oct 24, 2008, at 2:29 PM, David Holt wrote: >>>> >>>>> Yes! >>>>> >>>>> I'll write up a little tutorial for you this weekend. In the >>>>> meantime, you can look at bugtracker and ermovies for examples of >>>>> its use. >>>>> >>>>> David >>>>> >>>>> >>>>> On 24-Oct-08, at 2:02 PM, Josh Paul wrote: >>>>> >>>>>> Thanks! After looking at the documentation, I still have a few >>>>>> questions... >>>>>> >>>>>> Does anyone have an example of usage outside of a D2W app? >>>>>> >>>>>> On Oct 24, 2008, at 9:22 AM, David Holt wrote: >>>>>> >>>>>>> Hi Josh, >>>>>>> >>>>>>> I'd use ERXNavigationMenu which automatically takes care of >>>>>>> changing >>>>>>> the css on the current link for you. I am using it to track >>>>>>> users >>>>>>> through a multipage form. The only caveat I have is that you'll >>>>>>> need >>>>>>> to do some tinkering if you want to submit the form with the >>>>>>> hyperlinks (I don't bother). >>>>>>> >>>>>>> Another option might be a tabbed component which could give the >>>>>>> user >>>>>>> an indication where they are in the process as well. >>>>>>> >>>>>>> A final option might be something as simple as a >>>>>>> WOSwitchComponent >>>>>>> where the links change their css class depending on which >>>>>>> component >>>>>>> is being displayed. >>>>>>> >>>>>>> David >>>>>>> >>>>>>> >>>>>>> On 23-Oct-08, at 3:44 PM, Josh Paul wrote: >>>>>>> >>>>>>>> I'd like to provide an indicator to clients in regard to where >>>>>>>> they >>>>>>>> are in a specific workflow. Each step relates to >>>>>>>> (essentially) a >>>>>>>> page, >>>>>>>> and I'd like to highlight the current step they are on in the >>>>>>>> flow >>>>>>>> through an html style. I've done this before by doing some >>>>>>>> comparison >>>>>>>> of the current page name to an item in the array of steps, but >>>>>>>> I'm >>>>>>>> wondering if there's a more efficient or "correct" way to do >>>>>>>> it. >>>>>>>> >>>>>>>> For example, assume there are 4 steps. The "trail" would look >>>>>>>> like >>>>>>>> this, if the user was on Step 02: >>>>>>>> >>>>>>>> Step 01 | *Step 02* | Step 03 | Step 04 >>>>>>>> >>>>>>>> Thoughts? >>>>>>>> >>>>>>>> --------------------------------------------------------------- >>>>>>>> - >>>>>>>> --------- >>>>>>>> This SF.Net email is sponsored by the Moblin Your Move >>>>>>>> Developer's >>>>>>>> challenge >>>>>>>> Build the coolest Linux based applications with Moblin SDK & >>>>>>>> win >>>>>>>> great prizes >>>>>>>> Grand prize is a trip for two to an Open Source event >>>>>>>> anywhere in >>>>>>>> the world >>>>>>>> http://moblin-contest.org/redirect.php?banner_id=100&url=/ >>>>>>>> _______________________________________________ >>>>>>>> Wonder-disc mailing list >>>>>>>> Won...@li... >>>>>>>> https://lists.sourceforge.net/lists/listinfo/wonder-disc >>>>>>> >>>>>> >>>>>> >>>>>> ----------------------------------------------------------------- >>>>>> - >>>>>> ------- >>>>>> This SF.Net email is sponsored by the Moblin Your Move >>>>>> Developer's challenge >>>>>> Build the coolest Linux based applications with Moblin SDK & win >>>>>> great prizes >>>>>> Grand prize is a trip for two to an Open Source event anywhere in >>>>>> the world >>>>>> http://moblin-contest.org/redirect.php?banner_id=100&url=/ >>>>>> _______________________________________________ >>>>>> Wonder-disc mailing list >>>>>> Won...@li... >>>>>> https://lists.sourceforge.net/lists/listinfo/wonder-disc >>>>> >>>> >>> >>> -------------------------------------------------------------------- >>> - >>> ---- >>> This SF.Net email is sponsored by the Moblin Your Move Developer's >>> challenge >>> Build the coolest Linux based applications with Moblin SDK & win >>> great prizes >>> Grand prize is a trip for two to an Open Source event anywhere in >>> the world >>> http://moblin-contest.org/redirect.php?banner_id=100&url=/ >>> _______________________________________________ >>> Wonder-disc mailing list >>> Won...@li... >>> https://lists.sourceforge.net/lists/listinfo/wonder-disc >> >> >> --------------------------------------------------------------------- >> - >> --- >> This SF.Net email is sponsored by the Moblin Your Move Developer's >> challenge >> Build the coolest Linux based applications with Moblin SDK & win >> great prizes >> Grand prize is a trip for two to an Open Source event anywhere in >> the world >> http://moblin-contest.org/redirect.php?banner_id=100&url=/ >> _______________________________________________ >> Wonder-disc mailing list >> Won...@li... >> https://lists.sourceforge.net/lists/listinfo/wonder-disc > > > ---------------------------------------------------------------------- > --- > This SF.Net email is sponsored by the Moblin Your Move Developer's > challenge > Build the coolest Linux based applications with Moblin SDK & win > great prizes > Grand prize is a trip for two to an Open Source event anywhere in > the world > http://moblin-contest.org/redirect.php?banner_id=100&url=/ > _______________________________________________ > Wonder-disc mailing list > Won...@li... > https://lists.sourceforge.net/lists/listinfo/wonder-disc |
From: Anjo K. <an...@kr...> - 2008-11-04 03:26:51
|
As I said, do not push the context state. I admit the bug tracker is a bit confusing... it was the implementation of an idea I had for exactly the reason I a) didn't want to push the context state because of the tab issue. You need to take a look at MenuHeader. public NSKeyValueCoding navigationContext() { NSKeyValueCoding context = (NSKeyValueCoding)session ().objectForKey("navigationContext"); if (context().page() instanceof D2WPage) { context = ((D2WPage)context().page()).d2wContext(); } if(context == null) { context = new NSMutableDictionary(); session().setObjectForKey(context, "navigationContext"); } return context; } Where the context is the d2w context of the page, gets asked for "navigationState" and returns a string like "Bugs.QueryUsers". So you you should be able to put a resolver class in the session which does this: public class NavigationResolver implements NSKeyValueCoding { public Object valueForKey(String key) { return ERXSession.session().context().page().valueForKey(key); } ... } public Session() { setObjectForKey(new NavigationResolver(), "navigationContext") } and have your page classes implement: public String navigationState() { return "Bug" + (inQuery()? ".FindBug" : ".ListBug") } Now the state is pulled from the current page instead of pushed...all this is write-only and untested, but should give you an idea. Cheers, Anjo Am 04.11.2008 um 01:45 schrieb David Holt: > Rather than fighting the ERXNavigationManager I am turning the > components being switched into page level components. > > Thanks guys, > > David > > On 3-Nov-08, at 4:22 PM, David Holt wrote: > >> Hi all, >> >> Anjo, thanks for pointing out the dangers of users opening multiple >> tabs. It was a case I hadn't considered. >> >> I figured out the mistake I was making that Anjo pointed out below. >> If several pages are opened in multiple browser tabs and the user >> reloads any individual one, the nav state of the page gets reset to >> the most recent tab that was opened but the page content stays the >> same. >> >> I can set the nav state for a page level component in the awake() >> method. >> >> One page has a switch component with 10 possible choices. I don't >> know how to set the value of the selection variable and call awake() >> at the page level with the proper value for the nav tab. How can I >> set the nav state of the page based on the selection variable of the >> switch component? >> >> Thanks guys, >> >> David >> >> >> On 27-Oct-08, at 12:57 AM, Anjo Krank wrote: >> >>> Do NOT use ERXNavManager for pushing the context. You will end up >>> with >>> totally fragged navigation when your user opens pages in tabs. Pull >>> the string from the session or current page or whereever. >>> >>> Cheers, Anjo >>> >>> Am 25.10.2008 um 00:04 schrieb David Holt: >>> >>>> Hi Josh, >>>> >>>> ERMovies is easier to digest. The key is the CSS. You have to >>>> create >>>> CSS for the different states and it will be picked up >>>> automatically. >>>> >>>> Here are the essentials. I hope they're enough to get/keep you >>>> going: >>>> >>>> In Application.java >>>> // initialize the navigation >>>> >>>> public void finishInitialization() { >>>> super.finishInitialization(); >>>> ERXNavigationManager.manager().configureNavigation(); >>>> NSLog.debug.appendln("finishInitialization called."); >>>> } >>>> >>>> Example actions in Session: >>>> // Don't forget to set the navigation state for every action >>>> // (setSelection() is used in the WOSwitchComponent in MainSurvey) >>>> >>>> public WOComponent toUserPage() { >>>> >>>> ERXNavigationManager >>>> .manager().navigationStateForSession(session()).setState(new >>>> NSArray(new Object[] { >>>> "my profile" >>>> })); >>>> // ... do real action... >>>> return context().page().pageWithName(UserProfile.class.getName >>>> ()); >>>> } >>>> public WOActionResults toSurvey() { >>>> >>>> ERXNavigationManager >>>> .manager().navigationStateForSession(session()).setState(new >>>> NSArray(new Object[] { >>>> "my survey", >>>> "instructions" >>>> })); >>>> return context().page().pageWithName(MainSurvey.class.getName()); >>>> } >>>> >>>> >>>> >>>> public WOActionResults toSurvey1() { >>>> >>>> ERXNavigationManager >>>> .manager().navigationStateForSession(session()).setState(new >>>> NSArray(new Object[] { >>>> "my survey", >>>> "section I" >>>> })); >>>> MainSurvey nextPage = >>>> (MainSurvey)context().page().pageWithName(MainSurvey.class.getName >>>> ()); >>>> nextPage.setSelection("Survey1"); >>>> return nextPage; >>>> } >>>> >>>> Navigation.plist: >>>> // there are more options than I am using below. See the docs for >>>> more examples >>>> >>>> { >>>> name = "Root"; >>>> children = ("my profile","my survey"); >>>> }, >>>> { >>>> name = "my profile"; >>>> action = session.toUserPage; >>>> }, >>>> { >>>> name = "my survey"; >>>> children = ("instructions","section I"); >>>> action = session.toSurvey; >>>> }, >>>> { >>>> name = "instructions"; >>>> action = session.toSurvey; >>>> }, >>>> { >>>> name = "section I"; >>>> action = session.toSurvey1; >>>> }, >>>> >>>> HTML Source you'll see generated by ERXNavigationMenu when the app >>>> is run >>>> >>>> <div class="ERXNavigationMenu"> >>>> <ul class="Level1Items"> >>>> <li nowrap="nowrap" class="Nav1" id="id1"><a href="/cgi-bin/ >>>> WebObjects/MyApp.woa/wo/ >>>> 49YrOFk9VT0wc2WYDlZ8b0/5.0.11.0.0.1.1.2.1.0.0.1.1.0.0">my profile</ >>>> a></li> >>>> >>>> <li nowrap="nowrap" class="Nav1Selected" id="id2"><a href="/cgi- >>>> bin/ >>>> WebObjects/MyApp.woa/wo/ >>>> 49YrOFk9VT0wc2WYDlZ8b0/5.0.11.0.0.1.1.2.1.1.0.1.1.0.0">my survey</ >>>> a></li> >>>> </ul> >>>> <ul class="Level2Items"> >>>> <li nowrap="nowrap" class="Nav2" id="id3"><a href="/cgi-bin/ >>>> WebObjects/MyApp.woa/wo/ >>>> 49YrOFk9VT0wc2WYDlZ8b0 >>>> /5.0.11.0.0.1.1.2.3.1.0.0.1.1.0.0">instructions</a></li> >>>> >>>> <li nowrap="nowrap" class="Nav2Selected" id="id4"><a href="/cgi- >>>> bin/ >>>> WebObjects/MyApp.woa/wo/ >>>> 49YrOFk9VT0wc2WYDlZ8b0/5.0.11.0.0.1.1.2.3.1.1.0.1.1.0.0">section >>>> I</ >>>> a></li> >>>> </ul> >>>> >>>> >>>> </div> >>>> >>>> CSS items that I defined in my application: >>>> >>>> .ERXNavigationMenu { >>>> } >>>> .Level1Items { >>>> } >>>> .Level1Items li { >>>> } >>>> .Level1Items a { >>>> } >>>> .Level1Items .Nav1Selected a { >>>> >>>> } >>>> .Level1Items li.Nav1 a:hover { >>>> } >>>> .Level2Items { >>>> } >>>> .Level2Items li { >>>> } >>>> .Level2Items a { >>>> } >>>> >>>> .Level2Items .Nav2Selected a, .Level2Items li.Nav2 a:hover { >>>> >>>> } >>>> >>>> >>>> On 24-Oct-08, at 2:31 PM, Josh Paul wrote: >>>> >>>>> Thanks. >>>>> >>>>> I looked at bugtracker, and it's still a little bit much to >>>>> digest. >>>>> I think I'm getting there, though. >>>>> >>>>> On Oct 24, 2008, at 2:29 PM, David Holt wrote: >>>>> >>>>>> Yes! >>>>>> >>>>>> I'll write up a little tutorial for you this weekend. In the >>>>>> meantime, you can look at bugtracker and ermovies for examples of >>>>>> its use. >>>>>> >>>>>> David >>>>>> >>>>>> >>>>>> On 24-Oct-08, at 2:02 PM, Josh Paul wrote: >>>>>> >>>>>>> Thanks! After looking at the documentation, I still have a few >>>>>>> questions... >>>>>>> >>>>>>> Does anyone have an example of usage outside of a D2W app? >>>>>>> >>>>>>> On Oct 24, 2008, at 9:22 AM, David Holt wrote: >>>>>>> >>>>>>>> Hi Josh, >>>>>>>> >>>>>>>> I'd use ERXNavigationMenu which automatically takes care of >>>>>>>> changing >>>>>>>> the css on the current link for you. I am using it to track >>>>>>>> users >>>>>>>> through a multipage form. The only caveat I have is that you'll >>>>>>>> need >>>>>>>> to do some tinkering if you want to submit the form with the >>>>>>>> hyperlinks (I don't bother). >>>>>>>> >>>>>>>> Another option might be a tabbed component which could give the >>>>>>>> user >>>>>>>> an indication where they are in the process as well. >>>>>>>> >>>>>>>> A final option might be something as simple as a >>>>>>>> WOSwitchComponent >>>>>>>> where the links change their css class depending on which >>>>>>>> component >>>>>>>> is being displayed. >>>>>>>> >>>>>>>> David >>>>>>>> >>>>>>>> >>>>>>>> On 23-Oct-08, at 3:44 PM, Josh Paul wrote: >>>>>>>> >>>>>>>>> I'd like to provide an indicator to clients in regard to where >>>>>>>>> they >>>>>>>>> are in a specific workflow. Each step relates to >>>>>>>>> (essentially) a >>>>>>>>> page, >>>>>>>>> and I'd like to highlight the current step they are on in the >>>>>>>>> flow >>>>>>>>> through an html style. I've done this before by doing some >>>>>>>>> comparison >>>>>>>>> of the current page name to an item in the array of steps, but >>>>>>>>> I'm >>>>>>>>> wondering if there's a more efficient or "correct" way to do >>>>>>>>> it. >>>>>>>>> >>>>>>>>> For example, assume there are 4 steps. The "trail" would look >>>>>>>>> like >>>>>>>>> this, if the user was on Step 02: >>>>>>>>> >>>>>>>>> Step 01 | *Step 02* | Step 03 | Step 04 >>>>>>>>> >>>>>>>>> Thoughts? >>>>>>>>> >>>>>>>>> -------------------------------------------------------------- >>>>>>>>> - >>>>>>>>> - >>>>>>>>> --------- >>>>>>>>> This SF.Net email is sponsored by the Moblin Your Move >>>>>>>>> Developer's >>>>>>>>> challenge >>>>>>>>> Build the coolest Linux based applications with Moblin SDK & >>>>>>>>> win >>>>>>>>> great prizes >>>>>>>>> Grand prize is a trip for two to an Open Source event >>>>>>>>> anywhere in >>>>>>>>> the world >>>>>>>>> http://moblin-contest.org/redirect.php?banner_id=100&url=/ >>>>>>>>> _______________________________________________ >>>>>>>>> Wonder-disc mailing list >>>>>>>>> Won...@li... >>>>>>>>> https://lists.sourceforge.net/lists/listinfo/wonder-disc >>>>>>>> >>>>>>> >>>>>>> >>>>>>> ---------------------------------------------------------------- >>>>>>> - >>>>>>> - >>>>>>> ------- >>>>>>> This SF.Net email is sponsored by the Moblin Your Move >>>>>>> Developer's challenge >>>>>>> Build the coolest Linux based applications with Moblin SDK & win >>>>>>> great prizes >>>>>>> Grand prize is a trip for two to an Open Source event >>>>>>> anywhere in >>>>>>> the world >>>>>>> http://moblin-contest.org/redirect.php?banner_id=100&url=/ >>>>>>> _______________________________________________ >>>>>>> Wonder-disc mailing list >>>>>>> Won...@li... >>>>>>> https://lists.sourceforge.net/lists/listinfo/wonder-disc >>>>>> >>>>> >>>> >>>> ------------------------------------------------------------------- >>>> - >>>> - >>>> ---- >>>> This SF.Net email is sponsored by the Moblin Your Move Developer's >>>> challenge >>>> Build the coolest Linux based applications with Moblin SDK & win >>>> great prizes >>>> Grand prize is a trip for two to an Open Source event anywhere in >>>> the world >>>> http://moblin-contest.org/redirect.php?banner_id=100&url=/ >>>> _______________________________________________ >>>> Wonder-disc mailing list >>>> Won...@li... >>>> https://lists.sourceforge.net/lists/listinfo/wonder-disc >>> >>> >>> -------------------------------------------------------------------- >>> - >>> - >>> --- >>> This SF.Net email is sponsored by the Moblin Your Move Developer's >>> challenge >>> Build the coolest Linux based applications with Moblin SDK & win >>> great prizes >>> Grand prize is a trip for two to an Open Source event anywhere in >>> the world >>> http://moblin-contest.org/redirect.php?banner_id=100&url=/ >>> _______________________________________________ >>> Wonder-disc mailing list >>> Won...@li... >>> https://lists.sourceforge.net/lists/listinfo/wonder-disc >> >> >> --------------------------------------------------------------------- >> - >> --- >> This SF.Net email is sponsored by the Moblin Your Move Developer's >> challenge >> Build the coolest Linux based applications with Moblin SDK & win >> great prizes >> Grand prize is a trip for two to an Open Source event anywhere in >> the world >> http://moblin-contest.org/redirect.php?banner_id=100&url=/ >> _______________________________________________ >> Wonder-disc mailing list >> Won...@li... >> https://lists.sourceforge.net/lists/listinfo/wonder-disc > > > ---------------------------------------------------------------------- > --- > This SF.Net email is sponsored by the Moblin Your Move Developer's > challenge > Build the coolest Linux based applications with Moblin SDK & win > great prizes > Grand prize is a trip for two to an Open Source event anywhere in > the world > http://moblin-contest.org/redirect.php?banner_id=100&url=/ > _______________________________________________ > Wonder-disc mailing list > Won...@li... > https://lists.sourceforge.net/lists/listinfo/wonder-disc |
From: Anjo K. <an...@kr...> - 2008-11-04 04:09:54
|
Am 04.11.2008 um 04:26 schrieb Anjo Krank: > I admit the bug tracker is > a bit confusing... it was the implementation of an idea I had for > exactly the reason I a) didn't want to push the context state because > of the tab issue. I edited this out int first post: "and b) didn't want to write rules like 'page config=bla => navState=blub'". But in fact there are some of these rules in bug tracker, so thought I'd confuse you a bit more by explaining what is behind all that:) One could safely remove the rules, as the state is pushed into the page's d2w context by this code: public class Session extends ERXSession { public class Handler implements NSKeyValueCoding, NSKeyValueCoding.ErrorHandling { ... public Object valueForKey(String key) { String keyPath = ERXStringUtilities.uncapitalize(key); WOActionResults result = (WOActionResults) NSKeyValueCoding.DefaultImplementation.valueForKey(this, keyPath); if (result instanceof D2WPage) { D2WPage page = (D2WPage) result; String state = ERXStringUtilities.capitalize(_key) + "." + key; page.d2wContext().takeValueForKey(state, "navigationState"); } return result; } public Object handleQueryWithUnboundKey(String key) { return NSKeyValueCoding.Utility.valueForKey (Factory.bugTracker(), key); } ... public Session() { super(); new ReleaseHandler(); new BugHandler(); ... what happens here: - user clicks item - item has "action = session.handlers.reports.BugsPerComponent" in it - item calls up session.handlers.handlers.reports, which returns the ReportHandler - KVC on it with "BugsPerComponent" transforms the key to "bugsPerComponent" - calls default KVC imp, which looks for "bugsPerComponent()" and if not found - calls handleQueryWithUnboundKey which routes it to the bug tracker factory for "bugsPerComponent()" - which return a page - to where the nav state "Reports.BugsPerComponent" is set into the page's d2w context (which could also be a variable "navigationState" on the page) - menu pulls the navigationContext from the menu header, which returns the d2w context, which returns "Reports.BugsPerComponent" when asked. - profit Again, I'll admit that the bug tracker is a bit confusing, but it *does* spare you a ton of work as opposed to the traditional approach. The net effect of all this is that you can easily add sub menues or sub items, by only adding a three-line handler class and/or implement the code that actually creates the page. You needn't route through a factory, but you could easily implement bugsPerComponent() in the handler class itself, which would partition the code a bit better. Also, this approach is very direct action friendly and you could create a DA like: public Nav extends WODirectAction { public String performActionNamed(String name) { return session().valueForKeyPath("handlers."+name); } } then change your item to "directAction = reports.BugsPerComponent; directActionClass=Nav;" and presto... instant DA navigation with bookmark-able links (access control would be advised). This whole trick works because the nav items are displayed via the localizer, which makes it possible to display "By Component" for "BugsPerComponent" so you can use KVC compatible keys. Cheers, Anjo |
From: David H. <pro...@ma...> - 2008-11-04 17:49:46
|
Thanks for this Anjo. Makes a number of things much clearer. Which doesn't necessarily mean clear ;-) You guys are code chefs. I think I'm a line cook: I just bought "A day at el Bulli" so the cooking metaphor seems appropriate (not to mention we're talking bread crumbs here ;-) <http://www.amazon.com/Day-At-Elbulli-Albert/dp/0714848832/> David On 3-Nov-08, at 8:09 PM, Anjo Krank wrote: > > Am 04.11.2008 um 04:26 schrieb Anjo Krank: > >> I admit the bug tracker is >> a bit confusing... it was the implementation of an idea I had for >> exactly the reason I a) didn't want to push the context state because >> of the tab issue. > > I edited this out int first post: "and b) didn't want to write > rules like 'page config=bla => navState=blub'". But in fact there > are some of these rules in bug tracker, so thought I'd confuse you > a bit more by explaining what is behind all that:) > > One could safely remove the rules, as the state is pushed into the > page's d2w context by this code: > > public class Session extends ERXSession { > public class Handler implements NSKeyValueCoding, > NSKeyValueCoding.ErrorHandling { > ... > public Object valueForKey(String key) { > String keyPath = ERXStringUtilities.uncapitalize(key); > WOActionResults result = (WOActionResults) > NSKeyValueCoding.DefaultImplementation.valueForKey(this, keyPath); > if (result instanceof D2WPage) { > D2WPage page = (D2WPage) result; > String state = ERXStringUtilities.capitalize(_key) > + "." + key; > page.d2wContext().takeValueForKey(state, > "navigationState"); > } > return result; > } > public Object handleQueryWithUnboundKey(String key) { > return NSKeyValueCoding.Utility.valueForKey > (Factory.bugTracker(), key); > } > ... > public Session() { > super(); > new ReleaseHandler(); > new BugHandler(); > ... > > what happens here: > > - user clicks item > - item has "action = session.handlers.reports.BugsPerComponent" in it > - item calls up session.handlers.handlers.reports, which returns > the ReportHandler > - KVC on it with "BugsPerComponent" transforms the key to > "bugsPerComponent" > - calls default KVC imp, which looks for "bugsPerComponent()" and > if not found > - calls handleQueryWithUnboundKey which routes it to the bug > tracker factory for "bugsPerComponent()" > - which return a page > - to where the nav state "Reports.BugsPerComponent" is set into the > page's d2w context (which could also be a variable > "navigationState" on the page) > - menu pulls the navigationContext from the menu header, which > returns the d2w context, which returns "Reports.BugsPerComponent" > when asked. > - profit > > Again, I'll admit that the bug tracker is a bit confusing, but it > *does* spare you a ton of work as opposed to the traditional approach. > > The net effect of all this is that you can easily add sub menues or > sub items, by only adding a three-line handler class and/or > implement the code that actually creates the page. You needn't > route through a factory, but you could easily implement > bugsPerComponent() in the handler class itself, which would > partition the code a bit better. Also, this approach is very direct > action friendly and you could create a DA like: > > public Nav extends WODirectAction { > public String performActionNamed(String name) { > return session().valueForKeyPath("handlers."+name); > } > } > > then change your item to "directAction = reports.BugsPerComponent; > directActionClass=Nav;" and presto... instant DA navigation with > bookmark-able links (access control would be advised). > > This whole trick works because the nav items are displayed via the > localizer, which makes it possible to display "By Component" for > "BugsPerComponent" so you can use KVC compatible keys. > > Cheers, Anjo > > |
From: Guido N. <gui...@gm...> - 2008-11-04 18:02:39
|
On 04.11.2008, at 10:49, David Holt wrote: > Thanks for this Anjo. Makes a number of things much clearer. > > Which doesn't necessarily mean clear ;-) Hmm, yeah, now I also understand, what that meant. I was thrown off because I read "don't push the CONTEXT" which didn't make sense to me instead of the "don't PUSH the context STATE". We have not seen any issues with pushing the navigation context state from the component, but we are doing it in awake() of the page level component. I'll still look into changing it to what Anjo suggested. Not setting the navigationState with rules doesn't work in my D2W application - not sure why at the moment. Have to try it with the latest version or dig a bit deeper. cug |