Bug 700669

Summary: Prototype Navigation pages
Product: [Community] PressGang CCMS Reporter: Joshua Wulf <jwulf>
Component: Web-UIAssignee: Matthew Casperson <mcaspers>
Status: CLOSED CURRENTRELEASE QA Contact:
Severity: unspecified Docs Contact:
Priority: unspecified    
Version: 1.xCC: cbredesen, lcarlon, serogers, topic-tool-list
Target Milestone: ---Keywords: Reopened
Target Release: ---   
Hardware: Unspecified   
OS: Unspecified   
Whiteboard:
Fixed In Version: Doc Type: Bug Fix
Doc Text:
Story Points: ---
Clone Of: Environment:
Last Closed: 2011-05-10 21:04:39 UTC Type: ---
Regression: --- Mount Type: ---
Documentation: --- CRM:
Verified Versions: Category: ---
oVirt Team: --- RHEL 7.3 requirements from Atomic Host:
Cloudforms Team: --- Target Upstream Version:
Bug Depends On:    
Bug Blocks: 699603, 699936    
Attachments:
Description Flags
Topic title; Topic ID injection; Bugzilla link injection none

Description Joshua Wulf 2011-04-28 22:58:09 UTC
Here is the pseudo-code to generate navigation pages:

Navigation is a Docbook Chapter

<chapter>

  [for each audience]  
  <section>
    [for each technology]
    <section>
      [Concept Overviews]
      [Task Overviews]
      [Top Five Tasks....]
    </section>
    [end:for]
  </section>
  [end:for]
  
  [for each audience]
  <section>
     [for each concern]
     <section>
       [Concept Overviews]
       [Task Overviews]
       [Top Five Tasks...]
     </section>
     [end:for]
  </section>
  [end:for]
   
Top Five Tasks are seeded from sort on aggregated priority.

Comment 1 Matthew Casperson 2011-05-04 01:32:42 UTC
done.

Comment 2 Joshua Wulf 2011-05-04 03:35:02 UTC
We need four high level pages:

Tech per admin
Tech per dev
Concern per admin
Concern per dev

On these page we iterate the tech / concern, and populate it with the Overview topics, plus the top five tasks by priority.

We a link in each section (perhaps saying "more..." at the end of the iteration), which links to these pages:

Pages of: 
Tech per admin
Tech per dev
Concern per admin
Concern per dev

Each of these pages contains one tech / concern with an iteration of Overviews followed by all tasks for that tech / concern, ranked by priority.

Priority should be calculated through a combination of IA_PRIORITY, SME_PRIORITY, ENG_PRIORITY, PM_PRIORITY.

Comment 3 Joshua Wulf 2011-05-04 03:44:55 UTC
Here's a mockup. This is the technologies per admin page. Notes are in []

EAP Technologies for Administrators [Page Title]

Hibernate [Technology Title]
Data Persistence Overview [Conceptual Overview]
Add Hibernate Support to an application [Task overview]

