Table of Contents
- Table of Contents
- Table of Figures
- Foreword
- 1
- Introduction
- 1.1
- What is Seaside?
- 1.2
- Seaside Applications
- 1.3
- What is Smalltalk?
- 1.3.1
- One-Click Image
- 1.4
- Structure of the Book
- 1.5
- Formatting Conventions
- 1.6
- About the Online Book
- 1.7
- About the PDF Book
- 1.8
- About the Printed Book
- 1.9
- Acknowledgments
- I
- Getting Started
- 2
- Pharo Smalltalk
- 2.1
- Using the One Click Image
- 2.1.1
- Of Mice and Menus
- 2.2
- What is a Smalltalk Image?
- 2.3
- The Comanche Server
- 2.4
- A First Seaside Component
- 2.4.1
- Defining a Category
- 2.4.2
- Defining a Component
- 2.4.3
- Defining the Code
- 2.4.4
- Rendering a Counter
- 2.4.5
- Registering as a Seaside Application
- 2.4.6
- Automatically Registering a Component
- 2.4.7
- Adding Behavior
- 2.4.8
- Adding a Class Comment
- 2.5
- Saving your Package to Monticello
- 2.6
- Summary
- 3
- Cincom Smalltalk
- 3.1
- Loading Seaside into VisualWorks
- 3.2
- Seaside Operations Menu
- 3.3
- Seaside Settings
- 3.4
- Persistence
- 3.5
- Developing in VisualWorks
- 3.5.1
- Basic Tools
- 3.5.2
- Packages and Categories
- 3.5.3
- Name Spaces
- 3.5.4
- Additional Components
- 3.6
- Developing a First Component
- 3.6.1
- Create a Package
- 3.6.2
- Create a Name Space
- 3.6.3
- Define a Component
- 3.6.4
- Editing Generated Methods
- 3.6.5
- Rendering the Counter
- 3.6.6
- Registering the Application
- 3.6.7
- Adding Behavior
- 3.6.8
- Rendering the Behavior
- 4
- GemStone/S
- 4.1
- Using the GLASS Virtual Appliance
- 4.2
- A First Seaside Component
- 4.2.1
- Defining a Component
- 4.2.2
- Defining Some Methods
- 4.2.3
- Rendering a counter
- 4.2.4
- Registering the Application
- 4.2.5
- Adding Behavior
- 4.3
- Keeping Up With the Latest Features
- 5
- GNU Smalltalk
- 5.1
- Creating a GNU Smalltalk image with Seaside loaded
- 5.2
- Operating the GNU Smalltalk virtual machine remotely
- 5.3
- Developing in GNU Smalltalk
- 5.4
- Developing your first component
- 6
- VA Smalltalk
- 6.1
- Loading Seaside into VA Smalltalk
- 6.2
- Starting VA Smalltalk Seaside
- 6.2.1
- Seaside Server Control Panel Menu Options
- 6.2.2
- Adding a Server Adaptor
- 6.2.3
- Starting a Server Adaptor
- 6.2.4
- A Simple Seaside Example
- 6.3
- Developing Your First Seaside Component
- 6.3.1
- Defining a Component
- 6.3.2
- Adding Some Methods
- 6.3.3
- Rendering a Counter
- 6.3.4
- Registering the Counter Component
- 6.3.5
- Adding Behavior to the Counter
- II
- Fundamentals
- 7
- Rendering Components
- 7.1
- Rendering Hello World
- 7.2
- Fun with Seaside XHTML Canvas
- 7.3
- More Fun with the Seaside Canvas
- 7.4
- Rendering Objects
- 7.5
- Brush Structure
- 7.6
- Learning Canvas and Brush APIs
- 7.7
- Rendering Lists and Tables
- 7.8
- Style Sheets
- 7.9
- Summary
- 8
- CSS in a Nutshell
- 8.1
- CSS Principles
- 8.2
- CSS Selectors
- 8.2.1
- Tag Selector
- 8.2.2
- Class Selector
- 8.2.3
- Pseudo Class Selector
- 8.2.4
- Reference or ID Selector
- 8.3
- Composed Selectors
- 8.4
- Summary
- 9
- Anchors and Callbacks
- 9.1
- From Anchors to Callbacks
- 9.2
- Callbacks
- 9.3
- About Callbacks
- 9.4
- Contact Information Model
- 9.5
- Listing the Contacts
- 9.6
- Adding a Contact
- 9.7
- Removing a Contact
- 9.8
- Creating a mailto: Anchor
- 9.9
- Summary
- 10
- Forms
- 10.1
- Text Input Fields and Buttons
- 10.2
- Convenience Methods
- 10.3
- Drop-Down Menus and List Boxes
- 10.4
- Radio Buttons
- 10.5
- Check Boxes
- 10.6
- Date Inputs
- 10.7
- File Uploads
- 10.8
- Summary
- III
- Using Components
- 11
- Calling Components
- 11.1
- Displaying a Component Modally
- 11.2
- Example of call/answer
- 11.3
- Call/Answer Explained
- 11.4
- Component Sequencing
- 11.5
- Answer to the Caller
- 11.6
- Don't call while rendering
- 11.7
- A Look at Built-In Dialogs
- 11.8
- Handling The Back Button
- 11.9
- Show/Answer Explained
- 11.9.1
- Transforming a Call to a Show
- 11.10
- Summary
- 12
- Embedding Components
- 12.1
- Principle: Component Children
- 12.2
- Example: Embedding an Editor
- 12.3
- Components All The Way Down
- 12.4
- Intercepting a Subcomponent's Answer
- 12.5
- A Word about Reuse
- 12.6
- Decorations
- 12.6.1
- Visual Decorations
- 12.6.2
- Behavioral Decorations
- 12.7
- Component Coupling
- 12.8
- Summary
- 13
- Tasks
- 13.1
- Sequencing Components
- 13.2
- Hotel Reservation: Task vs. Component
- 13.3
- Mini Inn: Embedding Components
- 13.4
- Summary
- 14
- Writing good Seaside Code
- 14.1
- A Seaside Program Checker
- 14.2
- Slime at Work
- 14.3
- Summary
- IV
- Seaside In Action
- 15
- A Simple ToDo Application
- 15.1
- Defining A Model
- 15.2
- Defining the View
- 15.3
- Rendering and Brushes
- 15.4
- Adding Callbacks
- 15.5
- Adding a Form
- 15.6
- Calling Other Components
- 15.7
- Answer
- 15.8
- Embedding Child Components
- 15.9
- Summary
- 16
- A Web Sudoku Player
- 16.1
- Sudoku Solver
- 16.2
- Sudoku Component
- 16.3
- Rendering the Sudoku Grid
- 16.4
- Adding Input
- 16.5
- Back Button
- 16.6
- Summary
- 17
- Serving Files
- 17.1
- Images
- 17.2
- Including CSS and Javascript
- 17.3
- Working With File Libraries
- 17.3.1
- Creating a File Library
- 17.3.2
- Referencing FileLibrary files by URL
- 17.4
- Example of FileLibrary in use
- 17.5
- Which method should I use?
- 17.6
- A Word about Character Encodings
- 17.6.1
- Character sets
- 17.6.2
- Encodings
- 17.6.3
- In Seaside and Pharo
- 18
- Managing Sessions
- 18.1
- Accessing the Current Session
- 18.2
- Accessing the Session from the Debugger
- 18.3
- Customizing the Session for Login
- 18.4
- Lifecycle of a Session
- 18.5
- Catching the Session Expiry Notification
- 18.6
- Recovering from Expired Sessions
- 18.7
- Manually Expiring Sessions
- 18.8
- Summary
- V
- Web 2.0
- 19
- Really Simple Syndication
- 19.1
- Creating a News Feed
- 19.2
- Render the Channel Definition
- 19.3
- Rendering News Items
- 19.4
- Subscribe to the Feed
- 19.5
- Summary
- 20
- Dynamic Content with Scriptaculous
- 20.1
- Prototype and script.aculo.us
- 20.1.1
- Installation
- 20.1.2
- Adding the Library
- 20.2
- Snippets and Brushes
- 20.2.1
- Instantiate a Brush
- 20.2.2
- Using a Brush
- 20.2.3
- Configure a Brush
- 20.3
- Adding an Effect
- 20.4
- AJAX: Talking back to the Server
- 20.4.1
- Defining a Callback
- 20.4.2
- Serializing a Form
- 20.4.3
- Updating XHTML
- 20.4.4
- Behind the curtains
- 20.4.5
- Wrap Up
- 20.5
- Drag and Drop
- 20.6
- JavaScript Controls
- 20.7
- Debugging AJAX
- 20.8
- Summary
- 21
- jQuery
- 21.1
- Getting Ready
- 21.2
- jQuery Basics
- 21.2.1
- Creating Queries
- 21.2.2
- Refining Queries
- 21.2.3
- Performing Actions
- 21.3
- Adding jQuery
- 21.4
- Ajax
- 21.5
- How To
- 21.5.1
- Click and Show
- 21.5.2
- Replace a Component
- 21.5.3
- Update Multiple Elements
- 21.5.4
- Open a Lightbox
- 21.6
- Enhanced ToDo Application
- 21.6.1
- Adding an Effect
- 21.6.2
- Callbacks Redux
- 21.6.3
- Drag and Drop
- 21.6.4
- Summary
- 22
- Comet
- 22.1
- Inside Comet
- 22.2
- Getting Started
- 22.3
- The Counter Explained
- 22.4
- Summary
- VI
- Advanced Topics
- 23
- Deployment
- 23.1
- Preparing for Deployment
- 23.2
- Seaside-Hosting
- 23.3
- Deployment with Apache
- 23.3.1
- Preparing the Server
- 23.3.2
- Installing Apache
- 23.3.3
- Installing the Squeak VM
- 23.3.4
- Running the VMs
- 23.3.5
- Configuring Apache
- 23.3.6
- Serving files with Apache
- 23.3.7
- Load Balancing Multiple Images
- 23.3.8
- Using AJP
- 23.4
- Maintaining Deployed Images
- 23.4.1
- Headful System
- 23.4.2
- Virtual Network Computing
- 23.4.3
- Deployment Tools
- 23.4.4
- Request Handler
- 24
- REST Services
- 24.1
- REST in a Nutshell
- 24.2
- Getting Started with REST
- 24.2.1
- Defining a Handler
- 24.2.2
- Defining a Service
- 24.3
- Matching Requests to Responses
- 24.3.1
- HTTP Method
- 24.3.2
- Content Type
- 24.3.3
- Request Path
- 24.3.4
- Query Parameters
- 24.3.5
- Conflict Resolution
- 24.4
- Handler and Filter
- 24.5
- Request and Response
- 24.6
- Advices and Conclusion
- 25
- Some Persistency Approaches
- 25.1
- Image-Based Persistence
- 25.2
- Object Serialization
- 25.3
- Sandstone: an Active-Record Image-based Approach
- 25.3.1
- The SandstoneDB API
- 25.3.2
- About Concurrency
- 25.4
- Magma: an Object-Oriented Database
- 25.4.1
- How it works
- 25.4.2
- Getting Started
- 25.4.3
- Running Remotely
- 25.5
- GLORP: an Object-Relational Mapper
- 26
- Magritte: Meta-data at Work
- 26.1
- Basic Principles
- 26.2
- First Example
- 26.3
- Descriptions
- 26.4
- Exceptions
- 26.5
- Adding Validation
- 26.6
- Accessors and Mementos
- 26.7
- Custom Views
- 26.8
- Custom Descriptions
- 26.9
- Summary
- Keyword Index