Bivio::UI::HTML::Widget::ScriptOnly
# Copyright (c) 2001 bivio Software, Inc. All rights reserved. # $Id$ package Bivio::UI::HTML::Widget::ScriptOnly; use strict; use Bivio::Base 'Bivio::UI::Widget'; # C<Bivio::UI::HTML::Widget::ScriptOnly> java script only widget rendering. # # # # widget : Bivio::UI::Widget (required) # # The widget to render when javascript is present. # # alt_widget : Bivio::UI::Widget [] # # The widget which is rendered if javascript is not present. my($_IDI) = __PACKAGE__->instance_data_index; sub initialize { # (self) : undef # Preparse the widget during startup. my($self) = @_; $self->get('widget')->put(parent => $self)->initialize; $self->get('alt_widget')->put(parent => $self)->initialize if $self->unsafe_get('alt_widget'); return; } sub new { # (proto) : Widget.ScriptOnly # Creates a new ScriptOnly widget. my($self) = shift->SUPER::new(@_); $self->[$_IDI] = {}; return $self; } sub render { # (self, any, string_ref) : undef # Draws the widget on the buffer so that it will only be rendered if # javascript is present. my($self, $source, $buffer) = @_; $$buffer .= <<'EOF'; <script type="text/javascript"> <!-- EOF # draw the javascript text within a document.write() my($str) = ''; $self->get('widget')->render($source, \$str); # escape single quotes, escape < and / per w3 validator $str =~ s|([ # ensure it is one line $str =~ s|\n| |g; $$buffer .= "document.write('".$str."'); // --> </script>"; if ($self->unsafe_get('alt_widget')) { $$buffer .= "\n<noscript>\n"; $self->get('alt_widget')->render($source, $buffer); $$buffer .= "\n</noscript>\n"; } return; } 1;