SlideShare uma empresa Scribd logo
1 de 42
Baixar para ler offline
Lib.SAPO.JS




Codebits 2007 – 14/11/2007
        9 da manhã??!! -_-

Cláudio Gamboa <gamboa@co.sapo.pt>
Lib.SAPO.JS

    JavaScript
●

          AJAX
      ●

          JSON
      ●

          Script tag hack
      ●


    Lib.SAPO.JS
●

          O que é
      ●

          Vantagens
      ●

          Estrutura
      ●


    Exemplos
●
JavaScript

   ”The World's Most
Misunderstood Programming
        Language”

             By...
JavaScript    The World's Most Misunderstood
                       Programming Language

By:



                   Douglas Crockford
                    http://www.crockford.com/
JavaScript   The World's Most Misunderstood
                Programming Language


   Não é um ”brinquedo”
       para a web...
JavaScript        The World's Most Misunderstood
                          Programming Language


          Não é um ”brinquedo”
              para a web...
    É uma linguagem de programação
●

    Pequena mas sofisticada
●

    Não tem ”class-oriented inheritance”, mas
●

    tem ”prototype-oriented inheritance”
    Objects as self containers
●

    Não se chama AJAX.
●
JavaScript     The World's Most Misunderstood
                  Programming Language


Permite criar aplicações completas
JavaScript   The World's Most Misunderstood
                Programming Language


  Um bom manual de JavaScript
JavaScript.AJAX

           AJAX
JavaScript.AJAX

 Não é esconder e mostrar divs com
             JavaScript
JavaScript.AJAX

     Asynchronous JavaScript and XML

    Criar aplicações web sem ser
●

    necessário fazer reload ao browser
    É assíncrono
●

    Usa o objecto XMLHttpRequest
●

    Recebe o conteúdo formatado em XML*
●

    É host restricted
●
JavaScript.AJAX

    Exemplo dum AJAX request
JavaScript.AJAX
              Exemplo dum AJAX request
 <!DOCTYPE HTML PUBLIC quot;-//W3C//DTD HTML 4.01 Transitional//ENquot;
     quot;http://www.w3.org/TR/html4/loose.dtdquot;>
     <html>
     <head>
     <title>AJAX Request</title>
     <script type=quot;text/javascriptquot; src=quot;http://js.sapo.pt/Prototype/quot;></script>
     <script type=quot;text/javascriptquot;>
     function myRequest()
     {
     var url = document.getElementById('url').value;
     new Ajax.Request(url, {
             method:'get',
             onSuccess: function(req){
                 var xml = req.responseXML;
                 var aItems = xml.retElementsByTagName('item');
                 var totalItems = aItems.length;
                 document.getElementById('output').innerHTML = totalItems;

             },
             onException: function(r, e){
                 throw e;
             }
     });
     }
     </script>
     </head>
     <body>
     <input type=quot;textquot; id=quot;urlquot; size=quot;40quot; value=quot;quot; />
     <input type=quot;buttonquot; name=quot;bquot; value=quot;Request Itquot; onclick=quot;myRequest();quot; />
     <hr />
     <div><span id=quot;outputquot;></span> items no XML</div>
     </body>
     </html>
JavaScript.AJAX

 AJAX request – host restriction
JavaScript.AJAX

 AJAX request – host restriction
JavaScript.AJAX

     AJAX request – host restriction
                 SOLUÇÕES

                      Apache Proxy
RewriteEngine On
RewriteRule ^/req.xml http://videos.sapo.pt/gamboa/rss [P]

     Request -> http://localhost/req.xml
JavaScript.AJAX

     AJAX request – host restriction
                 SOLUÇÕES
                PHP Proxy
cat req.php
<?php
$content = file_get_contents('http://videos.sapo.pt/gamboa/rss');
header(”Content-type: text/xml”);
echo $content;
?>
     Request -> http://localhost/req.php
JavaScript.JSON

           JSON
JavaScript.JSON

        JavaScript Object Notation
            (”jeison/jotason/jota esse on/...”)
    Formato duma estrutura de dados/
●

    array associativo (JS Object)
    É text-based
●

    RFC 4627
●

    Content type: application/json
●

    Pode encapsular funções (Class)
●
JavaScript.JSON
              {
                  quot;nomequot;: quot;Claudio Gamboaquot;,
    String
●                 quot;idadequot;: 26,
                  quot;solteiroquot;: true,
    Number        quot;gostaquot;: {
●
                               quot;musicaquot;: [quot;Emperorquot;, quot;Moonspellquot;, quot;Borknagarquot;],

    Boolean                    quot;cinemaquot;: [quot;LOTRquot;, quot;Matrixquot;, quot;Se7enquot;, quot;Snatchquot;],
●
                               quot;seriesquot;: [quot;House MDquot;, quot;Seinfeldquot;],
                               quot;livrosquot;: [quot;Perfumequot;, ”Aparição”]
    Object
●                          },
                  quot;filhosquot;: null
    Array     }
●

    null
●
JavaScript.JSON

    JSON como resposta dum AJAX Request

