All that stuff, could be summarized in these few lines, sorry if I am late
:D

;jQuery.fn.extend({
    // Andrea Giammarchi - Mit Style Licence - V0.1f
    If:function(fn){
        var $ = this.filter(fn);
        $.__If__ = this.filter(function(){return !~$.index(this)});
        return $;
    },
    ElseIf:function(fn){
        var $ = this.__If__.filter(fn);
        $.__If__ = this.__If__.filter(function(){return !~$.index(this)});
        return $;
    },
    Else:function(){
        return this.__If__;
    },
    Do:jQuery.fn.each
});

Best Regards

On Mon, Oct 27, 2008 at 1:20 PM, Andrea Giammarchi <
[EMAIL PROTECTED]> wrote:

> Removed superflous code, last version on my 
> blog<http://webreflection.blogspot.com/>,
> but I probably gonna create a plugin into jQuery site, if anybody is
> interested about it.
>
> Regards
>
>
> On Mon, Oct 27, 2008 at 12:31 PM, Andrea Giammarchi <
> [EMAIL PROTECTED]> wrote:
>
>> the output ...
>>
>>
>> <body>
>> <div>1</div>
>> <div>2</div>
>> <div>3</div>
>> <div>4</div>
>> <div>5</div>
>> <div>6</div>
>> <div>7</div>
>> <div>8</div>
>> </body>
>>
>> that's it :D
>>
>>
>> On Mon, Oct 27, 2008 at 12:30 PM, Andrea Giammarchi <
>> [EMAIL PROTECTED]> wrote:
>>
>>> jQuery plugin ... Ariel, just try if you like, forget if you don't.
>>>
>>> I am sure it is possible to optimize the procedure, rught now I am
>>> focused on its functionality.
>>>
>>> (function($){ // Andrea Giammarchi Ultra Chain Suggestion
>>> var slice   = Array.prototype.slice;
>>> $.fn.extend({
>>> If:function(fn){
>>>     var _filter = this.filter(fn);
>>>     _filter._filter = this.filter(function(){return
>>> !~_filter.index(this)});
>>>     _filter._parent = this;
>>>     _filter._removed = _filter;
>>>     return _filter;
>>> },
>>> ElseIf:function(fn){
>>>     var filter  = function(){return !~_filter.index(this)},
>>>         _filter = this,
>>>         self = this._parent.filter(filter);
>>>     _filter = self.filter(fn);
>>>     _filter._filter = self.filter(filter);
>>>     _filter._parent = this._parent;
>>>     _filter._removed = $(slice.call(this._removed,
>>> 0).concat(slice.call(_filter, 0)));
>>>     return _filter;
>>> },
>>> Else:function(){
>>>     var _filter = this._removed;
>>>     return this._parent.filter(function(){return !~_filter.index(this)});
>>> },
>>> Do:function(fn){
>>>     this.each(fn);
>>>     return  this;
>>> }
>>> })})(jQuery);
>>>
>>> // Example
>>> $(function(){
>>>     $("div")
>>>         .If(function(){return $(this).text() == "3" || $(this).text() ==
>>> "5"})
>>>             .text("match the 3 or 5 check")
>>>         .ElseIf(function(){return $(this).text() & 1})
>>>             .text("odd numbers")
>>>         .ElseIf(function(){return $(this).text() == 2})
>>>             .Do(function(){
>>>                 $(this).text("text is equal 2");
>>>             })
>>>         .ElseIf(function(){return $(this).text() == 6})
>>>             .text("match the 6 condition")
>>>         .Else()
>>>             .text("this is 4 or 8");
>>>     ;
>>> })
>>>
>>> Best Regards,
>>> Andrea
>>>
>>>
>>>
>>> On Mon, Oct 27, 2008 at 11:09 AM, Andrea Giammarchi <
>>> [EMAIL PROTECTED]> wrote:
>>>
>>>> Ok, test completed, this is the idea as working example:
>>>>
>>>> [snip]
>>>> Array.prototype.If = function(callback){
>>>>     var _filter = this.filter(callback);
>>>>     _filter._filter = this.filter(function(value){return
>>>> !~_filter.indexOf(value)});
>>>>     _filter._parent = this;
>>>>     _filter._removed = _filter;
>>>>     return _filter;
>>>> };
>>>> Array.prototype.ElseIf = function(callback){
>>>>     var _filter = this,
>>>>         self = this._parent.filter(function(value){return
>>>> !~_filter.indexOf(value)});
>>>>     _filter = self.filter(callback);
>>>>     _filter._filter = self.filter(function(value){return
>>>> !~_filter.indexOf(value)});
>>>>     _filter._parent = this._parent;
>>>>     _filter._removed = this._removed.concat(_filter);
>>>>     return _filter;
>>>> };
>>>> Array.prototype.Else = function(callback){
>>>>     var _filter = this._removed;
>>>>     return this._parent.filter(function(value){return
>>>> !~_filter.indexOf(value)});
>>>> };
>>>> Array.prototype.Do = function(){
>>>>     alert("Value: " + this);
>>>>     return this;
>>>> };
>>>>
>>>> ([1,2,3,4,5,6,7,8])
>>>>     .If(function(v){return v === 3 || v === 5})
>>>>         .Do() // 3, 5
>>>>     .ElseIf(function(v){return v & 1})
>>>>         .Do() // 1, 7
>>>>     .ElseIf(function(v){return v === 2})
>>>>         .Do() // 2
>>>>     .ElseIf(function(v){return v === 6})
>>>>         .Do() // 6
>>>>     .Else()
>>>>         .Do() // 4, 8
>>>> ;
>>>>
>>>> That's it, a "chain nightmare" but at the end an expected result in
>>>> ultra chain. Dunno about performances, it is more an experiment than
>>>> something else, at least it works, so get as is :-)
>>>>
>>>> Kind Regards
>>>>
>>>>
>>>> On Mon, Oct 27, 2008 at 10:32 AM, Andrea Giammarchi <
>>>> [EMAIL PROTECTED]> wrote:
>>>>
>>>>> Sorry Ariel, there is a logical chain error in my example, I'll prepare
>>>>> a better one with a couple of Array prototypes and you'll deciede if it is
>>>>> interesting or not, is it fine?
>>>>>
>>>>> Regards
>>>>>
>>>>>
>>>>> On Mon, Oct 27, 2008 at 9:21 AM, Andrea Giammarchi <
>>>>> [EMAIL PROTECTED]> wrote:
>>>>>
>>>>>> Ariel, thanks for the link, i quickly read it and it seems other
>>>>>> people thought about that idea before.
>>>>>> Anyway, my vision is more semantic and less complicated, since with a
>>>>>> callback inside the if you can define many expressions, do operations, 
>>>>>> and
>>>>>> then return true or false.
>>>>>>
>>>>>> What I mean is that your if().hasClass is limited to one or more
>>>>>> jQuery operation, while if(callbackInScope) has no limits at all and 
>>>>>> inside
>>>>>> you can return $(this).hasClass("whatever").
>>>>>>
>>>>>> In any case and for performances improvement, for the if else I would
>>>>>> create a jQuery istance instead of callback
>>>>>>
>>>>>> this.if = jQuery(this);
>>>>>> this.if._condition = 1; // as first condition to evaluate (make
>>>>>> if(this._condition) check simpler)
>>>>>>
>>>>>> so te call will be something like
>>>>>> $(elm).on("click")
>>>>>>     .if
>>>>>>         .hasClass('foo')
>>>>>>         .then()..
>>>>>>
>>>>>> As I said before, this implementation suffer about And or Or
>>>>>> possibilities
>>>>>>
>>>>>> $(elm).on("click")
>>>>>>     .if
>>>>>>         .hasClass('foo')
>>>>>>         .And
>>>>>>         .text()
>>>>>>         .then()..
>>>>>>
>>>>>> as last limitation, you cannot compare properties:
>>>>>>
>>>>>> if.text() == "something"
>>>>>>
>>>>>> for this reason I suppose that the callback inside the
>>>>>> If(whateverCallback) that as implementation will be simply a filter 
>>>>>> inside
>>>>>> the method if
>>>>>> something like
>>>>>>
>>>>>> If:function(fn){ // set first list of elements
>>>>>>     this._succeded = jQuery(this).filter(fn);
>>>>>>     return this._succeded;
>>>>>> },
>>>>>> ElseIf:function(fn){ // exclude precedent elements
>>>>>>     var _succeded = this._succeded,
>>>>>>          result = jQuery(this).filter(fn).filter(function(i,
>>>>>> elm){return ~_succeded.indexOf(elm)});
>>>>>>     this._succeded =
>>>>>> this._succeded.concat(Array.prototype.slice.call(result, 0));
>>>>>>     return result;
>>>>>> },
>>>>>> Else:function(){ // return only last list of elements
>>>>>>     var _succeded = this._succeded;
>>>>>>     returh this.filter(function(i, elm){return
>>>>>> ~_succeded.indexOf(elm)});
>>>>>> }
>>>>>>
>>>>>> I did not test above code, it is only to demonstrate the ligic behind.
>>>>>> It does not seem to be that complicated but for sure it is more intense 
>>>>>> for
>>>>>> CPU and could be more problematic for mem leaks
>>>>>>
>>>>>> Regards
>>>>>>
>>>>>>
>>>>>> On Sun, Oct 26, 2008 at 11:42 PM, Ariel Flesler <[EMAIL PROTECTED]>wrote:
>>>>>>
>>>>>>> Andrea
>>>>>>>
>>>>>>> The if/else thing seems to make the code larger I think. If you need
>>>>>>> to pass a lambda to If, then another to else of elseIf...
>>>>>>>
>>>>>>> It's an interesting idea and it came up before. I'm not so sure it's
>>>>>>> brings clarity to code, though.
>>>>>>>
>>>>>>> Maybe .if().hasClass('foo').then()... but uhmm... seems to
>>>>>>> complicated.
>>>>>>>
>>>>>>> Here you have the old post I mentioned, maybe it gives you some cool
>>>>>>> idea :)
>>>>>>>
>>>>>>> http://groups.google.com/group/jquery-en/browse_thread/thread/43a69fa41f6e7089/6cebfee318992fe6
>>>>>>>
>>>>>>> Brandon disagreed back then as well... that's a good thing I think :D
>>>>>>>
>>>>>>>
>>>>>>
>>>>>
>>>>
>>>
>>
>

--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"jQuery Development" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/jquery-dev?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to