Seaside: Rendering Components

Seaside: Rendering Components

Seaside: Rendering Components Damien Cassou, Stéphane Ducasse and Luc Fabresse W4S09 http://www.pharo.org Remember renderContentOn: is dedicated to HTML generation parameter named html (WAHtmlCanvas) defines a DSL like API to generate valid HTML WACounter >> renderContentOn: html html heading: count. html anchor callback: [ self increase ]; with: '++'. html space. html anchor callback: [ self decrease ]; with: '−−' W4S09 2 / 16 Rendering components Using a DSL Brushes to emit HTML ◦ OO API to generate HTML ◦ Generated HTML valid by construction CSS-based W4S09 3 / 16 Generating a Title html div id: 'title'; with: 'Title' <div id="title">Title</div> W4S09 4 / 16 Generating a List html div id: 'list'; with: [ html span class: 'item'; with: 'Item1 '. html span class: 'item'; with: 'Item2 ' ] <div id="list"> <span class="item">Item 1</span> <span class="item">Item 2</span> </div> W4S09 5 / 16 Generating a List with a Loop html unorderedList id: 'list'; with: [ 1 to: 5 do: [ :i | html listItem class: 'item'; with: 'Item ', i asString ]] <ul id="list"> <li class="item">Item 1</li> <li class="item">Item 2</li> <li class="item">Item 3</li> <li class="item">Item 4</li> <li class="item">Item 5</li> </ul> W4S09 6 / 16 Generating a List with a Loop html unorderedList id: 'list'; with: [ 1 to: 5 do: [ :i | html listItem class: 'itemodd' if: i odd; class: 'itemeven' if: i even; with: 'Item ', i asString ]] <ul id="list"> <li class="itemodd">Item 1</li> <li class="itemeven">Item 2</li> <li class="itemodd">Item 3</li> <li class="itemeven">Item 4</li> <li class="itemodd">Item 5</li> </ul> W4S09 7 / 16 Twitter Bootstrap W4S09 8 / 16 Rendering Twitter Alerts renderExampleOn: html html heading level: 2; with: 'Examples'. html tbsAlert beSuccess; with: [ html strong: 'Well done!'. html text: ' You successfully read this important alert message.' ]. html tbsAlert beInfo; with: [ html strong: 'Heads up!'. html text: ' This alert needs your attention, but it''s not super important.' ]. W4S09 9 / 16 Rendering Twitter Buttons renderExampleOn: html html tbsButtonGroup: [ html tbsButton beDefault; with: 'Le'. html tbsButton beDefault; with: 'Middle'. html tbsButton beDefault; with: 'Right' ]. W4S09 10 / 16 Implement a Counter using Twitter Bootstrap Subclass WACounter WACounter subclass: #WATwitterCounter instanceVariableNames: '' classVariableNames: '' package: 'Seaside−Examples−Misc' Use JQuery and Bootstrap libraries WATwitterCounter class >> initialize "self initialize" | app | app := WAAdmin register: self asApplicationAt: 'twittercounter '. app addLibrary: JQDeploymentLibrary; addLibrary: TBSDevelopmentLibrary W4S09 11 / 16 Implement a Counter using Twitter Bootstrap Redefine renderContentOn: WATwitterCounter >> renderContentOn: html html tbsContainer: [ html form: [ html tbsButtonGroup beSmall; with: [ html tbsButton beDefault; callback: [ self increase ]; with: '+'. html tbsButton beDefault; callback: [ self decrease ]; with: '−' ]. html space; tbsBadge: self count ] ] W4S09 12 / 16 Implement a Counter using Twitter W4S09 13 / 16 Apply Your Own CSS Rules WATwitterCounter >> renderContentOn: html html tbsContainer: [ html form: [ "..." html space. html tbsBadge class: 'odd' if: self count odd; with: self count ] ] WATwitterCounter >> style ^ '.odd{ color: red;} ' <span class="badge odd">7</span> W4S09 14 / 16 Conclusion A Web application = a root component A Component renders itself in HTML (renderContentOn:) An exensible DSL helps to easily generate HTML ◦ using brushes ◦ according to CSS frameworks such as Bootstrap, JQuery UI, ... ◦ and scripting (loops, ...) W4S09 15 / 16 A course by and in collaboration with Inria 2016 Except where otherwise noted, this work is licensed under CC BY-NC-ND 3.0 France https://creativecommons.org/licenses/by-nc-nd/3.0/fr/.

View Full Text

Details

  • File Type
    pdf
  • Upload Time
    -
  • Content Languages
    English
  • Upload User
    Anonymous/Not logged-in
  • File Pages
    16 Page
  • File Size
    -

Download

Channel Download Status
Express Download Enable

Copyright

We respect the copyrights and intellectual property rights of all users. All uploaded documents are either original works of the uploader or authorized works of the rightful owners.

  • Not to be reproduced or distributed without explicit permission.
  • Not used for commercial purposes outside of approved use cases.
  • Not used to infringe on the rights of the original creators.
  • If you believe any content infringes your copyright, please contact us immediately.

Support

For help with questions, suggestions, or problems, please contact us