diff --git a/4439.zip b/4439.zip new file mode 100644 index 0000000..020ef07 Binary files /dev/null and b/4439.zip differ diff --git a/9781430223658.jpg b/9781430223658.jpg new file mode 100644 index 0000000..b5adc72 Binary files /dev/null and b/9781430223658.jpg differ diff --git a/LICENSE.txt b/LICENSE.txt new file mode 100644 index 0000000..dd5c995 --- /dev/null +++ b/LICENSE.txt @@ -0,0 +1,27 @@ +Freeware License, some rights reserved + +Copyright (c) 2009 Kieren Diment and Matt Trout + +Permission is hereby granted, free of charge, to anyone obtaining a copy +of this software and associated documentation files (the "Software"), +to work with the Software within the limits of freeware distribution and fair use. +This includes the rights to use, copy, and modify the Software for personal use. +Users are also allowed and encouraged to submit corrections and modifications +to the Software for the benefit of other users. + +It is not allowed to reuse, modify, or redistribute the Software for +commercial use in any way, or for a user’s educational materials such as books +or blog articles without prior permission from the copyright holder. + +The above copyright notice and this permission notice need to be included +in all copies or substantial portions of the software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS OR APRESS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + + diff --git a/README.md b/README.md new file mode 100644 index 0000000..972bc89 --- /dev/null +++ b/README.md @@ -0,0 +1,15 @@ +#Apress Source Code + +This repository accompanies [*The Definitive Guide to Catalyst*](http://www.apress.com/9781430223658) by Kieren Diment and Matt Trout (Apress, 2009). + +![Cover image](9781430223658.jpg) + +Download the files as a zip using the green button, or clone the repository to your machine using Git. + +##Releases + +Release v1.0 corresponds to the code in the published book, without corrections or updates. + +##Contributions + +See the file Contributing.md for more information on how you can contribute to this repository. diff --git a/catalyst-book-code/.DS_Store b/catalyst-book-code/.DS_Store new file mode 100644 index 0000000..5008ddf Binary files /dev/null and b/catalyst-book-code/.DS_Store differ diff --git a/catalyst-book-code/Chapter_10/Catalyst-View-SerialiseStashKey/.cvsignore b/catalyst-book-code/Chapter_10/Catalyst-View-SerialiseStashKey/.cvsignore new file mode 100644 index 0000000..69a558d --- /dev/null +++ b/catalyst-book-code/Chapter_10/Catalyst-View-SerialiseStashKey/.cvsignore @@ -0,0 +1,10 @@ +blib* +Makefile +Makefile.old +Build +_build* +pm_to_blib* +*.tar.gz +.lwpcookies +Catalyst-View-SerialiseStashKey-* +cover_db diff --git a/catalyst-book-code/Chapter_10/Catalyst-View-SerialiseStashKey/Changes b/catalyst-book-code/Chapter_10/Catalyst-View-SerialiseStashKey/Changes new file mode 100644 index 0000000..f055aca --- /dev/null +++ b/catalyst-book-code/Chapter_10/Catalyst-View-SerialiseStashKey/Changes @@ -0,0 +1,5 @@ +Revision history for Catalyst-View-SerialiseStashKey + +0.01 Date/time + First version, released on an unsuspecting world. + diff --git a/catalyst-book-code/Chapter_10/Catalyst-View-SerialiseStashKey/MANIFEST b/catalyst-book-code/Chapter_10/Catalyst-View-SerialiseStashKey/MANIFEST new file mode 100644 index 0000000..04a3a2d --- /dev/null +++ b/catalyst-book-code/Chapter_10/Catalyst-View-SerialiseStashKey/MANIFEST @@ -0,0 +1,8 @@ +Changes +MANIFEST +Makefile.PL +README +lib/Catalyst/View/SerialiseStashKey.pm +t/00-load.t +t/pod-coverage.t +t/pod.t diff --git a/catalyst-book-code/Chapter_10/Catalyst-View-SerialiseStashKey/Makefile.PL b/catalyst-book-code/Chapter_10/Catalyst-View-SerialiseStashKey/Makefile.PL new file mode 100644 index 0000000..1139a68 --- /dev/null +++ b/catalyst-book-code/Chapter_10/Catalyst-View-SerialiseStashKey/Makefile.PL @@ -0,0 +1,13 @@ +use inc::Module::Install; + +name 'Catalyst-View-SerialiseStashKey'; +all_from 'lib/Catalyst/View/SerialiseStashKey.pm'; +author 'Kieren Diment '; +license 'perl'; + +build_requires 'Test::More'; + +auto_install; + +WriteAll; + diff --git a/catalyst-book-code/Chapter_10/Catalyst-View-SerialiseStashKey/README b/catalyst-book-code/Chapter_10/Catalyst-View-SerialiseStashKey/README new file mode 100644 index 0000000..0526f1f --- /dev/null +++ b/catalyst-book-code/Chapter_10/Catalyst-View-SerialiseStashKey/README @@ -0,0 +1,52 @@ +Catalyst-View-SerialiseStashKey + +The README is used to introduce the module and provide instructions on +how to install the module, any machine dependencies it may have (for +example C compilers and installed libraries) and any other information +that should be provided before the module is installed. + +A README file is required for CPAN modules since CPAN extracts the README +file from a module distribution so that people browsing the archive +can use it to get an idea of the module's uses. It is usually a good idea +to provide version information here so that people can decide whether +fixes for the module are worth downloading. + + +INSTALLATION + +To install this module, run the following commands: + + perl Makefile.PL + make + make test + make install + +SUPPORT AND DOCUMENTATION + +After installing, you can find documentation for this module with the +perldoc command. + + perldoc Catalyst::View::SerialiseStashKey + +You can also look for information at: + + RT, CPAN's request tracker + http://rt.cpan.org/NoAuth/Bugs.html?Dist=Catalyst-View-SerialiseStashKey + + AnnoCPAN, Annotated CPAN documentation + http://annocpan.org/dist/Catalyst-View-SerialiseStashKey + + CPAN Ratings + http://cpanratings.perl.org/d/Catalyst-View-SerialiseStashKey + + Search CPAN + http://search.cpan.org/dist/Catalyst-View-SerialiseStashKey/ + + +COPYRIGHT AND LICENCE + +Copyright (C) 2009 Kieren Diment + +This program is free software; you can redistribute it and/or modify it +under the same terms as Perl itself. + diff --git a/catalyst-book-code/Chapter_10/Catalyst-View-SerialiseStashKey/lib/Catalyst/View/SerialiseStashKey.pm b/catalyst-book-code/Chapter_10/Catalyst-View-SerialiseStashKey/lib/Catalyst/View/SerialiseStashKey.pm new file mode 100644 index 0000000..3986054 --- /dev/null +++ b/catalyst-book-code/Chapter_10/Catalyst-View-SerialiseStashKey/lib/Catalyst/View/SerialiseStashKey.pm @@ -0,0 +1,23 @@ + package Catalyst::View::SerialiseStashKey; + + use strict; + use warnings; + use parent qw( Catalyst::View ); + use YAML; + + __PACKAGE__->config( 'stash_key' => 'response'); + + sub process { + my ($self, $c)= @_; + my $content = $self->render($c->stash); + $c->response->body($content); + } + + sub render { + my ($self, $c) = @_; + my $data = Load( $c->stash->{ $self->stash_key } ); + my $content = "
\n$data
"; + return $content; + } + + 1; diff --git a/catalyst-book-code/Chapter_10/Catalyst-View-SerialiseStashKey/t/00-load.t b/catalyst-book-code/Chapter_10/Catalyst-View-SerialiseStashKey/t/00-load.t new file mode 100644 index 0000000..6128bc5 --- /dev/null +++ b/catalyst-book-code/Chapter_10/Catalyst-View-SerialiseStashKey/t/00-load.t @@ -0,0 +1,9 @@ +#!perl -T + +use Test::More tests => 1; + +BEGIN { + use_ok( 'Catalyst::View::SerialiseStashKey' ); +} + +diag( "Testing Catalyst::View::SerialiseStashKey $Catalyst::View::SerialiseStashKey::VERSION, Perl $], $^X" ); diff --git a/catalyst-book-code/Chapter_10/Catalyst-View-SerialiseStashKey/t/boilerplate.t b/catalyst-book-code/Chapter_10/Catalyst-View-SerialiseStashKey/t/boilerplate.t new file mode 100644 index 0000000..734c83c --- /dev/null +++ b/catalyst-book-code/Chapter_10/Catalyst-View-SerialiseStashKey/t/boilerplate.t @@ -0,0 +1,55 @@ +#!perl -T + +use strict; +use warnings; +use Test::More tests => 3; + +sub not_in_file_ok { + my ($filename, %regex) = @_; + open( my $fh, '<', $filename ) + or die "couldn't open $filename for reading: $!"; + + my %violated; + + while (my $line = <$fh>) { + while (my ($desc, $regex) = each %regex) { + if ($line =~ $regex) { + push @{$violated{$desc}||=[]}, $.; + } + } + } + + if (%violated) { + fail("$filename contains boilerplate text"); + diag "$_ appears on lines @{$violated{$_}}" for keys %violated; + } else { + pass("$filename contains no boilerplate text"); + } +} + +sub module_boilerplate_ok { + my ($module) = @_; + not_in_file_ok($module => + 'the great new $MODULENAME' => qr/ - The great new /, + 'boilerplate description' => qr/Quick summary of what the module/, + 'stub function definition' => qr/function[12]/, + ); +} + +TODO: { + local $TODO = "Need to replace the boilerplate text"; + + not_in_file_ok(README => + "The README is used..." => qr/The README is used/, + "'version information here'" => qr/to provide version information/, + ); + + not_in_file_ok(Changes => + "placeholder date/time" => qr(Date/time) + ); + + module_boilerplate_ok('lib/Catalyst/View/SerialiseStashKey.pm'); + + +} + diff --git a/catalyst-book-code/Chapter_10/Catalyst-View-SerialiseStashKey/t/pod-coverage.t b/catalyst-book-code/Chapter_10/Catalyst-View-SerialiseStashKey/t/pod-coverage.t new file mode 100644 index 0000000..fc40a57 --- /dev/null +++ b/catalyst-book-code/Chapter_10/Catalyst-View-SerialiseStashKey/t/pod-coverage.t @@ -0,0 +1,18 @@ +use strict; +use warnings; +use Test::More; + +# Ensure a recent version of Test::Pod::Coverage +my $min_tpc = 1.08; +eval "use Test::Pod::Coverage $min_tpc"; +plan skip_all => "Test::Pod::Coverage $min_tpc required for testing POD coverage" + if $@; + +# Test::Pod::Coverage doesn't require a minimum Pod::Coverage version, +# but older versions don't recognize some common documentation styles +my $min_pc = 0.18; +eval "use Pod::Coverage $min_pc"; +plan skip_all => "Pod::Coverage $min_pc required for testing POD coverage" + if $@; + +all_pod_coverage_ok(); diff --git a/catalyst-book-code/Chapter_10/Catalyst-View-SerialiseStashKey/t/pod.t b/catalyst-book-code/Chapter_10/Catalyst-View-SerialiseStashKey/t/pod.t new file mode 100644 index 0000000..ee8b18a --- /dev/null +++ b/catalyst-book-code/Chapter_10/Catalyst-View-SerialiseStashKey/t/pod.t @@ -0,0 +1,12 @@ +#!perl -T + +use strict; +use warnings; +use Test::More; + +# Ensure a recent version of Test::Pod +my $min_tp = 1.22; +eval "use Test::Pod $min_tp"; +plan skip_all => "Test::Pod $min_tp required for testing POD" if $@; + +all_pod_files_ok(); diff --git a/catalyst-book-code/Chapter_11/Browser-Compatibility/MyApp/Changes b/catalyst-book-code/Chapter_11/Browser-Compatibility/MyApp/Changes new file mode 100644 index 0000000..1e5706c --- /dev/null +++ b/catalyst-book-code/Chapter_11/Browser-Compatibility/MyApp/Changes @@ -0,0 +1,4 @@ +This file documents the revision history for Perl extension MyApp. + +0.01 2009-04-26 12:26:28 + - initial revision, generated by Catalyst diff --git a/catalyst-book-code/Chapter_11/Browser-Compatibility/MyApp/Makefile.PL b/catalyst-book-code/Chapter_11/Browser-Compatibility/MyApp/Makefile.PL new file mode 100644 index 0000000..572d9b6 --- /dev/null +++ b/catalyst-book-code/Chapter_11/Browser-Compatibility/MyApp/Makefile.PL @@ -0,0 +1,19 @@ +# IMPORTANT: if you delete this file your app will not work as +# expected. you have been warned +use inc::Module::Install; + +name 'MyApp'; +all_from 'lib/MyApp.pm'; + +requires 'Catalyst::Runtime' => '5.80001'; +requires 'Catalyst::Plugin::ConfigLoader'; +requires 'Catalyst::Plugin::Static::Simple'; +requires 'Catalyst::Action::RenderView'; +requires 'parent'; +requires 'Config::General'; # This should reflect the config file format you've chosen + # See Catalyst::Plugin::ConfigLoader for supported formats +catalyst; + +install_script glob('script/*.pl'); +auto_install; +WriteAll; diff --git a/catalyst-book-code/Chapter_11/Browser-Compatibility/MyApp/README b/catalyst-book-code/Chapter_11/Browser-Compatibility/MyApp/README new file mode 100644 index 0000000..065f5ed --- /dev/null +++ b/catalyst-book-code/Chapter_11/Browser-Compatibility/MyApp/README @@ -0,0 +1 @@ +Run script/myapp_server.pl to test the application. diff --git a/catalyst-book-code/Chapter_11/Browser-Compatibility/MyApp/lib/MyApp.pm b/catalyst-book-code/Chapter_11/Browser-Compatibility/MyApp/lib/MyApp.pm new file mode 100644 index 0000000..bde0911 --- /dev/null +++ b/catalyst-book-code/Chapter_11/Browser-Compatibility/MyApp/lib/MyApp.pm @@ -0,0 +1,64 @@ +package MyApp; + +use strict; +use warnings; + +use Catalyst::Runtime '5.70'; + +# Set flags and add plugins for the application +# +# -Debug: activates the debug mode for very useful log messages +# ConfigLoader: will load the configuration from a Config::General file in the +# application's home directory +# Static::Simple: will serve static files from the application's root +# directory + +use parent qw/Catalyst/; +use Catalyst qw/-Debug + ConfigLoader + Static::Simple/; +our $VERSION = '0.01'; + +# Configure the application. +# +# Note that settings in myapp.conf (or other external +# configuration file that you set up manually) take precedence +# over this when using ConfigLoader. Thus configuration +# details given here can function as a default configuration, +# with a external configuration file acting as an override for +# local deployment. + +__PACKAGE__->config( name => 'MyApp' ); + +# Start the application +__PACKAGE__->setup(); + + +=head1 NAME + +MyApp - Catalyst based application + +=head1 SYNOPSIS + + script/myapp_server.pl + +=head1 DESCRIPTION + +[enter your description here] + +=head1 SEE ALSO + +L, L + +=head1 AUTHOR + +Kieren Diment + +=head1 LICENSE + +This library is free software, you can redistribute it and/or modify +it under the same terms as Perl itself. + +=cut + +1; diff --git a/catalyst-book-code/Chapter_11/Browser-Compatibility/MyApp/lib/MyApp/Controller/Root.pm b/catalyst-book-code/Chapter_11/Browser-Compatibility/MyApp/lib/MyApp/Controller/Root.pm new file mode 100644 index 0000000..553a27b --- /dev/null +++ b/catalyst-book-code/Chapter_11/Browser-Compatibility/MyApp/lib/MyApp/Controller/Root.pm @@ -0,0 +1,30 @@ + package MyApp::Controller::Root; + + use Moose; + use namespace::autoclean; + + BEGIN { extends 'Catalyst::Controller'; } + + __PACKAGE__->config->{namespace} = ''; + + sub index : Path Args(0) { + my ($self, $c) = @_; + $c->stash(things => [qw/ + affe + tiger + loewe + birne + /]); + + # template name automatically infered to be root/templates/index + } + + sub default : Path { + my ($self, $ctx) = @_; + $ctx->response->body( 'Page not found' ); + $ctx->response->status(404); + } + + sub end : ActionClass('RenderView') {} + + 1; diff --git a/catalyst-book-code/Chapter_11/Browser-Compatibility/MyApp/lib/MyApp/View/Web.pm b/catalyst-book-code/Chapter_11/Browser-Compatibility/MyApp/lib/MyApp/View/Web.pm new file mode 100644 index 0000000..31d303a --- /dev/null +++ b/catalyst-book-code/Chapter_11/Browser-Compatibility/MyApp/lib/MyApp/View/Web.pm @@ -0,0 +1,33 @@ +package MyApp::View::Web; + +use strict; +use base 'Catalyst::View::TT'; + +__PACKAGE__->config(TEMPLATE_EXTENSION => '.tt', + WRAPPER => 'page.tt', + ); + +=head1 NAME + +MyApp::View::Web - TT View for MyApp + +=head1 DESCRIPTION + +TT View for MyApp. + +=head1 AUTHOR + +=head1 SEE ALSO + +L + +Kieren Diment + +=head1 LICENSE + +This library is free software, you can redistribute it and/or modify +it under the same terms as Perl itself. + +=cut + +1; diff --git a/catalyst-book-code/Chapter_11/Browser-Compatibility/MyApp/myapp.conf b/catalyst-book-code/Chapter_11/Browser-Compatibility/MyApp/myapp.conf new file mode 100644 index 0000000..9ee3adf --- /dev/null +++ b/catalyst-book-code/Chapter_11/Browser-Compatibility/MyApp/myapp.conf @@ -0,0 +1,3 @@ +# rename this file to MyApp.yml and put a : in front of "name" if +# you want to use yaml like in old versions of Catalyst +name MyApp diff --git a/catalyst-book-code/Chapter_11/Browser-Compatibility/MyApp/root/favicon.ico b/catalyst-book-code/Chapter_11/Browser-Compatibility/MyApp/root/favicon.ico new file mode 100644 index 0000000..5ad723d Binary files /dev/null and b/catalyst-book-code/Chapter_11/Browser-Compatibility/MyApp/root/favicon.ico differ diff --git a/catalyst-book-code/Chapter_11/Browser-Compatibility/MyApp/root/index.tt b/catalyst-book-code/Chapter_11/Browser-Compatibility/MyApp/root/index.tt new file mode 100644 index 0000000..15cc1fa --- /dev/null +++ b/catalyst-book-code/Chapter_11/Browser-Compatibility/MyApp/root/index.tt @@ -0,0 +1,27 @@ + +
+
+

Heading

+ +
+
Right hand column +
+
+ +

Left hand column

+
+
+ +

+ [% IF error %] +

c.stash.error goes here. We define the error style in our + local css file

+ [% END %] +

Main content goes here

+

In the center column

+
+ + Footer goes here + +
+
diff --git a/catalyst-book-code/Chapter_11/Browser-Compatibility/MyApp/root/page.tt b/catalyst-book-code/Chapter_11/Browser-Compatibility/MyApp/root/page.tt new file mode 100644 index 0000000..2e0cbc1 --- /dev/null +++ b/catalyst-book-code/Chapter_11/Browser-Compatibility/MyApp/root/page.tt @@ -0,0 +1,40 @@ + + + + [% title %] + + + + + + + + + + + + + + + + + + + [% content %] + diff --git a/catalyst-book-code/Chapter_11/Browser-Compatibility/MyApp/root/static/Emastic - CSS Framework 0.8(Beta3).zip b/catalyst-book-code/Chapter_11/Browser-Compatibility/MyApp/root/static/Emastic - CSS Framework 0.8(Beta3).zip new file mode 100644 index 0000000..c425563 Binary files /dev/null and b/catalyst-book-code/Chapter_11/Browser-Compatibility/MyApp/root/static/Emastic - CSS Framework 0.8(Beta3).zip differ diff --git a/catalyst-book-code/Chapter_11/Browser-Compatibility/MyApp/root/static/emastic/Demo-absolute.html b/catalyst-book-code/Chapter_11/Browser-Compatibility/MyApp/root/static/emastic/Demo-absolute.html new file mode 100644 index 0000000..152200a --- /dev/null +++ b/catalyst-book-code/Chapter_11/Browser-Compatibility/MyApp/root/static/emastic/Demo-absolute.html @@ -0,0 +1,32 @@ + + + + +Absolute relative + + + + + + + + + +
+
A - LOREM
+
B - IPSUM
+
C - DOLOR
+
D - SIT AMET
+
+ + diff --git a/catalyst-book-code/Chapter_11/Browser-Compatibility/MyApp/root/static/emastic/Demo-procent.html b/catalyst-book-code/Chapter_11/Browser-Compatibility/MyApp/root/static/emastic/Demo-procent.html new file mode 100644 index 0000000..50a1910 --- /dev/null +++ b/catalyst-book-code/Chapter_11/Browser-Compatibility/MyApp/root/static/emastic/Demo-procent.html @@ -0,0 +1,75 @@ + + + + +Demo - percent + + + + + + + + + +
+
+
+

20%

+

30%

+

50%

+
+

100%

+ +

30%

+

30%

+

40%

+
+ +

33,33%

+

33,33%

+

33,33%

+
+ + +

20%

+

20%

+

20%

+

20%

+

20%

+
+ +
67%
+
33%
+
+ +
25%
+
25%
+
25%
+
25%
+
+ +
10%
+
10%
+
10%
+
10%
+
10%
+
10%
+
10%
+
10%
+
10%
+
10%
+
+ +

50%

+

25%

+

25%

+
+ + diff --git a/catalyst-book-code/Chapter_11/Browser-Compatibility/MyApp/root/static/emastic/Demo1.html b/catalyst-book-code/Chapter_11/Browser-Compatibility/MyApp/root/static/emastic/Demo1.html new file mode 100644 index 0000000..e4c2976 --- /dev/null +++ b/catalyst-book-code/Chapter_11/Browser-Compatibility/MyApp/root/static/emastic/Demo1.html @@ -0,0 +1,80 @@ + + + + +Demo 1 + + + + + + + + + +
+

Lorem ipsum dolor sit amet, conse ctetur adip isici ng elit.

+
+ +
+
+

Lorem ipsum dolor sit amet, conse ctetur adip isici ng elit.

+

Panda +Mauris fermentum feugiat justo. Quisque urna dolor, sollicitudin id, congue sed, euismod a, ante. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Vestibulum arcu. Nullam sollicitudin convallis velit. Vestibulum magna lacus, adipiscing vitae, sagittis in, porttitor non, nulla. Nulla purus eros, placerat at, rutrum ac, tincidunt quis, neque. Aliquam gravida tempus nibh. Aenean eleifend facilisis nisi. Aliquam erat volutpat. Fusce ac nisl. Donec malesuada. Suspendisse ut est eget odio congue pellentesque. Morbi varius condimentum erat.

+
+
+
+

Lorem ipsum dolor

+

Mauris fermentum feugiat justo. Quisque urna dolor, sollicitudin id, congue sed, euismod a, ante. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Vestibulum arcu. Nullam sollicitudin convallis velit. Vestibulum magna lacus, adipiscing vitae, sagittis in, porttitor non, nulla. Nulla purus eros, placerat at, rutrum ac, tincidunt quis, neque. Aliquam gravida tempus nibh. Aenean eleifend facilisis nisi. Aliquam erat volutpat. Fusce ac nisl. Donec malesuada. Suspendisse ut est eget odio congue pellentesque. Morbi varius condimentum erat.

+
+
+

Lorem

+

