Labs/Extensions2/Notes: Difference between revisions

From MozillaWiki
Jump to navigation Jump to search
(New page: = 1-clickweather = == general == * toolbar extension * uses a JS import function to namespace javascript included from files * uses some complicated object heir...)
 
No edit summary
Line 1: Line 1:
= 1-clickweather =
= 1-clickweather =
    == general ==
== general ==
        * toolbar extension
* toolbar extension
        * uses a JS import function to namespace javascript included from files
* uses a JS import function to namespace javascript included from files
        * uses some complicated object heirarchies to manage prefs / config
* uses some complicated object heirarchies to manage prefs / config


    == prefs ==
== prefs ==
        * uses it's own system to manage prefs
* uses it's own system to manage prefs
            - uses observer pattern to get updates (as opposed to listenting to the prefs observers)
** uses observer pattern to get updates (as opposed to listenting to the prefs observers)
           
    == overlays ==
        * basic statusbar overlay
            - popupset


        * uses windows for config/about/etc.
== overlays ==
* basic statusbar overlay
** popupset


    == state ==
* uses windows for config/about/etc.
        * capture in saved xml files


    == ajax ==
== state ==
        * wrote their own AJAX library to handle simple async requests
* capture in saved xml files
 
== ajax ==
* wrote their own AJAX library to handle simple async requests


= adblock plus =
= adblock plus =
    == general ==
== general ==
        * content filter
* content filter
        * localized
* localized


    == prefs ==
== prefs ==
        * uses the built in prefs tools and defaults
* uses the built in prefs tools and defaults


    == overlays ==
== overlays ==
        * dialog for about
* dialog for about
        * window for subscribing
* window for subscribing
        * sidebar
* sidebar


    == state ==
== state ==
        * stores filters as a line deliminted file in the profile
* stores filters as a line deliminted file in the profile


    == ajax ==
== ajax ==
        * handles it's own async calls with XMLHttpRequest() primitive
* handles it's own async calls with XMLHttpRequest() primitive
            - used for synchronizing subscriptions for filters
** used for synchronizing subscriptions for filters


= autopager =
= autopager =
    == general ==
== general ==
        * content enhancement
* content enhancement
        * has an interesting auto-xpath generator for grabbing the links it needs
* has an interesting auto-xpath generator for grabbing the links it needs


    == installation ==
== installation ==
        * handles install with file, lots of poking profile dir, registering content
* handles install with file, lots of poking profile dir, registering content
        * option to install to profile :)
* option to install to profile :)


    == prefs ==
== prefs ==
        * uses firefox supplied prefs framework
* uses firefox supplied prefs framework
        * has a system to dynamically add the prefs file to prevent some of the weirdness in initializing new defaults
* has a system to dynamically add the prefs file to prevent some of the weirdness in initializing new defaults


    == overlays ==
== overlays ==
        * extensive use of sidebar, mostly as a container for what appears to be "page" elements
* extensive use of sidebar, mostly as a container for what appears to be "page" elements
        * statusbar
* statusbar
        * does not use settings overlay, builds it's own UI for that
* does not use settings overlay, builds it's own UI for that
    == state ==
== state ==
        * installation is handled seperately from everything else, involve file manipulation etc.
* installation is handled seperately from everything else, involve file manipulation etc.


    == ajax ==
== ajax ==


= boost =
= boost =
    == general ==
== general ==
        * content enhancement
* content enhancement


    == prefs ==
== prefs ==
        * uses firefox supplied prefs framework
* uses firefox supplied prefs framework
        * does not use settings overlay, builds it's own UI for that
* does not use settings overlay, builds it's own UI for that
        * builds a library for dealing with prefs
* builds a library for dealing with prefs
            - wraps setting / getting
** wraps setting / getting
            - easily add / remove listeners
** easily add / remove listeners


    == overlays ==
== overlays ==
        * basic status bar overlay
* basic status bar overlay
        * prefs ui
* prefs ui


    == state ==
== state ==
    == ajax ==
== ajax ==
        * has it's own library, doing something weird involving chrome security contexts.
* has it's own library, doing something weird involving chrome security contexts.
            - /I/ think this is about adding in page elements that can be called into the chrome context, there's some work to sanitize content etc.
** /I/ think this is about adding in page elements that can be called into the chrome context, there's some work to sanitize content etc.


