SlideShare una empresa de Scribd logo
1 de 36
Descargar para leer sin conexión
Nick Ager
                              @nickager




lunes 3 de septiembre de 12
Plan

                     • Overview of jQueryMobile
                     • Seaside integration with jQueryMobile
                     • Building an app with Pharo, Seaside
                              jQueryMobile
                     • Questions

lunes 3 de septiembre de 12
Installation




                              http://jquerymobile.seasidehosting.st
lunes 3 de septiembre de 12
Follow along




                              http://jquerymobile.seasidehosting.st

lunes 3 de septiembre de 12
#1 jQuery




lunes 3 de septiembre de 12
#2 jQuery Mobile




                              Progressive enhancement

lunes 3 de septiembre de 12
Widely used




lunes 3 de septiembre de 12
Demo
                JQMAdmin register: WACounter asApplicationAt: 'example1'.




lunes 3 de septiembre de 12
HiJax




                               JQueryMobile orchestrates the
                              transition between the two pages
lunes 3 de septiembre de 12
HiJax




                               JQueryMobile orchestrates the
                              transition between the two pages
lunes 3 de septiembre de 12
HiJax




                               JQueryMobile orchestrates Next page downloads in
                                                          the
                              transition between the two pages background
lunes 3 de septiembre de 12
HiJax




                               JQueryMobile orchestrates Next page downloads in
                                                          the
                              transition between the two pages background
lunes 3 de septiembre de 12
HiJax




                               JQueryMobile orchestrates the
                              transition between the two pages
lunes 3 de septiembre de 12
Seaside adds surrounding page div
      WACounter>>renderContentOn: html
      ! html heading: count.
      ! html anchor
      ! ! jqmTransitionFlip;
      ! ! callback: [ self increase ];
      ! ! with: '++'.
      ! html space.
      ! html anchor
      ! ! jqmTransitionFade;
      ! ! callback: [ self decrease ];
      ! ! with: '--'


     <div data-role="page" id="pageId1">
     	 <h1>0</h1>
     	 <a data-transition="flip"
     	 	 href="/example1?_s=pd7WE5NXDZgQ645v&_k=_cTKIFL5PeEz1RRS&1">++</a>
     	 &nbsp;
     	 <a data-transition="fade"
            href="/example1?_s=pd7WE5NXDZgQ645v&_k=_cTKIFL5PeEz1RRS&2">--</a>
     </div>