Mauris fermentum feugiat justo. Quisque urna dolor, sollicitudin id, congue sed, euismod a, ante. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Vestibulum arcu. Nullam sollicitudin convallis velit. Vestibulum magna lacus, adipiscing vitae, sagittis in, porttitor non, nulla. Nulla purus eros, placerat at, rutrum ac, tincidunt quis, neque. Aliquam gravida tempus nibh. Aenean eleifend facilisis nisi. Aliquam erat volutpat. Fusce ac nisl. Donec malesuada. Suspendisse ut est eget odio congue pellentesque. Morbi varius condimentum erat.

+
+
+
+

Lorem

+

Mauris fermentum feugiat justo. Quisque urna dolor, sollicitudin id, congue sed, euismod a, ante. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae.

+
+
+

Lorem

+

Mauris fermentum feugiat justo. Quisque urna dolor, sollicitudin id, congue sed, euismod a, ante. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae.

+
+
+

Lorem

+

Mauris fermentum feugiat justo. Quisque urna dolor, sollicitudin id, congue sed, euismod a, ante. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae.

+
+
+

Lorem

+

Mauris fermentum feugiat justo. Quisque urna dolor, sollicitudin id, congue sed, euismod a, ante. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae.

+
+
+
+
+

Mauris fermentum

+

Mauris fermentum feugiat justo. Quisque urna dolor, sollicitudin id, congue sed, euismod a, ante. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Vestibulum arcu. Nullam sollicitudin convallis velit. Vestibulum magna lacus, adipiscing vitae, sagittis in, porttitor non, nulla. Nulla purus eros, placerat at, rutrum ac, tincidunt quis, neque. Aliquam gravida tempus nibh. Aenean eleifend facilisis nisi. Aliquam erat volutpat. Fusce ac nisl. Donec malesuada. Suspendisse ut est eget odio congue pellentesque. Morbi varius condimentum erat. Aliquam erat volutpat. Fusce ac nisl. Donec malesuada. Suspendisse ut est eget odio congue pellentesque. Morbi varius condimentum erat.

+

Mauris fermentum

+

Mauris fermentum feugiat justo. Quisque urna dolor, sollicitudin id, congue sed, euismod a, ante. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Vestibulum arcu. Nullam sollicitudin convallis velit. Vestibulum magna lacus, adipiscing vitae, sagittis in, porttitor non, nulla. Nulla purus eros, placerat at, rutrum ac, tincidunt quis, neque. Aliquam gravida tempus nibh. Aenean eleifend facilisis nisi. Aliquam erat volutpat. Fusce ac nisl. Donec malesuada. Suspendisse ut est eget odio congue pellentesque. Morbi varius condimentum erat.

+ +

Mauris fermentum feugiat justo. Quisque urna dolor, sollicitudin id, congue sed, euismod a, ante. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Vestibulum arcu. Nullam sollicitudin convallis velit. Vestibulum magna lacus, adipiscing vitae, sagittis in, porttitor non, nulla. Nulla purus eros, placerat at, rutrum ac, tincidunt quis, neque. Aliquam gravida tempus nibh.

+
+
+

Nulla purus

+

Mauris fermentum feugiat justo. Quisque urna dolor, sollicitudin id, congue sed, euismod a, ante. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Vestibulum arcu. Nullam sollicitudin convallis velit. Vestibulum magna lacus, adipiscing vitae, sagittis in, porttitor non, nulla. Nulla purus eros, placerat at, rutrum ac, tincidunt quis, neque. Aliquam gravida tempus nibh. Aenean eleifend facilisis nisi. Aliquam erat volutpat. Fusce ac nisl. Donec malesuada. Suspendisse ut est eget odio congue pellentesque. Morbi varius condimentum erat.

+
+
+
+
The End
+
+ + + diff --git a/catalyst-book-code/Chapter_11/Browser-Compatibility/MyApp/root/static/emastic/Demo2.html b/catalyst-book-code/Chapter_11/Browser-Compatibility/MyApp/root/static/emastic/Demo2.html new file mode 100644 index 0000000..7c4979b --- /dev/null +++ b/catalyst-book-code/Chapter_11/Browser-Compatibility/MyApp/root/static/emastic/Demo2.html @@ -0,0 +1,78 @@ + + + + +Demo 2 - fluid + + + + + + + +
+
+

Lorem ipsum dolor sit amet, conse ctetur adip isici ng elit.

+
+
+
+

Mauris fermentum feugiat justo. Quisque urna dolor, sollicitudin id, congue sed, euismod a, ante. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Vestibulum arcu. Nullam sollicitudin convallis velit. Vestibulum magna lacus, adipiscing vitae, sagittis in, porttitor non, nulla. Nulla purus eros, placerat at, rutrum ac, tincidunt quis, neque. Aliquam gravida tempus nibh. Aenean eleifend facilisis nisi. Aliquam erat volutpat. Fusce ac nisl. Donec malesuada. Suspendisse ut est eget odio congue pellentesque. Morbi varius condimentum erat.

+

Lorem ipsum dolor sit amet, conse ctetur adip isici ng elit. Lorem ipsum dolor sit amet, conse ctetur adip isici ng elit.

+
+
+

Mauris fermentum feugiat justo. Quisque urna dolor, sollicitudin id, congue sed, euismod a, ante. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Vestibulum arcu. Nullam sollicitudin convallis velit. Vestibulum magna lacus, adipiscing vitae, sagittis in, porttitor non, nulla. Nulla purus eros, placerat at, rutrum ac, tincidunt quis, neque. Aliquam gravida tempus nibh. Aenean eleifend facilisis nisi. Aliquam erat volutpat. Fusce ac nisl. Donec malesuada. Suspendisse ut est eget odio congue pellentesque. Morbi varius condimentum erat.

+

Gatto di MicheleLorem ipsum dolor sit amet, conse ctetur adip isici ng elit. Mauris fermentum feugiat justo. Quisque urna dolor, sollicitudin id, congue sed, euismod a, ante. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Vestibulum arcu. Nullam sollicitudin convallis velit. Nullam sollicitudin convallis velit. Vestibulum magna lacus, adipiscing vitae, sagittis in, porttitor non, nulla. Nulla purus eros, placerat at, rutrum ac, tincidunt quis, neque. Aliquam gravida tempus nibh.

+

Mauris fermentum feugiat justo. Quisque urna dolor, sollicitudin id, congue sed, euismod a, ante. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Vestibulum arcu. Nullam sollicitudin convallis velit. Vestibulum magna lacus, adipiscing vitae, sagittis in, porttitor non, nulla. Nulla purus eros, placerat at, rutrum ac, tincidunt quis, neque. Aliquam gravida tempus nibh. Aenean eleifend facilisis nisi. Aliquam erat volutpat. Fusce ac nisl. Donec malesuada. Suspendisse ut est eget odio congue pellentesque. Morbi varius condimentum erat.

+
+
+
+

Mauris fermentum feugiat justo. Quisque urna dolor, sollicitudin id, congue sed, euismod a, ante. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Vestibulum arcu. Nullam sollicitudin convallis velit. Vestibulum magna lacus, adipiscing vitae, sagittis in, porttitor non, nulla. Nulla purus eros, placerat at, rutrum ac, tincidunt quis, neque. Aliquam gravida tempus nibh. Aenean eleifend facilisis nisi. Aliquam erat volutpat. Fusce ac nisl. Donec malesuada. Suspendisse ut est eget odio congue pellentesque. Morbi varius condimentum erat. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Vestibulum arcu. Nullam sollicitudin convallis velit. Vestibulum magna lacus, adipiscing vitae, sagittis in, porttitor non, nulla. Nulla purus eros, placerat at, rutrum ac, tincidunt quis, neque. Aliquam gravida tempus nibh. Aenean eleifend facilisis nisi. Aliquam erat volutpat. Fusce ac nisl. Donec malesuada. Suspendisse ut est eget odio congue pellentesque. Morbi varius condimentum erat. Quisque urna dolor, sollicitudin id, congue sed, euismod a, ante.

+
+
+

Mauris fermentum feugiat justo. Quisque urna dolor, sollicitudin id, congue sed, euismod a, ante. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Vestibulum arcu. Nullam sollicitudin convallis velit. Vestibulum magna lacus, adipiscing vitae, sagittis in, porttitor non, nulla. Nulla purus eros, placerat at, rutrum ac, tincidunt quis, neque. Aliquam gravida tempus nibh. Aenean eleifend facilisis nisi. Aliquam erat volutpat. Fusce ac nisl. Donec malesuada. Suspendisse ut est eget odio congue pellentesque. Morbi varius condimentum erat. + Mauris fermentum feugiat justo. Quisque urna dolor, sollicitudin id, congue sed, euismod a, ante. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Vestibulum arcu. Nullam sollicitudin convallis velit. Vestibulum magna lacus, adipiscing vitae, sagittis in, porttitor non, nulla. Nulla purus eros, placerat at, rutrum ac, tincidunt quis, neque. Aliquam gravida tempus nibh. Aenean eleifend facilisis nisi. Aliquam erat volutpat. Fusce ac nisl. Donec malesuada. Suspendisse ut est eget odio congue pellentesque. Morbi varius condimentum erat. + Mauris fermentum feugiat justo.

+
+
+
+

Mauris fermentum feugiat justo. Quisque urna dolor, sollicitudin id, congue sed, euismod a, ante. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Vestibulum arcu. Nullam sollicitudin convallis velit. Vestibulum magna lacus, adipiscing vitae, sagittis in, porttitor non, nulla. Nulla purus eros, placerat at, rutrum ac, tincidunt quis, neque. Aliquam gravida tempus nibh. Aenean eleifend facilisis nisi. Aliquam erat volutpat. Fusce ac nisl.

+
+
+

Mauris fermentum feugiat justo. Quisque urna dolor, sollicitudin id, congue sed, euismod a, ante. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Vestibulum arcu. Nullam sollicitudin convallis velit. Vestibulum magna lacus, adipiscing vitae, sagittis in, porttitor non, nulla. Nulla purus eros, placerat at, rutrum ac, tincidunt quis, neque. Aliquam gravida tempus nibh. Aenean eleifend facilisis nisi. Aliquam erat volutpat. Fusce ac nisl. Donec malesuada. Suspendisse ut est eget odio congue pellentesque. Morbi varius condimentum erat. Donec malesuada. Suspendisse ut est eget odio congue pellentesque. Morbi varius condimentum erat.

+
+
+
+

Mauris fermentum feugiat justo. Quisque urna dolor, sollicitudin id, congue sed, euismod a, ante. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Vestibulum arcu. Nullam sollicitudin convallis velit. Vestibulum magna lacus, adipiscing vitae, sagittis in, porttitor non, nulla. Nulla purus eros, placerat at, rutrum ac, tincidunt quis, neque.

+
+
+

Mauris fermentum feugiat justo. Quisque urna dolor, sollicitudin id, congue sed, euismod a, ante. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Vestibulum arcu. Nullam sollicitudin convallis velit. Vestibulum magna lacus, adipiscing vitae, sagittis in, porttitor non, nulla. Nulla purus eros, placerat at, rutrum ac, tincidunt quis, neque.Aenean eleifend facilisis nisi. Aliquam erat volutpat. Fusce ac nisl. Donec malesuada. Suspendisse ut est eget odio congue pellentesque. Morbi varius condimentum erat. Aliquam gravida tempus nibh.

+
+
+
+

Mauris fermentum feugiat justo. Quisque urna dolor, sollicitudin id, congue sed, euismod a, ante. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Vestibulum arcu. Nullam sollicitudin convallis velit. Vestibulum magna lacus, adipiscing vitae, sagittis in, porttitor non, nulla. Nulla purus eros, placerat at, rutrum ac, tincidunt quis, neque. Aliquam gravida tempus nibh. Aenean eleifend facilisis nisi. Aliquam erat volutpat. Fusce ac nisl. Donec malesuada. Suspendisse ut est eget odio congue pellentesque. Morbi varius condimentum erat.

+
+
+

Mauris fermentum feugiat justo. Quisque urna dolor, sollicitudin id, congue sed, euismod a, ante. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Vestibulum arcu. Nullam sollicitudin convallis velit. Vestibulum magna lacus, adipiscing vitae, sagittis in, porttitor non, nulla. Nulla purus eros, placerat at, rutrum ac, tincidunt quis, neque. Aliquam gravida tempus nibh. Aenean eleifend facilisis nisi. Aliquam erat volutpat. Fusce ac nisl. Donec malesuada. Suspendisse ut est eget odio congue pellentesque. Morbi varius condimentum erat.

+
+
+
+

Mauris fermentum feugiat justo. Quisque urna dolor, sollicitudin id, congue sed, euismod a, ante. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Vestibulum arcu. Nullam sollicitudin convallis velit. Vestibulum magna lacus, adipiscing vitae, sagittis in, porttitor non, nulla. Nulla purus eros, placerat at, rutrum ac, tincidunt quis, neque. Aliquam gravida tempus nibh. Aenean eleifend facilisis nisi.

+
+
+

Mauris fermentum feugiat justo. Quisque urna dolor, sollicitudin id, congue sed, euismod a, ante. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Vestibulum arcu. Nullam sollicitudin convallis velit. Vestibulum magna lacus, adipiscing vitae, sagittis in, porttitor non, nulla. Nulla purus eros, placerat at, rutrum ac, tincidunt quis, neque. Aliquam gravida tempus nibh. Aenean eleifend facilisis nisi.

+
+
+

Mauris fermentum feugiat justo. Quisque urna dolor, sollicitudin id, congue sed, euismod a, ante. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Vestibulum arcu. Nullam sollicitudin convallis velit. Vestibulum magna lacus, adipiscing vitae, sagittis in, porttitor non, nulla. Nulla purus eros, placerat at, rutrum ac, tincidunt quis, neque. Aliquam gravida tempus nibh. Aenean eleifend facilisis nisi. Aliquam erat volutpat. Fusce ac nisl. Donec malesuada. Suspendisse ut est eget odio congue pellentesque. Morbi varius condimentum erat. Aliquam erat volutpat. Fusce ac nisl. Donec malesuada. Suspendisse ut est eget odio congue pellentesque. Morbi varius condimentum erat. Aliquam erat volutpat. Fusce ac nisl. Donec malesuada. Suspendisse ut est eget odio congue pellentesque. Morbi varius condimentum erat.

+
+
+
+

Lorem ipsum dolor sit amet, conse ctetur adip isici ng elit. Lorem ipsum dolor sit amet, conse ctetur adip isici ng elit.

+
+
+ + diff --git a/catalyst-book-code/Chapter_11/Browser-Compatibility/MyApp/root/static/emastic/Grid-fluid-border.html b/catalyst-book-code/Chapter_11/Browser-Compatibility/MyApp/root/static/emastic/Grid-fluid-border.html new file mode 100644 index 0000000..10209df --- /dev/null +++ b/catalyst-book-code/Chapter_11/Browser-Compatibility/MyApp/root/static/emastic/Grid-fluid-border.html @@ -0,0 +1,144 @@ + + + + +Fluid Grid (border) + + + + + + + + + +
+
20 em
+
20 em
+
fluid
+
 
+ +
10 em
+
20 em
+
fluid
+
 
+ +
10 em
+
10 em
+
10 em
+
fluid
+
 
+ +
20 em
+
fluid
+
 
+ +
30 em
+
fluid
+
 
+ +
40 em
+
fluid
+
 
+ +
20 em
+
fluid
+
 
+ +
30 em
+
fluid
+
 
+ +
40 em
+
fluid
+
 
+ +
20 em
+
20 em
+
fluid
+
 
+ +
20 em
+
10 em
+
fluid
+
 
+ +
10 em
+
10 em
+
fluid
+
 
+ +
5 em
+
35 em
+
fluid
+
 
+
+ + + diff --git a/catalyst-book-code/Chapter_11/Browser-Compatibility/MyApp/root/static/emastic/Grid-fluid-no-border.html b/catalyst-book-code/Chapter_11/Browser-Compatibility/MyApp/root/static/emastic/Grid-fluid-no-border.html new file mode 100644 index 0000000..975ec8c --- /dev/null +++ b/catalyst-book-code/Chapter_11/Browser-Compatibility/MyApp/root/static/emastic/Grid-fluid-no-border.html @@ -0,0 +1,136 @@ + + + + +Fluid Grid (border) + + + + + + + + + +
+
20 em
+
20 em
+
fluid
+
 
+ +
10 em
+
20 em
+
fluid
+
 
+ +
10 em
+
10 em
+
10 em
+
fluid
+
 
+ +
20 em
+
fluid
+
 
+ +
30 em
+
fluid
+
 
+ +
40 em
+
fluid
+
 
+ +
20 em
+
fluid
+
 
+ +
30 em
+
fluid
+
 
+ +
40 em
+
fluid
+
 
+ +
20 em
+
20 em
+
fluid
+
 
+ +
20 em
+
10 em
+
fluid
+
 
+ +
10 em
+
10 em
+
fluid
+
 
+ +
5 em
+
35 em
+
fluid
+
 
+
+ + + diff --git a/catalyst-book-code/Chapter_11/Browser-Compatibility/MyApp/root/static/emastic/Grid-left-border.html b/catalyst-book-code/Chapter_11/Browser-Compatibility/MyApp/root/static/emastic/Grid-left-border.html new file mode 100644 index 0000000..33bd83b --- /dev/null +++ b/catalyst-book-code/Chapter_11/Browser-Compatibility/MyApp/root/static/emastic/Grid-left-border.html @@ -0,0 +1,168 @@ + + + + +Grid Left (border) + + + + + + + + + +
+
20 em
+
20 em
+
30 em
+
 
+ +
10 em
+
20 em
+
40 em
+
 
+ +
20 em
+
10 em
+
40 em
+
 
+ +
20 em
+
50 em
+
 
+ +
50 em
+
20 em
+
 
+ +
10 em
+
20 em
+
20 em
+
20 em
+
 
+ +
5 em
+
5 em
+
5 em
+
5 em
+
5 em
+
5 em
+
5 em
+
5 em
+
5 em
+
5 em
+
5 em
+
5 em
+
5 em
+
5 em
+
 
+ +
10 em
+
10 em
+
10 em
+
10 em
+
10 em
+
10 em
+
10 em
+
 
+ +
30 em
+
30 em
+
10 em
+
 
+ +
30 em
+
30 em
+
5 em
+
5 em
+
 
+ +
35 em
+
35 em
+
 
+ +
70 em
+
 
+ +
100%
+
 
+ +
10 em
+
+ +
10 em
+
+ +
10 em
+
+ +
10 em
+
+ +
10 em
+
+ +
10 em
+
+ +
10 em
+
+ + +
20 em
+
+ +
20 em
+
+ +
20 em
+
+ +
10 em
+
+ + +
+ + + diff --git a/catalyst-book-code/Chapter_11/Browser-Compatibility/MyApp/root/static/emastic/Grid-left-no-border.html b/catalyst-book-code/Chapter_11/Browser-Compatibility/MyApp/root/static/emastic/Grid-left-no-border.html new file mode 100644 index 0000000..15c1c12 --- /dev/null +++ b/catalyst-book-code/Chapter_11/Browser-Compatibility/MyApp/root/static/emastic/Grid-left-no-border.html @@ -0,0 +1,164 @@ + + + + +Grid Left (no border) + + + + + + + + + +
+
20 em
+
20 em
+
30 em
+
 
+ +
10 em
+
20 em
+
40 em
+
 
+ +
20 em
+
10 em
+
40 em
+
 
+ +
20 em
+
50 em
+
 
+ +
50 em
+
20 em
+
 
+ +
10 em
+
20 em
+
20 em
+
20 em
+
 
+ +
5 em
+
5 em
+
5 em
+
5 em
+
5 em
+
5 em
+
5 em
+
5 em
+
5 em
+
5 em
+
5 em
+
5 em
+
5 em
+
5 em
+
 
+ +
10 em
+
10 em
+
10 em
+
10 em
+
10 em
+
10 em
+
10 em
+
 
+ +
30 em
+
30 em
+
10 em
+
 
+ +
30 em
+
30 em
+
5 em
+
5 em
+
 
+ +
35 em
+
35 em
+
 
+ +
70 em
+
 
+ +
100%
+
 
+ +
10 em
+
+ +
10 em
+
+ +
10 em
+
+ +
10 em
+
+ +
10 em
+
+ +
10 em
+
+ +
10 em
+
+ + +
20 em
+
+ +
20 em
+
+ +
20 em
+
+ +
10 em
+
+ + +
+ + + diff --git a/catalyst-book-code/Chapter_11/Browser-Compatibility/MyApp/root/static/emastic/Grid-right-border.html b/catalyst-book-code/Chapter_11/Browser-Compatibility/MyApp/root/static/emastic/Grid-right-border.html new file mode 100644 index 0000000..7f7499f --- /dev/null +++ b/catalyst-book-code/Chapter_11/Browser-Compatibility/MyApp/root/static/emastic/Grid-right-border.html @@ -0,0 +1,172 @@ + + + + +Grid Right (no border) + + + + + + + + + +
+
20 em
+
20 em
+
30 em
+
 
+ +
10 em
+
20 em
+
40 em
+
 
+ +
20 em
+
10 em
+
40 em
+
 
+ +
20 em
+
50 em
+
 
+ +
50 em
+
20 em
+
 
+ +
10 em
+
20 em
+
20 em
+
20 em
+
 
+ +
5 em
+
5 em
+
5 em
+
5 em
+
5 em
+
5 em
+
5 em
+
5 em
+
5 em
+
5 em
+
5 em
+
5 em
+
5 em
+
5 em
+
 
+ +
10 em
+
10 em
+
10 em
+
10 em
+
10 em
+
10 em
+
10 em
+
 
+ +
30 em
+
30 em
+
10 em
+
 
+ +
30 em
+
30 em
+
5 em
+
5 em
+
 
+ +
35 em
+
35 em
+
 
+ +
70 em
+
 
+ +
100%
+
 
+ +
10 em
+
+ +
10 em
+
+ +
10 em
+
+ +
10 em
+
+ +
10 em
+
+ +
10 em
+
+ +
10 em
+
+ + +
20 em
+
+ +
20 em
+
+ +
20 em
+
+ +
10 em
+
+ + +
+ + + diff --git a/catalyst-book-code/Chapter_11/Browser-Compatibility/MyApp/root/static/emastic/Grid-right-no-border.html b/catalyst-book-code/Chapter_11/Browser-Compatibility/MyApp/root/static/emastic/Grid-right-no-border.html new file mode 100644 index 0000000..a0f480c --- /dev/null +++ b/catalyst-book-code/Chapter_11/Browser-Compatibility/MyApp/root/static/emastic/Grid-right-no-border.html @@ -0,0 +1,163 @@ + + + + +Grid Right (no border) + + + + + + + + + +
+
20 em
+
20 em
+
30 em
+
 
+ +
10 em
+
20 em
+
40 em
+
 
+ +
20 em
+
10 em
+
40 em
+
 
+ +
20 em
+
50 em
+
 
+ +
50 em
+
20 em
+
 
+ +
10 em
+
20 em
+
20 em
+
20 em
+
 
+ +
5 em
+
5 em
+
5 em
+
5 em
+
5 em
+
5 em
+
5 em
+
5 em
+
5 em
+
5 em
+
5 em
+
5 em
+
5 em
+
5 em
+
 
+ +
10 em
+
10 em
+
10 em
+
10 em
+
10 em
+
10 em
+
10 em
+
 
+ +
30 em
+
30 em
+
10 em
+
 
+ +
30 em
+
30 em
+
5 em
+
5 em
+
 
+ +
35 em
+
35 em
+
 
+ +
70 em
+
 
+ +
100%
+
 
+ +
10 em
+
+ +
10 em
+
+ +
10 em
+
+ +
10 em
+
+ +
10 em
+
+ +
10 em
+
+ +
10 em
+
+ + +
20 em
+
+ +
20 em
+
+ +
20 em
+
+ +
10 em
+
+ + +
+ + + diff --git a/catalyst-book-code/Chapter_11/Browser-Compatibility/MyApp/root/static/emastic/Hi.html b/catalyst-book-code/Chapter_11/Browser-Compatibility/MyApp/root/static/emastic/Hi.html new file mode 100644 index 0000000..7e7651a --- /dev/null +++ b/catalyst-book-code/Chapter_11/Browser-Compatibility/MyApp/root/static/emastic/Hi.html @@ -0,0 +1,112 @@ + + + + +Hi + + + + + + + + + + +
+
+