Create a new Hibernate mapping file [#1 Task by priority]
Do Task #2
Some Task #3
Another Task #4
Fifth Highest Priority Task
more... [links to page: Hibernate for Administrators]

Another Technology Category [Technology Title]
A Conceptual Overview from this category
Another Conceptual Overview from this category
A Task Overview from this category
The other Task Overviews from this category

The Number 1 Priority task from this category
The Number 2 Priority task from this category
The Number 3 Priority task from this category
The Number 4 Priority task from this category
The Number 5 Priority task from this category
(more...) [Link to page: Another Technology Category for Administrators]

Here is a mock up of a technology per admin page:

Hibernate for Administrators [page title]
[In this first cut, let's populate this page with a concern per admin constrained on technology Hibernate; so the code can be reused from the concern per admin page generator]

Concern A [Section title]
Concept Overview #1 from Concern A | Tech: Hibernate | Audience: Admin
Concept Overview from Concern A | Tech: Hibernate | Audience: Admin
Task Overview #1 from Concern A | Tech: Hibernate | Audience: Admin
Task Overview #2 from Concern A | Tech: Hibernate | Audience: Admin

Concern B [Section Title]
Concept Overview #1 from Concern B | Tech: Hibernate | Audience: Admin
Concept Overview from Concern B | Tech: Hibernate | Audience: Admin
Task Overview #1 from Concern B | Tech: Hibernate | Audience: Admin
Task Overview #2 from Concern B | Tech: Hibernate | Audience: Admin

Comment 4 Joshua Wulf 2011-05-04 03:53:48 UTC
Total number of pages required:

High-level pages:
Audiences x Dimensions = 
COUNT[Developer, Administrator] x COUNT[Technology, Concern] =
2 x 2 =
4 pages

Per Audience Per specific [concern | technology]:
COUNT[Administrator, Developer] x COUNT[Technologies()] + COUNT[Administrator, Developer] x COUNT[Concerns()] = 
2 x 29 + 2 x 30 = 118 pages

Total: 122 navigation pages

Later, we will add slicing by Tech / Concern with both Admin and Developer on the same page, which allows users to Ctrl-F search all tasks by tech / concern with no regard for audienc). That will add 59 pages. We'll save that one for the next test.

Comment 5 Sean Rogers 2011-05-04 07:03:20 UTC
Josh,
I'm taking these ideas on board to develop a high-level, static mock-up. I have planned to meet with Rudi on Friday to discuss the approach to information design and how it could work with Platform and Cloud.

Comment 6 Matthew Casperson 2011-05-05 02:33:48 UTC
Nav pages done. Still need to generate top 5 topics.

Comment 7 Matthew Casperson 2011-05-06 02:15:35 UTC
Top 5 tasks are now included in nav pages. See the calculateRelativePriority() function in the businessrules.drl file for details on how the priority of the tasks is calculated.

Comment 8 Joshua Wulf 2011-05-06 07:15:46 UTC
In my latest build, I get 20 tasks in the top five 
EAP Technologies for Administrators
Top 5 Application Server related tasks

I'm going to make a live docbook mockup of this and upload it to this ticket.

Comment 9 Joshua Wulf 2011-05-06 15:56:29 UTC
Created attachment 497398 [details]
Topic title; Topic ID injection; Bugzilla link injection

This is a demonstration of the Docbook xml and html output formatting of the topic titles; the insertion of the Topic ID into each topic; and the inclusion of an individualised bugzilla link per topic.

Comment 10 Joshua Wulf 2011-05-09 00:06:19 UTC
Here is the "moar than 9000" navigation pages pseudo-code.


Navigation Pages

Note: Top-level sections render as individual html pages. Sub-sections render as sections on an html page.

<Chapter>
<title>Nav test</title>

A:
   for:AUDIENCE
      <section>   
      <!-- By Technology Front Page per Audience -->
         <title>[Installation, Configuration and Operation | Development | Migration] (Technologies)</title>
         <para>Intro blurb</para>
         <!-- consider view rotation link here -->
         for:TECHNOLOGY
         <section>   
               <title>TECHNOLOGY.title</title>
               <!-- SELECT TASK_OVERVIEW,CONCEPT_OVERVIEW,TOP_FIVE_TASKS WHERE AUDIENCE=this.AUDIENCE GROUP AND TECHNOLOGY=this.TECHNOLOGY -->
               <!-- xref "more this.AUDIENCE tasks for this.TECHNOLOGY -> C(this.AUDIENCE,this.TECHNOLOGY)" -->
         </section>
         end:for:TECHNOLOGY
      </section>
   end:for:AUDIENCE
   <!-- number of html pages = COUNT(AUDIENCE); number of sections per html page = COUNT(TECHNOLOGY); number of links per page = COUNT(TECHNOLOGY) x (6 + AVERAGE(COUNT(OVERVIEW))) -->

B:
   for:AUDIENCE
      <section>
      <!-- By Concern Front Page per Audience -->
         <title>[Installation, Configuration and Operation | Development | Migration] (Concerns)</title>
         <para>Intro blurb</para>   
         <!-- consider view rotation link here -->
         for:CONCERN
         <section>   
               <title>CONCERN.title</title>
               <!-- SELECT TASK_OVERVIEW,CONCEPT_OVERVIEW,TOP_FIVE_TASKS WHERE AUDIENCE=this.AUDIENCE GROUP AND CONCERN=this.CONCERN -->
               <!-- xref "more this.AUDIENCE tasks for this.CONCERN -> D(this.AUDIENCE, this.CONCERN)" -->
         </section>
         end:for:CONCERN
      </section>
   end:for:AUDIENCE
   <!-- number of html pages = COUNT(AUDIENCE); number of sections per html page = COUNT(CONCERN); number of links per page = COUNT(CONCERN) x (6 + AVERAGE(COUNT(OVERVIEW))) -->

C: 
   for:AUDIENCE
      for:TECHNOLOGY
         <section>
            <!-- Tasks by concern for a specific technology -->
            <title>[AUDIENCE] tasks for [TECHNOLOGY]</title>
            <para>Intro blurb</para>
            <!-- consider view rotation link here -->
            for CONCERN:
               <section>
                  <title>CONCERN.name</title>
               <!-- SELECT TASK_OVERVIEW,CONCEPT_OVERVIEW,TASKS WHERE AUDIENCE=this.AUDIENCE AND TECHNOLOGY=this.TECHNOLOGY AND CONCERN=this.CONCERN GROUP BY CONCERN -->
               </section>
            end:for:CONCERN
         </section>
      end:for:TECHNOLOGY
   end:for:AUDIENCE
   <!-- # of html pages= COUNT(AUDIENCE) x COUNT(TECHNOLOGY); sections/page=COUNT(CONCERN)); links=>9000 -->

D:
   for:AUDIENCE
      for:CONCERN
         <section>
            <!-- Tasks by concern for a specific technology -->
            <title>[CONCERN] tasks for [AUDIENCE]</title>
            <para>Intro blurb</para>
            <!-- consider view rotation link here -->
            for TECHNOLOGY:
               <section>
                  <title>TECHNOLOGY.name</title>
               <!-- SELECT TASK_OVERVIEW,CONCEPT_OVERVIEW,TASKS WHERE AUDIENCE=this.AUDIENCE AND TECHNOLOGY=this.TECHNOLOGY AND CONCERN=this.CONCERN GROUP BY TECHNOLOGY-->
               </section>
            end:for:CONCERN
         </section>
      end:for:TECHNOLOGY
   end:for:AUDIENCE
   <!-- # of html pages= COUNT(AUDIENCE) x COUNT(TECHNOLOGY); sections/page=COUNT(CONCERN)); links=>9000 -->
</chapter>


Topic view rotation injection

inject navigation links:

   <itemizedlist>
   for:this.AUDIENCE:
      for:this.TECHNOLOGY
         <!-- "Development tasks for HornetQ"  -->
         <listitem><para><xref linkend="C(this.TECHNOLOGY, this.AUDIENCE, #this.CONCERN)"/></para></listitem>
      end:for:this.TECHNOLOGY
      for:this.CONCERN:
         <!-- "Messaging Development tasks for HornetQ" -->
         <listitem><para><xref linkend="D(this.AUDIENCE, this.CONCERN, #this.TECHNOLOGY)"/></para></listitem>
         <!-- "Development tasks for Messaging" -->
         <listitem><para><xref linkend="B(this.AUDIENCE, #this.CONCERN)"/></para></listitem>
      end:for:this.CONCERN
      for:this.TECHNOLOGY   
         <listitem><para><xref linkend="A(this.AUDIENCE, #this.TECHNOLOGY"/></para></listitem>
      end:for:this.TECHNOLOGY
   end:for:AUDIENCE
   </itemizedlist>

We can optimize this, trading links per page against clicks to target to get the right balance for navigational efficiency.

Comment 11 Matthew Casperson 2011-05-09 06:37:09 UTC
Done.

Comment 12 Joshua Wulf 2011-05-10 06:37:56 UTC
Sorry, missed an important point:

Sort alphabetically.

Comment 13 Matthew Casperson 2011-05-10 21:04:39 UTC
Done.