function callBack(obj)
{
    var req = obj.responseText;

     var myObj = eval('(' + req + ')');

     alert(myObj.nome);
}
JavaScript.JSON

       JSON como Classe
JavaScript['Script'].Tag(Hack)

       SCRIPT TAG HACK
JavaScript['Script'].Tag(Hack)

                 O que é:

     Adicionar dinamicamente uma SCRIPT
 ●

     tag na página (ficheiro js/json)
     Esperar que seja carregado
 ●

     Usar/Executar o conteúdo.
 ●
JavaScript['Script'].Tag(Hack)

                        O que é:
<script type=”text/javascript”
  src=”http://services.sapo.pt/Photos/JSON/gamboa?jsonTag=foo”>
  </script>”>


// RSS em formato JSON
var foo = {”rss”:{”channel”: ....}}

alert(foo.rss.channel.item[0].title);
Vamos mudar de assunto

          ...
Lib.SAPO.JS

    O que é
●

    Vantagens
●

    Estrutura
●
Lib.SAPO.JS('O que é?')

    Repositório central de libs de
●

    JavaScript e widgets do SAPO
    É Open Source
●

    Tem classes utilitárias para
●

    simplificar o JavaScript e a vida
    dos programadores (SAPO.Utility.*)
Lib.SAPO.JS('Vantagens')

    Ter classes de JavaScript