Lorem ipsum dolor sit amet, conse ctetur adip isici ng elit.

+
+
+
+

Mauris fermentum feugiat justo. Quisque urna dolor, sollicitudin id, congue sed, euismod a, ante. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Vestibulum arcu. Nullam sollicitudin convallis velit. Vestibulum magna lacus, adipiscing vitae, sagittis in, porttitor non, nulla. Nulla purus eros, placerat at, rutrum ac, tincidunt quis, neque. Aliquam gravida tempus nibh. Aenean eleifend facilisis nisi. Aliquam erat volutpat. Fusce ac nisl. Donec malesuada. Suspendisse ut est eget odio congue pellentesque. Morbi varius condimentum erat.

+

Lorem ipsum dolor sit amet, conse ctetur adip isici ng elit. Lorem ipsum dolor sit amet, conse ctetur adip isici ng elit.

+
+
+

Mauris fermentum feugiat justo. Quisque urna dolor, sollicitudin id, congue sed, euismod a, ante. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Vestibulum arcu. Nullam sollicitudin convallis velit. Vestibulum magna lacus, adipiscing vitae, sagittis in, porttitor non, nulla. Nulla purus eros, placerat at, rutrum ac, tincidunt quis, neque. Aliquam gravida tempus nibh. Aenean eleifend facilisis nisi. Aliquam erat volutpat. Fusce ac nisl. Donec malesuada. Suspendisse ut est eget odio congue pellentesque. Morbi varius condimentum erat.

+

Gatto di MicheleLorem ipsum dolor sit amet, conse ctetur adip isici ng elit. Mauris fermentum feugiat justo. Quisque urna dolor, sollicitudin id, congue sed, euismod a, ante. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Vestibulum arcu. Nullam sollicitudin convallis velit. Nullam sollicitudin convallis velit. Vestibulum magna lacus, adipiscing vitae, sagittis in, porttitor non, nulla. Nulla purus eros, placerat at, rutrum ac, tincidunt quis, neque. Aliquam gravida tempus nibh.

+

Mauris fermentum feugiat justo. Quisque urna dolor, sollicitudin id, congue sed, euismod a, ante. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Vestibulum arcu. Nullam sollicitudin convallis velit. Vestibulum magna lacus, adipiscing vitae, sagittis in, porttitor non, nulla. Nulla purus eros, placerat at, rutrum ac, tincidunt quis, neque. Aliquam gravida tempus nibh. Aenean eleifend facilisis nisi. Aliquam erat volutpat. Fusce ac nisl. Donec malesuada. Suspendisse ut est eget odio congue pellentesque. Morbi varius condimentum erat.

+
+
+
+

Mauris fermentum feugiat justo. Quisque urna dolor, sollicitudin id, congue sed, euismod a, ante. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Vestibulum arcu. Nullam sollicitudin convallis velit. Vestibulum magna lacus, adipiscing vitae, sagittis in, porttitor non, nulla. Nulla purus eros, placerat at, rutrum ac, tincidunt quis, neque. Aliquam gravida tempus nibh. Aenean eleifend facilisis nisi. Aliquam erat volutpat. Fusce ac nisl. Donec malesuada. Suspendisse ut est eget odio congue pellentesque. Morbi varius condimentum erat. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Vestibulum arcu. Nullam sollicitudin convallis velit. Vestibulum magna lacus, adipiscing vitae, sagittis in, porttitor non, nulla. Nulla purus eros, placerat at, rutrum ac, tincidunt quis, neque. Aliquam gravida tempus nibh. Aenean eleifend facilisis nisi. Aliquam erat volutpat. Fusce ac nisl. Donec malesuada. Suspendisse ut est eget odio congue pellentesque. Morbi varius condimentum erat. Quisque urna dolor, sollicitudin id, congue sed, euismod a, ante.

+
+
+

Mauris fermentum feugiat justo. Quisque urna dolor, sollicitudin id, congue sed, euismod a, ante. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Vestibulum arcu. Nullam sollicitudin convallis velit. Vestibulum magna lacus, adipiscing vitae, sagittis in, porttitor non, nulla. Nulla purus eros, placerat at, rutrum ac, tincidunt quis, neque. Aliquam gravida tempus nibh. Aenean eleifend facilisis nisi. Aliquam erat volutpat. Fusce ac nisl. Donec malesuada. Suspendisse ut est eget odio congue pellentesque. Morbi varius condimentum erat. + Mauris fermentum feugiat justo. Quisque urna dolor, sollicitudin id, congue sed, euismod a, ante. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Vestibulum arcu. Nullam sollicitudin convallis velit. Vestibulum magna lacus, adipiscing vitae, sagittis in, porttitor non, nulla. Nulla purus eros, placerat at, rutrum ac, tincidunt quis, neque. Aliquam gravida tempus nibh. Aenean eleifend facilisis nisi. Aliquam erat volutpat. Fusce ac nisl. Donec malesuada. Suspendisse ut est eget odio congue pellentesque. Morbi varius condimentum erat. + Mauris fermentum feugiat justo.

+
+
+
+

Mauris fermentum feugiat justo. Quisque urna dolor, sollicitudin id, congue sed, euismod a, ante. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Vestibulum arcu. Nullam sollicitudin convallis velit. Vestibulum magna lacus, adipiscing vitae, sagittis in, porttitor non, nulla. Nulla purus eros, placerat at, rutrum ac, tincidunt quis, neque. Aliquam gravida tempus nibh. Aenean eleifend facilisis nisi. Aliquam erat volutpat. Fusce ac nisl.

+
+
+

Mauris fermentum feugiat justo. Quisque urna dolor, sollicitudin id, congue sed, euismod a, ante. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Vestibulum arcu. Nullam sollicitudin convallis velit. Vestibulum magna lacus, adipiscing vitae, sagittis in, porttitor non, nulla. Nulla purus eros, placerat at, rutrum ac, tincidunt quis, neque. Aliquam gravida tempus nibh. Aenean eleifend facilisis nisi. Aliquam erat volutpat. Fusce ac nisl. Donec malesuada. Suspendisse ut est eget odio congue pellentesque. Morbi varius condimentum erat. Donec malesuada. Suspendisse ut est eget odio congue pellentesque. Morbi varius condimentum erat.

+
+
+
+

Mauris fermentum feugiat justo. Quisque urna dolor, sollicitudin id, congue sed, euismod a, ante. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Vestibulum arcu. Nullam sollicitudin convallis velit. Vestibulum magna lacus, adipiscing vitae, sagittis in, porttitor non, nulla. Nulla purus eros, placerat at, rutrum ac, tincidunt quis, neque.

+
+
+

Mauris fermentum feugiat justo. Quisque urna dolor, sollicitudin id, congue sed, euismod a, ante. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Vestibulum arcu. Nullam sollicitudin convallis velit. Vestibulum magna lacus, adipiscing vitae, sagittis in, porttitor non, nulla. Nulla purus eros, placerat at, rutrum ac, tincidunt quis, neque.Aenean eleifend facilisis nisi. Aliquam erat volutpat. Fusce ac nisl. Donec malesuada. Suspendisse ut est eget odio congue pellentesque. Morbi varius condimentum erat. Aliquam gravida tempus nibh.

+
+
+
+

Mauris fermentum feugiat justo. Quisque urna dolor, sollicitudin id, congue sed, euismod a, ante. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Vestibulum arcu. Nullam sollicitudin convallis velit. Vestibulum magna lacus, adipiscing vitae, sagittis in, porttitor non, nulla. Nulla purus eros, placerat at, rutrum ac, tincidunt quis, neque. Aliquam gravida tempus nibh. Aenean eleifend facilisis nisi. Aliquam erat volutpat. Fusce ac nisl. Donec malesuada. Suspendisse ut est eget odio congue pellentesque. Morbi varius condimentum erat.

+
+
+

Mauris fermentum feugiat justo. Quisque urna dolor, sollicitudin id, congue sed, euismod a, ante. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Vestibulum arcu. Nullam sollicitudin convallis velit. Vestibulum magna lacus, adipiscing vitae, sagittis in, porttitor non, nulla. Nulla purus eros, placerat at, rutrum ac, tincidunt quis, neque. Aliquam gravida tempus nibh. Aenean eleifend facilisis nisi. Aliquam erat volutpat. Fusce ac nisl. Donec malesuada. Suspendisse ut est eget odio congue pellentesque. Morbi varius condimentum erat.

+
+
+
+

Mauris fermentum feugiat justo. Quisque urna dolor, sollicitudin id, congue sed, euismod a, ante. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Vestibulum arcu. Nullam sollicitudin convallis velit. Vestibulum magna lacus, adipiscing vitae, sagittis in, porttitor non, nulla. Nulla purus eros, placerat at, rutrum ac, tincidunt quis, neque. Aliquam gravida tempus nibh. Aenean eleifend facilisis nisi.

+
+
+

Mauris fermentum feugiat justo. Quisque urna dolor, sollicitudin id, congue sed, euismod a, ante. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Vestibulum arcu. Nullam sollicitudin convallis velit. Vestibulum magna lacus, adipiscing vitae, sagittis in, porttitor non, nulla. Nulla purus eros, placerat at, rutrum ac, tincidunt quis, neque. Aliquam gravida tempus nibh. Aenean eleifend facilisis nisi.

+
+
+

Mauris fermentum feugiat justo. Quisque urna dolor, sollicitudin id, congue sed, euismod a, ante. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Vestibulum arcu. Nullam sollicitudin convallis velit. Vestibulum magna lacus, adipiscing vitae, sagittis in, porttitor non, nulla. Nulla purus eros, placerat at, rutrum ac, tincidunt quis, neque. Aliquam gravida tempus nibh. Aenean eleifend facilisis nisi. Aliquam erat volutpat. Fusce ac nisl. Donec malesuada. Suspendisse ut est eget odio congue pellentesque. Morbi varius condimentum erat. Aliquam erat volutpat. Fusce ac nisl. Donec malesuada. Suspendisse ut est eget odio congue pellentesque. Morbi varius condimentum erat. Aliquam erat volutpat. Fusce ac nisl. Donec malesuada. Suspendisse ut est eget odio congue pellentesque. Morbi varius condimentum erat.

+
+
+
+

Lorem ipsum dolor sit amet, conse ctetur adip isici ng elit. Lorem ipsum dolor sit amet, conse ctetur adip isici ng elit.

+
+
+
+

Lorem ipsum dolor sit amet, conse ctetur adip isici ng elit. Lorem ipsum dolor sit amet, conse ctetur adip isici ng elit.

+
+
+

Lorem ipsum dolor sit amet, conse ctetur adip isici ng elit. Lorem ipsum dolor sit amet, conse ctetur adip isici ng elit.

+
+
+

Lorem ipsum dolor sit amet, conse ctetur adip isici ng elit. Lorem ipsum dolor sit amet, conse ctetur adip isici ng elit.

+
+
+

Lorem ipsum dolor sit amet, conse ctetur adip isici ng elit. Lorem ipsum dolor sit amet, conse ctetur adip isici ng elit.

+
+
+
+

Lorem ipsum dolor sit amet, conse ctetur adip isici ng elit. Lorem ipsum dolor sit amet, conse ctetur adip isici ng elit.

+
+
+
+

Lorem ipsum dolor sit amet, conse ctetur adip isici ng elit. Lorem ipsum dolor sit amet, conse ctetur adip isici ng elit.

+
+ +
+

Lorem ipsum dolor sit amet

+
+
+

Lorem ipsum dolor sit amet, conse ctetur adip isici ng elit. Lorem ipsum dolor sit amet, conse ctetur adip isici ng elit.

+
+
+

Lorem ipsum dolor sit amet

+
+ + + diff --git a/catalyst-book-code/Chapter_11/Browser-Compatibility/MyApp/root/static/emastic/NewEmastic3.html b/catalyst-book-code/Chapter_11/Browser-Compatibility/MyApp/root/static/emastic/NewEmastic3.html new file mode 100644 index 0000000..cd55ea4 --- /dev/null +++ b/catalyst-book-code/Chapter_11/Browser-Compatibility/MyApp/root/static/emastic/NewEmastic3.html @@ -0,0 +1,108 @@ + + + + +Emastic beta 3 + + + + + + + + + + + + + +
+ + +
+

-10em left *New

+

20em

+
Percent grid inside static Div *New
+
50%
+
50%
+ +
25%
+
25%
+
25%
+
25%
+ +
67,67%
+
33,33%
+ +
33,33%
+
33,33%
+
33,33%
+
+

-10em right *New

+

fluid

+ +
Percent grid inside Fluid Div! Even more flexibility! *New
+
20%
+
20%
+
50%
+
10%
+ +
50%
+
+
25%
+
25%
+
25%
+
25%
+ + + +
+ +
25%
+
25%
+
25%
+
25%
+ +
10%
+
10%
+
10%
+
10%
+
10%
+
10%
+
10%
+
10%
+
10%
+
10%
+ +
67,67%
+
33,33%
+ +
33,33%
+
33,33%
+
33,33%
+ +
35%
+
65%
+
+
+ + +
I'm absolute DIV *New
(20em; left:20em; top:20em)
+
+ + + + diff --git a/catalyst-book-code/Chapter_11/Browser-Compatibility/MyApp/root/static/emastic/Table-Emastic.html b/catalyst-book-code/Chapter_11/Browser-Compatibility/MyApp/root/static/emastic/Table-Emastic.html new file mode 100644 index 0000000..c1615c7 --- /dev/null +++ b/catalyst-book-code/Chapter_11/Browser-Compatibility/MyApp/root/static/emastic/Table-Emastic.html @@ -0,0 +1,90 @@ + + + + +Emastic Tables + + + + + + + + + + +
+ +
Jimi Hendrix - albums
+
+ +
Album
+
Year
+
Price
+
+ +
Are You Experienced
+
1967
+
20$
+
+ +
Axis: Bold as Love
+
1967
+
19$
+
+ +
Electric Ladyland
+
1968
+
15$
+
+ +
Band of Gypsys
+
1970
+
16$
+
+ +
* Is this HTML table?
+
+
+ + + diff --git a/catalyst-book-code/Chapter_11/Browser-Compatibility/MyApp/root/static/emastic/TypographyPulp.html b/catalyst-book-code/Chapter_11/Browser-Compatibility/MyApp/root/static/emastic/TypographyPulp.html new file mode 100644 index 0000000..7ee70f2 --- /dev/null +++ b/catalyst-book-code/Chapter_11/Browser-Compatibility/MyApp/root/static/emastic/TypographyPulp.html @@ -0,0 +1,42 @@ + + + + +Pulp Fiction - Emastic + + + + + + + + + + +
+

What does Marsellus Wallace look like?

+
+

What country are you from?

+ +
+

What!?

+
+ +

What ain't no country I ever heard of. They speak English in What?

+
+

Describe what Marsellus Wallace looks like!

