Places:Design Overview

From MozillaWiki
Revision as of 02:09, 30 May 2006 by 1148957543 (talk | contribs)
Jump to navigation Jump to search

Design Overview

Objectives

  • Extensible Bookmark Providers for customization
  • Flexible Query System
  • Clean Architecture for ease of code reuse and maintainability

Front End Architecture

The Front End Architecture utilizes a MVC (model-view-controller) design. This calls for clean separation between each of the three components. The benefits of this approach are improved maintainability, stability and extensability.

Within the Places code, the Model can be considered to be the SQL tables and the code that creates them, the query system to access them, and the simple manipulation pathways provided through services like nsINavHistoryService and nsINavBookmarksService.

The View is the piece that displays information from the Model in one way or another. In code, these are menu.xml, toolbar.xml and tree.xml.

The Controller is the piece that interprets user actions on a selection and carries them out - basically linking the Model and the View. In code, this is controller.js.

The extent to which these services are kept independent can be seen in the following details:

  • The Model does not in general deal with presentation.
  • The Controller knows of "selection" only as a concept abstract from

the details of the selected View (e.g. a complex tree selection versus a selected toolbar button or menu item). As far as the Controller is concerned, the selection is a list of Result Nodes, there are no View-specific selection ranges, etc.

  • The Views know nothing about the functions performed when the user

interacts with their content, since that is instance specific. The Views implement a View Interface which handle translating their unique selection characteristics into an agnostic form the Controller can deal with.

The idea is someone can instantiate a View, attach a Controller, and define the behavioral characteristics that suit their use, in very little code. Examples:

Bookmarks Menu

  • instantiate a Menu View, attached to the top level Browser Bookmarks Menu.
  • attach the Controller
  • attach a command event listener that handles user clicks in the menu

by loading the associated URL, if any, in a browser tab

  • root the View on a Model query result, and tell it to populate itself

Folder Selector

  • instantiate a Menu View, attached to a menulist in the Places Search

popup.

  • attach the Controller
  • attach a command event listener that handles user clicks in the menu

by re-rooting a Tree View elsewhere in the UI

  • root the View on a Model query result, and tell it to populate itself.

As you can see, this careful distinction between each allows us to rapidly build new user interface components by connecting the same Views and Controller with different application specific functionality.

MVC.png

Details

Models

Bookmarks and History will be implemented using a collection of SQLite tables:

XXXbrettw fill in details of tables!

Source code: mozilla/browser/components/places/src

Views

There are three primary types of view for Places:

  • Tree/List view - Can show flat lists or hierarchical structures. e.g. the panes in the Places Organizer window.
  • Toolbar view - Shows folders as buttons that have dropdown menus. e.g. the Bookmarks Toolbar in the browser window.
  • Menu view - Shows folders as sub menus. e.g. the Bookmarks Menu in the browser window.

Each of these views implement a Places View interface which provides view-agnostic means for obtaining the current selection and other information. The Views themselves take on no controller-like responsibilities. They are not responsible for handling user clicks and opening links, etc - just presenting a list of places.

XXXben - fill in details!

Source code: mozilla/browser/components/places/content/tree|menu|toolbar.xml

Controller

The Controller connects the Views to the Model. It is responsible for telling the UI what commands are available, enabled and executing them on the back end services.

Source code: mozilla/browser/components/places/content/controller.js

Querying History

LifeOfQuery.png

To display results in a PlacesView, the following steps are performed:

Query Creation

Any list of items is the result of a query. e.g. the contents of a particular bookmark folder is a request for all URLs with the bookmark flag set that are contained by a named folder. Or all pages in a specific date range. And so on. Queries are represented as strings (which can be Bookmarked - "saved searches" or "virtual folders") containing all the parameters. -->brettw - fill in details!

Query Execution

The contents of the query string are deserialized and a series of Query objects are constructed. The query objects are executed.

Result Gathering

The results of the execution are gathered. --> brettw - fill in details! Not all queries produce results in the form of rows from the main URL table. Some produce results dynamically by consulting the contents of a directory on the user's file system (e.g. a new implementation of the old File System Datasource), for example. There are potentially other examples of remote data sources being used to feed data into the places view. Data sources like the Feed handler and the Bonjour listener would work slightly differently however. They would have their own timeout/notification based system by which they would detect new content, and then push URLs/rows into the main URL table whenever there was new data, so that when their containers were opened static content from the last dump is shown.

Result Organization

The results object is passed to a "Grouper" which organizes the results into a hierarchy based on a set of rules specified by the user interface. These rules form a kind of filter, for example: show all bookmarks organized into their appropriate folders; show history from last week, grouped by site; show all URLs matching the string "goats" in a flat, ungrouped list.

View Creation

The grouped results object is passed to the View implementation which supplies the necessary structure for the user interface.

Other Required Work

Remote Containers

The following are some example remote Feed containers. The first two are required.

  • Feed Container - ping and parse RSS/Atom feeds and fill containers with their posts
  • File System Container - show folders and files from the local hard disk
  • Bonjour Container - fill a container with available network resources discovered by Bonjour Zero-Configuration Networking.
  • Address Book URLs Container - fill a container with URLs mentioned in the system address book

Data Migration

Migrating data from Netscape-bookmarks-file-1, Mork, etc, to the storage format.

Notification API

A notification API for third party applications like Clobber that wish to observe edit operations on the back end.









[We are delicate. We do not delete your content.] [l_sp21]


waterford crystal swarovski crystal bead mesothelioma lawsuits mesothelioma symptoms mesothelioma diagnosis wacoal bras teen bra unsecured signature loan Countrywide Home Loans Formal Prom Dresses Sexy Prom Dress cocktail dresses TMobile water softener tankless water heater rockport shoes reverse osmosis water filter merrell shoes oscar dresses easter dresses flyfone voip plus size prom dresses discount prom dresses Hooters Casino Las Vegas grand casino mille lacs las vegas casino coupons online poker aide pechanga casino grand victoria casino ball gowns rtg casino bonus

rtg casino bonus grand casino coushatta grand casino hinckley isle of capri casino mohegan sun casino pala casino roulette wheels winstar casino Cheap Prom Dresses informal wedding dresses oscar dresses evening gowns

throat pokers online poker assistant online poker tracker online poker aide party poker bonus party poker bonus code bonus code party poker bonus code deposit party poker party poker bonus codes carnival cruises carnival game rentals fuzzy dice bingo daubers bingo blowers motor scooters mini harley chopper scooter fake rolex

bextra vioxx zocor zithromax bextra lawyer new hampshire akane soma kyo soma prozac nation prozac withdrawal sim slots pachislo slot machines program cherries wild slot machine slot car racing ho slot cars

bingo cages bingo daubers bingo blowers bingo bags baccarat crystal nexium online pai gow poker leigh keno

tramadol 50mg tramadol saturday delivery tramadol er tramadol sales tramadol hcl 50 mg 120 tramadol acetaminophen hcl par tramadol plus size mother of the bride dresses cheap flower girl dresses discount flower girl dresses infant flower girl dresses bridal flower girl dresses

discount bridesmaid dresses junior bridesmaid dresses cheap bridesmaid dresses plus size bridesmaid dresses wedding bridesmaid dresses maternity bridesmaid dresses