// Error (no support for rangeCount) That's because I only tested in Chrome and apparently, in Firefox, they have put 0 as rangeCount in the prototype so that a selection with no range doesn't need its own rangeCount property... Anyway now it does work. https://github.com/xavierm02/XJSAccessors/commit/b6779a387c0ac78ac30483de9ef2ffa48753f696
I just added another thing to XJSAccessors: https://github.com/xavierm02/XJSAccessors/commit/55169a33125882b1b57b55fae87d597cee971447 It lets you make the storage inherit from the object you like. And I just used it in XJSSelection: https://github.com/xavierm02/XJSAccessors/commit/b4a5135ec7b8323fdc3a32a472f7b05eb8e40a9a I also updated to get it to work in IE: https://github.com/xavierm02/XJSAccessors/commit/bb6d9578d7192b63ca83cc2b104d1b21273a15c8 Now what happens is this: - The script looks if a selection has a rangeCount attribute and if it does does nothing - If it doesn't, is adds a getter for it And this is the whole point of those getters and setters: Some properties need to be calculated, others don't. When you use an object, do you want to have to remember which one is calculates and which one isn't? Certainly not (because you're a good guy and you cache it in a local variable anyway). You don't want to remember is it is selection.rangeCount or selection.getRangeCount(). You just have a simple syntax, the same for all properties, calculated of "static": selection.get( 'rangeCount' ). You'll tell me there is the solution of keeping only selection.getRangeCount( ) but then, you can't use for in and if you ever need a dynamic name selection[ name ], you'll have to handle putting it uppercase... Thanks for you interest btw :) ----------------------------------------------------------------- Future plans: - Allow sharing the getters, setters and others objects (except storage) so that they are created only once if a class (~ Constructor) uses them several times (e.g. XJSSelection) - Allow binding certains properties to properties of others objects. This would be used in XJSSelection by removing the inheritance of selection by storage but just binding rangeCount. This way, you wouldn't be able to access browser specific properties of the selection. On Tue, Aug 30, 2011 at 9:10 PM, Scott Sauyet <[email protected]> wrote: > Xavier MONTILLET wrote: >> Xavier MONTILLET wrote: >>> Here is the code on Github: >>> https://github.com/xavierm02/XJSAccessors/blob/master/XJSAccessors.js >> And here is a usecase: >> https://github.com/xavierm02/XJSAccessors/blob/master/XJSSelection.js > > Maybe I'm simply missing the point, but I'm not convinced. It seems > to me that you are using XJSAccessors in order to help build this API > for XJSSelection: > > Chrome: > ======= > var x = new XJSSelection(); > x.get('selection'); // DOMSelection {...} > x.get('range', 0); // XJSRange {...} > x.get('range', 0).get('range'); // Range {...} > x.get('rangeCount'); // 1 > > FF: > === > var x = new XJSSelection(); > x.get('selection'); // Selection {...} > x.get('range', 0); // Error (no support for rangeCount) > x.get('rangeCount'); // Error (no support for rangeCount) > > But that API seems much more complicated than this: > > Chrome: > ======= > var x = new XJSSelection(); > x.getSelection(); // DOMSelection {...} > x.getRange(0); // Range {...} > x.getRangeCount(); // 1 > > FF: > === > var x = new XJSSelection(); > x.getSelection(); // Selection {...} > x.getRange(0); // Error (no support for rangeCount) > x.getRangeCount(); // Error (no support for rangeCount) > > And the code that uses these accessors is more complicated than the > code that doesn't use them, at least in my simple-minded test: > > Original: http://scott.sauyet.com/Javascript/Test/2011-08-30a/ > Reworked: http://scott.sauyet.com/Javascript/Test/2011-08-30c/ > > In either of these, you can load the page, select a range, and enter > `test()` in the console. > > The reworked version seems to provide the same facilities without > exposing any unwanted implementation details, using shorter, cleaner > code. That's why I haven't yet seen the benefits of your accessors. > What am I missing? > > -- Scott > > > -- > To view archived discussions from the original JSMentors Mailman list: > http://www.mail-archive.com/[email protected]/ > > To search via a non-Google archive, visit here: > http://www.mail-archive.com/[email protected]/ > > To unsubscribe from this group, send email to > [email protected] > -- To view archived discussions from the original JSMentors Mailman list: http://www.mail-archive.com/[email protected]/ To search via a non-Google archive, visit here: http://www.mail-archive.com/[email protected]/ To unsubscribe from this group, send email to [email protected]
