Javascript no SAPO e libsapojs

Post on 17-May-2015

2,768 views 0 download

description

Noções de Javascript e aplicações práticas.Library de Javascript do SAPOExemplos práticos de integração dos serviços do SAPO com Javascript.

transcript

Lib.SAPO.JS

Codebits 2007 – 14/11/20079 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 "-//W3C//DTD HTML 4.01 Transitional//EN"

"http://www.w3.org/TR/html4/loose.dtd"> <html>

<head><title>AJAX Request</title> <script type="text/javascript" src="http://js.sapo.pt/Prototype/"></script><script type="text/javascript">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="text" id="url" size="40" value="" /><input type="button" name="b" value="Request It" onclick="myRequest();" /><hr /><div><span id="output"></span> items no XML</div></body></html>

JavaScript.AJAX

AJAX request – host restriction

JavaScript.AJAX

AJAX request – host restriction

JavaScript.AJAX

AJAX request – host restrictionSOLUÇÕES

Apache Proxy

RewriteEngine OnRewriteRule ^/req.xml http://videos.sapo.pt/gamboa/rss [P]

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

JavaScript.AJAX

AJAX request – host restrictionSOLUÇÕESPHP 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

● String● Number● Boolean ● Object● Array ● null

{ "nome": "Claudio Gamboa", "idade": 26, "solteiro": true, "gosta": { "musica": ["Emperor", "Moonspell", "Borknagar"], "cinema": ["LOTR", "Matrix", "Se7en", "Snatch"], "series": ["House MD", "Seinfeld"], "livros": ["Perfume", ”Aparição”] }, "filhos": 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 Weatherhttp://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)