Labs/Extensions2/Notes: Difference between revisions

From MozillaWiki
Jump to navigation Jump to search
No edit summary
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 ==
''' overlays '''
* basic statusbar overlay
* basic statusbar overlay
** popupset
** popupset
Line 15: Line 15:
* uses windows for config/about/etc.
* uses windows for config/about/etc.


== state ==
''' state '''
* capture in saved xml files
* capture in saved xml files


== ajax ==
''' ajax '''
* wrote their own AJAX library to handle simple async requests
* 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
Line 74: Line 74:
** 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
Line 241: Line 241:


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


* custom pref manager IN component
* custom pref manager IN component
Line 256: Line 256:
= ImageTweak =
= ImageTweak =


== general ==
''' general '''
* obvious custom logger
* obvious custom logger
* domloaded
* domloaded
Line 263: Line 263:
= 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)
Line 278: Line 278:


= 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
Line 316: Line 316:


= 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 ==
''' Ajax '''
* custom ajax
* custom ajax
* built in api to easily deal with requests (i assume to it's server about a pages reliability)
* built in api to easily deal with requests (i assume to it's server about a pages reliability)
== Prefs ==
''' Prefs '''
* uses a config.js to store a ton of constants used throughout the app
* uses a config.js to store a ton of constants used throughout the app
* uses a prefs abstraction
* uses a prefs abstraction
== Debuging ==
''' Debuging '''


* inline error handling just catching and dump()
* inline error handling just catching and dump()
== State ==
''' State '''
* looks like they are using prefs beyond how they should
* 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)
** ie storing delimited data (there stuff is a little confusing and im tired so im not 100% sure)

Revision as of 21:52, 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)