: Etherpad users! We are developing an extension that will allow you to create pages from etherpads quickly and easily. Please visit our sandbox and help us test it.


From MozillaWiki
Jump to: navigation, search

This seems interesting. A couple of points:

  • Please do this in a Toolkit way, not in a Browser way. That is, I should be able to use the same simplified API in Thunderbird and/or any Toolkit (XULRunner) app. If this is not possible, extension devs will keep relying on existing (complicated) APIs because those do provide that compatibility.
  • Have a look at some existing implementations. For example, ChatZilla/Venkman wrap preferences in a way much like what you describe, though there's more of a sacrifice made there to achieve ease of use by doing a less lightweight implementation. See http://lxr.mozilla.org/seamonkey/source/extensions/irc/js/lib/pref-manager.js

I'm also curious on how you would implement the Service thing. AFAICT, it would be impractical to keep all existing services around on an object - that is, it'd create a bunch of them the JS probably never needs. Implementing this using getters means you keep re-getting the service if you use the API like the example does. (ie, Service.Foo.stuff(bar); Service.Foo.unstuff(bar); ) This would probably be slow(er). Or so I'd presume, I haven't tested any of this.

Good luck whatever you do! :-) GijsKruitbosch 23:38, 7 January 2007 (PST)

Re:Preferences Lightning just wraps the getting/setting of prefs, if you're looking for something more lightweight: http://landfill.mozilla.org/mxr-test/mozilla/source/calendar/resources/content/calendarUtils.js#150 (You could even typeof(aValue) to avoid an extra argument for setPref().) -jminta

Regarding the services, I was thinking about a singleton pattern to cache the service after the first "get":

// somewhere in the impl
  _os : null,

  Observer() : function() {
    if (_os == null) {
      // get the service from XPCOM
    return _os;

Thanks for the feedback and ideas. Keep it coming! MarkFinkle 19:30, 9 January 2007 (PST)

this should work without any mess:

function tempProxy(obj, prop, fn){
   obj.__defineGetter__(prop, function(){
       delete this[prop];
       return this[prop] = fn();});

--Jasonson 02:50, 17 July 2007 (PDT)