= colorfultabs =
= colorfultabs =
    == general ==
== general ==
        * ui enhancement
* ui enhancement


    == installation ==
== installation ==
        * handles install with file, lots of poking profile dir, registering content
* handles install with file, lots of poking profile dir, registering content


    == prefs ==
== prefs ==
        * uses firefox supplied prefs framework
* uses firefox supplied prefs framework
        * uses settings overlay
* uses settings overlay


    == overlays ==
== overlays ==
        * basic status bar overlay
* basic status bar overlay
        * uses settings overlay
* uses settings overlay


    == state ==
== state ==
    == ajax ==
== ajax ==
        * has it's own library, doing something weird involving chrome security contexts.
* has it's own library, doing something weird involving chrome security contexts.
            - /I/ think this is about adding in page elements that can be called into the chrome context, there's some work to sanitize content etc.
** /I/ think this is about adding in page elements that can be called into the chrome context, there's some work to sanitize content etc.


= ctrl-tab =
= ctrl-tab =
    == general ==
== general ==
        * ui enhancement
* ui enhancement


    == prefs ==
== prefs ==
        * uses firefox supplied prefs framework
* uses firefox supplied prefs framework


    == overlays ==
== overlays ==
        * only the main overlay used to create a popupset that holds "tab images"
* only the main overlay used to create a popupset that holds "tab images"


= download statusbar =
= download statusbar =
    == general ==
== general ==
        * statusbar
* statusbar
        * includes localization
* includes localization


    == prefs ==
== prefs ==
        * uses firefox supplied prefs framework
* uses firefox supplied prefs framework


    == overlays ==
== overlays ==
        * status bar overlay
* status bar overlay
        * builds it's own window for managing prefs
* builds it's own window for managing prefs


= downthemall =
= downthemall =
    == general ==
== general ==
        * functionality enhancement
* functionality enhancement
        * includes localization
* includes localization


    == installation ==
== installation ==
        * handles install with file, lots of poking profile dir, registering content
* handles install with file, lots of poking profile dir, registering content


    == prefs ==
== prefs ==
        * uses firefox supplied prefs framework
* uses firefox supplied prefs framework


    == overlays ==
== overlays ==
        * status bar overlay
* status bar overlay
        * builds it's own window for managing prefs
* builds it's own window for managing prefs


    == state ==
== state ==
    == ajax ==
== ajax ==


= fast_video_download =
= fast_video_download =
    == general ==
== general ==
        * toolbar extension
* toolbar extension
        * is localized
* is localized


    == installation ==
== installation ==
    == prefs ==
== prefs ==
        * uses the firefox supplied prefs framework
* uses the firefox supplied prefs framework
        * and makes use of the options ui
* and makes use of the options ui


    == overlays ==
== overlays ==
        * uses the options overlay
* uses the options overlay
    == state ==
== state ==
    == ajax ==
== ajax ==
        * uses raw XMLHTttpRequest object
* uses raw XMLHTttpRequest object


= febe =
= febe =
    == general ==
== general ==
        * functionality enhancement (provides backups of firefox profile)
* functionality enhancement (provides backups of firefox profile)
        * is localized
* is localized


    == installation ==
== installation ==
        * checks for first install and initializes
* checks for first install and initializes
        * double checks default prefs
* double checks default prefs
        * checks intialization of prefs to prevent exception calls
* checks intialization of prefs to prevent exception calls


    == prefs ==
== prefs ==
        * uses the firefox supplied prefs framework
* uses the firefox supplied prefs framework


    == overlays ==
== overlays ==
        * lots of use of dialog boxes to present data to users
* lots of use of dialog boxes to present data to users
            - including it's own error and alert and confirm boxes (odd)
** including it's own error and alert and confirm boxes (odd)
    == state ==
== state ==
    == ajax ==
== ajax ==


= fire_fm =
= fire_fm =
    == general ==
== general ==
        * toolbar extension
* toolbar extension
        * uses flash for playing files
* uses flash for playing files


    == installation ==
== installation ==
    == prefs ==
== prefs ==
        * uses the firefox pref framework
* uses the firefox pref framework
        * uses a comma delimited pref for complex data type
* uses a comma delimited pref for complex data type


    == overlays ==
== overlays ==
        * overlays many of the dialogs for it's own alerts/errors
* overlays many of the dialogs for it's own alerts/errors
        * toolbar overlay for main app
