Проблема синхронизации уведомлений типа Growl - PullRequest
0 голосов
/ 25 июля 2011

Так что я использую Mootools с плагином JS_Growl , который работает хорошо, но я не могу заставить уведомление задерживаться достаточно долго, прежде чем страница будет полезна.

Пример здесь…

Есть ли какая-то обратная связь с плагином Growl, чтобы, когда уведомление "сделано", я мог затем выполнить перенаправление?

Или, возможно, есть какой-то способ почувствовать, когда я вернулся на страницу после успешной отправки, чтобы затем поднять уведомление? Вы можете видеть, что я отправляю и идентификатор товара на страницу корзины покупок, которая затем отправляет меня обратно.

Любые предложения будут с благодарностью. Мой Javascript очень прост, поэтому наглядные примеры кода будут идеальными.

спасибо заранее!

1 Ответ

0 голосов
/ 26 июля 2011

Вы читали исходный код?Это действительно очень старый плагин, спешно собранный и исправленный, чтобы он работал с MooTools 1.2.Они даже не используют класс.Следовательно, никакие события не смешиваются.Никаких обратных вызовов тоже нет.

/*
JS_Growl Mootools based notifier
Version 0.2
Developed and maintained by Carlos Ouro
http://techtrouts.com
*/
JS_Growl={
    //user callable properties / funcionalities
    notify:function(str){
        if(!this._v.initiated) this._a.init();
        var el=new Element('div',{
            'class':(Browser.Engine.name=='trident' && Browser.Engine.version<5)?'JS_Growl_notify_IE6':'JS_Growl_notify',
            'html':str
        });
        el.inject(this._o.container);
        var fx= new Fx.Morph(el, {
            'duration': 'short'
        });
        fx.set({
            'opacity':0,
            'display':'block'
        });
        fx.start({
            'opacity':[0,1]
        });
        setTimeout(function(){
            fx.start({
                'opacity':[1,0]
            }).chain(function(){
                this.options.durtion='long';
                this.start({
                    'height':0,
                    'padding-top':0,
                    'padding-bottom':0,
                    'margin-top':0,
                    'margin-bottom':0
                }).chain(function(){
                    el.destroy();
                });
            });
        }, 2500);
    },

    //internal structure "à la fallforward ( http://fallforwardgame.com )"
    _v:{
        initiated:false
    },
    _a:{
        init:function(){
            JS_Growl._o.container=new Element('div', {'id':'JS_Growl_container'});
            JS_Growl._o.container.inject(document.body);
            JS_Growl._v.initiated=true;
            if(Browser.Engine.name=='trident' && Browser.Engine.version<5){                         
                //position "fixed"
                JS_Growl._o.container.setStyle({'position':'absolute'});
                JS_Growl._a.ie6_pos();
                window['addEvent']('scroll', JS_Growl._a.ie6_pos);
                window['addEvent']('resize', JS_Growl._a.ie6_pos);
            }
        },
        ie6_pos:function(){
            JS_Growl._o.container.setStyles({'top':Window.getScrollTop()+'px', 'left':Window.getWidth()+'px'});
        }
    },
    _o:{
        "container":null
    }
}

, учитывая, насколько это мало, рефакторинг, чтобы сделать то, что вам нужно, должен занимать считанные минуты - 10 - 15 минут или около того.

Однако вы можете исправить это намного проще - остановите событие отправки при нажатии кнопки «Добавить в корзину».подождите, пока уведомление не появится, скажем, 2,5 секунды.повторите или измените location.href

вот список похожих и более гибких плагинов на моей голове:

веселись.

...