Thank so you so much for responding. I have checked in my code to github so people can see and have added some preliminary documentation in README.txt:
http://github.com/byrnereese/jquery-mtgreet/tree/master I spent the better part of my time before bed last night thinking about how I would approach this and I think I am beginning to settle on an approach. The tricky part is that the plugin needs to maintain some kind of session state from the server. This logic and state information is shared across all aspects/functions of the plugin. I am thinking that to initialize the plugin one would invoke a global static function like so: <script> $.movabletype( options ); </script> This would in effect stash the options array into the plugins shared context. Subsequently I could then invoke my functions as I normally would: <script> $.movabletype( options ); $(document).ready( function() { $('#comment-form').loggedIn( function() { $(this).show(); }); $('#comment-form').loggedOut( function() { $(this).hide(); }); $('#greeting').greet( greeting_options ); }); </script> Does that look right from a client side/developer stand point? Is that non-standard? Or should I implement a separate MT plugin that does nothing by manage state info and expose utility methods to the other plugins? Byrne On Apr 15, 2009, at 2:06 PM, Steven Black wrote: > > Interesting, Byrne. > > The first thing I always look-to is "A Plugin Development Pattern" by > Mike Alsup > http://www.learningjquery.com/2007/10/a-plugin-development-pattern > > Therein Mike has a few good ideas about handling options. I really > like how Mike keeps the options accessible, as opposed to settable > only upon call. That's one factor to consider here. > > For a variety of reasons, I would recommend against designing this as > one monolithic plugin. The jqGrid plugin is a good example of how a > loader can be used to include or exclude facets. > > Speaking of facets, I wouldn't get too deep into this without first > examining the jQuery Aspect Oriented Plugin -- > http://code.google.com/p/jquery-aop/ > -- because, by the sounds of it, this might be right-up your alley as > an approach. > > **--** Steve > > On Apr 15, 12:37 am, Byrne Reese <byrnere...@gmail.com> wrote: >> First, some background: >> >> I am one of the lead contributors to the Movable Type Open Source >> project and am currently engaged in writing a jquery plugin that >> would >> be used on all of the blogs the platform publishes. So far I have >> successfully written a surprisingly complex plugin that works like >> this: >> >> $('#greeting').greet( options ); >> >> Which would convert: >> >> <div id="greeting"></div> >> >> Into a message that would look like this: >> >> Welcome Byrne! (edit profile | logout) >> >> You get the idea. >> >> The options I need to pass into the plugin is pretty substantial so I >> won't bother you with the specifics. >> >> Here is my question: >> >> I want my plugin to surface multiple event handlers like the >> following: >> >> a) $('#id').greet( { loggedOutMessage: 'Welcome back %user! >> %logout' }); >> >> This is from the example above. >> >> b) $('#id').loggedIn( function(user) { $(this).show(); alert(u.name + >> ' logged in'); } ); >> >> This would be invoked when a user successfully logged in and would be >> invoked whenever a login event occurred (which happens mainly via >> Ajax). One use case for this function is to selective show an element >> that would otherwise be hidden if the user was logged out. >> >> c) $('#id').loggedOut( function() { $(this).hide(); } ); >> >> Similar to (b) above, but this of course would respond to a logout >> event. >> >> Ok, finally the question: I would like for all of the above use cases >> to be served by the same plugin. There is a lot of shared code >> between >> all three and a lot of shared config options between them. >> >> I would like to somehow initialize the system once with the same >> config options, but then subsequently invoke the loggedIn, loggedOut >> and greet functions on various elements. >> >> I guess I am just a little lost on the best way to do this and was >> wondering if there was any kind of best practice I should follow >> here. >> >> Not knowing a lot about how I *should* do it, here are some ideas I >> have for what the client code could look like: >> >> Idea 1: >> >> $.mtInit( global_options ); >> $(document).ready( function(){ >> $('#greet').greet( greet_specific_options );}); >> >> $('.hide_when_logged_out').loggedIn( function() { $ >> (this).show(); } ); >> $('.hide_when_logged_out').loggedOut( function() { $(this).hide >> (); } ); >> >> Idea 2: >> >> $.mtInit({ >> cookiePath: 'foo', >> cookieDomain: 'bar', >> cookieName: 'baz', >> onLoggedIn: function() { $('#greeting').greet(); }, >> onLoggedOut: function() { $('.hide_when_logged_out').hide(); } >> >> }); >> >> Does anyone have any thoughts to share on the best or better way to >> do >> this? > > --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "jQuery Development" group. To post to this group, send email to jquery-dev@googlegroups.com To unsubscribe from this group, send email to jquery-dev+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/jquery-dev?hl=en -~----------~----~----~----~------~----~------~--~---