* toolbar overlay for main app
        * overlays options
* overlays options


    == state ==
== state ==
        * extensive use of pref framework for storing state
* extensive use of pref framework for storing state


    == ajax ==
== ajax ==
        * uses straight XMLHTTPrequest
* uses straight XMLHTTPrequest
    == logging ==
== logging ==
        * uses log4moz
* uses log4moz


= firebug =
= firebug =
    == general ==
== general ==
        * functionality enhancement (provides introspection)
* functionality enhancement (provides introspection)
        * localized
* localized


    == installation ==
== installation ==
    == prefs ==
== prefs ==
        * uses firefox prefs
* uses firefox prefs
    == overlays ==
== overlays ==
    == state ==
== state ==
    == ajax ==
== ajax ==
    == logging ==
== logging ==


= flashgot =
= flashgot =
    == general ==
== general ==
    == installation ==
== installation ==
    == prefs ==
== prefs ==
    == overlays ==
== overlays ==
    == state ==
== state ==
    == ajax ==
== ajax ==
    == logging ==
== logging ==


= greasemonkey =
= greasemonkey =
    == general ==
== general ==
        * uses components
* uses components
        * preloads common scripts into namespace using component
* preloads common scripts into namespace using component
        * has a whole animation library that SHOULD just be jquery
* has a whole animation library that SHOULD just be jquery
        * custom check for updates to greasemonkey
* custom check for updates to greasemonkey
        * uses rdf, loads all prefs up at start to get settings
* uses rdf, loads all prefs up at start to get settings
        * even uses rdf on it's side to check versions
* even uses rdf on it's side to check versions
        * domcontent loaded observer used, seems common everywhere, maybe do this for each extension by default
* domcontent loaded observer used, seems common everywhere, maybe do this for each extension by default
        * functions litter global namespace
* functions litter global namespace
        * custom pref manager
* custom pref manager
        * custom scripts for reading/writing local files
* custom scripts for reading/writing local files
        * from comments looks like code here is pre ff v 1.0.1
* from comments looks like code here is pre ff v 1.0.1
        * custom remote data requested (ajax shitz, xml in their case)
* custom remote data requested (ajax shitz, xml in their case)
        * 3 custom .xpt typelib files files
* 3 custom .xpt typelib files files
        * eventlistener abstraction layer
* eventlistener abstraction layer


= IE Tab =
= IE Tab =
    == general ==
== general ==


        * custom pref manager IN component
* custom pref manager IN component
        * other helper functions also in component
* other helper functions also in component
        * registers itself to namespace
* registers itself to namespace
        * uses "windows*registry*key" service, didn't know that existed
* uses "windows*registry*key" service, didn't know that existed
        * has own plugin DLL to link in ie
* has own plugin DLL to link in ie
        * also uses domloaded
