Another possible approach: In a model or module:
def flash(message, classes=None): return CAT(message, SCRIPT('jQuery(".flash").addClass("%s");' % classes) if classes else '') Then to create a flash message: response.flash = flash('Congratulations, it worked!', 'success') Anthony On Thursday, November 20, 2014 7:19:52 AM UTC-5, Leonel Câmara wrote: > > Ok here it goes, brace yourself. > > First in layout.html replace the original flash div with: > > <div class="{{='flash alert alert-dismissable ' + ('alert-' + > (response.flash_status or 'default'))}}">{{if > response.flash:}}{{=response.flash}}{{pass}}</div> > > > This will be enough to put some color in it using response.flash_status in > a controller for example: > > response.flash = 'Form Accepted' > response.flash_status = 'success' > > > However what about session.flash and session.flash_status? You can add > this to your models: > > if session.flash_status: > response.flash_status = session.flash_status > del session.flash_status > > > Ok now we have it working with session and response, however what about > when we get a flash from an ajax action that has a response.flash (for > instance a form in a loaded component). This one is slightly more > complicated and you need to add this to your models: > > def ajax_flash_status(view): > import urllib2 > if response.flash: > if not response.flash_status: > response.flash_status = 'default' > response.headers['web2py-component-flash-status'] = \ > urllib2.quote('alert-' + xmlescape(response.flash_status)\ > .replace('\n','')) > return view > > > if request.ajax: > response.postprocessing.append(ajax_flash_status) > > This is not enough, the only thing we did is make sure the status goes in > a response header if we're answering an ajax request. Now we need to use > it. To do that, we need to "patch" web2py.js, so you need to create a > flashstatus.js file in your static folder and make sure it's included in > your layout.html *AFTER* web2py.js. There, you put the following code: > > $.web2py.after_ajax = function (xhr) { > /* called whenever an ajax request completes */ > var command = xhr.getResponseHeader('web2py-component-command'); > var flash = xhr.getResponseHeader('web2py-component-flash'); > var flash_status = xhr.getResponseHeader( > 'web2py-component-flash-status'); > if(command !== null) { > eval(decodeURIComponent(command)); > } > if(flash) { > $.web2py.flash(decodeURIComponent(flash), decodeURIComponent( > flash_status)); > } > }; > > > $.web2py.flash = function (message, status) { > var flash = $('.flash'); > $.web2py.hide_flash(); > > > flash.html(message); > if (typeof status !== 'undefined') { > flash.removeClass('alert-default alert-success alert-info > alert-warning alert-danger').addClass(status); > } > if(flash.html()) { > flash.append( > '<button type="button" class="close" data-dismiss="alert">' + > '<span aria-hidden="true">×</span><span class="sr-only">' + > w2p_ajax_close_message + > '</span>' + > '</button>' > ).slideDown(); > } > }; > > > Aaaand you're done! > > > I should probably make a plugin out of this to simplify stuff. > > > > -- Resources: - http://web2py.com - http://web2py.com/book (Documentation) - http://github.com/web2py/web2py (Source code) - https://code.google.com/p/web2py/issues/list (Report Issues) --- You received this message because you are subscribed to the Google Groups "web2py-users" group. To unsubscribe from this group and stop receiving emails from it, send an email to web2py+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.