●

    centralizadas (http://js.sapo.pt)
    Ter Widgets baseados nas classes
●

    Ter controlo de versões
●

    Ter o código organizado/separado
●

    Reutilizar código
●

          Não ter de reinventar a roda cada vez que
      ●

          se quer validar um endereço de email
    Farm estática e conteúdo
●

    ”jslinted”, ”jsmined” e ”gziped”
Lib.SAPO.JS('Vantagens')

    Criar ”packages” estáticos
●

    (Bundles) de vários ficheiros
    JavaScript e servir apenas um
    ficheiro para a aplicação.
          Torna o load da aplicação mais rapido
      ●

          Não corre o risco de ”partir” por um
      ●

          ficheiro não ter sido carregado
          Garante que todo o código necessário
      ●

          existe

      http://js.sapo.pt/Bundles/WebmessengerCliente.js
               645 Kb -> 322 Kb -> 75 Kb
Lib.SAPO.JS('Vantagens')

    Criar ”scripts” (Snippets) em que
●

    as opções são passadas na query
    string.
          Disponibilizar apenas um ficheiro para ser
      ●

          reutilizado incluindo apenas uma script
          tag.
          Dar a possibilidade de o utilizador
      ●

          alterar as opções alterando apenas os
          parametros da query string.


              Lisbon Weather
http://js.sapo.pt/Snippets/Meteo.js?c=LPLG
Lib.SAPO.JS('Estrutura')

    /SAPO/
●

    /Prototype/
●

    /YUI/
●

    /Bundles/
●

    /Snippets/
●




http://js.sapo.pt/(.*)
Lib.SAPO.JS('Estrutura')

    Prototype (Versão   1.8)
●

        Dragdrop
    –
        Effects
    –
        Builder
    –
        Controls
    –
        Slider
    –

http://js.sapo.pt/Prototype/
http://js.sapo.pt/Prototype/Dragdrop/
http://js.sapo.pt/Prototype/..../
Lib.SAPO.JS('Estrutura')

    YUI (Versão   2.2)
●

        Dom
    –
        Event
    –
        Connection
    –
        Dragdrop
    –
        Calendar
    –
        ...
    –
http://js.sapo.pt/YUI/
http://js.sapo.pt/YUI/Dom/
http://js.sapo.pt/YUI/.../
Lib.SAPO.JS('Estrutura')

    SAPO
●

        Utility
    –
        Communication
    –
        Widget
    –
        Geo
    –
        Exception
    –
Lib.SAPO.JS('Estrutura')

    SAPO.Utility
●

          Array (inArray, keyValue)
      ●

          Cookie (set, remove, get)
      ●

          Crypto (md5, sha1, sha256)
      ●

          Dumper (alertDump, returnDump, windowDump)
      ●

          CSS (set)
      ●

          String (trim, stripTags, htmlEntities(En|De)code, utf8(En|De)code
      ●                                                                       ...)

          Url (getURl, getQueryString, base64(En|De)code ...)
      ●

          Validator (mail, isPortuguesePhone)
      ●

          Variable (isArray, isObject, isString, isNumber)
      ●



               http://js.sapo.pt/SAPO/Utility/(.*)
Lib.SAPO.JS('Estrutura')

    SAPO.Communication
●

         Syndication (push,
     –                         run, runAll)


      (Class para a ”Script Tag Hack”)
        http://js.sapo.pt/SAPO/Communication/Syndication/
    http://js.sapo.pt/SAPO/Communication/Syndication/sample/
Lib.SAPO.JS('Estrutura')

    SAPO.Widget
●

          Contextmenu
      ●

          Dialog
      ●

          Tooltip
      ●

          Rating
      ●

          Maps
      ●

          Thumbs
      ●

          (Blogthis, Meteo, Photos, Search, Tags...)
      ●




           http://js.sapo.pt/SAPO/Widget/(.*)
      http://js.sapo.pt/SAPO/Widget/([^/]+)/sample/
Lib.SAPO.JS('Estrutura')

    SAPO.Geo
●

          Map
      ●




            Ver apresentação de Joaquim Muchaxo e
                 António Cruz no PP às 11:45

                        ”SAPO Mapas & GIS”

                http://js.sapo.pt/SAPO/Geo/Map/
Exemplos

    SAPO.Utility.Dumper
●

    SAPO.Utility.String
●

    SAPO.Utility.Url
●




    SAPO.Widget.Contextmenu
●

    SAPO.Widget.Tooltip
●




    SAPO.Communication.Syndication
●




Prototype
  Ajax.Request
●
Perguntas??

              ...
Mais informação

    http://js.sapo.pt/
●

    http://developer.sapo.pt/
●

    http://prototypejs.org
●

    http://developer.yahoo.com/yui/
●




    SAPO: http://www.sapo.pt/
●

    Download: http://pdvel.com/
●

    Meu blog: http://blog.pdvel.com/ (sucks)
●

Mais conteúdo relacionado

Mais procurados

Mais procurados (20)

How to use Elasticsearch Analyzers by EmergiNet
How to use  Elasticsearch Analyzers by EmergiNetHow to use  Elasticsearch Analyzers by EmergiNet
How to use Elasticsearch Analyzers by EmergiNet
 
JavaScript e JQuery para Webdesigners
JavaScript e JQuery para WebdesignersJavaScript e JQuery para Webdesigners
JavaScript e JQuery para Webdesigners
 
jQuery Simplificando o JavaScript
jQuery Simplificando o JavaScriptjQuery Simplificando o JavaScript
jQuery Simplificando o JavaScript
 
Hibernate efetivo (IA-2014 / Disturbing the Mind)
Hibernate efetivo (IA-2014 / Disturbing the Mind)Hibernate efetivo (IA-2014 / Disturbing the Mind)
Hibernate efetivo (IA-2014 / Disturbing the Mind)
 
jQuery na Prática!
jQuery na Prática!jQuery na Prática!
jQuery na Prática!
 
JavaScript Hacks
JavaScript HacksJavaScript Hacks
JavaScript Hacks
 
Mini Curso PHP Twig - PHP Conference 2017
Mini Curso PHP Twig - PHP Conference 2017 Mini Curso PHP Twig - PHP Conference 2017
Mini Curso PHP Twig - PHP Conference 2017
 
Programação Web com jQuery
Programação Web com jQueryProgramação Web com jQuery
Programação Web com jQuery
 
Realtime com node.js e socket.io
Realtime com node.js e socket.ioRealtime com node.js e socket.io
Realtime com node.js e socket.io
 
Introdução ao JQuery e AJAX
Introdução ao JQuery e AJAXIntrodução ao JQuery e AJAX
Introdução ao JQuery e AJAX
 
Crawling - Coleta de dados na Web com PHP
Crawling - Coleta de dados na Web com PHP Crawling - Coleta de dados na Web com PHP
Crawling - Coleta de dados na Web com PHP
 
Html, css, js, ajax
Html, css, js, ajaxHtml, css, js, ajax
Html, css, js, ajax
 
Apresentação sobre MVVMC
Apresentação sobre MVVMCApresentação sobre MVVMC
Apresentação sobre MVVMC
 
Desenvolvimento Mobile com Ruby
Desenvolvimento Mobile com RubyDesenvolvimento Mobile com Ruby
Desenvolvimento Mobile com Ruby
 
Doctrine for Dummies
Doctrine for DummiesDoctrine for Dummies
Doctrine for Dummies
 
Mongo DB
Mongo DBMongo DB
Mongo DB
 
Jurassic JavaScript Park - Rodando Offline até na ilha Nublar!
Jurassic JavaScript Park - Rodando Offline até na ilha Nublar!Jurassic JavaScript Park - Rodando Offline até na ilha Nublar!
Jurassic JavaScript Park - Rodando Offline até na ilha Nublar!
 
Dsi 015 - poo e php - conexão com bancos de dados usando pdo
Dsi   015 - poo e php - conexão com bancos de dados usando pdoDsi   015 - poo e php - conexão com bancos de dados usando pdo
Dsi 015 - poo e php - conexão com bancos de dados usando pdo
 
Ambiente de Desenvolvimento Java usando Ant
Ambiente de Desenvolvimento Java usando AntAmbiente de Desenvolvimento Java usando Ant
Ambiente de Desenvolvimento Java usando Ant
 
Java script aula 07 - j-query
Java script   aula 07 - j-queryJava script   aula 07 - j-query
Java script aula 07 - j-query
 

Destaque (17)

Anuncie no portalxxxxxxxxx
Anuncie no portalxxxxxxxxxAnuncie no portalxxxxxxxxx
Anuncie no portalxxxxxxxxx
 
Text sarah
Text sarahText sarah
Text sarah
 
131 Arbeitsmarkttermine 2010.pdf
131 Arbeitsmarkttermine 2010.pdf131 Arbeitsmarkttermine 2010.pdf
131 Arbeitsmarkttermine 2010.pdf
 
LUMMA Cayenne CLR 558 GT Trailer.pdf
LUMMA Cayenne CLR 558 GT Trailer.pdfLUMMA Cayenne CLR 558 GT Trailer.pdf
LUMMA Cayenne CLR 558 GT Trailer.pdf
 
VU 80 Mann mit erhobenen Armen
VU 80 Mann mit erhobenen ArmenVU 80 Mann mit erhobenen Armen
VU 80 Mann mit erhobenen Armen
 
Juvenil a
Juvenil aJuvenil a
Juvenil a
 
101009_patientenbücherei.pdf
101009_patientenbücherei.pdf101009_patientenbücherei.pdf
101009_patientenbücherei.pdf
 
Ruta en alemán
Ruta en alemánRuta en alemán
Ruta en alemán
 
K07 ws
K07 wsK07 ws
K07 ws
 
Estetica
EsteticaEstetica
Estetica
 
Document
DocumentDocument
Document
 
Matric Certificate
Matric CertificateMatric Certificate
Matric Certificate
 
Lista 1 frações e decimais
Lista 1   frações e decimaisLista 1   frações e decimais
Lista 1 frações e decimais
 
Grills bei Holzprofi24.de
Grills bei Holzprofi24.deGrills bei Holzprofi24.de
Grills bei Holzprofi24.de
 
Benjamin d
Benjamin dBenjamin d
Benjamin d
 
Arbeitszeugnis
ArbeitszeugnisArbeitszeugnis
Arbeitszeugnis
 
Compendium LD for MEPS
Compendium LD for MEPSCompendium LD for MEPS
Compendium LD for MEPS
 

Semelhante a Javascript no SAPO e libsapojs

WebSocket com Node.js ( socketstream && coffeescript ) X RoR ( Juggernaut )
WebSocket com Node.js ( socketstream && coffeescript ) X RoR ( Juggernaut )WebSocket com Node.js ( socketstream && coffeescript ) X RoR ( Juggernaut )
WebSocket com Node.js ( socketstream && coffeescript ) X RoR ( Juggernaut )
João Moura
 
Lib.SAPO.JS - Codebits2007
Lib.SAPO.JS  - Codebits2007Lib.SAPO.JS  - Codebits2007
Lib.SAPO.JS - Codebits2007
Claudio Gamboa
 
XML Free Programming - Brazil
XML Free Programming - BrazilXML Free Programming - Brazil
XML Free Programming - Brazil
Stephen Chin
 
LabMM3 - Aula teórica 04
LabMM3 - Aula teórica 04LabMM3 - Aula teórica 04
LabMM3 - Aula teórica 04
Carlos Santos
 
Gerenciamento de projetos com o Apache Ant
Gerenciamento de projetos com o Apache AntGerenciamento de projetos com o Apache Ant
Gerenciamento de projetos com o Apache Ant
Denis L Presciliano
 

Semelhante a Javascript no SAPO e libsapojs (20)

WebSocket com Node.js ( socketstream && coffeescript ) X RoR ( Juggernaut )
WebSocket com Node.js ( socketstream && coffeescript ) X RoR ( Juggernaut )WebSocket com Node.js ( socketstream && coffeescript ) X RoR ( Juggernaut )
WebSocket com Node.js ( socketstream && coffeescript ) X RoR ( Juggernaut )
 
Nadando em Dinheiro com jQuery
Nadando em Dinheiro com jQueryNadando em Dinheiro com jQuery
Nadando em Dinheiro com jQuery
 
Lib.SAPO.JS - Codebits2007
Lib.SAPO.JS  - Codebits2007Lib.SAPO.JS  - Codebits2007
Lib.SAPO.JS - Codebits2007
 
Minicurso groovy grails
Minicurso groovy grailsMinicurso groovy grails
Minicurso groovy grails
 
Javascript + jQuery
Javascript + jQueryJavascript + jQuery
Javascript + jQuery
 
Wicket 2008
Wicket 2008Wicket 2008
Wicket 2008
 
Ajax em java
Ajax em javaAjax em java
Ajax em java
 
Curso JavaScript - Aula de Introdução como Programar
Curso JavaScript - Aula de Introdução como ProgramarCurso JavaScript - Aula de Introdução como Programar
Curso JavaScript - Aula de Introdução como Programar
 
DevDay - O elo perdido: sincronizando webapps
DevDay - O elo perdido: sincronizando webappsDevDay - O elo perdido: sincronizando webapps
DevDay - O elo perdido: sincronizando webapps
 
XML Free Programming - Brazil
XML Free Programming - BrazilXML Free Programming - Brazil
XML Free Programming - Brazil
 
LambdaDay: Backbone.js
LambdaDay: Backbone.jsLambdaDay: Backbone.js
LambdaDay: Backbone.js
 
RubyConfBr 2015 - Rails & Javascript: faça isso direito
RubyConfBr 2015 - Rails & Javascript: faça isso direitoRubyConfBr 2015 - Rails & Javascript: faça isso direito
RubyConfBr 2015 - Rails & Javascript: faça isso direito
 
LabMM3 - Aula teórica 04
LabMM3 - Aula teórica 04LabMM3 - Aula teórica 04
LabMM3 - Aula teórica 04
 
Gerenciamento de projetos com o Apache Ant
Gerenciamento de projetos com o Apache AntGerenciamento de projetos com o Apache Ant
Gerenciamento de projetos com o Apache Ant
 
Gerenciamento de projetos com o Apache Ant
Gerenciamento de projetos com o Apache AntGerenciamento de projetos com o Apache Ant
Gerenciamento de projetos com o Apache Ant
 
Aplicações rápidas para a Web com Django
Aplicações rápidas para a Web com DjangoAplicações rápidas para a Web com Django
Aplicações rápidas para a Web com Django
 
Como Perder Peso (no browser)
Como Perder Peso (no browser)Como Perder Peso (no browser)
Como Perder Peso (no browser)
 
Interfaces Ricas para WEB com jQuery e jQueryUI (User Interface)
Interfaces Ricas para WEB com jQuery e jQueryUI (User Interface)Interfaces Ricas para WEB com jQuery e jQueryUI (User Interface)
Interfaces Ricas para WEB com jQuery e jQueryUI (User Interface)
 
AJAX?? Não!! Asynchronous Javascript and... JSON!!
AJAX?? Não!! Asynchronous Javascript and... JSON!!AJAX?? Não!! Asynchronous Javascript and... JSON!!
AJAX?? Não!! Asynchronous Javascript and... JSON!!
 
TDC 2015 - Rails & Javascript: faça isso direito
TDC 2015 - Rails & Javascript: faça isso direitoTDC 2015 - Rails & Javascript: faça isso direito
TDC 2015 - Rails & Javascript: faça isso direito
 

Mais de codebits

Gis SAPO Hands On
Gis SAPO Hands OnGis SAPO Hands On
Gis SAPO Hands On
codebits
 
Aplicações Web TV no Meo
Aplicações Web TV no MeoAplicações Web TV no Meo
Aplicações Web TV no Meo
codebits
 
Forms Usability 101
Forms Usability 101Forms Usability 101
Forms Usability 101
codebits
 
Speak up: como criar Speech-based apps
Speak up: como criar Speech-based appsSpeak up: como criar Speech-based apps
Speak up: como criar Speech-based apps
codebits
 
XMPP Hands-On
XMPP Hands-OnXMPP Hands-On
XMPP Hands-On
codebits
 
Mitos da Acessibilidade Web
Mitos da Acessibilidade WebMitos da Acessibilidade Web
Mitos da Acessibilidade Web
codebits
 
Getting started with mobile devices development - Openmoko Freerunner
Getting started with mobile devices development - Openmoko FreerunnerGetting started with mobile devices development - Openmoko Freerunner
Getting started with mobile devices development - Openmoko Freerunner
codebits
 
Hardware Hacking area: Make Cool Things with Microcontrollers (and learn to s...
Hardware Hacking area: Make Cool Things with Microcontrollers (and learn to s...Hardware Hacking area: Make Cool Things with Microcontrollers (and learn to s...
Hardware Hacking area: Make Cool Things with Microcontrollers (and learn to s...
codebits
 
Getting started with mobile devices development - Openmoko Freerunner
Getting started with mobile devices development - Openmoko FreerunnerGetting started with mobile devices development - Openmoko Freerunner
Getting started with mobile devices development - Openmoko Freerunner
codebits
 
Exploring XMPP
Exploring XMPPExploring XMPP
Exploring XMPP
codebits
 
Sapo BUS Hands-On
Sapo BUS Hands-OnSapo BUS Hands-On
Sapo BUS Hands-On
codebits
 
Qtractor - An Audio/MIDI multi-track sequencer
Qtractor - An Audio/MIDI multi-track sequencerQtractor - An Audio/MIDI multi-track sequencer
Qtractor - An Audio/MIDI multi-track sequencer
codebits
 
Making the Chumby
Making the ChumbyMaking the Chumby
Making the Chumby
codebits
 
Globs - Gestão de Glossários
Globs - Gestão de GlossáriosGlobs - Gestão de Glossários
Globs - Gestão de Glossários
codebits
 
ATrad - Sistema de Garantia de Qualidade de Traduções
ATrad - Sistema de Garantia de Qualidade de TraduçõesATrad - Sistema de Garantia de Qualidade de Traduções
ATrad - Sistema de Garantia de Qualidade de Traduções
codebits
 
Alto Desempenho com Java
Alto Desempenho com JavaAlto Desempenho com Java
Alto Desempenho com Java
codebits
 
Sapo GIS Hands-On
Sapo GIS Hands-OnSapo GIS Hands-On
Sapo GIS Hands-On
codebits
 
Practical Thin Server Architecture With Dojo Sapo Codebits 2008
Practical Thin Server Architecture With Dojo Sapo Codebits 2008Practical Thin Server Architecture With Dojo Sapo Codebits 2008
Practical Thin Server Architecture With Dojo Sapo Codebits 2008
codebits
 

Mais de codebits (20)

Gis SAPO Hands On
Gis SAPO Hands OnGis SAPO Hands On
Gis SAPO Hands On
 
Aplicações Web TV no Meo
Aplicações Web TV no MeoAplicações Web TV no Meo
Aplicações Web TV no Meo
 
Forms Usability 101
Forms Usability 101Forms Usability 101
Forms Usability 101
 
Speak up: como criar Speech-based apps
Speak up: como criar Speech-based appsSpeak up: como criar Speech-based apps
Speak up: como criar Speech-based apps
 
XMPP Hands-On
XMPP Hands-OnXMPP Hands-On
XMPP Hands-On
 
Mitos da Acessibilidade Web
Mitos da Acessibilidade WebMitos da Acessibilidade Web
Mitos da Acessibilidade Web
 
Getting started with mobile devices development - Openmoko Freerunner
Getting started with mobile devices development - Openmoko FreerunnerGetting started with mobile devices development - Openmoko Freerunner
Getting started with mobile devices development - Openmoko Freerunner
 
Hardware Hacking area: Make Cool Things with Microcontrollers (and learn to s...
Hardware Hacking area: Make Cool Things with Microcontrollers (and learn to s...Hardware Hacking area: Make Cool Things with Microcontrollers (and learn to s...
Hardware Hacking area: Make Cool Things with Microcontrollers (and learn to s...
 
CouchDB
CouchDBCouchDB
CouchDB
 
Getting started with mobile devices development - Openmoko Freerunner
Getting started with mobile devices development - Openmoko FreerunnerGetting started with mobile devices development - Openmoko Freerunner
Getting started with mobile devices development - Openmoko Freerunner
 
Exploring XMPP
Exploring XMPPExploring XMPP
Exploring XMPP
 
Sapo BUS Hands-On
Sapo BUS Hands-OnSapo BUS Hands-On
Sapo BUS Hands-On
 
Qtractor - An Audio/MIDI multi-track sequencer
Qtractor - An Audio/MIDI multi-track sequencerQtractor - An Audio/MIDI multi-track sequencer
Qtractor - An Audio/MIDI multi-track sequencer
 
Making the Chumby
Making the ChumbyMaking the Chumby
Making the Chumby
 
Globs - Gestão de Glossários
Globs - Gestão de GlossáriosGlobs - Gestão de Glossários
Globs - Gestão de Glossários
 
ATrad - Sistema de Garantia de Qualidade de Traduções
ATrad - Sistema de Garantia de Qualidade de TraduçõesATrad - Sistema de Garantia de Qualidade de Traduções
ATrad - Sistema de Garantia de Qualidade de Traduções
 
Alto Desempenho com Java
Alto Desempenho com JavaAlto Desempenho com Java
Alto Desempenho com Java
 
Sapo GIS Hands-On
Sapo GIS Hands-OnSapo GIS Hands-On
Sapo GIS Hands-On
 
Gis@sapo
Gis@sapoGis@sapo
Gis@sapo
 
Practical Thin Server Architecture With Dojo Sapo Codebits 2008
Practical Thin Server Architecture With Dojo Sapo Codebits 2008Practical Thin Server Architecture With Dojo Sapo Codebits 2008
Practical Thin Server Architecture With Dojo Sapo Codebits 2008
 

Último

Último (9)

Padrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemploPadrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemplo
 
Boas práticas de programação com Object Calisthenics
Boas práticas de programação com Object CalisthenicsBoas práticas de programação com Object Calisthenics
Boas práticas de programação com Object Calisthenics
 
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docxATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
 
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docxATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
 
Programação Orientada a Objetos - 4 Pilares.pdf
Programação Orientada a Objetos - 4 Pilares.pdfProgramação Orientada a Objetos - 4 Pilares.pdf
Programação Orientada a Objetos - 4 Pilares.pdf
 
Luís Kitota AWS Discovery Day Ka Solution.pdf
Luís Kitota AWS Discovery Day Ka Solution.pdfLuís Kitota AWS Discovery Day Ka Solution.pdf
Luís Kitota AWS Discovery Day Ka Solution.pdf
 
ATIVIDADE 1 - SISTEMAS DISTRIBUÍDOS E REDES - 52_2024.docx
ATIVIDADE 1 - SISTEMAS DISTRIBUÍDOS E REDES - 52_2024.docxATIVIDADE 1 - SISTEMAS DISTRIBUÍDOS E REDES - 52_2024.docx
ATIVIDADE 1 - SISTEMAS DISTRIBUÍDOS E REDES - 52_2024.docx
 
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docxATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
 
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docxATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
 

Javascript no SAPO e libsapojs

  • 1. Lib.SAPO.JS Codebits 2007 – 14/11/2007 9 da manhã??!! -_- Cláudio Gamboa <gamboa@co.sapo.pt>
  • 2. Lib.SAPO.JS JavaScript ● AJAX ● JSON ● Script tag hack ● Lib.SAPO.JS ● O que é ● Vantagens ● Estrutura ● Exemplos ●
  • 3. JavaScript ”The World's Most Misunderstood Programming Language” By...
  • 4. JavaScript The World's Most Misunderstood Programming Language By: Douglas Crockford http://www.crockford.com/
  • 5. JavaScript The World's Most Misunderstood Programming Language Não é um ”brinquedo” para a web...
  • 6. JavaScript The World's Most Misunderstood Programming Language Não é um ”brinquedo” para a web... É uma linguagem de programação ● Pequena mas sofisticada ● Não tem ”class-oriented inheritance”, mas ● tem ”prototype-oriented inheritance” Objects as self containers ● Não se chama AJAX. ●
  • 7. JavaScript The World's Most Misunderstood Programming Language Permite criar aplicações completas
  • 8. JavaScript The World's Most Misunderstood Programming Language Um bom manual de JavaScript
  • 10. JavaScript.AJAX Não é esconder e mostrar divs com JavaScript
  • 11. JavaScript.AJAX Asynchronous JavaScript and XML Criar aplicações web sem ser ● necessário fazer reload ao browser É assíncrono ● Usa o objecto XMLHttpRequest ● Recebe o conteúdo formatado em XML* ● É host restricted ●
  • 12. JavaScript.AJAX Exemplo dum AJAX request
  • 13. JavaScript.AJAX Exemplo dum AJAX request <!DOCTYPE HTML PUBLIC quot;-//W3C//DTD HTML 4.01 Transitional//ENquot; quot;http://www.w3.org/TR/html4/loose.dtdquot;> <html> <head> <title>AJAX Request</title> <script type=quot;text/javascriptquot; src=quot;http://js.sapo.pt/Prototype/quot;></script> <script type=quot;text/javascriptquot;> function myRequest() { var url = document.getElementById('url').value; new Ajax.Request(url, { method:'get', onSuccess: function(req){ var xml = req.responseXML; var aItems = xml.retElementsByTagName('item'); var totalItems = aItems.length; document.getElementById('output').innerHTML = totalItems; }, onException: function(r, e){ throw e; } }); } </script> </head> <body> <input type=quot;textquot; id=quot;urlquot; size=quot;40quot; value=quot;quot; /> <input type=quot;buttonquot; name=quot;bquot; value=quot;Request Itquot; onclick=quot;myRequest();quot; /> <hr /> <div><span id=quot;outputquot;></span> items no XML</div> </body> </html>
  • 14. JavaScript.AJAX AJAX request – host restriction
  • 15. JavaScript.AJAX AJAX request – host restriction
  • 16. JavaScript.AJAX AJAX request – host restriction SOLUÇÕES Apache Proxy RewriteEngine On RewriteRule ^/req.xml http://videos.sapo.pt/gamboa/rss [P] Request -> http://localhost/req.xml
  • 17. JavaScript.AJAX AJAX request – host restriction SOLUÇÕES PHP Proxy cat req.php <?php $content = file_get_contents('http://videos.sapo.pt/gamboa/rss'); header(”Content-type: text/xml”); echo $content; ?> Request -> http://localhost/req.php
  • 19. JavaScript.JSON JavaScript Object Notation (”jeison/jotason/jota esse on/...”) Formato duma estrutura de dados/ ● array associativo (JS Object) É text-based ● RFC 4627 ● Content type: application/json ● Pode encapsular funções (Class) ●
  • 20. JavaScript.JSON { quot;nomequot;: quot;Claudio Gamboaquot;, String ● quot;idadequot;: 26, quot;solteiroquot;: true, Number quot;gostaquot;: { ● quot;musicaquot;: [quot;Emperorquot;, quot;Moonspellquot;, quot;Borknagarquot;], Boolean quot;cinemaquot;: [quot;LOTRquot;, quot;Matrixquot;, quot;Se7enquot;, quot;Snatchquot;], ● quot;seriesquot;: [quot;House MDquot;, quot;Seinfeldquot;], quot;livrosquot;: [quot;Perfumequot;, ”Aparição”] Object ● }, quot;filhosquot;: null Array } ● null ●
  • 21. JavaScript.JSON JSON como resposta dum AJAX Request function callBack(obj) { var req = obj.responseText; var myObj = eval('(' + req + ')'); alert(myObj.nome); }
  • 22. JavaScript.JSON JSON como Classe
  • 24. JavaScript['Script'].Tag(Hack) O que é: Adicionar dinamicamente uma SCRIPT ● tag na página (ficheiro js/json) Esperar que seja carregado ● Usar/Executar o conteúdo. ●
  • 25. JavaScript['Script'].Tag(Hack) O que é: <script type=”text/javascript” src=”http://services.sapo.pt/Photos/JSON/gamboa?jsonTag=foo”> </script>”> // RSS em formato JSON var foo = {”rss”:{”channel”: ....}} alert(foo.rss.channel.item[0].title);
  • 26. Vamos mudar de assunto ...
  • 27. Lib.SAPO.JS O que é ● Vantagens ● Estrutura ●
  • 28. Lib.SAPO.JS('O que é?') Repositório central de libs de ● JavaScript e widgets do SAPO É Open Source ● Tem classes utilitárias para ● simplificar o JavaScript e a vida dos programadores (SAPO.Utility.*)
  • 29. Lib.SAPO.JS('Vantagens') Ter classes de JavaScript ● centralizadas (http://js.sapo.pt) Ter Widgets baseados nas classes ● Ter controlo de versões ● Ter o código organizado/separado ● Reutilizar código ● Não ter de reinventar a roda cada vez que ● se quer validar um endereço de email Farm estática e conteúdo ● ”jslinted”, ”jsmined” e ”gziped”
  • 30. Lib.SAPO.JS('Vantagens') Criar ”packages” estáticos ● (Bundles) de vários ficheiros JavaScript e servir apenas um ficheiro para a aplicação. Torna o load da aplicação mais rapido ● Não corre o risco de ”partir” por um ● ficheiro não ter sido carregado Garante que todo o código necessário ● existe http://js.sapo.pt/Bundles/WebmessengerCliente.js 645 Kb -> 322 Kb -> 75 Kb
  • 31. Lib.SAPO.JS('Vantagens') Criar ”scripts” (Snippets) em que ● as opções são passadas na query string. Disponibilizar apenas um ficheiro para ser ● reutilizado incluindo apenas uma script tag. Dar a possibilidade de o utilizador ● alterar as opções alterando apenas os parametros da query string. Lisbon Weather http://js.sapo.pt/Snippets/Meteo.js?c=LPLG
  • 32. Lib.SAPO.JS('Estrutura') /SAPO/ ● /Prototype/ ● /YUI/ ● /Bundles/ ● /Snippets/ ● http://js.sapo.pt/(.*)
  • 33. Lib.SAPO.JS('Estrutura') Prototype (Versão 1.8) ● Dragdrop – Effects – Builder – Controls – Slider – http://js.sapo.pt/Prototype/ http://js.sapo.pt/Prototype/Dragdrop/ http://js.sapo.pt/Prototype/..../
  • 34. Lib.SAPO.JS('Estrutura') YUI (Versão 2.2) ● Dom – Event – Connection – Dragdrop – Calendar – ... – http://js.sapo.pt/YUI/ http://js.sapo.pt/YUI/Dom/ http://js.sapo.pt/YUI/.../
  • 35. Lib.SAPO.JS('Estrutura') SAPO ● Utility – Communication – Widget – Geo – Exception –
  • 36. Lib.SAPO.JS('Estrutura') SAPO.Utility ● Array (inArray, keyValue) ● Cookie (set, remove, get) ● Crypto (md5, sha1, sha256) ● Dumper (alertDump, returnDump, windowDump) ● CSS (set) ● String (trim, stripTags, htmlEntities(En|De)code, utf8(En|De)code ● ...) Url (getURl, getQueryString, base64(En|De)code ...) ● Validator (mail, isPortuguesePhone) ● Variable (isArray, isObject, isString, isNumber) ● http://js.sapo.pt/SAPO/Utility/(.*)
  • 37. Lib.SAPO.JS('Estrutura') SAPO.Communication ● Syndication (push, – run, runAll) (Class para a ”Script Tag Hack”) http://js.sapo.pt/SAPO/Communication/Syndication/ http://js.sapo.pt/SAPO/Communication/Syndication/sample/
  • 38. Lib.SAPO.JS('Estrutura') SAPO.Widget ● Contextmenu ● Dialog ● Tooltip ● Rating ● Maps ● Thumbs ● (Blogthis, Meteo, Photos, Search, Tags...) ● http://js.sapo.pt/SAPO/Widget/(.*) http://js.sapo.pt/SAPO/Widget/([^/]+)/sample/
  • 39. Lib.SAPO.JS('Estrutura') SAPO.Geo ● Map ● Ver apresentação de Joaquim Muchaxo e António Cruz no PP às 11:45 ”SAPO Mapas & GIS” http://js.sapo.pt/SAPO/Geo/Map/
  • 40. Exemplos SAPO.Utility.Dumper ● SAPO.Utility.String ● SAPO.Utility.Url ● SAPO.Widget.Contextmenu ● SAPO.Widget.Tooltip ● SAPO.Communication.Syndication ● Prototype Ajax.Request ●
  • 42. Mais informação http://js.sapo.pt/ ● http://developer.sapo.pt/ ● http://prototypejs.org ● http://developer.yahoo.com/yui/ ● SAPO: http://www.sapo.pt/ ● Download: http://pdvel.com/ ● Meu blog: http://blog.pdvel.com/ (sucks) ●