lunes 3 de septiembre de 12
Seaside changes the binding
                              document>>addLoadScript:
       JQMEvents>>renderOrientationChangeEventOn: html
          html heading
             level4;
             id: html nextId;
             with: 'Text changes on new orientation'.

             html document addLoadScript:
                (html jQuery page onOrientationChange:
                   ('$("#', html lastId, '").text("Orientation: " + event.orientation)'
                   asFunction: #(event)))



       <div data-role="page" id="pageId5">
        <h4 id="id1">Text changes on new orientation</h4>
        <script type="text/javascript">/*<![CDATA[*/$("#pageId5").bind("pageinit",
       function(){$("#pageId5").bind("orientationchange",function(event){$
       ("#id1").text("Orientation: " + event.orientation)});});/*]]>*/</script>
       </div>


                               /javascript/jquery-mobile/Events
lunes 3 de septiembre de 12
JQMAdmin
       JQMAdmin register: WACounter asApplicationAt: 'example1'.




       JQMAdmin class>>register: aComponentClass asApplicationAt: aString
       ! | application |
       ! application := super register: aComponentClass asApplicationAt: aString.
       ! application preferenceAt: #scriptGeneratorClass put: JQMScriptGenerator.
       ! application preferenceAt: #rootDecorationClasses put: #().
       ! application preferenceAt: #renderPhaseContinuationClass put:
       JQMRenderPhaseContinuation.

       !     ^ application




lunes 3 de septiembre de 12
ids: session unique VS page unique
      JQMRenderPhaseContinuation>>createRenderContext
      ! | renderContext |
      ! "create a custom render context - which in turn creates a custom
         callback registry which provides callback ids (html nextId) which are
         session unique, rather than page unique"
      !
      ! renderContext := JQMRenderContext new.
      !
      ! renderContext visitor: (WARenderingGuide client: renderContext visitor).
      !
      ! ^ renderContext



       JQMEvents>>renderOrientationChangeEventOn: html
          html heading
             level4;
             id: html nextId;
             with: 'Text changes on new orientation'.

          html document addLoadScript:
       (html jQuery page onOrientationChange:
           ('$("#', html lastId, '").text("Orientation: " + event.orientation)'
               asFunction: #(event)))


lunes 3 de septiembre de 12
Demo
                JQMAdmin register: WACounter2 asApplicationAt: 'example2'.



                              Removing address bar dipping
                JQMTestPageBase>>rendererClass
                   ^ JQMHtmlCanvas




              JQMHtmlCanvas>>anchor
              ! | anchorBrushClass |
              ! anchorBrushClass := self requestContext request jqmUserAgent isIOS
              ! ! ifTrue: [ JQMIOSAnchorTag ]
              ! ! ifFalse: [ WAAnchorTag ].
              ! !
              ! ^ self brush: anchorBrushClass new



lunes 3 de septiembre de 12
Seaside’s modular architecture
                         made it possible to plug-in
                        components to modify page
                       rendering add rewire the page
                             script initialisation




lunes 3 de septiembre de 12
Precaching
                JQMAdmin register: WACounter3 asApplicationAt: 'example3'.


                 WACounter3>>renderContentOn: html
                 ! html heading: count.
                 ! html anchor
                 ! ! jqmPrefetch;
                 ! ! callback: [
                 ! ! ! (Delay forSeconds: 5) wait.
                 ! ! ! self increase ];
                 ! ! with: '++'.
                 ! html space.                       simulating a slow net work
                 ! html anchor
                 ! ! jqmPrefetch;
                 ! ! callback: [
                 ! ! ! (Delay forSeconds: 5) wait.
                 ! ! ! self decrease ];
                 ! ! with: '--'




lunes 3 de septiembre de 12
Seaside call: & answer:
       JQMAdmin register: JQMSampleFlickrHome asApplicationAt:
           'jqm-samples/flickr'.



     Repository:               http://ss3.gemstone.com/ss/jQueryMobileSamples




                                       DEMO
                              http://vimeo.com/31600152

lunes 3 de septiembre de 12
JQMSampleFlickrHome

     JQMSampleFlickrHome>>renderContentOn: html
     ! html div
     ! ! jqmContent;
     ! ! with: [
     ! ! ! html paragraph: 'Enter a tag to retrieve Flickr photos:'.
     ! ! ! self renderFormOn: html ]




     JQMSampleFlickrHome>>renderFormOn: html
     ! html form: [
     ! ! html textInput
     ! ! ! on: #flickrTag of: self.

     !     !     html submitButton
     !     !     ! callback: [
                      self show: (JQMSampleFlickrSlideShow flickrTag: self flickrTag) ];
     !     !     ! with: 'View Slide Show' ]




lunes 3 de septiembre de 12
answer:
              JQMSampleFlickrBase>>initialize
              ! super initialize.
              !
              ! self addDecoration: JQMSampleFlickrToolbar new.
              ! self addDecoration: JQMIOSHomescreenBookmarkDecorator new.


               JQMSampleFlickrToolbar>>renderContentOn: html
               ! html div
               ! ! jqmHeader;
                !      with: [
                 !       html anchor
               ! ! ! jqmIcon: 'home';
               ! ! ! jqmReverse;
               ! ! ! jqmIconNoText;
               ! ! ! callback: [ self decoratedComponent answer ].
               ! ! html heading
                 !          level1;
                  !           with: 'Flickr photos' ].
               !
               ! super renderContentOn: html.



lunes 3 de septiembre de 12
Widgets
                                            • Provides consistent widget set
                                                 closely matching iPhones native
                                                 widgets
                                            • Degrades gracefully for less
                                                 capable browsers
                                            • Uses Html & Html 5 widgets

           http://jquerymobile.seasidehosting.st/seaside/javascript/jquery-mobile/Form-element-gallery

lunes 3 de septiembre de 12
DEMO



lunes 3 de septiembre de 12
Widget styling occurs
                       (mainly) automatically

                     JQMFormBase>>renderSliderOn: html
                     ! "*Slider>http://jquerymobile.com/test/docs/forms/slider/*"
                     ! self renderFormElementOn: html element: [
                     ! ! html label
                     ! ! ! for: html nextId;
                     ! ! ! with: 'Input slider:'.
                     ! ! !
                     ! ! html rangeInput
                     ! ! ! id: html lastId;
                     ! ! ! value: 50;
                     ! ! ! min: 0;
                     ! ! ! max: 100 ].


lunes 3 de septiembre de 12
JQMFormBase>>renderRadioButtonPetsOn: html
                      ! "*Slider>http://jquerymobile.com/test/docs/forms/radiobuttons/*"
                      ! self renderFormElementOn: html element: [
                      ! ! html fieldSet
                      ! ! ! jqmControlGroup;
                      ! ! ! with: [
                      ! ! ! ! | pets |
                      ! ! ! ! pets := #(Cat Dog Hamster Lizard).
                      ! ! ! ! html radioGroup
                      ! ! ! ! ! selected: pets first;
                      ! ! ! ! ! with: [ :group |
                      ! ! ! ! ! ! html legend: 'Choose a pet:'.
                      ! ! ! ! ! ! pets do: [ :each |
                      ! ! ! ! ! ! ! html label
                      ! ! ! ! ! ! ! ! for: html nextId;
                      ! ! ! ! ! ! ! ! with: each.
                      ! ! ! ! ! ! ! html radioButton
                      ! ! ! ! ! ! ! ! group: group;
                      ! ! ! ! ! ! ! ! value: each;
                      ! ! ! ! ! ! ! ! id: html lastId ] ] ] ].


lunes 3 de septiembre de 12
JQMFormBase>>renderFlipSwitchOn: html
         "*Flip Toggle Switch>http://jquerymobile.com/test/docs/forms/switch/"
         self renderFormElementOn: html element: [
            html label
               for: html nextId;
               with: 'Flip switch:'.

                  html select
                     list: #(On Off);
                     jqmSlider;
                     id: html lastId ]




lunes 3 de septiembre de 12
JQMFormBase>>renderCheckButtonFontStylingOn: html
                         self renderFormElementOn: html element: [
                            html fieldSet
                               jqmControlGroup;
                               jqmHorizontal;
                               with: [
                                  html legend: 'Font styling:'.
                                  html label
                                     for: html nextId;
                                     with: 'b'.
                                  html checkbox
                                     id: html lastId.

                                 html label
                                    for: html nextId;
                                    with: [
                                       html emphasis: 'i' ].
                                 html checkbox
                                    id: html lastId.

                                 html label
                                    for: html nextId;
                                    with: 'u'.
                                 html checkbox
                                    id: html lastId ] ].

lunes 3 de septiembre de 12
jQuery Mobile specific

                     • layout grids
                     • collapsible content blocks
                     • accordions
                     • theming

lunes 3 de septiembre de 12
Mobile apps

                                DEMO


lunes 3 de septiembre de 12
Step #1

                        [self.webView loadRequest:
                            [NSURLRequest requestWithURL:
                               [NSURL URLWithString:
                                  @"http://jquerymobile.seasidehosting.st"]]];




lunes 3 de septiembre de 12
Step #2
            CGRect bounds = self.window.bounds;
            self.webView = [[[UIWebView alloc] initWithFrame: bounds] autorelease];

            [self.webView setAutoresizingMask:
                UIViewAutoresizingFlexibleBottomMargin
                 | UIViewAutoresizingFlexibleHeight
                 | UIViewAutoresizingFlexibleLeftMargin
                 | UIViewAutoresizingFlexibleRightMargin
                 | UIViewAutoresizingFlexibleTopMargin
                 | UIViewAutoresizingFlexibleWidth ];

            [self.window addSubview:self.webView];




lunes 3 de septiembre de 12
Outstanding

                     • Making a builder
                     • Android & Windows 8 ports
                     • Remote development to an ‘i’device


lunes 3 de septiembre de 12
Acknowledgements

                     • Louis Andriese
                     • Esteban
                     • John Macintosh
                     • Seaside team

lunes 3 de septiembre de 12
Questions?



lunes 3 de septiembre de 12

Más contenido relacionado

La actualidad más candente

Using Ember to Make a Bazillion Dollars
Using Ember to Make a Bazillion DollarsUsing Ember to Make a Bazillion Dollars
Using Ember to Make a Bazillion DollarsMike Pack
 
Jquery is Not the Answer
Jquery is Not the AnswerJquery is Not the Answer
Jquery is Not the AnswerSocial Tables
 
React.js & Om: A hands-on walkthrough of better ways to build web UIs
React.js & Om: A hands-on walkthrough of better ways to build web UIsReact.js & Om: A hands-on walkthrough of better ways to build web UIs
React.js & Om: A hands-on walkthrough of better ways to build web UIsAdam Solove
 
Useful things to do with jQuery
Useful things to do with jQueryUseful things to do with jQuery
Useful things to do with jQueryJames Bubb
 
Василевский Илья (Fun-box): "автоматизация браузера при помощи PhantomJS"
Василевский Илья (Fun-box): "автоматизация браузера при помощи PhantomJS"Василевский Илья (Fun-box): "автоматизация браузера при помощи PhantomJS"
Василевский Илья (Fun-box): "автоматизация браузера при помощи PhantomJS"Provectus
 
JavaScript - Chapter 11 - Events
 JavaScript - Chapter 11 - Events  JavaScript - Chapter 11 - Events
JavaScript - Chapter 11 - Events WebStackAcademy
 
POLITEKNIK MALAYSIA
POLITEKNIK MALAYSIAPOLITEKNIK MALAYSIA
POLITEKNIK MALAYSIAAiman Hud
 

La actualidad más candente (10)

ReactJS
ReactJSReactJS
ReactJS
 
Using Ember to Make a Bazillion Dollars
Using Ember to Make a Bazillion DollarsUsing Ember to Make a Bazillion Dollars
Using Ember to Make a Bazillion Dollars
 
Jquery is Not the Answer
Jquery is Not the AnswerJquery is Not the Answer
Jquery is Not the Answer
 
React.js & Om: A hands-on walkthrough of better ways to build web UIs
React.js & Om: A hands-on walkthrough of better ways to build web UIsReact.js & Om: A hands-on walkthrough of better ways to build web UIs
React.js & Om: A hands-on walkthrough of better ways to build web UIs
 
JavaScript: Events Handling
JavaScript: Events HandlingJavaScript: Events Handling
JavaScript: Events Handling
 
Useful things to do with jQuery
Useful things to do with jQueryUseful things to do with jQuery
Useful things to do with jQuery
 
Василевский Илья (Fun-box): "автоматизация браузера при помощи PhantomJS"
Василевский Илья (Fun-box): "автоматизация браузера при помощи PhantomJS"Василевский Илья (Fun-box): "автоматизация браузера при помощи PhantomJS"
Василевский Илья (Fun-box): "автоматизация браузера при помощи PhantomJS"
 
JavaScript - Chapter 11 - Events
 JavaScript - Chapter 11 - Events  JavaScript - Chapter 11 - Events
JavaScript - Chapter 11 - Events
 
POLITEKNIK MALAYSIA
POLITEKNIK MALAYSIAPOLITEKNIK MALAYSIA
POLITEKNIK MALAYSIA
 
Intro to jQuery
Intro to jQueryIntro to jQuery
Intro to jQuery
 

Similar a Building An App Based On JQuery Mobile And iOs Pharo

React + Redux Introduction
React + Redux IntroductionReact + Redux Introduction
React + Redux IntroductionNikolaus Graf
 
MeasureCamp IX (London) - 10 JavaScript Concepts for web analysts
MeasureCamp IX (London) - 10 JavaScript Concepts for web analystsMeasureCamp IX (London) - 10 JavaScript Concepts for web analysts
MeasureCamp IX (London) - 10 JavaScript Concepts for web analystsSimo Ahava
 
JavaScript: DOM and jQuery
JavaScript: DOM and jQueryJavaScript: DOM and jQuery
JavaScript: DOM and jQuery維佋 唐
 
Overlays, Accordions & Tabs, Oh My
Overlays, Accordions & Tabs, Oh MyOverlays, Accordions & Tabs, Oh My
Overlays, Accordions & Tabs, Oh MySteve McMahon
 
Ride on the Fast Track of Web with Ruby on Rails- Part 2
Ride on the Fast Track of Web with Ruby on Rails- Part 2Ride on the Fast Track of Web with Ruby on Rails- Part 2
Ride on the Fast Track of Web with Ruby on Rails- Part 2A.K.M. Ahsrafuzzaman
 
ARTDM 170 Week 4: JavaScript Effects
ARTDM 170 Week 4: JavaScript EffectsARTDM 170 Week 4: JavaScript Effects
ARTDM 170 Week 4: JavaScript EffectsGilbert Guerrero
 
Ajax pagination using j query in rails3
Ajax pagination using j query in rails3Ajax pagination using j query in rails3
Ajax pagination using j query in rails3Andolasoft Inc
 
NeXTPLAN: Enterprise software that rocks!
NeXTPLAN: Enterprise software that rocks!NeXTPLAN: Enterprise software that rocks!
NeXTPLAN: Enterprise software that rocks!ESUG
 
Alloy Tips & Tricks #TiLon
Alloy Tips & Tricks #TiLonAlloy Tips & Tricks #TiLon
Alloy Tips & Tricks #TiLonFokke Zandbergen
 
Keeping the frontend under control with Symfony and Webpack
Keeping the frontend under control with Symfony and WebpackKeeping the frontend under control with Symfony and Webpack
Keeping the frontend under control with Symfony and WebpackIgnacio Martín
 
Modern Web Technologies
Modern Web TechnologiesModern Web Technologies
Modern Web TechnologiesPerttu Myry
 
Structure your Play application with the cake pattern (and test it)
Structure your Play application with the cake pattern (and test it)Structure your Play application with the cake pattern (and test it)
Structure your Play application with the cake pattern (and test it)yann_s
 
Seaside - Why should you care? (OSDC.fr 2010)
Seaside - Why should you care? (OSDC.fr 2010)Seaside - Why should you care? (OSDC.fr 2010)
Seaside - Why should you care? (OSDC.fr 2010)jfitzell
 
Writing your Third Plugin
Writing your Third PluginWriting your Third Plugin
Writing your Third PluginJustin Ryan
 
Developing High Performance Web Apps
Developing High Performance Web AppsDeveloping High Performance Web Apps
Developing High Performance Web AppsTimothy Fisher
 
jQuery basics
jQuery basicsjQuery basics
jQuery basicsKamal S
 

Similar a Building An App Based On JQuery Mobile And iOs Pharo (20)

React + Redux Introduction
React + Redux IntroductionReact + Redux Introduction
React + Redux Introduction
 
MeasureCamp IX (London) - 10 JavaScript Concepts for web analysts
MeasureCamp IX (London) - 10 JavaScript Concepts for web analystsMeasureCamp IX (London) - 10 JavaScript Concepts for web analysts
MeasureCamp IX (London) - 10 JavaScript Concepts for web analysts
 
JavaScript: DOM and jQuery
JavaScript: DOM and jQueryJavaScript: DOM and jQuery
JavaScript: DOM and jQuery
 
Overlays, Accordions & Tabs, Oh My
Overlays, Accordions & Tabs, Oh MyOverlays, Accordions & Tabs, Oh My
Overlays, Accordions & Tabs, Oh My
 
Ride on the Fast Track of Web with Ruby on Rails- Part 2
Ride on the Fast Track of Web with Ruby on Rails- Part 2Ride on the Fast Track of Web with Ruby on Rails- Part 2
Ride on the Fast Track of Web with Ruby on Rails- Part 2
 
ARTDM 170 Week 4: JavaScript Effects
ARTDM 170 Week 4: JavaScript EffectsARTDM 170 Week 4: JavaScript Effects
ARTDM 170 Week 4: JavaScript Effects
 
Redux Universal
Redux UniversalRedux Universal
Redux Universal
 
Ajax pagination using j query in rails3
Ajax pagination using j query in rails3Ajax pagination using j query in rails3
Ajax pagination using j query in rails3
 
NeXTPLAN: Enterprise software that rocks!
NeXTPLAN: Enterprise software that rocks!NeXTPLAN: Enterprise software that rocks!
NeXTPLAN: Enterprise software that rocks!
 
Alloy Tips & Tricks #TiLon
Alloy Tips & Tricks #TiLonAlloy Tips & Tricks #TiLon
Alloy Tips & Tricks #TiLon
 
handout-05b
handout-05bhandout-05b
handout-05b
 
handout-05b
handout-05bhandout-05b
handout-05b
 
jQuery PPT
jQuery PPTjQuery PPT
jQuery PPT
 
Keeping the frontend under control with Symfony and Webpack
Keeping the frontend under control with Symfony and WebpackKeeping the frontend under control with Symfony and Webpack
Keeping the frontend under control with Symfony and Webpack
 
Modern Web Technologies
Modern Web TechnologiesModern Web Technologies
Modern Web Technologies
 
Structure your Play application with the cake pattern (and test it)
Structure your Play application with the cake pattern (and test it)Structure your Play application with the cake pattern (and test it)
Structure your Play application with the cake pattern (and test it)
 
Seaside - Why should you care? (OSDC.fr 2010)
Seaside - Why should you care? (OSDC.fr 2010)Seaside - Why should you care? (OSDC.fr 2010)
Seaside - Why should you care? (OSDC.fr 2010)
 
Writing your Third Plugin
Writing your Third PluginWriting your Third Plugin
Writing your Third Plugin
 
Developing High Performance Web Apps
Developing High Performance Web AppsDeveloping High Performance Web Apps
Developing High Performance Web Apps
 
jQuery basics
jQuery basicsjQuery basics
jQuery basics
 

Más de ESUG

Workshop: Identifying concept inventories in agile programming
Workshop: Identifying concept inventories in agile programmingWorkshop: Identifying concept inventories in agile programming
Workshop: Identifying concept inventories in agile programmingESUG
 
Technical documentation support in Pharo
Technical documentation support in PharoTechnical documentation support in Pharo
Technical documentation support in PharoESUG
 
The Pharo Debugger and Debugging tools: Advances and Roadmap
The Pharo Debugger and Debugging tools: Advances and RoadmapThe Pharo Debugger and Debugging tools: Advances and Roadmap
The Pharo Debugger and Debugging tools: Advances and RoadmapESUG
 
Sequence: Pipeline modelling in Pharo
Sequence: Pipeline modelling in PharoSequence: Pipeline modelling in Pharo
Sequence: Pipeline modelling in PharoESUG
 
Migration process from monolithic to micro frontend architecture in mobile ap...
Migration process from monolithic to micro frontend architecture in mobile ap...Migration process from monolithic to micro frontend architecture in mobile ap...
Migration process from monolithic to micro frontend architecture in mobile ap...ESUG
 
Analyzing Dart Language with Pharo: Report and early results
Analyzing Dart Language with Pharo: Report and early resultsAnalyzing Dart Language with Pharo: Report and early results
Analyzing Dart Language with Pharo: Report and early resultsESUG
 
Transpiling Pharo Classes to JS ECMAScript 5 versus ECMAScript 6
Transpiling Pharo Classes to JS ECMAScript 5 versus ECMAScript 6Transpiling Pharo Classes to JS ECMAScript 5 versus ECMAScript 6
Transpiling Pharo Classes to JS ECMAScript 5 versus ECMAScript 6ESUG
 
A Unit Test Metamodel for Test Generation
A Unit Test Metamodel for Test GenerationA Unit Test Metamodel for Test Generation
A Unit Test Metamodel for Test GenerationESUG
 
Creating Unit Tests Using Genetic Programming
Creating Unit Tests Using Genetic ProgrammingCreating Unit Tests Using Genetic Programming
Creating Unit Tests Using Genetic ProgrammingESUG
 
Threaded-Execution and CPS Provide Smooth Switching Between Execution Modes
Threaded-Execution and CPS Provide Smooth Switching Between Execution ModesThreaded-Execution and CPS Provide Smooth Switching Between Execution Modes
Threaded-Execution and CPS Provide Smooth Switching Between Execution ModesESUG
 
Exploring GitHub Actions through EGAD: An Experience Report
Exploring GitHub Actions through EGAD: An Experience ReportExploring GitHub Actions through EGAD: An Experience Report
Exploring GitHub Actions through EGAD: An Experience ReportESUG
 
Pharo: a reflective language A first systematic analysis of reflective APIs
Pharo: a reflective language A first systematic analysis of reflective APIsPharo: a reflective language A first systematic analysis of reflective APIs
Pharo: a reflective language A first systematic analysis of reflective APIsESUG
 
Garbage Collector Tuning
Garbage Collector TuningGarbage Collector Tuning
Garbage Collector TuningESUG
 
Improving Performance Through Object Lifetime Profiling: the DataFrame Case
Improving Performance Through Object Lifetime Profiling: the DataFrame CaseImproving Performance Through Object Lifetime Profiling: the DataFrame Case
Improving Performance Through Object Lifetime Profiling: the DataFrame CaseESUG
 
Pharo DataFrame: Past, Present, and Future
Pharo DataFrame: Past, Present, and FuturePharo DataFrame: Past, Present, and Future
Pharo DataFrame: Past, Present, and FutureESUG
 
thisContext in the Debugger
thisContext in the DebuggerthisContext in the Debugger
thisContext in the DebuggerESUG
 
Websockets for Fencing Score
Websockets for Fencing ScoreWebsockets for Fencing Score
Websockets for Fencing ScoreESUG
 
ShowUs: PharoJS.org Develop in Pharo, Run on JavaScript
ShowUs: PharoJS.org Develop in Pharo, Run on JavaScriptShowUs: PharoJS.org Develop in Pharo, Run on JavaScript
ShowUs: PharoJS.org Develop in Pharo, Run on JavaScriptESUG
 
Advanced Object- Oriented Design Mooc
Advanced Object- Oriented Design MoocAdvanced Object- Oriented Design Mooc
Advanced Object- Oriented Design MoocESUG
 
A New Architecture Reconciling Refactorings and Transformations
A New Architecture Reconciling Refactorings and TransformationsA New Architecture Reconciling Refactorings and Transformations
A New Architecture Reconciling Refactorings and TransformationsESUG
 

Más de ESUG (20)

Workshop: Identifying concept inventories in agile programming
Workshop: Identifying concept inventories in agile programmingWorkshop: Identifying concept inventories in agile programming
Workshop: Identifying concept inventories in agile programming
 
Technical documentation support in Pharo
Technical documentation support in PharoTechnical documentation support in Pharo
Technical documentation support in Pharo
 
The Pharo Debugger and Debugging tools: Advances and Roadmap
The Pharo Debugger and Debugging tools: Advances and RoadmapThe Pharo Debugger and Debugging tools: Advances and Roadmap
The Pharo Debugger and Debugging tools: Advances and Roadmap
 
Sequence: Pipeline modelling in Pharo
Sequence: Pipeline modelling in PharoSequence: Pipeline modelling in Pharo
Sequence: Pipeline modelling in Pharo
 
Migration process from monolithic to micro frontend architecture in mobile ap...
Migration process from monolithic to micro frontend architecture in mobile ap...Migration process from monolithic to micro frontend architecture in mobile ap...
Migration process from monolithic to micro frontend architecture in mobile ap...
 
Analyzing Dart Language with Pharo: Report and early results
Analyzing Dart Language with Pharo: Report and early resultsAnalyzing Dart Language with Pharo: Report and early results
Analyzing Dart Language with Pharo: Report and early results
 
Transpiling Pharo Classes to JS ECMAScript 5 versus ECMAScript 6
Transpiling Pharo Classes to JS ECMAScript 5 versus ECMAScript 6Transpiling Pharo Classes to JS ECMAScript 5 versus ECMAScript 6
Transpiling Pharo Classes to JS ECMAScript 5 versus ECMAScript 6
 
A Unit Test Metamodel for Test Generation
A Unit Test Metamodel for Test GenerationA Unit Test Metamodel for Test Generation
A Unit Test Metamodel for Test Generation
 
Creating Unit Tests Using Genetic Programming
Creating Unit Tests Using Genetic ProgrammingCreating Unit Tests Using Genetic Programming
Creating Unit Tests Using Genetic Programming
 
Threaded-Execution and CPS Provide Smooth Switching Between Execution Modes
Threaded-Execution and CPS Provide Smooth Switching Between Execution ModesThreaded-Execution and CPS Provide Smooth Switching Between Execution Modes
Threaded-Execution and CPS Provide Smooth Switching Between Execution Modes
 
Exploring GitHub Actions through EGAD: An Experience Report
Exploring GitHub Actions through EGAD: An Experience ReportExploring GitHub Actions through EGAD: An Experience Report
Exploring GitHub Actions through EGAD: An Experience Report
 
Pharo: a reflective language A first systematic analysis of reflective APIs
Pharo: a reflective language A first systematic analysis of reflective APIsPharo: a reflective language A first systematic analysis of reflective APIs
Pharo: a reflective language A first systematic analysis of reflective APIs
 
Garbage Collector Tuning
Garbage Collector TuningGarbage Collector Tuning
Garbage Collector Tuning
 
Improving Performance Through Object Lifetime Profiling: the DataFrame Case
Improving Performance Through Object Lifetime Profiling: the DataFrame CaseImproving Performance Through Object Lifetime Profiling: the DataFrame Case
Improving Performance Through Object Lifetime Profiling: the DataFrame Case
 
Pharo DataFrame: Past, Present, and Future
Pharo DataFrame: Past, Present, and FuturePharo DataFrame: Past, Present, and Future
Pharo DataFrame: Past, Present, and Future
 
thisContext in the Debugger
thisContext in the DebuggerthisContext in the Debugger
thisContext in the Debugger
 
Websockets for Fencing Score
Websockets for Fencing ScoreWebsockets for Fencing Score
Websockets for Fencing Score
 
ShowUs: PharoJS.org Develop in Pharo, Run on JavaScript
ShowUs: PharoJS.org Develop in Pharo, Run on JavaScriptShowUs: PharoJS.org Develop in Pharo, Run on JavaScript
ShowUs: PharoJS.org Develop in Pharo, Run on JavaScript
 
Advanced Object- Oriented Design Mooc
Advanced Object- Oriented Design MoocAdvanced Object- Oriented Design Mooc
Advanced Object- Oriented Design Mooc
 
A New Architecture Reconciling Refactorings and Transformations
A New Architecture Reconciling Refactorings and TransformationsA New Architecture Reconciling Refactorings and Transformations
A New Architecture Reconciling Refactorings and Transformations
 

Último

Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024BookNet Canada
 
Unraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfUnraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfAlex Barbosa Coqueiro
 
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024BookNet Canada
 
SALESFORCE EDUCATION CLOUD | FEXLE SERVICES
SALESFORCE EDUCATION CLOUD | FEXLE SERVICESSALESFORCE EDUCATION CLOUD | FEXLE SERVICES
SALESFORCE EDUCATION CLOUD | FEXLE SERVICESmohitsingh558521
 
Generative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information DevelopersGenerative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information DevelopersRaghuram Pandurangan
 
Commit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyCommit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyAlfredo García Lavilla
 
Digital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptxDigital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptxLoriGlavin3
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsSergiu Bodiu
 
Moving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdfMoving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdfLoriGlavin3
 
The Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsThe Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsPixlogix Infotech
 
Connect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationConnect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationSlibray Presentation
 
WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your BrandWordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brandgvaughan
 
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii SoldatenkoFwdays
 
Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebUiPathCommunity
 
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptxPasskey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptxLoriGlavin3
 
unit 4 immunoblotting technique complete.pptx
unit 4 immunoblotting technique complete.pptxunit 4 immunoblotting technique complete.pptx
unit 4 immunoblotting technique complete.pptxBkGupta21
 
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek SchlawackFwdays
 
How to write a Business Continuity Plan
How to write a Business Continuity PlanHow to write a Business Continuity Plan
How to write a Business Continuity PlanDatabarracks
 
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc
 
SAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxSAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxNavinnSomaal
 

Último (20)

Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
 
Unraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfUnraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdf
 
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
 
SALESFORCE EDUCATION CLOUD | FEXLE SERVICES
SALESFORCE EDUCATION CLOUD | FEXLE SERVICESSALESFORCE EDUCATION CLOUD | FEXLE SERVICES
SALESFORCE EDUCATION CLOUD | FEXLE SERVICES
 
Generative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information DevelopersGenerative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information Developers
 
Commit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyCommit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easy
 
Digital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptxDigital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptx
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platforms
 
Moving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdfMoving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdf
 
The Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsThe Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and Cons
 
Connect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationConnect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck Presentation
 
WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your BrandWordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brand
 
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko
 
Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio Web
 
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptxPasskey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptx
 
unit 4 immunoblotting technique complete.pptx
unit 4 immunoblotting technique complete.pptxunit 4 immunoblotting technique complete.pptx
unit 4 immunoblotting technique complete.pptx
 
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
 
How to write a Business Continuity Plan
How to write a Business Continuity PlanHow to write a Business Continuity Plan
How to write a Business Continuity Plan
 
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
 
SAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxSAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptx
 

Building An App Based On JQuery Mobile And iOs Pharo

  • 1. Nick Ager @nickager lunes 3 de septiembre de 12
  • 2. Plan • Overview of jQueryMobile • Seaside integration with jQueryMobile • Building an app with Pharo, Seaside jQueryMobile • Questions lunes 3 de septiembre de 12
  • 3. Installation http://jquerymobile.seasidehosting.st lunes 3 de septiembre de 12
  • 4. Follow along http://jquerymobile.seasidehosting.st lunes 3 de septiembre de 12
  • 5. #1 jQuery lunes 3 de septiembre de 12
  • 6. #2 jQuery Mobile Progressive enhancement lunes 3 de septiembre de 12
  • 7. Widely used lunes 3 de septiembre de 12
  • 8. Demo JQMAdmin register: WACounter asApplicationAt: 'example1'. lunes 3 de septiembre de 12
  • 9. HiJax JQueryMobile orchestrates the transition between the two pages lunes 3 de septiembre de 12
  • 10. HiJax JQueryMobile orchestrates the transition between the two pages lunes 3 de septiembre de 12
  • 11. HiJax JQueryMobile orchestrates Next page downloads in the transition between the two pages background lunes 3 de septiembre de 12
  • 12. HiJax JQueryMobile orchestrates Next page downloads in the transition between the two pages background lunes 3 de septiembre de 12
  • 13. HiJax JQueryMobile orchestrates the transition between the two pages lunes 3 de septiembre de 12
  • 14. Seaside adds surrounding page div WACounter>>renderContentOn: html ! html heading: count. ! html anchor ! ! jqmTransitionFlip; ! ! callback: [ self increase ]; ! ! with: '++'. ! html space. ! html anchor ! ! jqmTransitionFade; ! ! callback: [ self decrease ]; ! ! with: '--' <div data-role="page" id="pageId1"> <h1>0</h1> <a data-transition="flip" href="/example1?_s=pd7WE5NXDZgQ645v&_k=_cTKIFL5PeEz1RRS&1">++</a> &nbsp; <a data-transition="fade" href="/example1?_s=pd7WE5NXDZgQ645v&_k=_cTKIFL5PeEz1RRS&2">--</a> </div> lunes 3 de septiembre de 12
  • 15. Seaside changes the binding document>>addLoadScript: JQMEvents>>renderOrientationChangeEventOn: html html heading level4; id: html nextId; with: 'Text changes on new orientation'. html document addLoadScript: (html jQuery page onOrientationChange: ('$("#', html lastId, '").text("Orientation: " + event.orientation)' asFunction: #(event))) <div data-role="page" id="pageId5"> <h4 id="id1">Text changes on new orientation</h4> <script type="text/javascript">/*<![CDATA[*/$("#pageId5").bind("pageinit", function(){$("#pageId5").bind("orientationchange",function(event){$ ("#id1").text("Orientation: " + event.orientation)});});/*]]>*/</script> </div> /javascript/jquery-mobile/Events lunes 3 de septiembre de 12
  • 16. JQMAdmin JQMAdmin register: WACounter asApplicationAt: 'example1'. JQMAdmin class>>register: aComponentClass asApplicationAt: aString ! | application | ! application := super register: aComponentClass asApplicationAt: aString. ! application preferenceAt: #scriptGeneratorClass put: JQMScriptGenerator. ! application preferenceAt: #rootDecorationClasses put: #(). ! application preferenceAt: #renderPhaseContinuationClass put: JQMRenderPhaseContinuation. ! ^ application lunes 3 de septiembre de 12
  • 17. ids: session unique VS page unique JQMRenderPhaseContinuation>>createRenderContext ! | renderContext | ! "create a custom render context - which in turn creates a custom callback registry which provides callback ids (html nextId) which are session unique, rather than page unique" ! ! renderContext := JQMRenderContext new. ! ! renderContext visitor: (WARenderingGuide client: renderContext visitor). ! ! ^ renderContext JQMEvents>>renderOrientationChangeEventOn: html html heading level4; id: html nextId; with: 'Text changes on new orientation'. html document addLoadScript: (html jQuery page onOrientationChange: ('$("#', html lastId, '").text("Orientation: " + event.orientation)' asFunction: #(event))) lunes 3 de septiembre de 12
  • 18. Demo JQMAdmin register: WACounter2 asApplicationAt: 'example2'. Removing address bar dipping JQMTestPageBase>>rendererClass    ^ JQMHtmlCanvas JQMHtmlCanvas>>anchor ! | anchorBrushClass | ! anchorBrushClass := self requestContext request jqmUserAgent isIOS ! ! ifTrue: [ JQMIOSAnchorTag ] ! ! ifFalse: [ WAAnchorTag ]. ! ! ! ^ self brush: anchorBrushClass new lunes 3 de septiembre de 12
  • 19. Seaside’s modular architecture made it possible to plug-in components to modify page rendering add rewire the page script initialisation lunes 3 de septiembre de 12
  • 20. Precaching JQMAdmin register: WACounter3 asApplicationAt: 'example3'. WACounter3>>renderContentOn: html ! html heading: count. ! html anchor ! ! jqmPrefetch; ! ! callback: [ ! ! ! (Delay forSeconds: 5) wait. ! ! ! self increase ]; ! ! with: '++'. ! html space. simulating a slow net work ! html anchor ! ! jqmPrefetch; ! ! callback: [ ! ! ! (Delay forSeconds: 5) wait. ! ! ! self decrease ]; ! ! with: '--' lunes 3 de septiembre de 12
  • 21. Seaside call: & answer: JQMAdmin register: JQMSampleFlickrHome asApplicationAt: 'jqm-samples/flickr'. Repository: http://ss3.gemstone.com/ss/jQueryMobileSamples DEMO http://vimeo.com/31600152 lunes 3 de septiembre de 12
  • 22. JQMSampleFlickrHome JQMSampleFlickrHome>>renderContentOn: html ! html div ! ! jqmContent; ! ! with: [ ! ! ! html paragraph: 'Enter a tag to retrieve Flickr photos:'. ! ! ! self renderFormOn: html ] JQMSampleFlickrHome>>renderFormOn: html ! html form: [ ! ! html textInput ! ! ! on: #flickrTag of: self. ! ! html submitButton ! ! ! callback: [ self show: (JQMSampleFlickrSlideShow flickrTag: self flickrTag) ]; ! ! ! with: 'View Slide Show' ] lunes 3 de septiembre de 12
  • 23. answer: JQMSampleFlickrBase>>initialize ! super initialize. ! ! self addDecoration: JQMSampleFlickrToolbar new. ! self addDecoration: JQMIOSHomescreenBookmarkDecorator new. JQMSampleFlickrToolbar>>renderContentOn: html ! html div ! ! jqmHeader; ! with: [ ! html anchor ! ! ! jqmIcon: 'home'; ! ! ! jqmReverse; ! ! ! jqmIconNoText; ! ! ! callback: [ self decoratedComponent answer ]. ! ! html heading ! level1; ! with: 'Flickr photos' ]. ! ! super renderContentOn: html. lunes 3 de septiembre de 12
  • 24. Widgets • Provides consistent widget set closely matching iPhones native widgets • Degrades gracefully for less capable browsers • Uses Html & Html 5 widgets http://jquerymobile.seasidehosting.st/seaside/javascript/jquery-mobile/Form-element-gallery lunes 3 de septiembre de 12
  • 25. DEMO lunes 3 de septiembre de 12
  • 26. Widget styling occurs (mainly) automatically JQMFormBase>>renderSliderOn: html ! "*Slider>http://jquerymobile.com/test/docs/forms/slider/*" ! self renderFormElementOn: html element: [ ! ! html label ! ! ! for: html nextId; ! ! ! with: 'Input slider:'. ! ! ! ! ! html rangeInput ! ! ! id: html lastId; ! ! ! value: 50; ! ! ! min: 0; ! ! ! max: 100 ]. lunes 3 de septiembre de 12
  • 27. JQMFormBase>>renderRadioButtonPetsOn: html ! "*Slider>http://jquerymobile.com/test/docs/forms/radiobuttons/*" ! self renderFormElementOn: html element: [ ! ! html fieldSet ! ! ! jqmControlGroup; ! ! ! with: [ ! ! ! ! | pets | ! ! ! ! pets := #(Cat Dog Hamster Lizard). ! ! ! ! html radioGroup ! ! ! ! ! selected: pets first; ! ! ! ! ! with: [ :group | ! ! ! ! ! ! html legend: 'Choose a pet:'. ! ! ! ! ! ! pets do: [ :each | ! ! ! ! ! ! ! html label ! ! ! ! ! ! ! ! for: html nextId; ! ! ! ! ! ! ! ! with: each. ! ! ! ! ! ! ! html radioButton ! ! ! ! ! ! ! ! group: group; ! ! ! ! ! ! ! ! value: each; ! ! ! ! ! ! ! ! id: html lastId ] ] ] ]. lunes 3 de septiembre de 12
  • 28. JQMFormBase>>renderFlipSwitchOn: html "*Flip Toggle Switch>http://jquerymobile.com/test/docs/forms/switch/" self renderFormElementOn: html element: [ html label for: html nextId; with: 'Flip switch:'. html select list: #(On Off); jqmSlider; id: html lastId ] lunes 3 de septiembre de 12
  • 29. JQMFormBase>>renderCheckButtonFontStylingOn: html self renderFormElementOn: html element: [ html fieldSet jqmControlGroup; jqmHorizontal; with: [ html legend: 'Font styling:'. html label for: html nextId; with: 'b'. html checkbox id: html lastId. html label for: html nextId; with: [ html emphasis: 'i' ]. html checkbox id: html lastId. html label for: html nextId; with: 'u'. html checkbox id: html lastId ] ]. lunes 3 de septiembre de 12
  • 30. jQuery Mobile specific • layout grids • collapsible content blocks • accordions • theming lunes 3 de septiembre de 12
  • 31. Mobile apps DEMO lunes 3 de septiembre de 12
  • 32. Step #1 [self.webView loadRequest: [NSURLRequest requestWithURL: [NSURL URLWithString: @"http://jquerymobile.seasidehosting.st"]]]; lunes 3 de septiembre de 12
  • 33. Step #2 CGRect bounds = self.window.bounds; self.webView = [[[UIWebView alloc] initWithFrame: bounds] autorelease]; [self.webView setAutoresizingMask: UIViewAutoresizingFlexibleBottomMargin | UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleRightMargin | UIViewAutoresizingFlexibleTopMargin | UIViewAutoresizingFlexibleWidth ]; [self.window addSubview:self.webView]; lunes 3 de septiembre de 12
  • 34. Outstanding • Making a builder • Android & Windows 8 ports • Remote development to an ‘i’device lunes 3 de septiembre de 12
  • 35. Acknowledgements • Louis Andriese • Esteban • John Macintosh • Seaside team lunes 3 de septiembre de 12
  • 36. Questions? lunes 3 de septiembre de 12