Talk:FUEL/0.1/Plan
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)