+
Say what again. Say what again, m0therfucker, say what one more Goddamn time!
+
+ + + \ No newline at end of file diff --git a/catalyst-book-code/Chapter_11/Browser-Compatibility/MyApp/root/static/emastic/ad-125x125.gif b/catalyst-book-code/Chapter_11/Browser-Compatibility/MyApp/root/static/emastic/ad-125x125.gif new file mode 100644 index 0000000..5b9b0b5 Binary files /dev/null and b/catalyst-book-code/Chapter_11/Browser-Compatibility/MyApp/root/static/emastic/ad-125x125.gif differ diff --git a/catalyst-book-code/Chapter_11/Browser-Compatibility/MyApp/root/static/emastic/comment.png b/catalyst-book-code/Chapter_11/Browser-Compatibility/MyApp/root/static/emastic/comment.png new file mode 100644 index 0000000..4b53c3d Binary files /dev/null and b/catalyst-book-code/Chapter_11/Browser-Compatibility/MyApp/root/static/emastic/comment.png differ diff --git a/catalyst-book-code/Chapter_11/Browser-Compatibility/MyApp/root/static/emastic/css compressed/grid-min.css b/catalyst-book-code/Chapter_11/Browser-Compatibility/MyApp/root/static/emastic/css compressed/grid-min.css new file mode 100644 index 0000000..abd1ae1 --- /dev/null +++ b/catalyst-book-code/Chapter_11/Browser-Compatibility/MyApp/root/static/emastic/css compressed/grid-min.css @@ -0,0 +1,66 @@ +.main{width:70em;text-align:left;margin:0 auto;} +.clear{clear:both;} +.dl1,.dl2,.dl5,.dl10,.dl15,.dl20,.dl25,.dl30,.dl35,.dl40,.dl45,.dl50,.dl55,.dl60,.dl65,.dl70,.dl75{float:left;display:inline;} +.dr1,.dr2,.dr5,.dr10,.dr15,.dr20,.dr25,.dr30,.dr35,.dr40,.dr45,.dr50,.dr55,.dr60,.dr65,.dr70,.dr75{float:right;display:inline;} +.dl1,.dr1{width:1em;} +.dl2,.dr2{width:2em;} +.dl5,.dr5{width:5em;} +.dl10,.dr10{width:10em;} +.dl15,.dr15{width:15em;} +.dl20,.dr20{width:20em;} +.dl25,.dr25{width:25em;} +.dl30,.dr30{width:30em;} +.dl35,.dr35{width:35em;} +.dl40,.dr40{width:40em;} +.dl45,.dr45{width:45em;} +.dl50,.dr50{width:50em;} +.dl55,.dr55{width:55em;} +.dl60,.dr60{width:60em;} +.dl65,.dr65{width:65em;} +.dl70,.dr70{width:70em;} +.dl75,.dr75{width:75em;} +.ml5{margin-left:5em;} +.ml10{margin-left:10em;} +.ml15{margin-left:15em;} +.ml20{margin-left:20em;} +.ml25{margin-left:25em;} +.ml30{margin-left:30em;} +.ml35{margin-left:35em;} +.ml40{margin-left:40em;} +.ml45{margin-left:45em;} +.ml50{margin-left:50em;} +.ml55{margin-left:55em;} +.ml60{margin-left:60em;} +.ml65{margin-left:65em;} +.ml70{margin-left:70em;} +.ml75{margin-left:75em;} +.mr5{margin-right:5em;} +.mr10{margin-right:10em;} +.mr15{margin-right:15em;} +.mr20{margin-right:20em;} +.mr25{margin-right:25em;} +.mr30{margin-right:30em;} +.mr35{margin-right:35em;} +.mr40{margin-right:40em;} +.mr45{margin-right:45em;} +.mr50{margin-right:50em;} +.mr55{margin-right:55em;} +.mr60{margin-right:60em;} +.mr65{margin-right:65em;} +.mr70{margin-right:70em;} +.mr75{margin-right:75em;} +.mt1{margin-top:1em;} +.mt5{margin-top:5em;} +.mt10{margin-top:10em;} +.mt20{margin-top:20em;} +.mt30{margin-top:30em;} +.mt40{margin-top:40em;} +.mt50{margin-top:50em;} +.fluid{width:auto;float:none;} +div .fluid{padding:0 0 0 .1em;} +.hp{width:100%;float:left;} +.clearfix,.main{display:block;} +.clearfix:after,.main:after{visibility:hidden;display:block;font-size:0;content:" ";clear:both;height:0;} +/* IE5/MAC hack \*/ +* html .clearfix{ display: inline; height: 1px;} +/* close */ \ No newline at end of file diff --git a/catalyst-book-code/Chapter_11/Browser-Compatibility/MyApp/root/static/emastic/css compressed/ie-min.css b/catalyst-book-code/Chapter_11/Browser-Compatibility/MyApp/root/static/emastic/css compressed/ie-min.css new file mode 100644 index 0000000..af1cb75 --- /dev/null +++ b/catalyst-book-code/Chapter_11/Browser-Compatibility/MyApp/root/static/emastic/css compressed/ie-min.css @@ -0,0 +1,3 @@ + +body {text-align:center;} +ol {margin-left:2em;} \ No newline at end of file diff --git a/catalyst-book-code/Chapter_11/Browser-Compatibility/MyApp/root/static/emastic/css compressed/reset-min.css b/catalyst-book-code/Chapter_11/Browser-Compatibility/MyApp/root/static/emastic/css compressed/reset-min.css new file mode 100644 index 0000000..c76063b --- /dev/null +++ b/catalyst-book-code/Chapter_11/Browser-Compatibility/MyApp/root/static/emastic/css compressed/reset-min.css @@ -0,0 +1 @@ +html,body,div,span,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,abbr,acronym,address,code,del,dfn,em,img,q,dl,dt,dd,ol,ul,li,fieldset,form,label,legend,table,caption,tbody,tfoot,thead,tr,th,td{border:0;font-weight:inherit;font-style:inherit;font-size:100%;font-family:inherit;vertical-align:baseline;margin:0;padding:0;}body{line-height:1.5;}table{border-collapse:separate;border-spacing:0;}caption,th,td{text-align:left;font-weight:400;}table,td,th{vertical-align:middle;}blockquote:before,blockquote:after,q:before,q:after{content:"";}blockquote,q{quotes:"" "";}a img{border:none;} diff --git a/catalyst-book-code/Chapter_11/Browser-Compatibility/MyApp/root/static/emastic/css compressed/type-min.css b/catalyst-book-code/Chapter_11/Browser-Compatibility/MyApp/root/static/emastic/css compressed/type-min.css new file mode 100644 index 0000000..28289fb --- /dev/null +++ b/catalyst-book-code/Chapter_11/Browser-Compatibility/MyApp/root/static/emastic/css compressed/type-min.css @@ -0,0 +1,30 @@ +body{font:75%/1.5em Arial, Helvetica, sans-serif;font-size-adjust:none;font-style:normal;font-variant:normal;font-weight:400;} +p{color:#111;word-spacing:.08em;letter-spacing:.03em;padding:0 0 1.5em 1em;} +p img{float:left;margin:0 1em 1em 0;padding:0;} +p img.right{float:right;margin:0 0 1em 1em;} +h1,h2{font-weight:400;color:#333;font-family:Georgia, "Times New Roman", serif;letter-spacing:2px;word-spacing:.1em;} +h3,h4,h5,h6{font-weight:400;color:#333;font-family:Georgia, "Times New Roman", serif;} +h1{font-size:2.2em;margin-bottom:.682em;} +h2{font-size:1.9em;margin-bottom:.79em;} +h3{font-size:1.7em;margin-bottom:.882em;} +h4{font-size:1.4em;margin-bottom:1.071em;} +h5,h6{font-size:1.3em;margin-bottom:1em;} +li ul,li ol{margin:0 1.5em;} +ul,ol{margin:0 1.5em 1.5em;} +dl{margin:0 0 1.5em;} +dl dd{margin-left:1.5em;} +a{color:#035292;text-decoration:none;} +a:hover{text-decoration:underline;} +table{margin-bottom:1.5em;border-collapse:collapse;} +tr,th,td{height:18px;margin:0;padding:0 1.5em 0 1em;} +caption{text-align:center;font-family:Georgia, serif;} +abbr,acronym{border-bottom:1px dotted #000;} +address{margin-top:1.5em;font-style:italic;} +del{color:#000;} +blockquote{padding-left:1.5em;border-left:3px solid #ccc;font-style:italic;margin:1.5em;} +pre,code{white-space:pre;margin:1.5em 0;} +pre,code,tt{font:1em monospace;line-height:1.5;} +tt{display:block;margin:1.5em 0;} +hr{margin-bottom:1.5em;} +dl dt,th,strong,dfn{font-weight:700;} +tfoot,em,dfn{font-style:italic;} \ No newline at end of file diff --git a/catalyst-book-code/Chapter_11/Browser-Compatibility/MyApp/root/static/emastic/css/Thumbs.db b/catalyst-book-code/Chapter_11/Browser-Compatibility/MyApp/root/static/emastic/css/Thumbs.db new file mode 100644 index 0000000..b1f2e96 Binary files /dev/null and b/catalyst-book-code/Chapter_11/Browser-Compatibility/MyApp/root/static/emastic/css/Thumbs.db differ diff --git a/catalyst-book-code/Chapter_11/Browser-Compatibility/MyApp/root/static/emastic/css/grid.css b/catalyst-book-code/Chapter_11/Browser-Compatibility/MyApp/root/static/emastic/css/grid.css new file mode 100644 index 0000000..171cf8a --- /dev/null +++ b/catalyst-book-code/Chapter_11/Browser-Compatibility/MyApp/root/static/emastic/css/grid.css @@ -0,0 +1,126 @@ + + +.main { +width:70em;margin:0 auto;text-align:left; } + +.clear {clear:both;} + +.dl1, +.dl2, +.dl5, +.dl10, +.dl15, +.dl20, +.dl25, +.dl30, +.dl35, +.dl40, +.dl45, +.dl50, +.dl55, +.dl60, +.dl65, +.dl70, +.dl75{float:left; display: inline; } + +.dr1, +.dr2, +.dr5, +.dr10, +.dr15, +.dr20, +.dr25, +.dr30, +.dr35, +.dr40, +.dr45, +.dr50, +.dr55, +.dr60, +.dr65, +.dr70, +.dr75 +{float:right; display: inline; } + +.dl1, .dr1 {width:1em;} +.dl2, .dr2 {width:2em;} +.dl5, .dr5{width:5em;} +.dl10, .dr10{width:10em;} +.dl15, .dr15{width:15em;} +.dl20, .dr20{width:20em;} +.dl25, .dr25{width:25em;} +.dl30, .dr30{width:30em;} +.dl35, .dr35{width:35em;} +.dl40, .dr40{width:40em;} +.dl45, .dr45{width:45em;} +.dl50, .dr50{width:50em;} +.dl55, .dr55{width:55em;} +.dl60, .dr60{width:60em;} +.dl65, .dr65{width:65em;} +.dl70, .dr70{width:70em;} +.dl75, .dr75{width:75em;} + + +.ml5{margin-left:5em;} +.ml10{margin-left:10em;} +.ml15{margin-left:15em;} +.ml20{margin-left:20em;} +.ml25{margin-left:25em;} +.ml30{margin-left:30em;} +.ml35{margin-left:35em;} +.ml40{margin-left:40em;} +.ml45{margin-left:45em;} +.ml50{margin-left:50em;} +.ml55{margin-left:55em;} +.ml60{margin-left:60em;} +.ml65{margin-left:65em;} +.ml70{margin-left:70em;} +.ml75{margin-left:75em;} + +.mr5{margin-right:5em;} +.mr10{margin-right:10em;} +.mr15{margin-right:15em;} +.mr20{margin-right:20em;} +.mr25{margin-right:25em;} +.mr30{margin-right:30em;} +.mr35{margin-right:35em;} +.mr40{margin-right:40em;} +.mr45{margin-right:45em;} +.mr50{margin-right:50em;} +.mr55{margin-right:55em;} +.mr60{margin-right:60em;} +.mr65{margin-right:65em;} +.mr70{margin-right:70em;} +.mr75{margin-right:75em;} + +.mt1{margin-top:1em;} +.mt5{margin-top:5em;} +.mt10{margin-top:10em;} +.mt20{margin-top:20em;} +.mt30{margin-top:30em;} +.mt40{margin-top:40em;} +.mt50{margin-top:50em;} + +.fluid {width:auto; float:none;} +div .fluid {padding:0em 0em 0em 0.1em;} + +.hp{width:100%; float:left; } + +.clearfix, .main{ display:block;} + +.clearfix:after, .main:after { + visibility: hidden; + display: block; + font-size: 0; + content: " "; + clear: both; + height: 0; + + } + +/* IE5/MAC hack \*/ +* html .clearfix{ display: inline; height: 1px;} +/* close */ + + + diff --git a/catalyst-book-code/Chapter_11/Browser-Compatibility/MyApp/root/static/emastic/css/ie.css b/catalyst-book-code/Chapter_11/Browser-Compatibility/MyApp/root/static/emastic/css/ie.css new file mode 100644 index 0000000..27ce4d5 --- /dev/null +++ b/catalyst-book-code/Chapter_11/Browser-Compatibility/MyApp/root/static/emastic/css/ie.css @@ -0,0 +1,3 @@ + +body {text-align:center;} +ol {margin-left:2em;} diff --git a/catalyst-book-code/Chapter_11/Browser-Compatibility/MyApp/root/static/emastic/css/plugins/absolute-grid.css b/catalyst-book-code/Chapter_11/Browser-Compatibility/MyApp/root/static/emastic/css/plugins/absolute-grid.css new file mode 100644 index 0000000..c961620 --- /dev/null +++ b/catalyst-book-code/Chapter_11/Browser-Compatibility/MyApp/root/static/emastic/css/plugins/absolute-grid.css @@ -0,0 +1,64 @@ +.main{position:relative;} +.lf0,.lf5,.lf10,.lf15,.lf20,.lf25,.lf30,.lf35,.lf40,.lf45,.lf50,.lf55,.lf60,.lf65,.lf70,.lf75,.lf80,.lf85,.lfn5,.lfn10,.lfn15,.lfn20,.lfn25,.lfn30, +.tp0,.tp5,.tp10,.tp15,.tp20,.tp25,.tp30,.tp35,.tp40,.tp45,.tp50, +.bt0,.bt5,.bt10,.bt15,.bt20,.bt25,.bt30,.bt35,.bt40,.bt45,.bt50, +.rtn5,.rtn10,.rtn20,.rtn30{position:absolute;} +.lf0{left:0em;} +.lf5{left:5em;} +.lf10{left:10em;} +.lf15{left:15em;} +.lf20{left:20em;} +.lf25{left:25em;} +.lf30{left:30em;} +.lf35{left:35em;} +.lf40{left:40em;} +.lf45{left:45em;} +.lf50{left:50em;} +.lf55{left:55em;} +.lf60{left:60em;} +.lf65{left:65em;} +.lf70{left:70em;} +.lf75{left:75em;} +.lf80{left:80em;} +.lf85{left:85em;} +.lfn5{left:-5em;} +.lfn10{left:-10em;} +.lfn15{left:-15em;} +.lfn20{left:-20em;} +.lfn25{left:-25em;} +.lfn30{left:-30em;} + +.rtn5{right:-5em;} +.rtn10{right:-10em;} +.rtn15{right:-15em;} +.rtn20{right:-20em;} +.rtn25{right:-25em;} +.rtn30{right:-30em;} + +.tp0{top:0em;} +.tp5{top:5em;} +.tp10{top:10em;} +.tp15{top:15em;} +.tp20{top:20em;} +.tp25{top:25em;} +.tp30{top:30em;} +.tp35{top:35em;} +.tp40{top:40em;} +.tp45{top:45em;} +.tp50{top:50em;} +.bt0{bottom:0em;} +.bt5{bottom:0em;} +.bt10{bottom:10em;} +.bt15{bottom:15em;} +.bt20{bottom:20em;} +.bt25{bottom:25em;} +.bt30{bottom:30em;} +.bt35{bottom:35em;} +.bt40{bottom:40em;} +.bt45{bottom:45em;} +.bt50{bottom:50em;} +.zi1{ z-index:1;} +.zi2{ z-index:2;} +.zi3{ z-index:3;} +.zi4{ z-index:4;} +.zi5{ z-index:5;} diff --git a/catalyst-book-code/Chapter_11/Browser-Compatibility/MyApp/root/static/emastic/css/plugins/gadgets.css b/catalyst-book-code/Chapter_11/Browser-Compatibility/MyApp/root/static/emastic/css/plugins/gadgets.css new file mode 100644 index 0000000..7e2bf93 --- /dev/null +++ b/catalyst-book-code/Chapter_11/Browser-Compatibility/MyApp/root/static/emastic/css/plugins/gadgets.css @@ -0,0 +1,52 @@ +/* CSS Document */ +.rc {-moz-border-radius: 10px; -webkit-border-radius: 10px; border:1px solid #fff; } +.fr {border:1px solid #ccc; padding:0.25em;} + +.byline { +font-family: "Lucida Grande", Tahoma; + font-size: 0.865em; + font-weight: lighter; + font-variant: normal; + text-transform: uppercase; + color: #666666; + letter-spacing: 0.4em; + display: block; + margin-bottom: 1.734em; + padding:0em 0em 0em 1em; + } + +.and {font-family: Baskerville, "Goudy Old Style", "Palatino", "Book Antiqua", serif; + font-style: italic; + color: #777; + } + + + +.tc {text-align:center;} +.tr {text-align:right;} +.tl {text-align:left;} +.b{ font-weight:bold;} +.pl1{padding-left:1em;} +.pl2{padding-left:2em;} +.pl3{padding-left:3em;} + + +.water{color:#5582d1;} +.earth{color:#4e3e2c;} +.air{color:#f1fff7;} +.fire{ color:#ff8a19;} + /* drinks food */ + .wine{color:#4a040a;} + .beer{color:#F0C030;} + .caffe{color:#473523;} + .caffe-cream{color:#b68d3d;} + .espresso{color:#2c1901;} + .caramel{color:#ab671f;} + .chocolate{color:#290200;} + .black-pepper{color:#444334;} + .pepper-lite{color:#8d8a72;} + + .lipstick{color:#c20c0c;} + .oldbook{font-family:"Book Antiqua","Warnock Pro","Goudy Old Style","Palatino",Georgia,serif;} +.note{font-family:Georgia, "Times New Roman", Times, serif; font-style:italic; font-size:0.9em; margin:0.1em; color:#333;} +.mono{font-family:"Courier New", Courier, monospace;} diff --git a/catalyst-book-code/Chapter_11/Browser-Compatibility/MyApp/root/static/emastic/css/plugins/percent-grid.css b/catalyst-book-code/Chapter_11/Browser-Compatibility/MyApp/root/static/emastic/css/plugins/percent-grid.css new file mode 100644 index 0000000..a8c7bdc --- /dev/null +++ b/catalyst-book-code/Chapter_11/Browser-Compatibility/MyApp/root/static/emastic/css/plugins/percent-grid.css @@ -0,0 +1,46 @@ +.dp5, +.dp10, +.dp15, +.dp20, +.dp25, +.dp30, +.dp33, +.dp35, +.dp40, +.dp45, +.dp50, +.dp55, +.dp60, +.dp65, +.dp67, +.dp70, +.dp75, +.dp80, +.dp85, +.dp90, +.dp95, +.dp100 +{float:left; display: inline; } + +.dp5{width:5%;} +.dp10{width:10%;*width:9.9%;} +.dp15{width:15%;*width:14.9%;} +.dp20{width:20%;*width:19.9%;} +.dp25{width:25%;*width:24.9%; } +.dp30{width:30%;*width:29.9%;} +.dp33{width:33.33%;*width:33.3%;} +.dp35{width:35%;*width:34.9%;} +.dp40{width:40%;*width:39.9%;} +.dp45{width:45%;*width:44.9%;} +.dp50{width:50%;*width:49.9%;} +.dp55{width:55%;*width:54.9%;} +.dp60{width:60%;*width:59.9%;} +.dp65{width:65%;*width:64.9%;} +.dp67{width:66.67%;*width:66.6%;} +.dp70{width:70%;*width:69.9%;} +.dp75{width:75%;*width:74.9%;} +.dp80{width:80%;*width:79.9%;} +.dp85{width:85%;*width:84.9%;} +.dp90{width:90%;*width:89.9%;} +.dp95{width:95%;*width:94.9%;} +.dp100{width:100%;*width:99.9%;} \ No newline at end of file diff --git a/catalyst-book-code/Chapter_11/Browser-Compatibility/MyApp/root/static/emastic/css/plugins/semantic.css b/catalyst-book-code/Chapter_11/Browser-Compatibility/MyApp/root/static/emastic/css/plugins/semantic.css new file mode 100644 index 0000000..8bc4756 --- /dev/null +++ b/catalyst-book-code/Chapter_11/Browser-Compatibility/MyApp/root/static/emastic/css/plugins/semantic.css @@ -0,0 +1,12 @@ +/* Just name all ID elements you will need in your site + +Emastic suports DIV inside DIV with same width. + +
+
Hello World!
+
Hello CSS!
+
+ + */ + +#header, #sideNav, #footer {float:left; display:inline;} \ No newline at end of file diff --git a/catalyst-book-code/Chapter_11/Browser-Compatibility/MyApp/root/static/emastic/css/reset.css b/catalyst-book-code/Chapter_11/Browser-Compatibility/MyApp/root/static/emastic/css/reset.css new file mode 100644 index 0000000..d1805df --- /dev/null +++ b/catalyst-book-code/Chapter_11/Browser-Compatibility/MyApp/root/static/emastic/css/reset.css @@ -0,0 +1,32 @@ +html, body, div, span, object, iframe, +h1, h2, h3, h4, h5, h6, p, blockquote, pre, +a, abbr, acronym, address, code, +del, dfn, em, img, q, dl, dt, dd, ol, ul, li, +fieldset, form, label, legend, +table, caption, tbody, tfoot, thead, tr, th, td { + margin: 0; + padding: 0; + border: 0; + font-weight: inherit; + font-style: inherit; + font-size: 100%; + font-family: inherit; + vertical-align: baseline; +} + +body { + line-height: 1.5; +} + +/* Tables still need 'cellspacing="0"' in the markup. */ +table { border-collapse: separate; border-spacing: 0; } +caption, th, td { text-align: left; font-weight: normal; } +table, td, th { vertical-align: middle; } + +/* Remove possible quote marks (") from ,
. */ +blockquote:before, blockquote:after, q:before, q:after { content: ""; } +blockquote, q { quotes: "" ""; } + +/* Remove annoying border on linked images. */ +a img { border: none; } + diff --git a/catalyst-book-code/Chapter_11/Browser-Compatibility/MyApp/root/static/emastic/css/type.css b/catalyst-book-code/Chapter_11/Browser-Compatibility/MyApp/root/static/emastic/css/type.css new file mode 100644 index 0000000..da9cc11 --- /dev/null +++ b/catalyst-book-code/Chapter_11/Browser-Compatibility/MyApp/root/static/emastic/css/type.css @@ -0,0 +1,59 @@ + +body { font:75%/1.5em Arial, Helvetica, sans-serif; +font-size-adjust:none; +font-style:normal; +font-variant:normal; +font-weight:normal; + } + +p { padding:0 0 1.5em 1em;color:#111; word-spacing:0.08em; letter-spacing:0.03em; } +p img { float: left; margin: 0 1em 1em 0; padding: 0; } +p img.right { float: right; margin: 0 0 1em 1em; } + +h1,h2{ font-weight:normal; color: #333; font-family:Georgia, "Times New Roman", serif; letter-spacing: 2px; word-spacing:0.1em; } +h3,h4,h5,h6 { font-weight: normal; color: #333; font-family:Georgia, "Times New Roman", serif; } + + +h1 { font-size: 2.2em; margin-bottom: 0.682em; } +h2 { font-size: 1.9em; margin-bottom: 0.79em; } +h3 { font-size: 1.7em; margin-bottom: 0.882em; } +h4 { font-size: 1.4em; margin-bottom: 1.071em; } +h5,h6 { font-size: 1.3em; margin-bottom: 1,154em; } + + +li ul, +li ol { margin:0 1.5em; } +ul, ol { margin: 0 1.5em 1.5em 1.5em; } + + +dl { margin: 0 0 1.5em 0; } +dl dt { font-weight: bold; } +dl dd { margin-left: 1.5em; } + +a { color: #035292; text-decoration: none; } +a:hover { text-decoration: underline; } + + +table { margin-bottom: 1.5em; border-collapse: collapse; } +th {font-weight: bold; } +tr, th, td { margin:0; padding:0 1.5em 0 1em; height:18px; } +tfoot { font-style: italic; } +caption { text-align:center; font-family:Georgia, serif; } + + +abbr, acronym { border-bottom: 1px dotted #000; } +address { margin-top: 1.5em; font-style: italic; } +del { color: #000; } + + +blockquote { padding-left:1.5em; margin: 1.5em; border-left:3px solid #ccc; font-style:italic; } +strong { font-weight: bold; } +em, dfn { font-style: italic; } +dfn { font-weight: bold; } +pre, code { margin: 1.5em 0; white-space: pre; } +pre, code, tt { font: 1em monospace; line-height: 1.5; } +tt { display: block; margin: 1.5em 0; } +hr {margin-bottom:1.5em;} + + + diff --git a/catalyst-book-code/Chapter_11/Browser-Compatibility/MyApp/root/static/emastic/demo3.html b/catalyst-book-code/Chapter_11/Browser-Compatibility/MyApp/root/static/emastic/demo3.html new file mode 100644 index 0000000..cd3d393 --- /dev/null +++ b/catalyst-book-code/Chapter_11/Browser-Compatibility/MyApp/root/static/emastic/demo3.html @@ -0,0 +1,102 @@ + + + + +Demo 3 - Blog Template Emastic + + + + + + + + + + + +
+
 
+

Css Pet Garden

+
+

Lorem ipsum dolor sit amet, conse ctetur adip isici ng elit.

+ +
+

Lorem ipsum dolor sit amet, conse ctetur adip isici ng elit.

+

Mauris fermentum feugiat justo. Quisque urna dolor, sollicitudin id, congue sed, euismod a, ante. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Vestibulum arcu. Nullam sollicitudin convallis velit. Vestibulum magna lacus, adipiscing vitae, sagittis in, porttitor non, nulla. Nulla purus eros, placerat at, rutrum ac, tincidunt quis, neque. Aliquam gravida tempus nibh. Aenean eleifend facilisis nisi. Aliquam erat volutpat. Fusce ac nisl. Donec malesuada. Suspendisse ut est eget odio congue pellentesque. Morbi varius condimentum erat. + Aenean eleifend facilisis nisi. Aliquam erat volutpat. Fusce ac nisl. Donec malesuada. Suspendisse ut est eget odio congue pellentesque. Morbi varius condimentum erat.

+

29/07/2008 | 0 comments

+

Lorem ipsum dolor sit amet, conse ctetur adip isici ng elit.

+

Mauris fermentum feugiat justo. Quisque urna dolor, sollicitudin id, congue sed, euismod a, ante. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Vestibulum arcu. Nullam sollicitudin convallis velit. Vestibulum magna lacus, adipiscing vitae, sagittis in, porttitor non, nulla. Nulla purus eros, placerat at, rutrum ac, tincidunt quis, neque. Aliquam gravida tempus nibh. Aenean eleifend facilisis nisi. Aliquam erat volutpat. Fusce ac nisl. Donec malesuada.Nulla purus eros, placerat at, rutrum ac, tincidunt quis, neque. Aliquam gravida tempus nibh. Aenean eleifend facilisis nisi. Aliquam erat volutpat. Fusce ac nisl. Donec malesuada. Nulla purus eros, placerat at, rutrum ac, tincidunt quis, neque. Aliquam gravida tempus nibh. Aenean eleifend facilisis nisi. Aliquam erat volutpat. Fusce ac nisl. Donec malesuada.Nulla purus eros, placerat at, rutrum ac, tincidunt quis, neque. Aliquam gravida tempus nibh. Aenean eleifend facilisis nisi. Aliquam erat volutpat. Fusce ac nisl. Donec malesuada..Nulla purus eros, placerat at, rutrum ac, tincidunt quis, neque. Aliquam gravida tempus nibh. Aenean eleifend facilisis nisi. Aliquam erat volutpat. Fusce ac nisl. Donec malesuada.

+

29/07/2008 | 0 comments

+

Lorem ipsum dolor sit amet, conse ctetur adip isici ng elit.

+

Mauris fermentum feugiat justo. Quisque urna dolor, sollicitudin id, congue sed, euismod a, ante. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Vestibulum arcu. Nullam sollicitudin convallis velit. Vestibulum magna lacus, adipiscing vitae, sagittis in, porttitor non, nulla. Nulla purus eros, placerat at, rutrum ac, tincidunt quis, neque. Aliquam gravida tempus nibh. Aenean eleifend facilisis nisi. Aliquam erat volutpat. Fusce ac nisl. Donec malesuada. Suspendisse ut est eget odio congue pellentesque. Morbi varius condimentum erat. Mauris fermentum feugiat justo. Quisque urna dolor, sollicitudin id, congue sed, euismod a, ante. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Vestibulum arcu. Quisque urna dolor, sollicitudin id, congue sed, euismod a, ante. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Vestibulum arcu.

+

29/07/2008 | 0 comments

+
+ +
+

+ + + + +

+
+ + + +

Categories

+

+ +

+ +

+ +
+
+ + +

Archives

+ +

+ + + +
+ + +
+ +

Content is licensed under a Creative Commons Public Domain License

+
+ + + + diff --git a/catalyst-book-code/Chapter_11/Browser-Compatibility/MyApp/root/static/emastic/demo4.html b/catalyst-book-code/Chapter_11/Browser-Compatibility/MyApp/root/static/emastic/demo4.html new file mode 100644 index 0000000..a4bc3c6 --- /dev/null +++ b/catalyst-book-code/Chapter_11/Browser-Compatibility/MyApp/root/static/emastic/demo4.html @@ -0,0 +1,64 @@ + + + + +Demo 4 - Emastic + + + + + + + + + + +
+
 
+

Logo - Lorem Ipsum

+

Nullam sollicitudin convallis velit.

+
+
+ +

10 ems

+ + +
+

15 ems

+

+Mauris fermentum feugiat justo. Quisque urna dolor, sollicitudin id, congue sed, euismod a, ante. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Vestibulum arcu. Nullam sollicitudin convallis velit. Vestibulum magna lacus, adipiscing vitae, sagittis in, porttitor non, nulla. Nulla purus eros, placerat at, rutrum ac, tincidunt quis, neque. Aliquam gravida tempus nibh. Aenean eleifend facilisis nisi. Aliquam erat volutpat. Fusce ac nisl. Donec malesuada. Suspendisse ut est eget odio congue pellentesque. Morbi varius condimentum erat. Aenean eleifend facilisis nisi. Aliquam erat volutpat. Fusce ac nisl. Donec malesuada. +

+
+
+

Fluid

+

+Mauris fermentum feugiat justo. Quisque urna dolor, sollicitudin id, congue sed, euismod a, ante. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Vestibulum arcu. Nullam sollicitudin convallis velit. Vestibulum magna lacus, adipiscing vitae, sagittis in, porttitor non, nulla. Nulla purus eros, placerat at, rutrum ac, tincidunt quis, neque. Aliquam gravida tempus nibh. Aenean eleifend facilisis nisi. Aliquam erat volutpat. Fusce ac nisl. Donec malesuada. Suspendisse ut est eget odio congue pellentesque. Morbi varius condimentum erat. Aenean eleifend facilisis nisi. Aliquam erat volutpat. Fusce ac nisl. Donec malesuada. Suspendisse ut est eget odio congue pellentesque. Morbi varius condimentum erat.

+

+Mauris fermentum feugiat justo. Quisque urna dolor, sollicitudin id, congue sed, euismod a, ante. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Vestibulum arcu. Nullam sollicitudin convallis velit. Vestibulum magna lacus, adipiscing vitae, sagittis in, porttitor non, nulla. Nulla purus eros, placerat at, rutrum ac, tincidunt quis, neque. Aliquam gravida tempus nibh. Aenean eleifend facilisis nisi. Aliquam erat volutpat. Fusce ac nisl. Donec malesuada. Suspendisse ut est eget odio congue pellentesque. Morbi varius condimentum erat. Aenean eleifend facilisis nisi. Aliquam erat volutpat. Fusce ac nisl. Donec malesuada.

+

+Mauris fermentum feugiat justo. Quisque urna dolor, sollicitudin id, congue sed, euismod a, ante. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Vestibulum arcu. Nullam sollicitudin convallis velit. Vestibulum magna lacus, adipiscing vitae, sagittis in, porttitor non, nulla. Nulla purus eros, placerat at, rutrum ac, tincidunt quis, neque. Aliquam gravida tempus nibh. Aenean eleifend facilisis nisi. Aliquam erat volutpat. Fusce ac nisl. Donec malesuada. Suspendisse ut est eget odio congue pellentesque. Morbi varius condimentum erat. Aenean eleifend facilisis nisi. Aliquam erat volutpat. +

+
+
Mauris fermentum feugiat justo.
+
+ + + + diff --git a/catalyst-book-code/Chapter_11/Browser-Compatibility/MyApp/root/static/emastic/demo5.html b/catalyst-book-code/Chapter_11/Browser-Compatibility/MyApp/root/static/emastic/demo5.html new file mode 100644 index 0000000..1da596b --- /dev/null +++ b/catalyst-book-code/Chapter_11/Browser-Compatibility/MyApp/root/static/emastic/demo5.html @@ -0,0 +1,42 @@ + + + + +Business card - Emastic + + + + + + + + + + + +
+
+
+

Emastic CSS Framework

+
    +
  • Small
  • +
  • Fluid
  • +
  • Em based
  • +
+http://code.google.com/p/emastic + +
+
+ + + + diff --git a/catalyst-book-code/Chapter_11/Browser-Compatibility/MyApp/root/static/emastic/demo6.html b/catalyst-book-code/Chapter_11/Browser-Compatibility/MyApp/root/static/emastic/demo6.html new file mode 100644 index 0000000..068db9f --- /dev/null +++ b/catalyst-book-code/Chapter_11/Browser-Compatibility/MyApp/root/static/emastic/demo6.html @@ -0,0 +1,58 @@ + + + + +Div inside Div- Emastic + + + + + + + + + + + +
+

+

1 level

+

2 level

+

3 level

+

4 level

+

5 level

+

6 level

+

6 - 1 level

+ +
+

Emastic CSS Framework

+ + http://code.google.com/p/emastic + +
+
+
+
+
+
+
+
+ + + + diff --git a/catalyst-book-code/Chapter_11/Browser-Compatibility/MyApp/root/static/emastic/demo7.html b/catalyst-book-code/Chapter_11/Browser-Compatibility/MyApp/root/static/emastic/demo7.html new file mode 100644 index 0000000..099c1de --- /dev/null +++ b/catalyst-book-code/Chapter_11/Browser-Compatibility/MyApp/root/static/emastic/demo7.html @@ -0,0 +1,74 @@ + + + + +Demo Vertical Spacing - Emastic + + + + + + + + + + +
+
 
+

Emastic - Lorem Ipsum

+ + +
+

+Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Pellentesque interdum convallis nunc. Sed vel nunc vel dui dapibus consectetuer. Nam felis. Maecenas sed leo. Nullam ipsum dui, fringilla ac, bibendum et, vulputate vestibulum, leo. Etiam placerat, libero sit amet cursus euismod, arcu dui blandit nisi, sed faucibus augue nibh in dui. Phasellus augue diam, bibendum at, tempus ac, vehicula in, elit. Donec magna justo, venenatis nec, consectetuer id, vulputate vitae, purus. Proin pellentesque. Nulla non diam. +

+

+Quisque erat urna, porttitor eu, lacinia non, dictum at, nulla. Sed libero. Duis gravida quam a ante. Maecenas porta. In hac habitasse platea dictumst. Vivamus pulvinar, mi eget volutpat laoreet, nulla metus molestie dolor, at tempor magna mauris vitae leo. Pellentesque et neque ornare est ullamcorper posuere. Nullam semper. Mauris molestie augue vel metus. Phasellus dictum vulputate leo. Quisque dolor pede, lacinia vitae, accumsan vitae, elementum ac, neque. Donec velit quam, mattis at, tincidunt ac, luctus sed, lectus. Aenean tortor. Phasellus id mauris. Cras tempus dictum pede. Ut gravida dignissim neque. Aenean at leo ut magna egestas mattis. Proin tempor, diam vitae elementum ultricies, justo tellus placerat ante, nec pretium sem pede at ipsum. +

+ +

+Nunc pede ligula, elementum vitae, feugiat tristique, elementum ac, nisi. Vestibulum at dolor. Nunc ut nibh. Fusce vehicula felis id ante. In non ipsum. Mauris ornare sapien eget lorem. Morbi at sem. Curabitur porttitor. Cras blandit tincidunt sapien. Aliquam neque. Integer rhoncus elit ut justo. Donec id felis sed elit molestie aliquam. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Suspendisse tincidunt. +

+

+Etiam non ante eget lacus fringilla vulputate. Nam sollicitudin quam in urna viverra consectetuer. Sed eleifend erat eget diam. Duis faucibus mauris vel diam. Suspendisse non dui. Nullam condimentum, sapien a feugiat tincidunt, elit lacus blandit metus, et aliquet elit urna vitae justo. Vestibulum sit amet nisi eget velit feugiat pellentesque. Pellentesque tempus, mauris id convallis tempor, turpis est lobortis nisl, at dictum elit nibh non pede. Nam condimentum nunc quis dolor. Aenean mauris pede, congue adipiscing, sagittis eget, molestie ac, erat. Ut congue eros ornare felis. Vivamus lacus enim, pellentesque mattis, lacinia nec, interdum quis, leo. Maecenas tristique. +

+

+Nunc ultrices. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Pellentesque eleifend, est vel pretium varius, elit leo accumsan arcu, et ultrices justo magna at magna. Ut eu pede et lectus egestas dignissim. Quisque convallis lacus ut mauris. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Nam massa odio, pharetra a, viverra quis, dignissim id, lacus. Fusce convallis egestas augue. Suspendisse mi. In commodo magna sit amet magna. Vestibulum tortor. Fusce venenatis. Aliquam ut ante sit amet erat volutpat hendrerit. Nullam eros nibh, hendrerit at, semper sit amet, dictum eu, turpis. Integer tempor, mauris eu viverra consectetuer, risus nibh fringilla leo, ut laoreet lectus dolor in leo. Duis sit amet elit eu justo varius accumsan. Nunc pulvinar erat id mauris. Cras arcu tellus, aliquam sed, consectetuer at, convallis quis, risus. Sed convallis orci elementum tortor. +

+
+
+

+Mauris fermentum feugiat justo. Quisque urna dolor, sollicitudin id, congue sed, euismod a, ante. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Vestibulum arcu. Nullam sollicitudin convallis velit. Vestibulum magna lacus, adipiscing vitae, sagittis in, porttitor non, nulla. Nulla purus eros, placerat at, rutrum ac, tincidunt quis, neque. Aliquam gravida tempus nibh. Aenean eleifend facilisis nisi. Aliquam erat volutpat. Fusce ac nisl. Donec malesuada. Suspendisse ut est eget odio congue pellentesque. Morbi varius condimentum erat. Aenean eleifend facilisis nisi. Aliquam erat volutpat. Fusce ac nisl. Donec malesuada. +

+

+Nulla facilisi. Vivamus elit tortor, ultricies vitae, ullamcorper a, facilisis at, augue. Donec neque turpis, egestas at, gravida consectetuer, laoreet id, enim. Vivamus consequat. Cras sed odio. Aenean velit. Praesent pharetra. Curabitur sit amet justo eu leo lobortis consectetuer. Pellentesque dui turpis, condimentum sed, dictum eget, adipiscing sagittis, mi. Duis eros enim, blandit ac, porttitor vel, hendrerit vitae, elit. Sed blandit porttitor lectus. Integer ante nisl, porttitor nec, feugiat feugiat, viverra ut, tortor. +

+

+Quisque sapien. Donec ut sem elementum metus egestas tristique. Nullam at enim. Curabitur fermentum aliquam augue. In tempor fermentum nisi. Suspendisse eget lacus. Suspendisse potenti. Vivamus eros. Cras nisi pede, consectetuer nec, tincidunt id, eleifend sed, mauris. Quisque mi ante, facilisis id, imperdiet ac, sollicitudin at, lorem. +

+

+Aenean mattis. Quisque sem. Phasellus sapien ipsum, fringilla pharetra, lacinia sed, gravida eget, ante. Mauris quis enim. Maecenas risus. Sed a diam eu magna condimentum mattis. In elit ante, condimentum quis, scelerisque vel, accumsan eu, metus. Morbi cursus felis suscipit mauris. Donec massa. Ut nec neque. Ut a mauris. Pellentesque porta ligula vel diam. Phasellus suscipit nisl sed ante. Nam volutpat massa eu turpis. Phasellus mauris arcu, cursus hendrerit, placerat vel, luctus sit amet, pede. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Vestibulum id mi. Vestibulum adipiscing suscipit urna. Nunc ut quam in diam iaculis tincidunt. Mauris sit amet sem. + +

+

+Duis ligula orci, aliquam non, ultricies vel, vehicula at, arcu. Praesent facilisis dapibus mauris. Quisque vitae nulla. Nulla ultricies neque at velit. Nulla facilisi. Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Pellentesque convallis tincidunt eros. Duis dolor nunc, euismod at, placerat vitae, consectetuer vel, dui. Quisque blandit, lorem ut laoreet mattis, lectus purus feugiat velit, in tristique orci velit eu mi. Fusce pretium mi eget lorem. Vestibulum blandit, sapien in eleifend dictum, arcu lorem feugiat nisl, vitae dapibus ligula nulla non pede. +

+

+Vivamus eget nunc. Curabitur magna mauris, convallis eu, scelerisque sed, tempus ut, ligula. Quisque a eros eget lectus condimentum suscipit. Maecenas ornare venenatis magna. Phasellus consequat sem in nibh. Phasellus at magna vel magna interdum pretium. Ut nunc. Morbi porta malesuada elit. Nunc magna. Praesent fringilla facilisis tellus. Vestibulum malesuada nibh ut nisi. Vestibulum blandit porttitor ligula. Morbi scelerisque felis eget tortor. Sed non quam. Ut tempor aliquam purus. Ut vitae ipsum at enim dictum vestibulum. Ut sed tortor. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Suspendisse cursus. +

+
+
+
+

This is vertical spaced block

+
+ + + + diff --git a/catalyst-book-code/Chapter_11/Browser-Compatibility/MyApp/root/static/emastic/dog.jpg b/catalyst-book-code/Chapter_11/Browser-Compatibility/MyApp/root/static/emastic/dog.jpg new file mode 100644 index 0000000..3dd6a9e Binary files /dev/null and b/catalyst-book-code/Chapter_11/Browser-Compatibility/MyApp/root/static/emastic/dog.jpg differ diff --git a/catalyst-book-code/Chapter_11/Browser-Compatibility/MyApp/root/static/emastic/emastic.png b/catalyst-book-code/Chapter_11/Browser-Compatibility/MyApp/root/static/emastic/emastic.png new file mode 100644 index 0000000..3e6575c Binary files /dev/null and b/catalyst-book-code/Chapter_11/Browser-Compatibility/MyApp/root/static/emastic/emastic.png differ diff --git a/catalyst-book-code/Chapter_11/Browser-Compatibility/MyApp/root/static/emastic/gatto.jpg b/catalyst-book-code/Chapter_11/Browser-Compatibility/MyApp/root/static/emastic/gatto.jpg new file mode 100644 index 0000000..5bde58d Binary files /dev/null and b/catalyst-book-code/Chapter_11/Browser-Compatibility/MyApp/root/static/emastic/gatto.jpg differ diff --git a/catalyst-book-code/Chapter_11/Browser-Compatibility/MyApp/root/static/emastic/grid.png b/catalyst-book-code/Chapter_11/Browser-Compatibility/MyApp/root/static/emastic/grid.png new file mode 100644 index 0000000..7071b44 Binary files /dev/null and b/catalyst-book-code/Chapter_11/Browser-Compatibility/MyApp/root/static/emastic/grid.png differ diff --git a/catalyst-book-code/Chapter_11/Browser-Compatibility/MyApp/root/static/emastic/house.html b/catalyst-book-code/Chapter_11/Browser-Compatibility/MyApp/root/static/emastic/house.html new file mode 100644 index 0000000..4b84d19 --- /dev/null +++ b/catalyst-book-code/Chapter_11/Browser-Compatibility/MyApp/root/static/emastic/house.html @@ -0,0 +1,109 @@ + + + + +House - Emastic + + + + + + + + + + + +
+
 
+
Yes
+
 
+
We
+
 
+ +
 
+
 
+ +
+
+
 
+
 
+
 
+
 
+
+
 
+
 
+
 
+
 
+
+
+
Can
+
+ +
+ + + + diff --git a/catalyst-book-code/Chapter_11/Browser-Compatibility/MyApp/root/static/emastic/panda.jpg b/catalyst-book-code/Chapter_11/Browser-Compatibility/MyApp/root/static/emastic/panda.jpg new file mode 100644 index 0000000..0af6398 Binary files /dev/null and b/catalyst-book-code/Chapter_11/Browser-Compatibility/MyApp/root/static/emastic/panda.jpg differ diff --git a/catalyst-book-code/Chapter_11/Browser-Compatibility/MyApp/root/static/emastic/typography.html b/catalyst-book-code/Chapter_11/Browser-Compatibility/MyApp/root/static/emastic/typography.html new file mode 100644 index 0000000..b021f8c --- /dev/null +++ b/catalyst-book-code/Chapter_11/Browser-Compatibility/MyApp/root/static/emastic/typography.html @@ -0,0 +1,157 @@ + + + + Emastic - CSS Grid Framework (typography) + + + + + + + + + + + + +
+
+

Emastic & Web Typography

+ + + + + +

+Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Fusce sodales ligula sed urna. Aliquam posuere arcu viverra erat. Pellentesque et enim dapibus ante facilisis bibendum. Nam congue dapibus urna. Vestibulum consequat arcu at magna. Nunc faucibus mollis lacus. Nulla tempor luctus tellus. Donec blandit lobortis pede. Vestibulum vel pede ut urna eleifend lacinia. Maecenas ligula nibh, imperdiet at, interdum eget, sagittis eu, enim. Vivamus vel urna. Donec fringilla ullamcorper sem. In risus arcu, pellentesque cursus, faucibus cursus, consequat quis, est. Aliquam id erat. Aliquam arcu. Phasellus vulputate. Integer sem diam, mattis vel, viverra ullamcorper, ultricies quis, nisl. Sed sollicitudin quam ut nisi. Vivamus velit sapien, volutpat eu, faucibus id, nonummy id, urna. +

+ +

+Nunc tincidunt vehicula pede. Integer consequat quam sed nisl. Aenean elit massa, porta at, lacinia ut, elementum vel, metus. Integer eget mauris a quam rutrum ullamcorper. Morbi tempus nunc id mi. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Mauris ut nunc. Maecenas euismod accumsan diam. Ut quam nunc, eleifend at, dignissim a, tincidunt sed, leo. Ut non ligula. Etiam pretium. Proin vulputate. Sed volutpat dui vitae elit. In nec sapien eget elit suscipit scelerisque. Aenean egestas dictum odio. Proin scelerisque turpis. +

+

H2 Paragraph

+

+Praesent iaculis pellentesque est. Nulla facilisi. Etiam fringilla vehicula orci. Aliquam fermentum ipsum id nulla. Aliquam interdum laoreet leo. Cras accumsan. Nam pharetra diam id nunc. Integer blandit tellus vulputate felis. Cras aliquam, eros in euismod aliquam, enim nisl mollis metus, quis fringilla ipsum diam ut pede. Mauris a libero ac velit interdum pulvinar. Nunc ipsum mauris, semper rhoncus, feugiat ut, egestas id, diam. Nullam porttitor condimentum risus. Vivamus nec enim eget nisi commodo euismod. Ut turpis. Nullam malesuada rutrum neque. Nam sodales porta elit. Mauris mollis nisl vel augue. +

+ +

Unordered lists

+
    +
  • Lorem ipsum dolor sit amet
  • +
  • Consectetur adipisicing elit
  • +
  • Sed do eiusmod tempor incididunt ut labore et dolore magna aliqua
  • +
  • Ut enim ad minim veniam
  • +
+

Ordered lists

+
    +
  1. Consectetur adipisicing elit
  2. +
  3. Sed do eiusmod tempor incididunt ut labore
  4. +
  5. Et dolore magna aliqua
  6. +
+

Blockquotes

+
+

Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.

+
+

+Mauris porttitor augue ut ante. Nullam blandit ipsum vel pede. Nunc commodo arcu id pede. Phasellus interdum urna nec ante. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos hymenaeos. Mauris nec felis eu massa facilisis vehicula. Pellentesque odio eros, congue non, dapibus eget, hendrerit sed, nulla. Curabitur sed pede ultricies lacus tristique tempor. Vivamus eget tellus nec justo sagittis porta. Donec ipsum nulla, hendrerit id, cursus sed, dictum non, lectus. In euismod feugiat nibh. Nam pretium, massa eget bibendum consectetuer, magna mauris tincidunt tellus, quis faucibus risus quam bibendum arcu. +

+ +

+Pellentesque tempor, dui ut ultrices viverra, neque urna blandit nisi, id accumsan dolor est vitae risus. Aliquam erat volutpat. Sed aliquet, quam quis aliquet lacinia, leo urna mollis tortor, sed nonummy libero leo eget nunc. Fusce at nibh sit amet sem aliquet convallis. Proin non massa. Phasellus ultricies, purus semper malesuada pellentesque, felis sapien euismod nunc, eget lobortis ipsum magna ac dolor. Aliquam erat volutpat. Donec ultrices nibh a massa. Integer tincidunt ultrices nibh. Nulla vehicula sem sit amet nisi. Vestibulum nisi. Donec turpis diam, sodales eu, tristique nec, consequat sit amet, tortor. Quisque velit tellus, volutpat nec, accumsan quis, elementum ut, libero. Cras pretium mauris ultricies risus. Nulla id nunc. Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Integer pharetra est in tellus. Cras tempus risus auctor velit. +

+

Tables

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Jimi Hendrix - albums
AlbumYearPrice
AlbumYearPrice
Are You Experienced 1967$10.00
Axis: Bold as Love1967$12.00
Electric Ladyland1968$10.00
Band of Gypsys1970$12.00
+

+ Link
+ <strong>
+ <del> deleted
+ <dfn> dfn
+ <em> emphasis +

+ +
+<html>
+	<head>
+	</head>
+	<body>
+	<div class = "main"> <div>
+	</body>
+</html> 
+
+ + <tt> + Pellentesque tempor, dui ut ultrices viverra, neque urna blandit nisi, id accumsan dolor est vitae risus. + + +
+ +

Earth

+

Water

+

Fire

+

Food & Drink

+

Wine

+

Beer

+

Caffe

+

Espresso

+

Cream Caffe

+

Caramel

+

Chocolate

+ +

Black pepper

+

Black pepper II

+

Lipstick

+

Level 01 Heading

+ +

Level 02 Heading

+

Level 03 Heading

+

Level 04 Heading

+
Level 05 Heading
+
Level 06 Heading
+
+ \ No newline at end of file diff --git a/catalyst-book-code/Chapter_11/Browser-Compatibility/MyApp/root/static/emastic/typographyDown.html b/catalyst-book-code/Chapter_11/Browser-Compatibility/MyApp/root/static/emastic/typographyDown.html new file mode 100644 index 0000000..7e268f7 --- /dev/null +++ b/catalyst-book-code/Chapter_11/Browser-Compatibility/MyApp/root/static/emastic/typographyDown.html @@ -0,0 +1,39 @@ + + + + Emastic - CSS Grid Framework (typography) + + + + + + + + + + + +
+
+ +

Come on in framework lovers!

+

Here at the Titty Twister we're slashing framework in half!

+
+

Give us an offer on our vast selection of framework, this is a framework blow out!

+
+

All right, we got white framework, black framework, Spanish framework, yellow framework, we got hot framework, cold framework, we got wet framework, we got smelly framework, we got hairy framework, bloody framework, we got snappin' framework, we got silk framework, + velvet framework, Naugahyde framework, we even got horse framework, dog framework, chicken framework!

+
+
Come on, you want framework, come on in, framework lovers! If we don't got it, you don't want it!
+

Come on in, framework lovers!

+
+ \ No newline at end of file diff --git a/catalyst-book-code/Chapter_11/Browser-Compatibility/MyApp/root/static/emastic/typographyFightClub.html b/catalyst-book-code/Chapter_11/Browser-Compatibility/MyApp/root/static/emastic/typographyFightClub.html new file mode 100644 index 0000000..59a3610 --- /dev/null +++ b/catalyst-book-code/Chapter_11/Browser-Compatibility/MyApp/root/static/emastic/typographyFightClub.html @@ -0,0 +1,49 @@ + + + + Emastic - CSS Grid Framework (typography) + + + + + + + + + + + +
+
+ +

THE RULES OF FIGHT CLUB

+
    +
  1. The first rule of Fight Club Emastic is, you do not talk about Fight Club Emastic.
  2. + +
  3. The second rule of Fight Club Emastic is, you DO NOT talk about Fight Club Emastic.
  4. + +
  5. If someone says stop, goes limp, taps out, the fight is over.
  6. + +
  7. Two guys to a fight.
  8. + +
  9. One fight at a time.
  10. + +
  11. No shirts, no shoes.
  12. + +
  13. Fights will go on as long as they have to.
  14. + +
  15. If this is your first night at Fight Club Emastic, you have to fight use it.
  16. +
+
+ \ No newline at end of file diff --git a/catalyst-book-code/Chapter_11/Browser-Compatibility/MyApp/root/static/images/btn_120x50_built.png b/catalyst-book-code/Chapter_11/Browser-Compatibility/MyApp/root/static/images/btn_120x50_built.png new file mode 100644 index 0000000..c709fd6 Binary files /dev/null and b/catalyst-book-code/Chapter_11/Browser-Compatibility/MyApp/root/static/images/btn_120x50_built.png differ diff --git a/catalyst-book-code/Chapter_11/Browser-Compatibility/MyApp/root/static/images/btn_120x50_built_shadow.png b/catalyst-book-code/Chapter_11/Browser-Compatibility/MyApp/root/static/images/btn_120x50_built_shadow.png new file mode 100644 index 0000000..15142fe Binary files /dev/null and b/catalyst-book-code/Chapter_11/Browser-Compatibility/MyApp/root/static/images/btn_120x50_built_shadow.png differ diff --git a/catalyst-book-code/Chapter_11/Browser-Compatibility/MyApp/root/static/images/btn_120x50_powered.png b/catalyst-book-code/Chapter_11/Browser-Compatibility/MyApp/root/static/images/btn_120x50_powered.png new file mode 100644 index 0000000..7249b47 Binary files /dev/null and b/catalyst-book-code/Chapter_11/Browser-Compatibility/MyApp/root/static/images/btn_120x50_powered.png differ diff --git a/catalyst-book-code/Chapter_11/Browser-Compatibility/MyApp/root/static/images/btn_120x50_powered_shadow.png b/catalyst-book-code/Chapter_11/Browser-Compatibility/MyApp/root/static/images/btn_120x50_powered_shadow.png new file mode 100644 index 0000000..e6876c0 Binary files /dev/null and b/catalyst-book-code/Chapter_11/Browser-Compatibility/MyApp/root/static/images/btn_120x50_powered_shadow.png differ diff --git a/catalyst-book-code/Chapter_11/Browser-Compatibility/MyApp/root/static/images/btn_88x31_built.png b/catalyst-book-code/Chapter_11/Browser-Compatibility/MyApp/root/static/images/btn_88x31_built.png new file mode 100644 index 0000000..007b5db Binary files /dev/null and b/catalyst-book-code/Chapter_11/Browser-Compatibility/MyApp/root/static/images/btn_88x31_built.png differ diff --git a/catalyst-book-code/Chapter_11/Browser-Compatibility/MyApp/root/static/images/btn_88x31_built_shadow.png b/catalyst-book-code/Chapter_11/Browser-Compatibility/MyApp/root/static/images/btn_88x31_built_shadow.png new file mode 100644 index 0000000..ccf4624 Binary files /dev/null and b/catalyst-book-code/Chapter_11/Browser-Compatibility/MyApp/root/static/images/btn_88x31_built_shadow.png differ diff --git a/catalyst-book-code/Chapter_11/Browser-Compatibility/MyApp/root/static/images/btn_88x31_powered.png b/catalyst-book-code/Chapter_11/Browser-Compatibility/MyApp/root/static/images/btn_88x31_powered.png new file mode 100644 index 0000000..8f0cd9f Binary files /dev/null and b/catalyst-book-code/Chapter_11/Browser-Compatibility/MyApp/root/static/images/btn_88x31_powered.png differ diff --git a/catalyst-book-code/Chapter_11/Browser-Compatibility/MyApp/root/static/images/btn_88x31_powered_shadow.png b/catalyst-book-code/Chapter_11/Browser-Compatibility/MyApp/root/static/images/btn_88x31_powered_shadow.png new file mode 100644 index 0000000..aa776fa Binary files /dev/null and b/catalyst-book-code/Chapter_11/Browser-Compatibility/MyApp/root/static/images/btn_88x31_powered_shadow.png differ diff --git a/catalyst-book-code/Chapter_11/Browser-Compatibility/MyApp/root/static/images/catalyst_logo.png b/catalyst-book-code/Chapter_11/Browser-Compatibility/MyApp/root/static/images/catalyst_logo.png new file mode 100644 index 0000000..21f1cac Binary files /dev/null and b/catalyst-book-code/Chapter_11/Browser-Compatibility/MyApp/root/static/images/catalyst_logo.png differ diff --git a/catalyst-book-code/Chapter_11/Browser-Compatibility/MyApp/script/myapp_cgi.pl b/catalyst-book-code/Chapter_11/Browser-Compatibility/MyApp/script/myapp_cgi.pl new file mode 100644 index 0000000..362fc78 --- /dev/null +++ b/catalyst-book-code/Chapter_11/Browser-Compatibility/MyApp/script/myapp_cgi.pl @@ -0,0 +1,37 @@ +#!/usr/bin/perl -w + +BEGIN { $ENV{CATALYST_ENGINE} ||= 'CGI' } + +use strict; +use warnings; +use FindBin; +use lib "$FindBin::Bin/../lib"; +use MyApp; + +MyApp->run; + +1; + +=head1 NAME + +myapp_cgi.pl - Catalyst CGI + +=head1 SYNOPSIS + +See L + +=head1 DESCRIPTION + +Run a Catalyst application as a cgi script. + +=head1 AUTHORS + +Catalyst Contributors, see Catalyst.pm + +=head1 COPYRIGHT + + +This library is free software, you can redistribute it and/or modify +it under the same terms as Perl itself. + +=cut diff --git a/catalyst-book-code/Chapter_11/Browser-Compatibility/MyApp/script/myapp_create.pl b/catalyst-book-code/Chapter_11/Browser-Compatibility/MyApp/script/myapp_create.pl new file mode 100644 index 0000000..747a6f0 --- /dev/null +++ b/catalyst-book-code/Chapter_11/Browser-Compatibility/MyApp/script/myapp_create.pl @@ -0,0 +1,74 @@ +#!/usr/bin/perl -w + +use strict; +use warnings; +use Getopt::Long; +use Pod::Usage; +use Catalyst::Helper; + +my $force = 0; +my $mech = 0; +my $help = 0; + +GetOptions( + 'nonew|force' => \$force, + 'mech|mechanize' => \$mech, + 'help|?' => \$help + ); + +pod2usage(1) if ( $help || !$ARGV[0] ); + +my $helper = Catalyst::Helper->new( { '.newfiles' => !$force, mech => $mech } ); + +pod2usage(1) unless $helper->mk_component( 'MyApp', @ARGV ); + +1; + +=head1 NAME + +myapp_create.pl - Create a new Catalyst Component + +=head1 SYNOPSIS + +myapp_create.pl [options] model|view|controller name [helper] [options] + + Options: + -force don't create a .new file where a file to be created exists + -mechanize use Test::WWW::Mechanize::Catalyst for tests if available + -help display this help and exits + + Examples: + myapp_create.pl controller My::Controller + myapp_create.pl controller My::Controller BindLex + myapp_create.pl -mechanize controller My::Controller + myapp_create.pl view My::View + myapp_create.pl view MyView TT + myapp_create.pl view TT TT + myapp_create.pl model My::Model + myapp_create.pl model SomeDB DBIC::Schema MyApp::Schema create=dynamic\ + dbi:SQLite:/tmp/my.db + myapp_create.pl model AnotherDB DBIC::Schema MyApp::Schema create=static\ + dbi:Pg:dbname=foo root 4321 + + See also: + perldoc Catalyst::Manual + perldoc Catalyst::Manual::Intro + +=head1 DESCRIPTION + +Create a new Catalyst Component. + +Existing component files are not overwritten. If any of the component files +to be created already exist the file will be written with a '.new' suffix. +This behavior can be suppressed with the C<-force> option. + +=head1 AUTHORS + +Catalyst Contributors, see Catalyst.pm + +=head1 COPYRIGHT + +This library is free software, you can redistribute it and/or modify +it under the same terms as Perl itself. + +=cut diff --git a/catalyst-book-code/Chapter_11/Browser-Compatibility/MyApp/script/myapp_fastcgi.pl b/catalyst-book-code/Chapter_11/Browser-Compatibility/MyApp/script/myapp_fastcgi.pl new file mode 100644 index 0000000..ade4959 --- /dev/null +++ b/catalyst-book-code/Chapter_11/Browser-Compatibility/MyApp/script/myapp_fastcgi.pl @@ -0,0 +1,79 @@ +#!/usr/bin/perl -w + +BEGIN { $ENV{CATALYST_ENGINE} ||= 'FastCGI' } + +use strict; +use warnings; +use Getopt::Long; +use Pod::Usage; +use FindBin; +use lib "$FindBin::Bin/../lib"; +use MyApp; + +my $help = 0; +my ( $listen, $nproc, $pidfile, $manager, $detach, $keep_stderr ); + +GetOptions( + 'help|?' => \$help, + 'listen|l=s' => \$listen, + 'nproc|n=i' => \$nproc, + 'pidfile|p=s' => \$pidfile, + 'manager|M=s' => \$manager, + 'daemon|d' => \$detach, + 'keeperr|e' => \$keep_stderr, +); + +pod2usage(1) if $help; + +MyApp->run( + $listen, + { nproc => $nproc, + pidfile => $pidfile, + manager => $manager, + detach => $detach, + keep_stderr => $keep_stderr, + } +); + +1; + +=head1 NAME + +myapp_fastcgi.pl - Catalyst FastCGI + +=head1 SYNOPSIS + +myapp_fastcgi.pl [options] + + Options: + -? -help display this help and exits + -l -listen Socket path to listen on + (defaults to standard input) + can be HOST:PORT, :PORT or a + filesystem path + -n -nproc specify number of processes to keep + to serve requests (defaults to 1, + requires -listen) + -p -pidfile specify filename for pid file + (requires -listen) + -d -daemon daemonize (requires -listen) + -M -manager specify alternate process manager + (FCGI::ProcManager sub-class) + or empty string to disable + -e -keeperr send error messages to STDOUT, not + to the webserver + +=head1 DESCRIPTION + +Run a Catalyst application as fastcgi. + +=head1 AUTHORS + +Catalyst Contributors, see Catalyst.pm + +=head1 COPYRIGHT + +This library is free software, you can redistribute it and/or modify +it under the same terms as Perl itself. + +=cut diff --git a/catalyst-book-code/Chapter_11/Browser-Compatibility/MyApp/script/myapp_server.pl b/catalyst-book-code/Chapter_11/Browser-Compatibility/MyApp/script/myapp_server.pl new file mode 100644 index 0000000..ffd0163 --- /dev/null +++ b/catalyst-book-code/Chapter_11/Browser-Compatibility/MyApp/script/myapp_server.pl @@ -0,0 +1,114 @@ +#!/usr/bin/perl -w + +BEGIN { + $ENV{CATALYST_ENGINE} ||= 'HTTP'; + $ENV{CATALYST_SCRIPT_GEN} = 31; + require Catalyst::Engine::HTTP; +} + +use strict; +use warnings; +use Getopt::Long; +use Pod::Usage; +use FindBin; +use lib "$FindBin::Bin/../lib"; + +my $debug = 0; +my $fork = 0; +my $help = 0; +my $host = undef; +my $port = $ENV{MYAPP_PORT} || $ENV{CATALYST_PORT} || 3000; +my $keepalive = 0; +my $restart = $ENV{MYAPP_RELOAD} || $ENV{CATALYST_RELOAD} || 0; +my $restart_delay = 1; +my $restart_regex = '(?:/|^)(?!\.#).+(?:\.yml$|\.yaml$|\.conf|\.pm)$'; +my $restart_directory = undef; +my $follow_symlinks = 0; + +my @argv = @ARGV; + +GetOptions( + 'debug|d' => \$debug, + 'fork' => \$fork, + 'help|?' => \$help, + 'host=s' => \$host, + 'port=s' => \$port, + 'keepalive|k' => \$keepalive, + 'restart|r' => \$restart, + 'restartdelay|rd=s' => \$restart_delay, + 'restartregex|rr=s' => \$restart_regex, + 'restartdirectory=s@' => \$restart_directory, + 'followsymlinks' => \$follow_symlinks, +); + +pod2usage(1) if $help; + +if ( $restart && $ENV{CATALYST_ENGINE} eq 'HTTP' ) { + $ENV{CATALYST_ENGINE} = 'HTTP::Restarter'; +} +if ( $debug ) { + $ENV{CATALYST_DEBUG} = 1; +} + +# This is require instead of use so that the above environment +# variables can be set at runtime. +require MyApp; + +MyApp->run( $port, $host, { + argv => \@argv, + 'fork' => $fork, + keepalive => $keepalive, + restart => $restart, + restart_delay => $restart_delay, + restart_regex => qr/$restart_regex/, + restart_directory => $restart_directory, + follow_symlinks => $follow_symlinks, +} ); + +1; + +=head1 NAME + +myapp_server.pl - Catalyst Testserver + +=head1 SYNOPSIS + +myapp_server.pl [options] + + Options: + -d -debug force debug mode + -f -fork handle each request in a new process + (defaults to false) + -? -help display this help and exits + -host host (defaults to all) + -p -port port (defaults to 3000) + -k -keepalive enable keep-alive connections + -r -restart restart when files get modified + (defaults to false) + -rd -restartdelay delay between file checks + -rr -restartregex regex match files that trigger + a restart when modified + (defaults to '\.yml$|\.yaml$|\.conf|\.pm$') + -restartdirectory the directory to search for + modified files, can be set mulitple times + (defaults to '[SCRIPT_DIR]/..') + -follow_symlinks follow symlinks in search directories + (defaults to false. this is a no-op on Win32) + See also: + perldoc Catalyst::Manual + perldoc Catalyst::Manual::Intro + +=head1 DESCRIPTION + +Run a Catalyst Testserver for this application. + +=head1 AUTHORS + +Catalyst Contributors, see Catalyst.pm + +=head1 COPYRIGHT + +This library is free software, you can redistribute it and/or modify +it under the same terms as Perl itself. + +=cut diff --git a/catalyst-book-code/Chapter_11/Browser-Compatibility/MyApp/script/myapp_test.pl b/catalyst-book-code/Chapter_11/Browser-Compatibility/MyApp/script/myapp_test.pl new file mode 100644 index 0000000..aa7fd0c --- /dev/null +++ b/catalyst-book-code/Chapter_11/Browser-Compatibility/MyApp/script/myapp_test.pl @@ -0,0 +1,53 @@ +#!/usr/bin/perl -w + +use strict; +use warnings; +use Getopt::Long; +use Pod::Usage; +use FindBin; +use lib "$FindBin::Bin/../lib"; +use Catalyst::Test 'MyApp'; + +my $help = 0; + +GetOptions( 'help|?' => \$help ); + +pod2usage(1) if ( $help || !$ARGV[0] ); + +print request($ARGV[0])->content . "\n"; + +1; + +=head1 NAME + +myapp_test.pl - Catalyst Test + +=head1 SYNOPSIS + +myapp_test.pl [options] uri + + Options: + -help display this help and exits + + Examples: + myapp_test.pl http://localhost/some_action + myapp_test.pl /some_action + + See also: + perldoc Catalyst::Manual + perldoc Catalyst::Manual::Intro + +=head1 DESCRIPTION + +Run a Catalyst action from the command line. + +=head1 AUTHORS + +Catalyst Contributors, see Catalyst.pm + +=head1 COPYRIGHT + +This library is free software, you can redistribute it and/or modify +it under the same terms as Perl itself. + +=cut diff --git a/catalyst-book-code/Chapter_11/Browser-Compatibility/MyApp/t/01app.t b/catalyst-book-code/Chapter_11/Browser-Compatibility/MyApp/t/01app.t new file mode 100644 index 0000000..2fd0eed --- /dev/null +++ b/catalyst-book-code/Chapter_11/Browser-Compatibility/MyApp/t/01app.t @@ -0,0 +1,7 @@ +use strict; +use warnings; +use Test::More tests => 2; + +BEGIN { use_ok 'Catalyst::Test', 'MyApp' } + +ok( request('/')->is_success, 'Request should succeed' ); diff --git a/catalyst-book-code/Chapter_11/Browser-Compatibility/MyApp/t/02pod.t b/catalyst-book-code/Chapter_11/Browser-Compatibility/MyApp/t/02pod.t new file mode 100644 index 0000000..251640d --- /dev/null +++ b/catalyst-book-code/Chapter_11/Browser-Compatibility/MyApp/t/02pod.t @@ -0,0 +1,9 @@ +use strict; +use warnings; +use Test::More; + +eval "use Test::Pod 1.14"; +plan skip_all => 'Test::Pod 1.14 required' if $@; +plan skip_all => 'set TEST_POD to enable this test' unless $ENV{TEST_POD}; + +all_pod_files_ok(); diff --git a/catalyst-book-code/Chapter_11/Browser-Compatibility/MyApp/t/03podcoverage.t b/catalyst-book-code/Chapter_11/Browser-Compatibility/MyApp/t/03podcoverage.t new file mode 100644 index 0000000..ae59d4c --- /dev/null +++ b/catalyst-book-code/Chapter_11/Browser-Compatibility/MyApp/t/03podcoverage.t @@ -0,0 +1,9 @@ +use strict; +use warnings; +use Test::More; + +eval "use Test::Pod::Coverage 1.04"; +plan skip_all => 'Test::Pod::Coverage 1.04 required' if $@; +plan skip_all => 'set TEST_POD to enable this test' unless $ENV{TEST_POD}; + +all_pod_coverage_ok(); diff --git a/catalyst-book-code/Chapter_11/Browser-Compatibility/MyApp/t/view_Web.t b/catalyst-book-code/Chapter_11/Browser-Compatibility/MyApp/t/view_Web.t new file mode 100644 index 0000000..c26f1c0 --- /dev/null +++ b/catalyst-book-code/Chapter_11/Browser-Compatibility/MyApp/t/view_Web.t @@ -0,0 +1,6 @@ +use strict; +use warnings; +use Test::More tests => 1; + +BEGIN { use_ok 'MyApp::View::Web' } + diff --git a/catalyst-book-code/Chapter_11/Catalyst-Controller-CGIBin/CGIApp/Changes b/catalyst-book-code/Chapter_11/Catalyst-Controller-CGIBin/CGIApp/Changes new file mode 100644 index 0000000..efaa7a3 --- /dev/null +++ b/catalyst-book-code/Chapter_11/Catalyst-Controller-CGIBin/CGIApp/Changes @@ -0,0 +1,4 @@ +This file documents the revision history for Perl extension CGIApp. + +0.01 2009-04-23 20:04:32 + - initial revision, generated by Catalyst diff --git a/catalyst-book-code/Chapter_11/Catalyst-Controller-CGIBin/CGIApp/Makefile.PL b/catalyst-book-code/Chapter_11/Catalyst-Controller-CGIBin/CGIApp/Makefile.PL new file mode 100644 index 0000000..3da0703 --- /dev/null +++ b/catalyst-book-code/Chapter_11/Catalyst-Controller-CGIBin/CGIApp/Makefile.PL @@ -0,0 +1,21 @@ +# IMPORTANT: if you delete this file your app will not work as +# expected. you have been warned +use inc::Module::Install; + +name 'CGIApp'; +all_from 'lib/CGIApp.pm'; + +requires 'Catalyst::Runtime' => '5.80002'; +requires 'Catalyst::Plugin::ConfigLoader'; +requires 'Catalyst::Plugin::Static::Simple'; +requires 'Catalyst::Action::RenderView'; +requires 'parent'; +requires 'Config::General'; # This should reflect the config file format you've chosen + # See Catalyst::Plugin::ConfigLoader for supported formats +requires 'Path::Class'; + +catalyst; + +install_script glob('script/*.pl'); +auto_install; +WriteAll; diff --git a/catalyst-book-code/Chapter_11/Catalyst-Controller-CGIBin/CGIApp/README b/catalyst-book-code/Chapter_11/Catalyst-Controller-CGIBin/CGIApp/README new file mode 100644 index 0000000..ec28e80 --- /dev/null +++ b/catalyst-book-code/Chapter_11/Catalyst-Controller-CGIBin/CGIApp/README @@ -0,0 +1 @@ +Run script/cgiapp_server.pl to test the application. diff --git a/catalyst-book-code/Chapter_11/Catalyst-Controller-CGIBin/CGIApp/cgiapp.conf b/catalyst-book-code/Chapter_11/Catalyst-Controller-CGIBin/CGIApp/cgiapp.conf new file mode 100644 index 0000000..993b334 --- /dev/null +++ b/catalyst-book-code/Chapter_11/Catalyst-Controller-CGIBin/CGIApp/cgiapp.conf @@ -0,0 +1,3 @@ +# rename this file to CGIApp.yml and put a : in front of "name" if +# you want to use yaml like in old versions of Catalyst +name CGIApp diff --git a/catalyst-book-code/Chapter_11/Catalyst-Controller-CGIBin/CGIApp/lib/CGIApp.pm b/catalyst-book-code/Chapter_11/Catalyst-Controller-CGIBin/CGIApp/lib/CGIApp.pm new file mode 100644 index 0000000..ded834f --- /dev/null +++ b/catalyst-book-code/Chapter_11/Catalyst-Controller-CGIBin/CGIApp/lib/CGIApp.pm @@ -0,0 +1,64 @@ +package CGIApp; + +use strict; +use warnings; + +use Catalyst::Runtime '5.70'; + +# Set flags and add plugins for the application +# +# -Debug: activates the debug mode for very useful log messages +# ConfigLoader: will load the configuration from a Config::General file in the +# application's home directory +# Static::Simple: will serve static files from the application's root +# directory + +use parent qw/Catalyst/; +use Catalyst qw/-Debug + ConfigLoader + Static::Simple/; +our $VERSION = '0.01'; + +# Configure the application. +# +# Note that settings in cgiapp.conf (or other external +# configuration file that you set up manually) take precedence +# over this when using ConfigLoader. Thus configuration +# details given here can function as a default configuration, +# with an external configuration file acting as an override for +# local deployment. + +__PACKAGE__->config( name => 'CGIApp' ); + +# Start the application +__PACKAGE__->setup(); + + +=head1 NAME + +CGIApp - Catalyst based application + +=head1 SYNOPSIS + + script/cgiapp_server.pl + +=head1 DESCRIPTION + +[enter your description here] + +=head1 SEE ALSO + +L, L + +=head1 AUTHOR + +Rafael Kitover,,, + +=head1 LICENSE + +This library is free software. You can redistribute it and/or modify +it under the same terms as Perl itself. + +=cut + +1; diff --git a/catalyst-book-code/Chapter_11/Catalyst-Controller-CGIBin/CGIApp/lib/CGIApp/Controller/CGIBin.pm b/catalyst-book-code/Chapter_11/Catalyst-Controller-CGIBin/CGIApp/lib/CGIApp/Controller/CGIBin.pm new file mode 100644 index 0000000..fbf9813 --- /dev/null +++ b/catalyst-book-code/Chapter_11/Catalyst-Controller-CGIBin/CGIApp/lib/CGIApp/Controller/CGIBin.pm @@ -0,0 +1,7 @@ +package CGIApp::Controller::CGIBin; + +use strict; +use warnings; +use parent 'Catalyst::Controller::CGIBin'; + +1; diff --git a/catalyst-book-code/Chapter_11/Catalyst-Controller-CGIBin/CGIApp/lib/CGIApp/Controller/Root.pm b/catalyst-book-code/Chapter_11/Catalyst-Controller-CGIBin/CGIApp/lib/CGIApp/Controller/Root.pm new file mode 100644 index 0000000..7217cfc --- /dev/null +++ b/catalyst-book-code/Chapter_11/Catalyst-Controller-CGIBin/CGIApp/lib/CGIApp/Controller/Root.pm @@ -0,0 +1,61 @@ +package CGIApp::Controller::Root; + +use strict; +use warnings; +use parent 'Catalyst::Controller'; + +# +# Sets the actions in this controller to be registered with no prefix +# so they function identically to actions created in MyApp.pm +# +__PACKAGE__->config->{namespace} = ''; + +=head1 NAME + +CGIApp::Controller::Root - Root Controller for CGIApp + +=head1 DESCRIPTION + +[enter your description here] + +=head1 METHODS + +=cut + +=head2 index + +=cut + +sub index :Path :Args(0) { + my ( $self, $c ) = @_; + + # Hello World + $c->response->body( $c->welcome_message ); +} + +sub default :Path { + my ( $self, $c ) = @_; + $c->response->body( 'Page not found' ); + $c->response->status(404); +} + +=head2 end + +Attempt to render a view, if needed. + +=cut + +sub end : ActionClass('RenderView') {} + +=head1 AUTHOR + +Rafael Kitover,,, + +=head1 LICENSE + +This library is free software. You can redistribute it and/or modify +it under the same terms as Perl itself. + +=cut + +1; diff --git a/catalyst-book-code/Chapter_11/Catalyst-Controller-CGIBin/CGIApp/lib/CGIApp/Controller/WrapCGI.pm b/catalyst-book-code/Chapter_11/Catalyst-Controller-CGIBin/CGIApp/lib/CGIApp/Controller/WrapCGI.pm new file mode 100644 index 0000000..a50c6d4 --- /dev/null +++ b/catalyst-book-code/Chapter_11/Catalyst-Controller-CGIBin/CGIApp/lib/CGIApp/Controller/WrapCGI.pm @@ -0,0 +1,15 @@ +package CGIApp::Controller::WrapCGI; + +use strict; +use warnings; +use parent 'Catalyst::Controller::WrapCGI'; +use FindBin qw/$Bin/; + +sub serve_cgi :Path :Args(1) { + my ($self, $c, $file) = @_; + $self->cgi_to_response($c, sub { + system ($^X, $c->path_to("root/cgi-bin/$file") ); + }); +} + +1; diff --git a/catalyst-book-code/Chapter_11/Catalyst-Controller-CGIBin/CGIApp/root/cgi-bin/acgi.pl b/catalyst-book-code/Chapter_11/Catalyst-Controller-CGIBin/CGIApp/root/cgi-bin/acgi.pl new file mode 100644 index 0000000..399d68e --- /dev/null +++ b/catalyst-book-code/Chapter_11/Catalyst-Controller-CGIBin/CGIApp/root/cgi-bin/acgi.pl @@ -0,0 +1,35 @@ +#!/usr/bin/env perl + +use warnings; +use strict; +use Template; + +my $template = Template->new(); +my @dwarfs = qw/Bashful Doc Dopey Grumpy Happy Sleepy Sneezy/; +my $cgi_stash = { + title => "Howdy!", + message => "Hello World!", + dwarfs => \@dwarfs, +}; + +$template->process(\*DATA, $cgi_stash); + +__DATA__ +Content-Type: text/html; charset=ISO-8859-1 + + + + +[% title %] + + + +

[% message %]

+
    +[%- FOREACH dwarf IN dwarfs -%] +
  • [% dwarf; IF dwarf != dwarfs.last %] and [% END -%]
  • +[%- END %]. + + diff --git a/catalyst-book-code/Chapter_11/Catalyst-Controller-CGIBin/CGIApp/root/favicon.ico b/catalyst-book-code/Chapter_11/Catalyst-Controller-CGIBin/CGIApp/root/favicon.ico new file mode 100644 index 0000000..5ad723d Binary files /dev/null and b/catalyst-book-code/Chapter_11/Catalyst-Controller-CGIBin/CGIApp/root/favicon.ico differ diff --git a/catalyst-book-code/Chapter_11/Catalyst-Controller-CGIBin/CGIApp/root/static/images/btn_120x50_built.png b/catalyst-book-code/Chapter_11/Catalyst-Controller-CGIBin/CGIApp/root/static/images/btn_120x50_built.png new file mode 100644 index 0000000..c709fd6 Binary files /dev/null and b/catalyst-book-code/Chapter_11/Catalyst-Controller-CGIBin/CGIApp/root/static/images/btn_120x50_built.png differ diff --git a/catalyst-book-code/Chapter_11/Catalyst-Controller-CGIBin/CGIApp/root/static/images/btn_120x50_built_shadow.png b/catalyst-book-code/Chapter_11/Catalyst-Controller-CGIBin/CGIApp/root/static/images/btn_120x50_built_shadow.png new file mode 100644 index 0000000..15142fe Binary files /dev/null and b/catalyst-book-code/Chapter_11/Catalyst-Controller-CGIBin/CGIApp/root/static/images/btn_120x50_built_shadow.png differ diff --git a/catalyst-book-code/Chapter_11/Catalyst-Controller-CGIBin/CGIApp/root/static/images/btn_120x50_powered.png b/catalyst-book-code/Chapter_11/Catalyst-Controller-CGIBin/CGIApp/root/static/images/btn_120x50_powered.png new file mode 100644 index 0000000..7249b47 Binary files /dev/null and b/catalyst-book-code/Chapter_11/Catalyst-Controller-CGIBin/CGIApp/root/static/images/btn_120x50_powered.png differ diff --git a/catalyst-book-code/Chapter_11/Catalyst-Controller-CGIBin/CGIApp/root/static/images/btn_120x50_powered_shadow.png b/catalyst-book-code/Chapter_11/Catalyst-Controller-CGIBin/CGIApp/root/static/images/btn_120x50_powered_shadow.png new file mode 100644 index 0000000..e6876c0 Binary files /dev/null and b/catalyst-book-code/Chapter_11/Catalyst-Controller-CGIBin/CGIApp/root/static/images/btn_120x50_powered_shadow.png differ diff --git a/catalyst-book-code/Chapter_11/Catalyst-Controller-CGIBin/CGIApp/root/static/images/btn_88x31_built.png b/catalyst-book-code/Chapter_11/Catalyst-Controller-CGIBin/CGIApp/root/static/images/btn_88x31_built.png new file mode 100644 index 0000000..007b5db Binary files /dev/null and b/catalyst-book-code/Chapter_11/Catalyst-Controller-CGIBin/CGIApp/root/static/images/btn_88x31_built.png differ diff --git a/catalyst-book-code/Chapter_11/Catalyst-Controller-CGIBin/CGIApp/root/static/images/btn_88x31_built_shadow.png b/catalyst-book-code/Chapter_11/Catalyst-Controller-CGIBin/CGIApp/root/static/images/btn_88x31_built_shadow.png new file mode 100644 index 0000000..ccf4624 Binary files /dev/null and b/catalyst-book-code/Chapter_11/Catalyst-Controller-CGIBin/CGIApp/root/static/images/btn_88x31_built_shadow.png differ diff --git a/catalyst-book-code/Chapter_11/Catalyst-Controller-CGIBin/CGIApp/root/static/images/btn_88x31_powered.png b/catalyst-book-code/Chapter_11/Catalyst-Controller-CGIBin/CGIApp/root/static/images/btn_88x31_powered.png new file mode 100644 index 0000000..8f0cd9f Binary files /dev/null and b/catalyst-book-code/Chapter_11/Catalyst-Controller-CGIBin/CGIApp/root/static/images/btn_88x31_powered.png differ diff --git a/catalyst-book-code/Chapter_11/Catalyst-Controller-CGIBin/CGIApp/root/static/images/btn_88x31_powered_shadow.png b/catalyst-book-code/Chapter_11/Catalyst-Controller-CGIBin/CGIApp/root/static/images/btn_88x31_powered_shadow.png new file mode 100644 index 0000000..aa776fa Binary files /dev/null and b/catalyst-book-code/Chapter_11/Catalyst-Controller-CGIBin/CGIApp/root/static/images/btn_88x31_powered_shadow.png differ diff --git a/catalyst-book-code/Chapter_11/Catalyst-Controller-CGIBin/CGIApp/root/static/images/catalyst_logo.png b/catalyst-book-code/Chapter_11/Catalyst-Controller-CGIBin/CGIApp/root/static/images/catalyst_logo.png new file mode 100644 index 0000000..21f1cac Binary files /dev/null and b/catalyst-book-code/Chapter_11/Catalyst-Controller-CGIBin/CGIApp/root/static/images/catalyst_logo.png differ diff --git a/catalyst-book-code/Chapter_11/Catalyst-Controller-CGIBin/CGIApp/script/cgiapp_cgi.pl b/catalyst-book-code/Chapter_11/Catalyst-Controller-CGIBin/CGIApp/script/cgiapp_cgi.pl new file mode 100644 index 0000000..85505e7 --- /dev/null +++ b/catalyst-book-code/Chapter_11/Catalyst-Controller-CGIBin/CGIApp/script/cgiapp_cgi.pl @@ -0,0 +1,37 @@ +#!/usr/bin/env perl + +BEGIN { $ENV{CATALYST_ENGINE} ||= 'CGI' } + +use strict; +use warnings; +use FindBin; +use lib "$FindBin::Bin/../lib"; +use CGIApp; + +CGIApp->run; + +1; + +=head1 NAME + +cgiapp_cgi.pl - Catalyst CGI + +=head1 SYNOPSIS + +See L + +=head1 DESCRIPTION + +Run a Catalyst application as a cgi script. + +=head1 AUTHORS + +Catalyst Contributors, see Catalyst.pm + +=head1 COPYRIGHT + + +This library is free software. You can redistribute it and/or modify +it under the same terms as Perl itself. + +=cut diff --git a/catalyst-book-code/Chapter_11/Catalyst-Controller-CGIBin/CGIApp/script/cgiapp_create.pl b/catalyst-book-code/Chapter_11/Catalyst-Controller-CGIBin/CGIApp/script/cgiapp_create.pl new file mode 100644 index 0000000..81ee2f6 --- /dev/null +++ b/catalyst-book-code/Chapter_11/Catalyst-Controller-CGIBin/CGIApp/script/cgiapp_create.pl @@ -0,0 +1,86 @@ +#!/usr/bin/env perl + +use strict; +use warnings; +use Getopt::Long; +use Pod::Usage; +eval "use Catalyst::Helper;"; + +if ($@) { + die < \$force, + 'mech|mechanize' => \$mech, + 'help|?' => \$help + ); + +pod2usage(1) if ( $help || !$ARGV[0] ); + +my $helper = Catalyst::Helper->new( { '.newfiles' => !$force, mech => $mech } ); + +pod2usage(1) unless $helper->mk_component( 'CGIApp', @ARGV ); + +1; + +=head1 NAME + +cgiapp_create.pl - Create a new Catalyst Component + +=head1 SYNOPSIS + +cgiapp_create.pl [options] model|view|controller name [helper] [options] + + Options: + -force don't create a .new file where a file to be created exists + -mechanize use Test::WWW::Mechanize::Catalyst for tests if available + -help display this help and exits + + Examples: + cgiapp_create.pl controller My::Controller + cgiapp_create.pl controller My::Controller BindLex + cgiapp_create.pl -mechanize controller My::Controller + cgiapp_create.pl view My::View + cgiapp_create.pl view MyView TT + cgiapp_create.pl view TT TT + cgiapp_create.pl model My::Model + cgiapp_create.pl model SomeDB DBIC::Schema MyApp::Schema create=dynamic\ + dbi:SQLite:/tmp/my.db + cgiapp_create.pl model AnotherDB DBIC::Schema MyApp::Schema create=static\ + dbi:Pg:dbname=foo root 4321 + + See also: + perldoc Catalyst::Manual + perldoc Catalyst::Manual::Intro + +=head1 DESCRIPTION + +Create a new Catalyst Component. + +Existing component files are not overwritten. If any of the component files +to be created already exist the file will be written with a '.new' suffix. +This behavior can be suppressed with the C<-force> option. + +=head1 AUTHORS + +Catalyst Contributors, see Catalyst.pm + +=head1 COPYRIGHT + +This library is free software. You can redistribute it and/or modify +it under the same terms as Perl itself. + +=cut diff --git a/catalyst-book-code/Chapter_11/Catalyst-Controller-CGIBin/CGIApp/script/cgiapp_fastcgi.pl b/catalyst-book-code/Chapter_11/Catalyst-Controller-CGIBin/CGIApp/script/cgiapp_fastcgi.pl new file mode 100644 index 0000000..ba6a3b5 --- /dev/null +++ b/catalyst-book-code/Chapter_11/Catalyst-Controller-CGIBin/CGIApp/script/cgiapp_fastcgi.pl @@ -0,0 +1,79 @@ +#!/usr/bin/env perl + +BEGIN { $ENV{CATALYST_ENGINE} ||= 'FastCGI' } + +use strict; +use warnings; +use Getopt::Long; +use Pod::Usage; +use FindBin; +use lib "$FindBin::Bin/../lib"; +use CGIApp; + +my $help = 0; +my ( $listen, $nproc, $pidfile, $manager, $detach, $keep_stderr ); + +GetOptions( + 'help|?' => \$help, + 'listen|l=s' => \$listen, + 'nproc|n=i' => \$nproc, + 'pidfile|p=s' => \$pidfile, + 'manager|M=s' => \$manager, + 'daemon|d' => \$detach, + 'keeperr|e' => \$keep_stderr, +); + +pod2usage(1) if $help; + +CGIApp->run( + $listen, + { nproc => $nproc, + pidfile => $pidfile, + manager => $manager, + detach => $detach, + keep_stderr => $keep_stderr, + } +); + +1; + +=head1 NAME + +cgiapp_fastcgi.pl - Catalyst FastCGI + +=head1 SYNOPSIS + +cgiapp_fastcgi.pl [options] + + Options: + -? -help display this help and exits + -l -listen Socket path to listen on + (defaults to standard input) + can be HOST:PORT, :PORT or a + filesystem path + -n -nproc specify number of processes to keep + to serve requests (defaults to 1, + requires -listen) + -p -pidfile specify filename for pid file + (requires -listen) + -d -daemon daemonize (requires -listen) + -M -manager specify alternate process manager + (FCGI::ProcManager sub-class) + or empty string to disable + -e -keeperr send error messages to STDOUT, not + to the webserver + +=head1 DESCRIPTION + +Run a Catalyst application as fastcgi. + +=head1 AUTHORS + +Catalyst Contributors, see Catalyst.pm + +=head1 COPYRIGHT + +This library is free software. You can redistribute it and/or modify +it under the same terms as Perl itself. + +=cut diff --git a/catalyst-book-code/Chapter_11/Catalyst-Controller-CGIBin/CGIApp/script/cgiapp_server.pl b/catalyst-book-code/Chapter_11/Catalyst-Controller-CGIBin/CGIApp/script/cgiapp_server.pl new file mode 100644 index 0000000..c8f74ce --- /dev/null +++ b/catalyst-book-code/Chapter_11/Catalyst-Controller-CGIBin/CGIApp/script/cgiapp_server.pl @@ -0,0 +1,118 @@ +#!/usr/bin/env perl + +BEGIN { + $ENV{CATALYST_ENGINE} ||= 'HTTP'; + $ENV{CATALYST_SCRIPT_GEN} = 33; + require Catalyst::Engine::HTTP; +} + +use strict; +use warnings; +use Getopt::Long; +use Pod::Usage; +use FindBin; +use lib "$FindBin::Bin/../lib"; + +my $debug = 0; +my $fork = 0; +my $help = 0; +my $host = undef; +my $port = $ENV{CGIAPP_PORT} || $ENV{CATALYST_PORT} || 3000; +my $keepalive = 0; +my $restart = $ENV{CGIAPP_RELOAD} || $ENV{CATALYST_RELOAD} || 0; +my $restart_delay = 1; +my $restart_regex = '(?:/|^)(?!\.#).+(?:\.yml$|\.yaml$|\.conf|\.pm)$'; +my $restart_directory = undef; +my $follow_symlinks = 0; +my $background = 0; + +my @argv = @ARGV; + +GetOptions( + 'debug|d' => \$debug, + 'fork|f' => \$fork, + 'help|?' => \$help, + 'host=s' => \$host, + 'port=s' => \$port, + 'keepalive|k' => \$keepalive, + 'restart|r' => \$restart, + 'restartdelay|rd=s' => \$restart_delay, + 'restartregex|rr=s' => \$restart_regex, + 'restartdirectory=s@' => \$restart_directory, + 'followsymlinks' => \$follow_symlinks, + 'background' => \$background, +); + +pod2usage(1) if $help; + +if ( $restart && $ENV{CATALYST_ENGINE} eq 'HTTP' ) { + $ENV{CATALYST_ENGINE} = 'HTTP::Restarter'; +} +if ( $debug ) { + $ENV{CATALYST_DEBUG} = 1; +} + +# This is require instead of use so that the above environment +# variables can be set at runtime. +require CGIApp; + +CGIApp->run( $port, $host, { + argv => \@argv, + 'fork' => $fork, + keepalive => $keepalive, + restart => $restart, + restart_delay => $restart_delay, + restart_regex => qr/$restart_regex/, + restart_directory => $restart_directory, + follow_symlinks => $follow_symlinks, + background => $background, +} ); + +1; + +=head1 NAME + +cgiapp_server.pl - Catalyst Testserver + +=head1 SYNOPSIS + +cgiapp_server.pl [options] + + Options: + -d -debug force debug mode + -f -fork handle each request in a new process + (defaults to false) + -? -help display this help and exits + -host host (defaults to all) + -p -port port (defaults to 3000) + -k -keepalive enable keep-alive connections + -r -restart restart when files get modified + (defaults to false) + -rd -restartdelay delay between file checks + -rr -restartregex regex match files that trigger + a restart when modified + (defaults to '\.yml$|\.yaml$|\.conf|\.pm$') + -restartdirectory the directory to search for + modified files, can be set mulitple times + (defaults to '[SCRIPT_DIR]/..') + -follow_symlinks follow symlinks in search directories + (defaults to false. this is a no-op on Win32) + -background run the process in the background + See also: + perldoc Catalyst::Manual + perldoc Catalyst::Manual::Intro + +=head1 DESCRIPTION + +Run a Catalyst Testserver for this application. + +=head1 AUTHORS + +Catalyst Contributors, see Catalyst.pm + +=head1 COPYRIGHT + +This library is free software. You can redistribute it and/or modify +it under the same terms as Perl itself. + +=cut diff --git a/catalyst-book-code/Chapter_11/Catalyst-Controller-CGIBin/CGIApp/script/cgiapp_test.pl b/catalyst-book-code/Chapter_11/Catalyst-Controller-CGIBin/CGIApp/script/cgiapp_test.pl new file mode 100644 index 0000000..54e9db4 --- /dev/null +++ b/catalyst-book-code/Chapter_11/Catalyst-Controller-CGIBin/CGIApp/script/cgiapp_test.pl @@ -0,0 +1,53 @@ +#!/usr/bin/env perl + +use strict; +use warnings; +use Getopt::Long; +use Pod::Usage; +use FindBin; +use lib "$FindBin::Bin/../lib"; +use Catalyst::Test 'CGIApp'; + +my $help = 0; + +GetOptions( 'help|?' => \$help ); + +pod2usage(1) if ( $help || !$ARGV[0] ); + +print request($ARGV[0])->content . "\n"; + +1; + +=head1 NAME + +cgiapp_test.pl - Catalyst Test + +=head1 SYNOPSIS + +cgiapp_test.pl [options] uri + + Options: + -help display this help and exits + + Examples: + cgiapp_test.pl http://localhost/some_action + cgiapp_test.pl /some_action + + See also: + perldoc Catalyst::Manual + perldoc Catalyst::Manual::Intro + +=head1 DESCRIPTION + +Run a Catalyst action from the command line. + +=head1 AUTHORS + +Catalyst Contributors, see Catalyst.pm + +=head1 COPYRIGHT + +This library is free software. You can redistribute it and/or modify +it under the same terms as Perl itself. + +=cut diff --git a/catalyst-book-code/Chapter_11/Catalyst-Controller-CGIBin/CGIApp/t/01app.t b/catalyst-book-code/Chapter_11/Catalyst-Controller-CGIBin/CGIApp/t/01app.t new file mode 100644 index 0000000..c8ad02f --- /dev/null +++ b/catalyst-book-code/Chapter_11/Catalyst-Controller-CGIBin/CGIApp/t/01app.t @@ -0,0 +1,7 @@ +use strict; +use warnings; +use Test::More tests => 2; + +BEGIN { use_ok 'Catalyst::Test', 'CGIApp' } + +ok( request('/')->is_success, 'Request should succeed' ); diff --git a/catalyst-book-code/Chapter_11/Catalyst-Controller-CGIBin/CGIApp/t/02pod.t b/catalyst-book-code/Chapter_11/Catalyst-Controller-CGIBin/CGIApp/t/02pod.t new file mode 100644 index 0000000..251640d --- /dev/null +++ b/catalyst-book-code/Chapter_11/Catalyst-Controller-CGIBin/CGIApp/t/02pod.t @@ -0,0 +1,9 @@ +use strict; +use warnings; +use Test::More; + +eval "use Test::Pod 1.14"; +plan skip_all => 'Test::Pod 1.14 required' if $@; +plan skip_all => 'set TEST_POD to enable this test' unless $ENV{TEST_POD}; + +all_pod_files_ok(); diff --git a/catalyst-book-code/Chapter_11/Catalyst-Controller-CGIBin/CGIApp/t/03podcoverage.t b/catalyst-book-code/Chapter_11/Catalyst-Controller-CGIBin/CGIApp/t/03podcoverage.t new file mode 100644 index 0000000..ae59d4c --- /dev/null +++ b/catalyst-book-code/Chapter_11/Catalyst-Controller-CGIBin/CGIApp/t/03podcoverage.t @@ -0,0 +1,9 @@ +use strict; +use warnings; +use Test::More; + +eval "use Test::Pod::Coverage 1.04"; +plan skip_all => 'Test::Pod::Coverage 1.04 required' if $@; +plan skip_all => 'set TEST_POD to enable this test' unless $ENV{TEST_POD}; + +all_pod_coverage_ok(); diff --git a/catalyst-book-code/Chapter_11/Catalyst-Controller-CGIBin/CGIApp/t/controller_CGIBin.t b/catalyst-book-code/Chapter_11/Catalyst-Controller-CGIBin/CGIApp/t/controller_CGIBin.t new file mode 100644 index 0000000..825cee2 --- /dev/null +++ b/catalyst-book-code/Chapter_11/Catalyst-Controller-CGIBin/CGIApp/t/controller_CGIBin.t @@ -0,0 +1,10 @@ +use strict; +use warnings; +use Test::More tests => 3; + +BEGIN { use_ok 'Catalyst::Test', 'CGIApp' } +BEGIN { use_ok 'CGIApp::Controller::CGIBin' } + +ok( request('/cgibin')->is_success, 'Request should succeed' ); + + diff --git a/catalyst-book-code/Chapter_11/Catalyst-Controller-CGIBin/CGIApp/t/controller_WrapCGI.t b/catalyst-book-code/Chapter_11/Catalyst-Controller-CGIBin/CGIApp/t/controller_WrapCGI.t new file mode 100644 index 0000000..a20b79b --- /dev/null +++ b/catalyst-book-code/Chapter_11/Catalyst-Controller-CGIBin/CGIApp/t/controller_WrapCGI.t @@ -0,0 +1,10 @@ +use strict; +use warnings; +use Test::More tests => 3; + +BEGIN { use_ok 'Catalyst::Test', 'CGIApp' } +BEGIN { use_ok 'CGIApp::Controller::WrapCGI' } + +ok( request('/wrapcgi')->is_success, 'Request should succeed' ); + + diff --git a/catalyst-book-code/Chapter_11/Catalyst-Controller-reCAPTCHA/MyApp/Changes b/catalyst-book-code/Chapter_11/Catalyst-Controller-reCAPTCHA/MyApp/Changes new file mode 100644 index 0000000..9066db6 --- /dev/null +++ b/catalyst-book-code/Chapter_11/Catalyst-Controller-reCAPTCHA/MyApp/Changes @@ -0,0 +1,4 @@ +This file documents the revision history for Perl extension MyApp. + +0.01 2009-04-28 14:12:12 + - initial revision, generated by Catalyst diff --git a/catalyst-book-code/Chapter_11/Catalyst-Controller-reCAPTCHA/MyApp/Makefile.PL b/catalyst-book-code/Chapter_11/Catalyst-Controller-reCAPTCHA/MyApp/Makefile.PL new file mode 100644 index 0000000..572d9b6 --- /dev/null +++ b/catalyst-book-code/Chapter_11/Catalyst-Controller-reCAPTCHA/MyApp/Makefile.PL @@ -0,0 +1,19 @@ +# IMPORTANT: if you delete this file your app will not work as +# expected. you have been warned +use inc::Module::Install; + +name 'MyApp'; +all_from 'lib/MyApp.pm'; + +requires 'Catalyst::Runtime' => '5.80001'; +requires 'Catalyst::Plugin::ConfigLoader'; +requires 'Catalyst::Plugin::Static::Simple'; +requires 'Catalyst::Action::RenderView'; +requires 'parent'; +requires 'Config::General'; # This should reflect the config file format you've chosen + # See Catalyst::Plugin::ConfigLoader for supported formats +catalyst; + +install_script glob('script/*.pl'); +auto_install; +WriteAll; diff --git a/catalyst-book-code/Chapter_11/Catalyst-Controller-reCAPTCHA/MyApp/README b/catalyst-book-code/Chapter_11/Catalyst-Controller-reCAPTCHA/MyApp/README new file mode 100644 index 0000000..065f5ed --- /dev/null +++ b/catalyst-book-code/Chapter_11/Catalyst-Controller-reCAPTCHA/MyApp/README @@ -0,0 +1 @@ +Run script/myapp_server.pl to test the application. diff --git a/catalyst-book-code/Chapter_11/Catalyst-Controller-reCAPTCHA/MyApp/lib/MyApp.pm b/catalyst-book-code/Chapter_11/Catalyst-Controller-reCAPTCHA/MyApp/lib/MyApp.pm new file mode 100644 index 0000000..91b0f8d --- /dev/null +++ b/catalyst-book-code/Chapter_11/Catalyst-Controller-reCAPTCHA/MyApp/lib/MyApp.pm @@ -0,0 +1,66 @@ +package MyApp; + +use strict; +use warnings; + +use Catalyst::Runtime '5.70'; + +# Set flags and add plugins for the application +# +# -Debug: activates the debug mode for very useful log messages +# ConfigLoader: will load the configuration from a Config::General file in the +# application's home directory +# Static::Simple: will serve static files from the application's root +# directory + +__PACKAGE__->config->{recaptcha}->{pub_key} = '6LcsbAAAAAAAAPDSlBaVGXjMo1kJHwUiHzO2TDze'; +__PACKAGE__->config->{recaptcha}->{priv_key} = '6LcsbAAAAAAAANQQGqwsnkrTd7QTGRBKQQZwBH-L'; +use parent qw/Catalyst/; +use Catalyst qw/-Debug + ConfigLoader + Static::Simple/; +our $VERSION = '0.01'; + +# Configure the application. +# +# Note that settings in myapp.conf (or other external +# configuration file that you set up manually) take precedence +# over this when using ConfigLoader. Thus configuration +# details given here can function as a default configuration, +# with a external configuration file acting as an override for +# local deployment. + +__PACKAGE__->config( name => 'MyApp' ); + +# Start the application +__PACKAGE__->setup(); + + +=head1 NAME + +MyApp - Catalyst based application + +=head1 SYNOPSIS + + script/myapp_server.pl + +=head1 DESCRIPTION + +[enter your description here] + +=head1 SEE ALSO + +L, L + +=head1 AUTHOR + +Kieren Diment + +=head1 LICENSE + +This library is free software, you can redistribute it and/or modify +it under the same terms as Perl itself. + +=cut + +1; diff --git a/catalyst-book-code/Chapter_11/Catalyst-Controller-reCAPTCHA/MyApp/lib/MyApp/Controller/Root.pm b/catalyst-book-code/Chapter_11/Catalyst-Controller-reCAPTCHA/MyApp/lib/MyApp/Controller/Root.pm new file mode 100644 index 0000000..4e57435 --- /dev/null +++ b/catalyst-book-code/Chapter_11/Catalyst-Controller-reCAPTCHA/MyApp/lib/MyApp/Controller/Root.pm @@ -0,0 +1,42 @@ + package MyApp::Controller::Root; + use strict; + use warnings; + + __PACKAGE__->config(namespace => ''); + + + use parent 'Catalyst::Controller::reCAPTCHA'; + + sub index :Private { + my ($self, $c) = @_; + $c->forward('captcha_get'); + my $recaptcha = $c->stash->{recaptcha}; + my $recaptcha_ok = $c->stash->{recaptca_ok}; + my $recaptcha_error = $c->stash->{recaptcha_error}; + my $check_uri = $c->uri_for('/check'); + + my $body = < +

    recaptcha error: $recaptcha_error

    +

    $recaptcha
    +
    +EOF + $c->res->body($body); + } + + sub check : Local { + my ($self, $c) = @_; + if ($c->forward('captcha_check')) { + $c->detach('ok') + } + else { + $c->detach('index'); + } + } + + sub ok : Private { + my ($self, $c) = @_; + $c->res->body('You appear to be human'); + } + 1; diff --git a/catalyst-book-code/Chapter_11/Catalyst-Controller-reCAPTCHA/MyApp/myapp.conf b/catalyst-book-code/Chapter_11/Catalyst-Controller-reCAPTCHA/MyApp/myapp.conf new file mode 100644 index 0000000..9ee3adf --- /dev/null +++ b/catalyst-book-code/Chapter_11/Catalyst-Controller-reCAPTCHA/MyApp/myapp.conf @@ -0,0 +1,3 @@ +# rename this file to MyApp.yml and put a : in front of "name" if +# you want to use yaml like in old versions of Catalyst +name MyApp diff --git a/catalyst-book-code/Chapter_11/Catalyst-Controller-reCAPTCHA/MyApp/root/favicon.ico b/catalyst-book-code/Chapter_11/Catalyst-Controller-reCAPTCHA/MyApp/root/favicon.ico new file mode 100644 index 0000000..5ad723d Binary files /dev/null and b/catalyst-book-code/Chapter_11/Catalyst-Controller-reCAPTCHA/MyApp/root/favicon.ico differ diff --git a/catalyst-book-code/Chapter_11/Catalyst-Controller-reCAPTCHA/MyApp/root/static/images/btn_120x50_built.png b/catalyst-book-code/Chapter_11/Catalyst-Controller-reCAPTCHA/MyApp/root/static/images/btn_120x50_built.png new file mode 100644 index 0000000..c709fd6 Binary files /dev/null and b/catalyst-book-code/Chapter_11/Catalyst-Controller-reCAPTCHA/MyApp/root/static/images/btn_120x50_built.png differ diff --git a/catalyst-book-code/Chapter_11/Catalyst-Controller-reCAPTCHA/MyApp/root/static/images/btn_120x50_built_shadow.png b/catalyst-book-code/Chapter_11/Catalyst-Controller-reCAPTCHA/MyApp/root/static/images/btn_120x50_built_shadow.png new file mode 100644 index 0000000..15142fe Binary files /dev/null and b/catalyst-book-code/Chapter_11/Catalyst-Controller-reCAPTCHA/MyApp/root/static/images/btn_120x50_built_shadow.png differ diff --git a/catalyst-book-code/Chapter_11/Catalyst-Controller-reCAPTCHA/MyApp/root/static/images/btn_120x50_powered.png b/catalyst-book-code/Chapter_11/Catalyst-Controller-reCAPTCHA/MyApp/root/static/images/btn_120x50_powered.png new file mode 100644 index 0000000..7249b47 Binary files /dev/null and b/catalyst-book-code/Chapter_11/Catalyst-Controller-reCAPTCHA/MyApp/root/static/images/btn_120x50_powered.png differ diff --git a/catalyst-book-code/Chapter_11/Catalyst-Controller-reCAPTCHA/MyApp/root/static/images/btn_120x50_powered_shadow.png b/catalyst-book-code/Chapter_11/Catalyst-Controller-reCAPTCHA/MyApp/root/static/images/btn_120x50_powered_shadow.png new file mode 100644 index 0000000..e6876c0 Binary files /dev/null and b/catalyst-book-code/Chapter_11/Catalyst-Controller-reCAPTCHA/MyApp/root/static/images/btn_120x50_powered_shadow.png differ diff --git a/catalyst-book-code/Chapter_11/Catalyst-Controller-reCAPTCHA/MyApp/root/static/images/btn_88x31_built.png b/catalyst-book-code/Chapter_11/Catalyst-Controller-reCAPTCHA/MyApp/root/static/images/btn_88x31_built.png new file mode 100644 index 0000000..007b5db Binary files /dev/null and b/catalyst-book-code/Chapter_11/Catalyst-Controller-reCAPTCHA/MyApp/root/static/images/btn_88x31_built.png differ diff --git a/catalyst-book-code/Chapter_11/Catalyst-Controller-reCAPTCHA/MyApp/root/static/images/btn_88x31_built_shadow.png b/catalyst-book-code/Chapter_11/Catalyst-Controller-reCAPTCHA/MyApp/root/static/images/btn_88x31_built_shadow.png new file mode 100644 index 0000000..ccf4624 Binary files /dev/null and b/catalyst-book-code/Chapter_11/Catalyst-Controller-reCAPTCHA/MyApp/root/static/images/btn_88x31_built_shadow.png differ diff --git a/catalyst-book-code/Chapter_11/Catalyst-Controller-reCAPTCHA/MyApp/root/static/images/btn_88x31_powered.png b/catalyst-book-code/Chapter_11/Catalyst-Controller-reCAPTCHA/MyApp/root/static/images/btn_88x31_powered.png new file mode 100644 index 0000000..8f0cd9f Binary files /dev/null and b/catalyst-book-code/Chapter_11/Catalyst-Controller-reCAPTCHA/MyApp/root/static/images/btn_88x31_powered.png differ diff --git a/catalyst-book-code/Chapter_11/Catalyst-Controller-reCAPTCHA/MyApp/root/static/images/btn_88x31_powered_shadow.png b/catalyst-book-code/Chapter_11/Catalyst-Controller-reCAPTCHA/MyApp/root/static/images/btn_88x31_powered_shadow.png new file mode 100644 index 0000000..aa776fa Binary files /dev/null and b/catalyst-book-code/Chapter_11/Catalyst-Controller-reCAPTCHA/MyApp/root/static/images/btn_88x31_powered_shadow.png differ diff --git a/catalyst-book-code/Chapter_11/Catalyst-Controller-reCAPTCHA/MyApp/root/static/images/catalyst_logo.png b/catalyst-book-code/Chapter_11/Catalyst-Controller-reCAPTCHA/MyApp/root/static/images/catalyst_logo.png new file mode 100644 index 0000000..21f1cac Binary files /dev/null and b/catalyst-book-code/Chapter_11/Catalyst-Controller-reCAPTCHA/MyApp/root/static/images/catalyst_logo.png differ diff --git a/catalyst-book-code/Chapter_11/Catalyst-Controller-reCAPTCHA/MyApp/script/myapp_cgi.pl b/catalyst-book-code/Chapter_11/Catalyst-Controller-reCAPTCHA/MyApp/script/myapp_cgi.pl new file mode 100644 index 0000000..e950e0e --- /dev/null +++ b/catalyst-book-code/Chapter_11/Catalyst-Controller-reCAPTCHA/MyApp/script/myapp_cgi.pl @@ -0,0 +1,37 @@ +#!/usr/bin/perl -w +use warnings; +use strict; + +BEGIN { $ENV{CATALYST_ENGINE} ||= 'CGI' } + +use FindBin; +use lib "$FindBin::Bin/../lib"; +use MyApp; + +MyApp->run; + +1; + +=head1 NAME + +myapp_cgi.pl - Catalyst CGI + +=head1 SYNOPSIS + +See L + +=head1 DESCRIPTION + +Run a Catalyst application as a cgi script. + +=head1 AUTHORS + +Catalyst Contributors, see Catalyst.pm + +=head1 COPYRIGHT + + +This library is free software, you can redistribute it and/or modify +it under the same terms as Perl itself. + +=cut diff --git a/catalyst-book-code/Chapter_11/Catalyst-Controller-reCAPTCHA/MyApp/script/myapp_create.pl b/catalyst-book-code/Chapter_11/Catalyst-Controller-reCAPTCHA/MyApp/script/myapp_create.pl new file mode 100644 index 0000000..747a6f0 --- /dev/null +++ b/catalyst-book-code/Chapter_11/Catalyst-Controller-reCAPTCHA/MyApp/script/myapp_create.pl @@ -0,0 +1,74 @@ +#!/usr/bin/perl -w + +use strict; +use warnings; +use Getopt::Long; +use Pod::Usage; +use Catalyst::Helper; + +my $force = 0; +my $mech = 0; +my $help = 0; + +GetOptions( + 'nonew|force' => \$force, + 'mech|mechanize' => \$mech, + 'help|?' => \$help + ); + +pod2usage(1) if ( $help || !$ARGV[0] ); + +my $helper = Catalyst::Helper->new( { '.newfiles' => !$force, mech => $mech } ); + +pod2usage(1) unless $helper->mk_component( 'MyApp', @ARGV ); + +1; + +=head1 NAME + +myapp_create.pl - Create a new Catalyst Component + +=head1 SYNOPSIS + +myapp_create.pl [options] model|view|controller name [helper] [options] + + Options: + -force don't create a .new file where a file to be created exists + -mechanize use Test::WWW::Mechanize::Catalyst for tests if available + -help display this help and exits + + Examples: + myapp_create.pl controller My::Controller + myapp_create.pl controller My::Controller BindLex + myapp_create.pl -mechanize controller My::Controller + myapp_create.pl view My::View + myapp_create.pl view MyView TT + myapp_create.pl view TT TT + myapp_create.pl model My::Model + myapp_create.pl model SomeDB DBIC::Schema MyApp::Schema create=dynamic\ + dbi:SQLite:/tmp/my.db + myapp_create.pl model AnotherDB DBIC::Schema MyApp::Schema create=static\ + dbi:Pg:dbname=foo root 4321 + + See also: + perldoc Catalyst::Manual + perldoc Catalyst::Manual::Intro + +=head1 DESCRIPTION + +Create a new Catalyst Component. + +Existing component files are not overwritten. If any of the component files +to be created already exist the file will be written with a '.new' suffix. +This behavior can be suppressed with the C<-force> option. + +=head1 AUTHORS + +Catalyst Contributors, see Catalyst.pm + +=head1 COPYRIGHT + +This library is free software, you can redistribute it and/or modify +it under the same terms as Perl itself. + +=cut diff --git a/catalyst-book-code/Chapter_11/Catalyst-Controller-reCAPTCHA/MyApp/script/myapp_fastcgi.pl b/catalyst-book-code/Chapter_11/Catalyst-Controller-reCAPTCHA/MyApp/script/myapp_fastcgi.pl new file mode 100644 index 0000000..b3c176d --- /dev/null +++ b/catalyst-book-code/Chapter_11/Catalyst-Controller-reCAPTCHA/MyApp/script/myapp_fastcgi.pl @@ -0,0 +1,79 @@ +#!/usr/bin/perl +use warnings; +use strict; + +BEGIN { $ENV{CATALYST_ENGINE} ||= 'FastCGI' } + +use Getopt::Long; +use Pod::Usage; +use FindBin; +use lib "$FindBin::Bin/../lib"; +use MyApp; + +my $help = 0; +my ( $listen, $nproc, $pidfile, $manager, $detach, $keep_stderr ); + +GetOptions( + 'help|?' => \$help, + 'listen|l=s' => \$listen, + 'nproc|n=i' => \$nproc, + 'pidfile|p=s' => \$pidfile, + 'manager|M=s' => \$manager, + 'daemon|d' => \$detach, + 'keeperr|e' => \$keep_stderr, +); + +pod2usage(1) if $help; + +MyApp->run( + $listen, + { nproc => $nproc, + pidfile => $pidfile, + manager => $manager, + detach => $detach, + keep_stderr => $keep_stderr, + } +); + +1; + +=head1 NAME + +myapp_fastcgi.pl - Catalyst FastCGI + +=head1 SYNOPSIS + +myapp_fastcgi.pl [options] + + Options: + -? -help display this help and exits + -l -listen Socket path to listen on + (defaults to standard input) + can be HOST:PORT, :PORT or a + filesystem path + -n -nproc specify number of processes to keep + to serve requests (defaults to 1, + requires -listen) + -p -pidfile specify filename for pid file + (requires -listen) + -d -daemon daemonize (requires -listen) + -M -manager specify alternate process manager + (FCGI::ProcManager sub-class) + or empty string to disable + -e -keeperr send error messages to STDOUT, not + to the webserver + +=head1 DESCRIPTION + +Run a Catalyst application as fastcgi. + +=head1 AUTHORS + +Catalyst Contributors, see Catalyst.pm + +=head1 COPYRIGHT + +This library is free software, you can redistribute it and/or modify +it under the same terms as Perl itself. + +=cut diff --git a/catalyst-book-code/Chapter_11/Catalyst-Controller-reCAPTCHA/MyApp/script/myapp_server.pl b/catalyst-book-code/Chapter_11/Catalyst-Controller-reCAPTCHA/MyApp/script/myapp_server.pl new file mode 100644 index 0000000..2efa7e1 --- /dev/null +++ b/catalyst-book-code/Chapter_11/Catalyst-Controller-reCAPTCHA/MyApp/script/myapp_server.pl @@ -0,0 +1,114 @@ +#!/usr/bin/perl +use warnings; +use strict; + +BEGIN { + $ENV{CATALYST_ENGINE} ||= 'HTTP'; + $ENV{CATALYST_SCRIPT_GEN} = 31; + require Catalyst::Engine::HTTP; +} + +use Getopt::Long; +use Pod::Usage; +use FindBin; +use lib "$FindBin::Bin/../lib"; + +my $debug = 0; +my $fork = 0; +my $help = 0; +my $host = undef; +my $port = $ENV{MYAPP_PORT} || $ENV{CATALYST_PORT} || 3000; +my $keepalive = 0; +my $restart = $ENV{MYAPP_RELOAD} || $ENV{CATALYST_RELOAD} || 0; +my $restart_delay = 1; +my $restart_regex = '(?:/|^)(?!\.#).+(?:\.yml$|\.yaml$|\.conf|\.pm)$'; +my $restart_directory = undef; +my $follow_symlinks = 0; + +my @argv = @ARGV; + +GetOptions( + 'debug|d' => \$debug, + 'fork' => \$fork, + 'help|?' => \$help, + 'host=s' => \$host, + 'port=s' => \$port, + 'keepalive|k' => \$keepalive, + 'restart|r' => \$restart, + 'restartdelay|rd=s' => \$restart_delay, + 'restartregex|rr=s' => \$restart_regex, + 'restartdirectory=s@' => \$restart_directory, + 'followsymlinks' => \$follow_symlinks, +); + +pod2usage(1) if $help; + +if ( $restart && $ENV{CATALYST_ENGINE} eq 'HTTP' ) { + $ENV{CATALYST_ENGINE} = 'HTTP::Restarter'; +} +if ( $debug ) { + $ENV{CATALYST_DEBUG} = 1; +} + +# This is require instead of use so that the above environment +# variables can be set at runtime. +require MyApp; + +MyApp->run( $port, $host, { + argv => \@argv, + 'fork' => $fork, + keepalive => $keepalive, + restart => $restart, + restart_delay => $restart_delay, + restart_regex => qr/$restart_regex/, + restart_directory => $restart_directory, + follow_symlinks => $follow_symlinks, +} ); + +1; + +=head1 NAME + +myapp_server.pl - Catalyst Testserver + +=head1 SYNOPSIS + +myapp_server.pl [options] + + Options: + -d -debug force debug mode + -f -fork handle each request in a new process + (defaults to false) + -? -help display this help and exits + -host host (defaults to all) + -p -port port (defaults to 3000) + -k -keepalive enable keep-alive connections + -r -restart restart when files get modified + (defaults to false) + -rd -restartdelay delay between file checks + -rr -restartregex regex match files that trigger + a restart when modified + (defaults to '\.yml$|\.yaml$|\.conf|\.pm$') + -restartdirectory the directory to search for + modified files, can be set mulitple times + (defaults to '[SCRIPT_DIR]/..') + -follow_symlinks follow symlinks in search directories + (defaults to false. this is a no-op on Win32) + See also: + perldoc Catalyst::Manual + perldoc Catalyst::Manual::Intro + +=head1 DESCRIPTION + +Run a Catalyst Testserver for this application. + +=head1 AUTHORS + +Catalyst Contributors, see Catalyst.pm + +=head1 COPYRIGHT + +This library is free software, you can redistribute it and/or modify +it under the same terms as Perl itself. + +=cut diff --git a/catalyst-book-code/Chapter_11/Catalyst-Controller-reCAPTCHA/MyApp/script/myapp_test.pl b/catalyst-book-code/Chapter_11/Catalyst-Controller-reCAPTCHA/MyApp/script/myapp_test.pl new file mode 100644 index 0000000..aa7fd0c --- /dev/null +++ b/catalyst-book-code/Chapter_11/Catalyst-Controller-reCAPTCHA/MyApp/script/myapp_test.pl @@ -0,0 +1,53 @@ +#!/usr/bin/perl -w + +use strict; +use warnings; +use Getopt::Long; +use Pod::Usage; +use FindBin; +use lib "$FindBin::Bin/../lib"; +use Catalyst::Test 'MyApp'; + +my $help = 0; + +GetOptions( 'help|?' => \$help ); + +pod2usage(1) if ( $help || !$ARGV[0] ); + +print request($ARGV[0])->content . "\n"; + +1; + +=head1 NAME + +myapp_test.pl - Catalyst Test + +=head1 SYNOPSIS + +myapp_test.pl [options] uri + + Options: + -help display this help and exits + + Examples: + myapp_test.pl http://localhost/some_action + myapp_test.pl /some_action + + See also: + perldoc Catalyst::Manual + perldoc Catalyst::Manual::Intro + +=head1 DESCRIPTION + +Run a Catalyst action from the command line. + +=head1 AUTHORS + +Catalyst Contributors, see Catalyst.pm + +=head1 COPYRIGHT + +This library is free software, you can redistribute it and/or modify +it under the same terms as Perl itself. + +=cut diff --git a/catalyst-book-code/Chapter_11/Catalyst-Controller-reCAPTCHA/MyApp/t/01app.t b/catalyst-book-code/Chapter_11/Catalyst-Controller-reCAPTCHA/MyApp/t/01app.t new file mode 100644 index 0000000..2fd0eed --- /dev/null +++ b/catalyst-book-code/Chapter_11/Catalyst-Controller-reCAPTCHA/MyApp/t/01app.t @@ -0,0 +1,7 @@ +use strict; +use warnings; +use Test::More tests => 2; + +BEGIN { use_ok 'Catalyst::Test', 'MyApp' } + +ok( request('/')->is_success, 'Request should succeed' ); diff --git a/catalyst-book-code/Chapter_11/Catalyst-Controller-reCAPTCHA/MyApp/t/02pod.t b/catalyst-book-code/Chapter_11/Catalyst-Controller-reCAPTCHA/MyApp/t/02pod.t new file mode 100644 index 0000000..3c15d58 --- /dev/null +++ b/catalyst-book-code/Chapter_11/Catalyst-Controller-reCAPTCHA/MyApp/t/02pod.t @@ -0,0 +1,9 @@ +use strict; +use warnings; +use Test::More; + +eval {use Test::Pod 1.14}; +plan skip_all => 'Test::Pod 1.14 required' if $@; +plan skip_all => 'set TEST_POD to enable this test' unless $ENV{TEST_POD}; + +all_pod_files_ok(); diff --git a/catalyst-book-code/Chapter_11/Catalyst-Controller-reCAPTCHA/MyApp/t/03podcoverage.t b/catalyst-book-code/Chapter_11/Catalyst-Controller-reCAPTCHA/MyApp/t/03podcoverage.t new file mode 100644 index 0000000..165b058 --- /dev/null +++ b/catalyst-book-code/Chapter_11/Catalyst-Controller-reCAPTCHA/MyApp/t/03podcoverage.t @@ -0,0 +1,9 @@ +use strict; +use warnings; +use Test::More; + +eval {use Test::Pod::Coverage 1.04}; +plan skip_all => 'Test::Pod::Coverage 1.04 required' if $@; +plan skip_all => 'set TEST_POD to enable this test' unless $ENV{TEST_POD}; + +all_pod_coverage_ok(); diff --git a/catalyst-book-code/Chapter_11/Catalyst-View-Email-Template/MyApp b/catalyst-book-code/Chapter_11/Catalyst-View-Email-Template/MyApp new file mode 160000 index 0000000..2ad609d --- /dev/null +++ b/catalyst-book-code/Chapter_11/Catalyst-View-Email-Template/MyApp @@ -0,0 +1 @@ +Subproject commit 2ad609d3b5f28c365fed5f8ddb11b2be66e95c61 diff --git a/contributing.md b/contributing.md new file mode 100644 index 0000000..f6005ad --- /dev/null +++ b/contributing.md @@ -0,0 +1,14 @@ +# Contributing to Apress Source Code + +Copyright for Apress source code belongs to the author(s). However, under fair use you are encouraged to fork and contribute minor corrections and updates for the benefit of the author(s) and other readers. + +## How to Contribute + +1. Make sure you have a GitHub account. +2. Fork the repository for the relevant book. +3. Create a new branch on which to make your change, e.g. +`git checkout -b my_code_contribution` +4. Commit your change. Include a commit message describing the correction. Please note that if your commit message is not clear, the correction will not be accepted. +5. Submit a pull request. + +Thank you for your contribution! \ No newline at end of file