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
-~----------~----~----~----~------~----~------~--~---

Reply via email to