* also uses domloaded
        * calls pref service again in other areas (doesn't use abstraction)
* calls pref service again in other areas (doesn't use abstraction)
        * 2nd pref abstraction!!  WTF
* 2nd pref abstraction!!  WTF
        * so it looks like NEITHER is a full abstraction layer, though some functions appear in both, many don't.  so one has a setboolpref while the other has a getboolpref
* so it looks like NEITHER is a full abstraction layer, though some functions appear in both, many don't.  so one has a setboolpref while the other has a getboolpref
        * eventlistener abstraction layer
* eventlistener abstraction layer


= ImageTweak =
= ImageTweak =


    == general ==
== general ==
        * obvious custom logger
* obvious custom logger
        * domloaded
* domloaded
        * custom get pref (not full manager)
* custom get pref (not full manager)


= Interclue =
= Interclue =


    == general ==
== general ==
        * uses RDF format internally
* uses RDF format internally
        * uses annoying register stylesheet methods (I had issues with this in Puff)
* uses annoying register stylesheet methods (I had issues with this in Puff)
        * domloaded
* domloaded
        * custom logging
* custom logging
        * custom pref manager
* custom pref manager
        * writes to local file
* writes to local file
        * should you be allowing tracking of all mouse movement?
* should you be allowing tracking of all mouse movement?
        * custom ajax class
* custom ajax class
        * has js linked to html files that are outside the namespace
* has js linked to html files that are outside the namespace
        * INTERESTING USE of window.opener (unfortunately utilizing iframes) to keep scope by copying interclue to window.interclue and using hte refence to hte window that opened current window
* INTERESTING USE of window.opener (unfortunately utilizing iframes) to keep scope by copying interclue to window.interclue and using hte refence to hte window that opened current window
        * lots of minified code (bastards), namely klib.js and loadclues.js
* lots of minified code (bastards), namely klib.js and loadclues.js
        * seems they minified most of cluecore
* seems they minified most of cluecore


= NoScript =
= NoScript =
    == general ==
== general ==
        * uses rdf for ui info
* uses rdf for ui info
        * various domloaded
* various domloaded
    == prefs ==
== prefs ==
        * crazy amount of preferences (~100 on install)
* crazy amount of preferences (~100 on install)
        * abstracts prefs interfaces
* abstracts prefs interfaces
    == overlays ==
== overlays ==
        * giant overlay file that uses the component with small other files that use it
* giant overlay file that uses the component with small other files that use it
    == components ==
== components ==
        * okay so tons of classes in here, essentially everything is in the component
* okay so tons of classes in here, essentially everything is in the component
        * uses component (8200 line file!!)
* uses component (8200 line file!!)
    == state ==
== state ==
        * uses file read/write
* uses file read/write


= StumbleUpon =
= StumbleUpon =
    == general ==
== general ==
        * most in one long file of many functions, tons of namespace polution
* most in one long file of many functions, tons of namespace polution
        * sets a TON of "global" variables using su_xxx
* sets a TON of "global" variables using su_xxx
        * listens to almost every event, including domloaded of course
* listens to almost every event, including domloaded of course


    == components ==
== components ==
        * uses component for helper functions, including logging and custom ajax
* uses component for helper functions, including logging and custom ajax
    == prefs ==  
== prefs ==  
        * uses prefs and the sqlite db
* uses prefs and the sqlite db
    == state ==
== state ==
        * has giant database abstraction layer
* has giant database abstraction layer
        * csv file to populate db and sql file to build db
* csv file to populate db and sql file to build db
    == overlays ==
== overlays ==
        * 20k stumbleuponoverlay file that is largely one dimensional with just functions
* 20k stumbleuponoverlay file that is largely one dimensional with just functions


= Tab Mix =
= Tab Mix =
    == general ==
== general ==
        * sets about 200 preferences
* sets about 200 preferences
        * doesn't seem to have a pref abstraction layer
* doesn't seem to have a pref abstraction layer
        * whole design seems to be very modular, lots of instances of code appearing to be ripe for abstraction but isnt because of scoping issues
* whole design seems to be very modular, lots of instances of code appearing to be ripe for abstraction but isnt because of scoping issues
        * has a "session manager" for storing current data that uses RDF, man is this painful
* has a "session manager" for storing current data that uses RDF, man is this painful


= Video Download Helper =
= Video Download Helper =
    == general ==
== general ==
        * uses built in xml parser loaded
* uses built in xml parser loaded
        * really impressive layout
* really impressive layout
            - seems the brunt is in several components which are called by individual pages, so no namespace issues
** seems the brunt is in several components which are called by individual pages, so no namespace issues
    == Ajax ==
== Ajax ==
        * custom ajax
* custom ajax


    == State ==
== State ==
        * uses rdf to store data
* uses rdf to store data


    == Pref ==
== Pref ==
        * custom pref layer
* custom pref layer


= Web Developer =
= Web Developer =
    == general ==
== general ==
        * has js and css files in content folder
* has js and css files in content folder
        * has an entire common folder with helpers to do almost everthing
* has an entire common folder with helpers to do almost everthing
            - including pref and history managers, stylesheet managers, cookies, files, ajax
** including pref and history managers, stylesheet managers, cookies, files, ajax


    == prefs ==
== prefs ==
        * preference abstraction functions
* preference abstraction functions


= WOT =
= WOT =
    == general ==
== general ==
        * interesting use of load/unload listeners in almost all js files.  they call core to start, including all the code, so i assume they just set these listeners to run checks when a new page loads.
* interesting use of load/unload listeners in almost all js files.  they call core to start, including all the code, so i assume they just set these listeners to run checks when a new page loads.
 
== Ajax ==
* custom ajax
* built in api to easily deal with requests (i assume to it's server about a pages reliability)
== Prefs ==
* uses a config.js to store a ton of constants used throughout the app
* uses a prefs abstraction
== Debuging ==


    == Ajax ==
* inline error handling just catching and dump()
        * custom ajax
== State ==
        * built in api to easily deal with requests (i assume to it's server about a pages reliability)
* looks like they are using prefs beyond how they should
    == Prefs ==
** ie storing delimited data (there stuff is a little confusing and im tired so im not 100% sure)
        * uses a config.js to store a ton of constants used throughout the app
        * uses a prefs abstraction
    == Debuging ==
   
        * inline error handling just catching and dump()
    == State ==
        * looks like they are using prefs beyond how they should
            - ie storing delimited data (there stuff is a little confusing and im tired so im not 100% sure)

Revision as of 21:50, 19 January 2009

1-clickweather

general

  • toolbar extension
  • uses a JS import function to namespace javascript included from files
  • uses some complicated object heirarchies to manage prefs / config

prefs

  • uses it's own system to manage prefs
    • uses observer pattern to get updates (as opposed to listenting to the prefs observers)

overlays

  • basic statusbar overlay
    • popupset
  • uses windows for config/about/etc.

state

  • capture in saved xml files

ajax

  • wrote their own AJAX library to handle simple async requests

adblock plus

general

  • content filter
  • localized

prefs

  • uses the built in prefs tools and defaults

overlays

  • dialog for about
  • window for subscribing
  • sidebar

state

  • stores filters as a line deliminted file in the profile

ajax

  • handles it's own async calls with XMLHttpRequest() primitive
    • used for synchronizing subscriptions for filters

autopager

general

  • content enhancement
  • has an interesting auto-xpath generator for grabbing the links it needs

installation

  • handles install with file, lots of poking profile dir, registering content
  • option to install to profile :)

prefs

  • uses firefox supplied prefs framework
  • has a system to dynamically add the prefs file to prevent some of the weirdness in initializing new defaults

overlays

  • extensive use of sidebar, mostly as a container for what appears to be "page" elements
  • statusbar
  • does not use settings overlay, builds it's own UI for that

state

  • installation is handled seperately from everything else, involve file manipulation etc.

ajax

boost

general

  • content enhancement

prefs

  • uses firefox supplied prefs framework
  • does not use settings overlay, builds it's own UI for that
  • builds a library for dealing with prefs
    • wraps setting / getting
    • easily add / remove listeners

overlays

  • basic status bar overlay
  • prefs ui

state

ajax

  • has it's own library, doing something weird involving chrome security contexts.
    • /I/ think this is about adding in page elements that can be called into the chrome context, there's some work to sanitize content etc.

colorfultabs

general

  • ui enhancement

installation

  • handles install with file, lots of poking profile dir, registering content

prefs

  • uses firefox supplied prefs framework
  • uses settings overlay

overlays

  • basic status bar overlay
  • uses settings overlay

state

ajax

  • has it's own library, doing something weird involving chrome security contexts.
    • /I/ think this is about adding in page elements that can be called into the chrome context, there's some work to sanitize content etc.

ctrl-tab

general

  • ui enhancement

prefs

  • uses firefox supplied prefs framework

overlays

  • only the main overlay used to create a popupset that holds "tab images"

download statusbar

general

  • statusbar
  • includes localization

prefs

  • uses firefox supplied prefs framework

overlays

  • status bar overlay
  • builds it's own window for managing prefs

downthemall

general

  • functionality enhancement
  • includes localization

installation

  • handles install with file, lots of poking profile dir, registering content

prefs

  • uses firefox supplied prefs framework

overlays

  • status bar overlay
  • builds it's own window for managing prefs

state

ajax

fast_video_download

general

  • toolbar extension
  • is localized

installation

prefs

  • uses the firefox supplied prefs framework
  • and makes use of the options ui

overlays

  • uses the options overlay

state

ajax

  • uses raw XMLHTttpRequest object

febe

general

  • functionality enhancement (provides backups of firefox profile)
  • is localized

installation

  • checks for first install and initializes
  • double checks default prefs
  • checks intialization of prefs to prevent exception calls

prefs

  • uses the firefox supplied prefs framework

overlays

  • lots of use of dialog boxes to present data to users
    • including it's own error and alert and confirm boxes (odd)

state

ajax

fire_fm

general

  • toolbar extension
  • uses flash for playing files

installation

prefs

  • uses the firefox pref framework
  • uses a comma delimited pref for complex data type

overlays

  • overlays many of the dialogs for it's own alerts/errors
  • toolbar overlay for main app
  • overlays options

state

  • extensive use of pref framework for storing state

ajax

  • uses straight XMLHTTPrequest

logging

  • uses log4moz

firebug

general

  • functionality enhancement (provides introspection)
  • localized

installation

prefs

  • uses firefox prefs

overlays

state

ajax

logging

flashgot

general

installation

prefs

overlays

state

ajax

logging

greasemonkey

general

  • uses components
  • preloads common scripts into namespace using component
  • has a whole animation library that SHOULD just be jquery
  • custom check for updates to greasemonkey
  • uses rdf, loads all prefs up at start to get settings
  • even uses rdf on it's side to check versions
  • domcontent loaded observer used, seems common everywhere, maybe do this for each extension by default
  • functions litter global namespace
  • custom pref manager
  • custom scripts for reading/writing local files
  • from comments looks like code here is pre ff v 1.0.1
  • custom remote data requested (ajax shitz, xml in their case)
  • 3 custom .xpt typelib files files
  • eventlistener abstraction layer

IE Tab

general

  • custom pref manager IN component
  • other helper functions also in component
  • registers itself to namespace
  • uses "windows*registry*key" service, didn't know that existed
  • has own plugin DLL to link in ie
  • also uses domloaded
  • calls pref service again in other areas (doesn't use abstraction)
  • 2nd pref abstraction!! WTF
  • so it looks like NEITHER is a full abstraction layer, though some functions appear in both, many don't. so one has a setboolpref while the other has a getboolpref
  • eventlistener abstraction layer

ImageTweak

general

  • obvious custom logger
  • domloaded
  • custom get pref (not full manager)

Interclue

general

  • uses RDF format internally
  • uses annoying register stylesheet methods (I had issues with this in Puff)
  • domloaded
  • custom logging
  • custom pref manager
  • writes to local file
  • should you be allowing tracking of all mouse movement?
  • custom ajax class
  • has js linked to html files that are outside the namespace
  • INTERESTING USE of window.opener (unfortunately utilizing iframes) to keep scope by copying interclue to window.interclue and using hte refence to hte window that opened current window
  • lots of minified code (bastards), namely klib.js and loadclues.js
  • seems they minified most of cluecore

NoScript

general

  • uses rdf for ui info
  • various domloaded

prefs

  • crazy amount of preferences (~100 on install)
  • abstracts prefs interfaces

overlays

  • giant overlay file that uses the component with small other files that use it

components

  • okay so tons of classes in here, essentially everything is in the component
  • uses component (8200 line file!!)

state

  • uses file read/write

StumbleUpon

general

  • most in one long file of many functions, tons of namespace polution
  • sets a TON of "global" variables using su_xxx
  • listens to almost every event, including domloaded of course

components

  • uses component for helper functions, including logging and custom ajax

prefs

  • uses prefs and the sqlite db

state

  • has giant database abstraction layer
  • csv file to populate db and sql file to build db

overlays

  • 20k stumbleuponoverlay file that is largely one dimensional with just functions

Tab Mix

general

  • sets about 200 preferences
  • doesn't seem to have a pref abstraction layer
  • whole design seems to be very modular, lots of instances of code appearing to be ripe for abstraction but isnt because of scoping issues
  • has a "session manager" for storing current data that uses RDF, man is this painful

Video Download Helper

general

  • uses built in xml parser loaded
  • really impressive layout
    • seems the brunt is in several components which are called by individual pages, so no namespace issues

Ajax

  • custom ajax

State

  • uses rdf to store data

Pref

  • custom pref layer

Web Developer

general

  • has js and css files in content folder
  • has an entire common folder with helpers to do almost everthing
    • including pref and history managers, stylesheet managers, cookies, files, ajax

prefs

  • preference abstraction functions

WOT

general

  • interesting use of load/unload listeners in almost all js files. they call core to start, including all the code, so i assume they just set these listeners to run checks when a new page loads.

Ajax

  • custom ajax
  • built in api to easily deal with requests (i assume to it's server about a pages reliability)

Prefs

  • uses a config.js to store a ton of constants used throughout the app
  • uses a prefs abstraction

Debuging

  • inline error handling just catching and dump()

State

  • looks like they are using prefs beyond how they should
    • ie storing delimited data (there stuff is a little confusing and im tired so im not 100% sure)