diff --git a/files/pt-br/web/api/speechsynthesisutterance/voice/index.md b/files/pt-br/web/api/speechsynthesisutterance/voice/index.md index 73453fd0bc24e9..e77cf7eacbe131 100644 --- a/files/pt-br/web/api/speechsynthesisutterance/voice/index.md +++ b/files/pt-br/web/api/speechsynthesisutterance/voice/index.md @@ -50,13 +50,11 @@ inputForm.onsubmit = function(event) { ## Especificações -| Especificação | Status | Comentário | -| ------------------------------------------------------------------------------------ | ------------------------------------ | ---------- | -| {{SpecName('Web Speech API', '#dfn-utterancevoice', 'voice')}} | {{Spec2('Web Speech API')}} | | +{{Specifications}} -## Compatiblidade dos navegadores +## Compatibilidade com navegadores -{{Compat("api.SpeechSynthesisUtterance.voice")}} +{{Compat}} ## Veja também diff --git a/files/pt-br/web/api/storage/clear/index.md b/files/pt-br/web/api/storage/clear/index.md index 86857ab36060e6..ce0e283cf50e72 100644 --- a/files/pt-br/web/api/storage/clear/index.md +++ b/files/pt-br/web/api/storage/clear/index.md @@ -27,9 +27,9 @@ A função abaixo cria três itens e armazenam localmente, depois remove todos u ```js function populateStorage() { - localStorage.setItem('bgcolor', 'red'); - localStorage.setItem('font', 'Helvetica'); - localStorage.setItem('image', 'myCat.png'); + localStorage.setItem("bgcolor", "red"); + localStorage.setItem("font", "Helvetica"); + localStorage.setItem("image", "myCat.png"); localStorage.clear(); } @@ -39,13 +39,11 @@ function populateStorage() { ## Especificações -| Especificação | Status | Comentário | -| -------------------------------------------------------------------------------- | -------------------------------- | ---------- | -| {{SpecName('Web Storage', '#dom-storage-clear', 'clear()')}} | {{Spec2('Web Storage')}} | | +{{Specifications}} ## Compatibilidade com navegadores -{{Compat("api.Storage.clear")}} +{{Compat}} ## Veja também diff --git a/files/pt-br/web/api/storage/getitem/index.md b/files/pt-br/web/api/storage/getitem/index.md index 0dd31f8d8048f4..9d7480450d8152 100644 --- a/files/pt-br/web/api/storage/getitem/index.md +++ b/files/pt-br/web/api/storage/getitem/index.md @@ -28,17 +28,17 @@ A função seguinte recupera três itens armazenados no local storage e usa-os p ```js function setStyles() { - var currentColor = localStorage.getItem('bgcolor'); - var currentFont = localStorage.getItem('font'); - var currentImage = localStorage.getItem('image'); + var currentColor = localStorage.getItem("bgcolor"); + var currentFont = localStorage.getItem("font"); + var currentImage = localStorage.getItem("image"); - document.getElementById('bgcolor').value = currentColor; - document.getElementById('font').value = currentFont; - document.getElementById('image').value = currentImage; + document.getElementById("bgcolor").value = currentColor; + document.getElementById("font").value = currentFont; + document.getElementById("image").value = currentImage; - htmlElem.style.backgroundColor = '#' + currentColor; + htmlElem.style.backgroundColor = "#" + currentColor; pElem.style.fontFamily = currentFont; - imgElem.setAttribute('src', currentImage); + imgElem.setAttribute("src", currentImage); } ``` @@ -46,17 +46,11 @@ function setStyles() { ## Especificações -| Especificação | Status | Comment | -| ------------------------------------------------------------------------------------ | -------------------------------- | ------- | -| {{SpecName('Web Storage', '#dom-storage-getitem', 'getItem()')}} | {{Spec2('Web Storage')}} | | +{{Specifications}} -## Compatibilidade +## Compatibilidade com navegadores -{{Compat("api.Storage.getItem")}} - -Os níveis de compatibilidade podem variar em todos os navegadores, tanto para o localStorage quanto para o sessionStorage. Aqui temos [estatísticas detalhadas dos níveis de compatibilidade para vários navegadores](http://dev-test.nemikor.com/web-storage/support-test/). - -> **Nota:**A partir da versão 5.1 do iOS, o Safari Mobile armazena os dados do localStorage na pasta do cache, sujeito a ser apagado em caso de espaço insificiente. +{{Compat}} ## Veja também diff --git a/files/pt-br/web/api/storage/index.md b/files/pt-br/web/api/storage/index.md index 87bf5a8f9de237..afa41268af0b2d 100644 --- a/files/pt-br/web/api/storage/index.md +++ b/files/pt-br/web/api/storage/index.md @@ -32,32 +32,32 @@ Se você quiser manipular o armazenamento de sessão para um domínio, você cha Aqui acessamos um objeto Storage chamando localStorage. Primeiro testamos se o armazenamento local contém itens de dados usando! localStorage.getItem ('bgcolor'). Se isso acontecer, executaremos uma função chamada setStyles () que agarra os itens de dados usando {{domxref("localStorage.getItem()")}} E usa esses valores para atualizar estilos de página. Se não, executamos outra função, populateStorage (), que usa {{domxref("localStorage.setItem()")}} Para definir os valores do item, em seguida, executa setStyles (). ```js -if(!localStorage.getItem('bgcolor')) { +if (!localStorage.getItem("bgcolor")) { populateStorage(); } else { setStyles(); } function populateStorage() { - localStorage.setItem('bgcolor', document.getElementById('bgcolor').value); - localStorage.setItem('font', document.getElementById('font').value); - localStorage.setItem('image', document.getElementById('image').value); + localStorage.setItem("bgcolor", document.getElementById("bgcolor").value); + localStorage.setItem("font", document.getElementById("font").value); + localStorage.setItem("image", document.getElementById("image").value); setStyles(); } function setStyles() { - var currentColor = localStorage.getItem('bgcolor'); - var currentFont = localStorage.getItem('font'); - var currentImage = localStorage.getItem('image'); + var currentColor = localStorage.getItem("bgcolor"); + var currentFont = localStorage.getItem("font"); + var currentImage = localStorage.getItem("image"); - document.getElementById('bgcolor').value = currentColor; - document.getElementById('font').value = currentFont; - document.getElementById('image').value = currentImage; + document.getElementById("bgcolor").value = currentColor; + document.getElementById("font").value = currentFont; + document.getElementById("image").value = currentImage; - htmlElem.style.backgroundColor = '#' + currentColor; + htmlElem.style.backgroundColor = "#" + currentColor; pElem.style.fontFamily = currentFont; - imgElem.setAttribute('src', currentImage); + imgElem.setAttribute("src", currentImage); } ``` @@ -65,17 +65,11 @@ function setStyles() { ## Especificações -| Especificação | Estado | Comentário | -| ------------------------------------------------------------------------------------ | -------------------------------- | ---------- | -| {{SpecName('Web Storage', '#the-storage-interface', 'Storage')}} | {{Spec2('Web Storage')}} | | +{{Specifications}} ## Compatibilidade com navegadores -{{Compat("api.Storage")}} - -\[1] Desde o iOS 5.1, o Safari Mobile armazena os dados localStorage na pasta de cache, que está sujeita a limpeza ocasional a pedido do sistema operacional, normalmente se o espaço for curto. - -Todos os navegadores têm diferentes níveis de capacidade para o localStorage e sessionStorage. [Aqui está um resumo detalhado de todas as capacidades de armazenamento para vários navegadores](http://dev-test.nemikor.com/web-storage/support-test/). +{{Compat}} ## Veja também diff --git a/files/pt-br/web/api/storage/key/index.md b/files/pt-br/web/api/storage/key/index.md index 2e15105aa5b607..f7c629280ae55e 100644 --- a/files/pt-br/web/api/storage/key/index.md +++ b/files/pt-br/web/api/storage/key/index.md @@ -37,7 +37,7 @@ function forEachKey(callback) { A função a seguir itera sobre as chaves do armazenamento local e obtém o valor de cada chave: ```js -for(var i =0; i < localStorage.length; i++){ +for (var i = 0; i < localStorage.length; i++) { console.log(localStorage.getItem(localStorage.key(i))); } ``` @@ -46,13 +46,11 @@ for(var i =0; i < localStorage.length; i++){ ## Especificações -| Especificação | Estado | Comentário | -| -------------------------------------------------------------------------------------------------------- | -------------------------------- | ---------- | -| {{SpecName('HTML WHATWG', 'webstorage.html#dom-storage-key', 'Storage.key')}} | {{Spec2('HTML WHATWG')}} | | +{{Specifications}} ## Compatibilidade com navegadores -{{Compat("api.Storage.key")}} +{{Compat}} ## Veja também diff --git a/files/pt-br/web/api/storage/length/index.md b/files/pt-br/web/api/storage/length/index.md index d6f8a64b051a3a..9dfd735320554a 100644 --- a/files/pt-br/web/api/storage/length/index.md +++ b/files/pt-br/web/api/storage/length/index.md @@ -23,9 +23,9 @@ A função a seguir adiciona três itens ('bgcolor', 'font' e 'image') ao local ```js function populateStorage() { - localStorage.setItem('bgcolor', 'yellow'); - localStorage.setItem('font', 'Helvetica'); - localStorage.setItem('image', 'cats.png'); + localStorage.setItem("bgcolor", "yellow"); + localStorage.setItem("font", "Helvetica"); + localStorage.setItem("image", "cats.png"); localStorage.length; // should return 3 } @@ -35,13 +35,11 @@ function populateStorage() { ## Especificações -| Especificação | Status | Comentário | -| -------------------------------------------------------------------------------- | -------------------------------- | ---------- | -| {{SpecName('Web Storage', '#dom-storage-length', 'length')}} | {{Spec2('Web Storage')}} | | +{{Specifications}} ## Compatibilidade com navegadores -{{Compat("api.Storage.length")}} +{{Compat}} ## Veja também diff --git a/files/pt-br/web/api/storage/removeitem/index.md b/files/pt-br/web/api/storage/removeitem/index.md index 633651efd4fe18..6fab87b6ac72e7 100644 --- a/files/pt-br/web/api/storage/removeitem/index.md +++ b/files/pt-br/web/api/storage/removeitem/index.md @@ -28,11 +28,11 @@ A função a seguir cria três itens de dados no armazenamento local, em seguida ```js function populateStorage() { - localStorage.setItem('bgcolor', 'red'); - localStorage.setItem('font', 'Helvetica'); - localStorage.setItem('image', 'myCat.png'); + localStorage.setItem("bgcolor", "red"); + localStorage.setItem("font", "Helvetica"); + localStorage.setItem("image", "myCat.png"); - localStorage.removeItem('image'); + localStorage.removeItem("image"); } ``` @@ -40,13 +40,11 @@ function populateStorage() { ## Especificações -| Especificação | Status | Comentários | -| -------------------------------------------------------------------------------------------- | -------------------------------- | ----------- | -| {{SpecName('Web Storage', '#dom-storage-removeitem', 'removeItem()')}} | {{Spec2('Web Storage')}} | | +{{Specifications}} -## Compatibilidade +## Compatibilidade com navegadores -{{Compat("api.Storage.removeItem")}} +{{Compat}} ## Veja também diff --git a/files/pt-br/web/api/storage/setitem/index.md b/files/pt-br/web/api/storage/setitem/index.md index 6dbcca4b863e8d..eea4c594c1428e 100644 --- a/files/pt-br/web/api/storage/setitem/index.md +++ b/files/pt-br/web/api/storage/setitem/index.md @@ -35,9 +35,9 @@ A função abaixo irá criar três dados dentro do local storage. ```js function populateStorage() { - localStorage.setItem('bgcolor', 'red'); - localStorage.setItem('font', 'Helvetica'); - localStorage.setItem('image', 'myCat.png'); + localStorage.setItem("bgcolor", "red"); + localStorage.setItem("font", "Helvetica"); + localStorage.setItem("image", "myCat.png"); } ``` @@ -45,13 +45,11 @@ function populateStorage() { ## Especificações -| Specification | Status | Comment | -| ------------------------------------------------------------------------------------ | -------------------------------- | ------- | -| {{SpecName('Web Storage', '#dom-storage-setitem', 'setItem()')}} | {{Spec2('Web Storage')}} | | +{{Specifications}} -## Navegadores compatíveis +## Compatibilidade com navegadores -{{Compat("api.Storage.setItem")}} +{{Compat}} ## Veja também diff --git a/files/pt-br/web/api/storagemanager/index.md b/files/pt-br/web/api/storagemanager/index.md index 0d8673512fa4e3..68ec79b6becbcb 100644 --- a/files/pt-br/web/api/storagemanager/index.md +++ b/files/pt-br/web/api/storagemanager/index.md @@ -18,10 +18,8 @@ slug: Web/API/StorageManager ## Especificações -| Especificação | Status | Comentário | -| ---------------------------------------------------------------------------- | ---------------------------- | ------------------ | -| {{SpecName('Storage','#storagemanager','StorageManger')}} | {{Spec2('Storage')}} | Definição inicial. | +{{Specifications}} ## Compatibilidade com navegadores -{{Compat("api.StorageManager")}} +{{Compat}} diff --git a/files/pt-br/web/api/streams_api/index.md b/files/pt-br/web/api/streams_api/index.md index 8ee388385576ce..e85c656f8e2455 100644 --- a/files/pt-br/web/api/streams_api/index.md +++ b/files/pt-br/web/api/streams_api/index.md @@ -85,16 +85,12 @@ Examples from other developers: - [Progress Indicators with Streams, Service Workers, & Fetch](https://fetch-progress.anthum.com/). -## Specifications +## Especificações -| Specification | Status | Comment | -| -------------------------------- | ---------------------------- | ------------------- | -| {{SpecName('Streams')}} | {{Spec2('Streams')}} | Initial definition. | +{{Specifications}} ## Compatibilidade com navegadores -### WritableStream - {{Compat}} ## See also diff --git a/files/pt-br/web/api/subtlecrypto/derivekey/index.md b/files/pt-br/web/api/subtlecrypto/derivekey/index.md index 2dbd777bdd747f..72aad89d8988da 100644 --- a/files/pt-br/web/api/subtlecrypto/derivekey/index.md +++ b/files/pt-br/web/api/subtlecrypto/derivekey/index.md @@ -54,7 +54,7 @@ Aqui está um exemplo de como usar **deriveKey()** para criar uma **Secure Remot ```js // salt deve ser Uint8Array ou ArrayBuffer -var saltBuffer = Unibabel.hexToBuffer('e85c53e7f119d41fd7895cdc9d7bb9dd'); +var saltBuffer = Unibabel.hexToBuffer("e85c53e7f119d41fd7895cdc9d7bb9dd"); // não use métodos naïve para conversão de texto, senão caracteres // internacionais não terão a sequência correta de byte. Use o TextEncoder quando @@ -62,60 +62,56 @@ var saltBuffer = Unibabel.hexToBuffer('e85c53e7f119d41fd7895cdc9d7bb9dd'); var passphraseKey = Unibabel.utf8ToBuffer("I hëart årt and £$¢!"); // Você deve primeiramente importar sua passphrase Uint8array em uma CryptoKey -window.crypto.subtle.importKey( - 'raw', - passphraseKey, - {name: 'PBKDF2'}, - false, - ['deriveBits', 'deriveKey'] -).then(function(key) { - - return window.crypto.subtle.deriveKey( - { "name": 'PBKDF2', - "salt": saltBuffer, - // não seja muito ambicioso, ou pelo menos tenha em mente - // que celulares com baixo poder de processamento vão acessar o seu app - "iterations": 100, - "hash": 'SHA-256' - }, - key, - - // Nota: para essa demo nós não vamos precisar de uma cipher suite, - // mas a API exige que a mesma seja especificada. - - // Para AES o comprimento requerido é de 128 ou 256 bits (não bytes) - { "name": 'AES-CBC', "length": 256 }, - - // Independente da resposta a key é extraível (menos seguro) ou não extraível (mais seguro), - // quando falso, a key pode ser entregue apenas como um objeto crypto web, não inspecionado - true, - - // esse objeto crypto web será permitido para apenas essas funções: - [ "encrypt", "decrypt" ] - ) -}).then(function (webKey) { - - return crypto.subtle.exportKey("raw", webKey); - -}).then(function (buffer) { - +window.crypto.subtle + .importKey("raw", passphraseKey, { name: "PBKDF2" }, false, [ + "deriveBits", + "deriveKey", + ]) + .then(function (key) { + return window.crypto.subtle.deriveKey( + { + name: "PBKDF2", + salt: saltBuffer, + // não seja muito ambicioso, ou pelo menos tenha em mente + // que celulares com baixo poder de processamento vão acessar o seu app + iterations: 100, + hash: "SHA-256", + }, + key, + + // Nota: para essa demo nós não vamos precisar de uma cipher suite, + // mas a API exige que a mesma seja especificada. + + // Para AES o comprimento requerido é de 128 ou 256 bits (não bytes) + { name: "AES-CBC", length: 256 }, + + // Independente da resposta a key é extraível (menos seguro) ou não extraível (mais seguro), + // quando falso, a key pode ser entregue apenas como um objeto crypto web, não inspecionado + true, + + // esse objeto crypto web será permitido para apenas essas funções: + ["encrypt", "decrypt"], + ); + }) + .then(function (webKey) { + return crypto.subtle.exportKey("raw", webKey); + }) + .then(function (buffer) { var proofOfSecret = Unibabel.bufferToHex(buffer); // esta proof-of-secret / password remota-segura // pode agora ser enviada no lugar da password do usuário -}); + }); ``` Nota: Por conta de não haver ferramentas nativas que convertam entre Uint8Array, Unicode, hex, e base64, você provavelmente vai querer utilizar algo como o [Unibabel](https://github.com/coolaj86/unibabel-js) ou [Buffer](https://github.com/feross/buffer) para converter entre eles. ## Especificações -| Especificação | Status | Comentário | -| ------------------------------------------------------------------------------------------------------------------------------------ | ---------------------------------------- | ------------------ | -| {{ SpecName('Web Crypto API', '#dfn-SubtleCrypto-method-deriveKey', 'SubtleCrypto.deriveKey()') }} | {{ Spec2('Web Crypto API') }} | Definição inicial. | +{{Specifications}} ## Compatibilidade com navegadores -{{Compat("api.SubtleCrypto.deriveKey")}} +{{Compat}} ## Veja também diff --git a/files/pt-br/web/api/subtlecrypto/generatekey/index.md b/files/pt-br/web/api/subtlecrypto/generatekey/index.md index 8f846b17b03b76..7b62335f64017f 100644 --- a/files/pt-br/web/api/subtlecrypto/generatekey/index.md +++ b/files/pt-br/web/api/subtlecrypto/generatekey/index.md @@ -48,13 +48,11 @@ A {{jsxref("Promise")}} é rejeitada quando a seguinte exceção é encontrada: ## Especificações -| Especificação | Status | Commentário | -| ---------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------- | ------------------ | -| {{ SpecName('Web Crypto API', '#dfn-SubtleCrypto-method-generateKey', 'SubtleCrypto.generateKey()') }} | {{ Spec2('Web Crypto API') }} | Definição inicial. | +{{Specifications}} ## Compatibilidade com navegadores -{{Compat("api.SubtleCrypto.generateKey")}} +{{Compat}} ## Veja também diff --git a/files/pt-br/web/api/subtlecrypto/importkey/index.md b/files/pt-br/web/api/subtlecrypto/importkey/index.md index 0381d185959554..a62896d794f120 100644 --- a/files/pt-br/web/api/subtlecrypto/importkey/index.md +++ b/files/pt-br/web/api/subtlecrypto/importkey/index.md @@ -49,13 +49,11 @@ A promise é rejeitada quando umas das seguintes exceções é encontrada: ## Especificações -| Especificação | Status | Comentário | -| ------------------------------------------------------------------------------------------------------------------------------------ | ---------------------------------------- | ------------------ | -| {{ SpecName('Web Crypto API', '#dfn-SubtleCrypto-method-importKey', 'SubtleCrypto.importKey()') }} | {{ Spec2('Web Crypto API') }} | Definição inicial. | +{{Specifications}} ## Compatibilidade com navegadores -{{Compat("api.SubtleCrypto.importKey")}} +{{Compat}} ## Veja também diff --git a/files/pt-br/web/api/subtlecrypto/index.md b/files/pt-br/web/api/subtlecrypto/index.md index 25ea11736ebce3..c9e89593a4d384 100644 --- a/files/pt-br/web/api/subtlecrypto/index.md +++ b/files/pt-br/web/api/subtlecrypto/index.md @@ -2,6 +2,7 @@ title: SubtleCrypto slug: Web/API/SubtleCrypto --- + {{APIRef("Web Crypto API")}} A interface **`SubtleCrypto`** representa um conjunto de criptografias primitivas. E está disponível via propriedades {{domxref("Crypto.subtle")}} disponíveis em uma janela de contexto (via {{domxref("Window.crypto")}}). @@ -43,13 +44,11 @@ Esta interface não herda nenhum método ## Especificações -| Especificação | Status | Comentário | -| ---------------------------------------------------------------------------------------------------- | ---------------------------------------- | ------------------ | -| {{ SpecName('Web Crypto API', '#subtlecrypto-interface', 'SubtleCrypto') }} | {{ Spec2('Web Crypto API') }} | Definição inicial. | +{{Specifications}} ## Compatibilidade com navegadores -{{Compat("api.SubtleCrypto")}} +{{Compat}} ## Veja também diff --git a/files/pt-br/web/api/svgaelement/index.md b/files/pt-br/web/api/svgaelement/index.md index 9dce59d1de68b1..e1e991e99f9cc6 100644 --- a/files/pt-br/web/api/svgaelement/index.md +++ b/files/pt-br/web/api/svgaelement/index.md @@ -24,26 +24,23 @@ No exemplo abaixo, o {{SVGAttr("target")}} atributo do elemento {{SVGElement("a" var linkRef = document.querySelector("a"); linkRef.target = "_self"; -linkRef.onclick = function(){ +linkRef.onclick = function () { if (linkRef.target === "_blank") { console.log("BLANK!"); linkRef.target = "_self"; } else { console.log("SORRY! not _blank"); } -} +}; ``` ## Especificações -| Especificação | Status | Comentário | -| -------------------------------------------------------------------------------- | ------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -| {{SpecName("SVG2", "linking.html#InterfaceSVGAElement")}} | {{Spec2("SVG2")}} | Replaced inheritance from {{domxref("SVGElement")}} by {{domxref("SVGGraphicsElement")}} and removed the interface implementations of {{domxref("SVGTests")}}, {{domxref("SVGLangSpace")}}, {{domxref("SVGExternalResourcesRequired")}}, {{domxref("SVGStylable")}}, and {{domxref("SVGTransformable")}} by {{domxref("HTMLHyperlinkElementUtils")}} | -| {{SpecName("SVG1.1", "linking.html#InterfaceSVGAElement")}} | {{Spec2("SVG1.1")}} | Definição inicial | +{{Specifications}} ## Compatibilidade com navegadores -{{Compat("api.SVGAElement")}} +{{Compat}} ## Veja também diff --git a/files/pt-br/web/api/svgaelement/target/index.md b/files/pt-br/web/api/svgaelement/target/index.md index d03d5ff4892ea7..fca80570d2fea0 100644 --- a/files/pt-br/web/api/svgaelement/target/index.md +++ b/files/pt-br/web/api/svgaelement/target/index.md @@ -35,13 +35,11 @@ linkRef.target ='_blank'; ## Especificações -| Specification | Status | Comment | -| ---------------------------------------------------------------------------------------- | ------------------------ | ------- | -| {{SpecName('SVG1.1', 'text.html#InterfaceSVGAElement', 'target')}} | {{Spec2('SVG1.1')}} | | +{{Specifications}} -## Compatibilidade com o navegador +## Compatibilidade com navegadores -{{Compat("api.SVGAElement.target")}} +{{Compat}} ## Veja também diff --git a/files/pt-br/web/api/svganimatetransformelement/index.md b/files/pt-br/web/api/svganimatetransformelement/index.md index 548aaf0483618a..38c1162b27d918 100644 --- a/files/pt-br/web/api/svganimatetransformelement/index.md +++ b/files/pt-br/web/api/svganimatetransformelement/index.md @@ -19,11 +19,8 @@ _Essa interface não possui métodos próprios mas os herda do seu pai, {{domxre ## Especificações -| Especificação | Status | Comentário | -| -------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------- | ------------------ | -| {{SpecName("SVG Animations 2", "#InterfaceSVGAnimateTransformElement", "SVGAnimateTransformElement")}} | {{Spec2("SVG Animations 2")}} | No change | -| {{SpecName("SVG1.1", "animate.html#InterfaceSVGAnimateTransformElement", "SVGAnimateTransformElement")}} | {{Spec2("SVG1.1")}} | Initial definition | +{{Specifications}} -## Compatibilidade +## Compatibilidade com navegadores -{{Compat("api.SVGAnimateTransformElement")}} +{{Compat}} diff --git a/files/pt-br/web/api/touch_events/index.md b/files/pt-br/web/api/touch_events/index.md index 1b0df3c8719f76..20b788a71b7515 100644 --- a/files/pt-br/web/api/touch_events/index.md +++ b/files/pt-br/web/api/touch_events/index.md @@ -36,10 +36,11 @@ Este exemplo acompanha múltiplos pontos de contato de cada vez, permitindo o us Seu browser não tem suporte ao elemento canvas. -
+
-
-Log:

+
+Log: +

 ```
 
 ### Configurado os eventos
@@ -65,7 +66,7 @@ Define simplesmento todos os ouvintes dos eventos do nosso elemento {{ HTMLEleme
 Vamos acompanhar os toques em seu progresso.
 
 ```js
-var ongoingTouches = new Array;
+var ongoingTouches = new Array();
 ```
 
 Quando ocorre um evento `touchstart`, indicando que um novo toque na superfície tenha ocorrido, a função abaixo `handleStart()` é chamada.
@@ -78,15 +79,15 @@ function handleStart(evt) {
   var ctx = el.getContext("2d");
   var touches = evt.changedTouches;
 
-  for (var i=0; i < touches.length; i++) {
-    log("touchstart:"+i+"...");
+  for (var i = 0; i < touches.length; i++) {
+    log("touchstart:" + i + "...");
     ongoingTouches.push(copyTouch(touches[i]));
     var color = colorForTouch(touches[i]);
     ctx.beginPath();
-    ctx.arc(touches[i].pageX, touches[i].pageY, 4, 0,2*Math.PI, false);  // a circle at the start
+    ctx.arc(touches[i].pageX, touches[i].pageY, 4, 0, 2 * Math.PI, false); // a circle at the start
     ctx.fillStyle = color;
     ctx.fill();
-    log("touchstart:"+i+".");
+    log("touchstart:" + i + ".");
   }
 }
 ```
@@ -106,22 +107,28 @@ function handleMove(evt) {
   var ctx = el.getContext("2d");
   var touches = evt.changedTouches;
 
-  for (var i=0; i < touches.length; i++) {
+  for (var i = 0; i < touches.length; i++) {
     var color = colorForTouch(touches[i]);
     var idx = ongoingTouchIndexById(touches[i].identifier);
 
-    if(idx >= 0) {
-      log("continuing touch "+idx);
+    if (idx >= 0) {
+      log("continuing touch " + idx);
       ctx.beginPath();
-      log("ctx.moveTo("+ongoingTouches[idx].pageX+", "+ongoingTouches[idx].pageY+");");
+      log(
+        "ctx.moveTo(" +
+          ongoingTouches[idx].pageX +
+          ", " +
+          ongoingTouches[idx].pageY +
+          ");",
+      );
       ctx.moveTo(ongoingTouches[idx].pageX, ongoingTouches[idx].pageY);
-      log("ctx.lineTo("+touches[i].pageX+", "+touches[i].pageY+");");
+      log("ctx.lineTo(" + touches[i].pageX + ", " + touches[i].pageY + ");");
       ctx.lineTo(touches[i].pageX, touches[i].pageY);
       ctx.lineWidth = 4;
       ctx.strokeStyle = color;
       ctx.stroke();
 
-      ongoingTouches.splice(idx, 1, copyTouch(touches[i]));  // swap in the new touch record
+      ongoingTouches.splice(idx, 1, copyTouch(touches[i])); // swap in the new touch record
       log(".");
     } else {
       log("can't figure out which touch to continue");
@@ -148,18 +155,18 @@ function handleEnd(evt) {
   var ctx = el.getContext("2d");
   var touches = evt.changedTouches;
 
-  for (var i=0; i < touches.length; i++) {
+  for (var i = 0; i < touches.length; i++) {
     var color = colorForTouch(touches[i]);
     var idx = ongoingTouchIndexById(touches[i].identifier);
 
-    if(idx >= 0) {
+    if (idx >= 0) {
       ctx.lineWidth = 4;
       ctx.fillStyle = color;
       ctx.beginPath();
       ctx.moveTo(ongoingTouches[idx].pageX, ongoingTouches[idx].pageY);
       ctx.lineTo(touches[i].pageX, touches[i].pageY);
-      ctx.fillRect(touches[i].pageX-4, touches[i].pageY-4, 8, 8);  // and a square at the end
-      ongoingTouches.splice(idx, 1);  // remove it; we're done
+      ctx.fillRect(touches[i].pageX - 4, touches[i].pageY - 4, 8, 8); // and a square at the end
+      ongoingTouches.splice(idx, 1); // remove it; we're done
     } else {
       log("can't figure out which touch to end");
     }
@@ -179,8 +186,8 @@ function handleCancel(evt) {
   log("touchcancel.");
   var touches = evt.changedTouches;
 
-  for (var i=0; i < touches.length; i++) {
-    ongoingTouches.splice(i, 1);  // remove it; we're done
+  for (var i = 0; i < touches.length; i++) {
+    ongoingTouches.splice(i, 1); // remove it; we're done
   }
 }
 ```
@@ -217,7 +224,11 @@ Alguns browsers (mobile Safari, por exemplo) re-usa touch objects entre os event
 
 ```js
 function copyTouch(touch) {
-  return { identifier: touch.identifier, pageX: touch.pageX, pageY: touch.pageY };
+  return {
+    identifier: touch.identifier,
+    pageX: touch.pageX,
+    pageY: touch.pageY,
+  };
 }
 ```
 
@@ -227,14 +238,14 @@ A função `ongoingTouchIndexById()` abaixo verifica através do array `ongoingT
 
 ```js
 function ongoingTouchIndexById(idToFind) {
-  for (var i=0; i < ongoingTouches.length; i++) {
+  for (var i = 0; i < ongoingTouches.length; i++) {
     var id = ongoingTouches[i].identifier;
 
     if (id == idToFind) {
       return i;
     }
   }
-  return -1;    // não econtrado
+  return -1; // não econtrado
 }
 ```
 
@@ -242,7 +253,7 @@ function ongoingTouchIndexById(idToFind) {
 
 ```js
 function log(msg) {
-  var p = document.getElementById('log');
+  var p = document.getElementById("log");
   p.innerHTML = msg + "\n" + p.innerHTML;
 }
 ```
@@ -262,20 +273,46 @@ Since calling `preventDefault()` on a `touchstart` or the first `touchmove` even
 ```js
 function onTouch(evt) {
   evt.preventDefault();
-  if (evt.touches.length > 1 || (evt.type == "touchend" && evt.touches.length > 0))
+  if (
+    evt.touches.length > 1 ||
+    (evt.type == "touchend" && evt.touches.length > 0)
+  )
     return;
 
   var newEvt = document.createEvent("MouseEvents");
   var type = null;
   var touch = null;
   switch (evt.type) {
-    case "touchstart":    type = "mousedown";    touch = evt.changedTouches[0];break;
-    case "touchmove":        type = "mousemove";    touch = evt.changedTouches[0];break;
-    case "touchend":        type = "mouseup";    touch = evt.changedTouches[0];break;
+    case "touchstart":
+      type = "mousedown";
+      touch = evt.changedTouches[0];
+      break;
+    case "touchmove":
+      type = "mousemove";
+      touch = evt.changedTouches[0];
+      break;
+    case "touchend":
+      type = "mouseup";
+      touch = evt.changedTouches[0];
+      break;
   }
-  newEvt.initMouseEvent(type, true, true, evt.originalTarget.ownerDocument.defaultView, 0,
-    touch.screenX, touch.screenY, touch.clientX, touch.clientY,
-    evt.ctrlKey, evt.altKey, evt.shirtKey, evt.metaKey, 0, null);
+  newEvt.initMouseEvent(
+    type,
+    true,
+    true,
+    evt.originalTarget.ownerDocument.defaultView,
+    0,
+    touch.screenX,
+    touch.screenY,
+    touch.clientX,
+    touch.clientY,
+    evt.ctrlKey,
+    evt.altKey,
+    evt.shirtKey,
+    evt.metaKey,
+    0,
+    null,
+  );
   evt.originalTarget.dispatchEvent(newEvt);
 }
 ```
@@ -284,6 +321,10 @@ function onTouch(evt) {
 
 One technique for preventing things like `pinchZoom` on a page is to call `preventDefault()` on the second touch in a series. This behavior is not well defined in the touch events spec, and results in different behavior for different browsers (i.e., iOS will prevent zooming but still allow panning with both fingers; Android will allow zooming but not panning; Opera and Firefox currently prevent all panning and zooming.) Currently, it's not recommended to depend on any particular behavior in this case, but rather to depend on meta viewport to prevent zooming.
 
+## Especificações
+
+{{Specifications}}
+
 ## Compatibilidade com navegadores
 
-{{Compat("api.Touch")}}
+{{Compat}}
diff --git a/files/pt-br/web/api/url/hash/index.md b/files/pt-br/web/api/url/hash/index.md
index bdee594273c777..e917e7d5619ce7 100644
--- a/files/pt-br/web/api/url/hash/index.md
+++ b/files/pt-br/web/api/url/hash/index.md
@@ -19,7 +19,7 @@ Uma {{domxref("USVString")}}.
 
 ```js
 const url = new URL(
-  "https://developer.mozilla.org/pt-BR/docs/Web/API/URL/href#Examples"
+  "https://developer.mozilla.org/pt-BR/docs/Web/API/URL/href#Examples",
 );
 console.log(url.hash); // Logs: '#Examples'
 ```
diff --git a/files/pt-br/web/api/url/hostname/index.md b/files/pt-br/web/api/url/hostname/index.md
index a725537b429d7a..163854c7e4b465 100644
--- a/files/pt-br/web/api/url/hostname/index.md
+++ b/files/pt-br/web/api/url/hostname/index.md
@@ -17,7 +17,7 @@ Uma {{domxref("USVString")}}.
 
 ```js
 const url = new URL(
-  "https://developer.mozilla.org/pt-BR/docs/Web/API/URL/hostname"
+  "https://developer.mozilla.org/pt-BR/docs/Web/API/URL/hostname",
 );
 console.log(url.hostname); // Logs: 'developer.mozilla.org'
 ```
diff --git a/files/pt-br/web/api/url/href/index.md b/files/pt-br/web/api/url/href/index.md
index fb77d54bf292bb..de6a8d1c9678e6 100644
--- a/files/pt-br/web/api/url/href/index.md
+++ b/files/pt-br/web/api/url/href/index.md
@@ -17,7 +17,7 @@ Uma {{domxref("USVString")}}.
 
 ```js
 const url = new URL(
-  "https://developer.mozilla.org/pt-BR/docs/Web/API/URL/href"
+  "https://developer.mozilla.org/pt-BR/docs/Web/API/URL/href",
 );
 console.log(url.href); // Logs: 'https://developer.mozilla.org/pt-BR/docs/Web/API/URL/href'
 ```
diff --git a/files/pt-br/web/api/url/index.md b/files/pt-br/web/api/url/index.md
index bff2cbfbdf11a1..75c5a15791785b 100644
--- a/files/pt-br/web/api/url/index.md
+++ b/files/pt-br/web/api/url/index.md
@@ -98,7 +98,7 @@ O método {{domxref("URL.toString", "toString()")}} de `URL` apenas retorna o va
 
 ```js
 const response = await fetch(
-  new URL("http://www.example.com/démonstration.html")
+  new URL("http://www.example.com/démonstration.html"),
 );
 ```
 
diff --git a/files/pt-br/web/api/url/password/index.md b/files/pt-br/web/api/url/password/index.md
index 98b152de1bd867..3278b3396ee606 100644
--- a/files/pt-br/web/api/url/password/index.md
+++ b/files/pt-br/web/api/url/password/index.md
@@ -19,7 +19,7 @@ Uma {{domxref("USVString")}}.
 
 ```js
 const url = new URL(
-  "https://anonymous:flabada@developer.mozilla.org/pt-BR/docs/Web/API/URL/password"
+  "https://anonymous:flabada@developer.mozilla.org/pt-BR/docs/Web/API/URL/password",
 );
 console.log(url.password); // Logs "flabada"
 ```
diff --git a/files/pt-br/web/api/url/pathname/index.md b/files/pt-br/web/api/url/pathname/index.md
index 8db10fb7a80598..f9d832e9090b56 100644
--- a/files/pt-br/web/api/url/pathname/index.md
+++ b/files/pt-br/web/api/url/pathname/index.md
@@ -9,7 +9,7 @@ A propriedade **`pathname`** da interface {{domxref("URL")}} é uma {{domxref("U
 
 O caminho da URL é uma sequência de segmentos delimitada por `/`, que pode ser um de `.`, `..` ou uma string com zero ou mais caracteres excluindo `/`, `?` e `#` .
 
-Alguns sistemas definem o termo *slug* para significar o segmento final de um caminho não vazio se ele identificar uma página em palavras-chave legíveis. Por exemplo, o URL `https://example.org/articles/this-that-other-outre-collection` tem `this-that-other-outre-collection` como seu slug.
+Alguns sistemas definem o termo _slug_ para significar o segmento final de um caminho não vazio se ele identificar uma página em palavras-chave legíveis. Por exemplo, o URL `https://example.org/articles/this-that-other-outre-collection` tem `this-that-other-outre-collection` como seu slug.
 
 Alguns sistemas usam os caracteres `;` e `=` para delimitar parâmetros e valores de parâmetros aplicáveis a um segmento de caminho. Por exemplo, com a URL `https://example.org/users;id=42/tasks;state=open?sort=modified`, um sistema pode extrair e usar os parâmetros de segmento de caminho `id=42` e `state=open` dos segmentos de caminho `users;id=42` e `tasks;state=open`.
 
@@ -23,7 +23,7 @@ Uma {{domxref("USVString")}}.
 
 ```js
 const url = new URL(
-  "https://developer.mozilla.org/pt-BR/docs/Web/API/URL/pathname?q=value"
+  "https://developer.mozilla.org/pt-BR/docs/Web/API/URL/pathname?q=value",
 );
 console.log(url.pathname); // Logs "/pt-BR/docs/Web/API/URL/pathname"
 ```
diff --git a/files/pt-br/web/api/url/protocol/index.md b/files/pt-br/web/api/url/protocol/index.md
index 4c84dbdcfbabbe..6dcd65d549b594 100644
--- a/files/pt-br/web/api/url/protocol/index.md
+++ b/files/pt-br/web/api/url/protocol/index.md
@@ -17,7 +17,7 @@ Uma {{domxref("USVString")}}.
 
 ```js
 const url = new URL(
-  "https://developer.mozilla.org/pt-BR/docs/Web/API/URL/protocol"
+  "https://developer.mozilla.org/pt-BR/docs/Web/API/URL/protocol",
 );
 console.log(url.protocol); // Logs "https:"
 ```
diff --git a/files/pt-br/web/api/url/search/index.md b/files/pt-br/web/api/url/search/index.md
index fccaba74e6f123..a2de3b9a49575d 100644
--- a/files/pt-br/web/api/url/search/index.md
+++ b/files/pt-br/web/api/url/search/index.md
@@ -19,7 +19,7 @@ Uma {{domxref("USVString")}}.
 
 ```js
 const url = new URL(
-  "https://developer.mozilla.org/pt-BR/docs/Web/API/URL/search?q=123"
+  "https://developer.mozilla.org/pt-BR/docs/Web/API/URL/search?q=123",
 );
 console.log(url.search); // Logs "?q=123"
 ```
diff --git a/files/pt-br/web/api/url/tojson/index.md b/files/pt-br/web/api/url/tojson/index.md
index f41bc58334202b..4d1b1f37d248ba 100644
--- a/files/pt-br/web/api/url/tojson/index.md
+++ b/files/pt-br/web/api/url/tojson/index.md
@@ -23,7 +23,7 @@ Uma {{domxref("USVString")}}.
 
 ```js
 const url = new URL(
-  "https://developer.mozilla.org/pt-BR/docs/Web/API/URL/toString"
+  "https://developer.mozilla.org/pt-BR/docs/Web/API/URL/toString",
 );
 url.toJSON(); // deve retornar a url como string
 ```
diff --git a/files/pt-br/web/api/url/tostring/index.md b/files/pt-br/web/api/url/tostring/index.md
index 856edfa7bc3224..29ac5ea2098365 100644
--- a/files/pt-br/web/api/url/tostring/index.md
+++ b/files/pt-br/web/api/url/tostring/index.md
@@ -23,7 +23,7 @@ Uma {{domxref("USVString")}}.
 
 ```js
 const url = new URL(
-  "https://developer.mozilla.org/pt-BR/docs/Web/API/URL/toString"
+  "https://developer.mozilla.org/pt-BR/docs/Web/API/URL/toString",
 );
 url.toString(); // deve rerornar a URL como string
 ```
diff --git a/files/pt-br/web/api/url/username/index.md b/files/pt-br/web/api/url/username/index.md
index b2ff27f9711fa4..8935379db810d6 100644
--- a/files/pt-br/web/api/url/username/index.md
+++ b/files/pt-br/web/api/url/username/index.md
@@ -17,7 +17,7 @@ Uma {{domxref("USVString")}}.
 
 ```js
 const url = new URL(
-  "https://anonymous:flabada@developer.mozilla.org/pt-BR/docs/Web/API/URL/username"
+  "https://anonymous:flabada@developer.mozilla.org/pt-BR/docs/Web/API/URL/username",
 );
 console.log(url.username); // Logs "anonymous"
 ```
diff --git a/files/pt-br/web/api/urlsearchparams/get/index.md b/files/pt-br/web/api/urlsearchparams/get/index.md
index a26acbf61e94db..427b493266214c 100644
--- a/files/pt-br/web/api/urlsearchparams/get/index.md
+++ b/files/pt-br/web/api/urlsearchparams/get/index.md
@@ -40,10 +40,8 @@ let address = params.get("address"); // null
 
 ## Especificações
 
-| Especificação                                                                | Status               | Comment            |
-| ---------------------------------------------------------------------------- | -------------------- | ------------------ |
-| {{SpecName('URL', '#dom-urlsearchparams-get', "get()")}} | {{Spec2('URL')}} | Definição inicial. |
+{{Specifications}}
 
 ## Compatibilidade com navegadores
 
-{{Compat("api.URLSearchParams.get")}}
+{{Compat}}
diff --git a/files/pt-br/web/api/urlsearchparams/index.md b/files/pt-br/web/api/urlsearchparams/index.md
index 80060101b102dc..ed099ed3dd51c4 100644
--- a/files/pt-br/web/api/urlsearchparams/index.md
+++ b/files/pt-br/web/api/urlsearchparams/index.md
@@ -10,8 +10,10 @@ A interface **`URLSearchParams`** define métodos utilitários para trabalhar co
 Um objeto que implementa `URLSearchParams` pode ser usado diretamente em uma estrutura {{jsxref("Statements/for...of", "for...of")}} para iterar sobre pares chave/valor na mesma ordem em que elas aparecem nos parâmetros, por exemplo as linhas a seguir são equivalentes:
 
 ```js
-for (const [key, value] of mySearchParams) {}
-for (const [key, value] of mySearchParams.entries()) {}
+for (const [key, value] of mySearchParams) {
+}
+for (const [key, value] of mySearchParams.entries()) {
+}
 ```
 
 {{AvailableInWorkers}}
@@ -52,46 +54,46 @@ for (const [key, value] of mySearchParams.entries()) {}
 ## Exemplos
 
 ```js
-const paramsString = 'q=URLUtils.searchParams&topic=api';
+const paramsString = "q=URLUtils.searchParams&topic=api";
 const searchParams = new URLSearchParams(paramsString);
 
 // Iterando os parâmetros de pesquisa
 for (const p of searchParams) {
-console.log(p);
+  console.log(p);
 }
 
-console.log(searchParams.has('topic'));               // true
-console.log(searchParams.get('topic') === "api");     // true
-console.log(searchParams.getAll('topic'));            // ["api"]
-console.log(searchParams.get('foo') === null);        // true
-console.log(searchParams.append('topic', 'webdev'));
-console.log(searchParams.toString());                 // "q=URLUtils.searchParams&topic=api&topic=webdev"
-console.log(searchParams.set('topic', 'More webdev'));
-console.log(searchParams.toString());                 // "q=URLUtils.searchParams&topic=More+webdev"
-console.log(searchParams.delete('topic'));
-console.log(searchParams.toString());                 // "q=URLUtils.searchParams"
+console.log(searchParams.has("topic")); // true
+console.log(searchParams.get("topic") === "api"); // true
+console.log(searchParams.getAll("topic")); // ["api"]
+console.log(searchParams.get("foo") === null); // true
+console.log(searchParams.append("topic", "webdev"));
+console.log(searchParams.toString()); // "q=URLUtils.searchParams&topic=api&topic=webdev"
+console.log(searchParams.set("topic", "More webdev"));
+console.log(searchParams.toString()); // "q=URLUtils.searchParams&topic=More+webdev"
+console.log(searchParams.delete("topic"));
+console.log(searchParams.toString()); // "q=URLUtils.searchParams"
 ```
 
 ```js
 // Os parâmetros de pesquisa também podem ser objetos
-const paramsObj = {foo: 'bar', baz: 'bar'};
+const paramsObj = { foo: "bar", baz: "bar" };
 const searchParams = new URLSearchParams(paramsObj);
 
-console.log(searchParams.toString());                 // "foo=bar&baz=bar"
-console.log(searchParams.has('foo'));                 // true
-console.log(searchParams.get('foo'));                 // "bar"
+console.log(searchParams.toString()); // "foo=bar&baz=bar"
+console.log(searchParams.has("foo")); // true
+console.log(searchParams.get("foo")); // "bar"
 ```
 
 ### Parâmetros de pesquisa duplicados
 
 ```js
-const paramStr = 'foo=bar&foo=baz';
+const paramStr = "foo=bar&foo=baz";
 const searchParams = new URLSearchParams(paramStr);
 
-console.log(searchParams.toString());                 // "foo=bar&foo=baz"
-console.log(searchParams.has('foo'));                 // true
-console.log(searchParams.get('foo'));                 // bar, somente o primeiro valor
-console.log(searchParams.getAll('foo'));              // ["bar", "baz"]
+console.log(searchParams.toString()); // "foo=bar&foo=baz"
+console.log(searchParams.has("foo")); // true
+console.log(searchParams.get("foo")); // bar, somente o primeiro valor
+console.log(searchParams.getAll("foo")); // ["bar", "baz"]
 ```
 
 ### Sem análise de URL
@@ -99,22 +101,22 @@ console.log(searchParams.getAll('foo'));              // ["bar", "baz"]
 O construtor `URLSearchParams` _não_ analisa URLs completas. No entanto, ele retirará um `?` inicial inicial de uma string, se presente.
 
 ```js
-const paramsString1 = 'http://example.com/search?query=%40';
+const paramsString1 = "http://example.com/search?query=%40";
 const searchParams1 = new URLSearchParams(paramsString1);
 
-console.log(searchParams1.has('query')); // false
-console.log(searchParams1.has('http://example.com/search?query')); // true
+console.log(searchParams1.has("query")); // false
+console.log(searchParams1.has("http://example.com/search?query")); // true
 
-console.log(searchParams1.get('query')); // null
-console.log(searchParams1.get('http://example.com/search?query')); // "@" (equivalente a decodeURIComponent('%40'))
+console.log(searchParams1.get("query")); // null
+console.log(searchParams1.get("http://example.com/search?query")); // "@" (equivalente a decodeURIComponent('%40'))
 
-const paramsString2 = '?query=value';
+const paramsString2 = "?query=value";
 const searchParams2 = new URLSearchParams(paramsString2);
-console.log(searchParams2.has('query')); // true
+console.log(searchParams2.has("query")); // true
 
-const url = new URL('http://example.com/search?query=%40');
+const url = new URL("http://example.com/search?query=%40");
 const searchParams3 = new URLSearchParams(url.search);
-console.log(searchParams3.has('query')); // true
+console.log(searchParams3.has("query")); // true
 ```
 
 ### Preservando os sinais de adição
@@ -122,11 +124,11 @@ console.log(searchParams3.has('query')); // true
 O construtor `URLSearchParams` interpreta sinais de adição (`+`) como espaços, o que pode causar problemas.
 
 ```js
-const rawData = '\x13à\x17@\x1F\x80';
+const rawData = "\x13à\x17@\x1F\x80";
 const base64Data = btoa(rawData); // 'E+AXQB+A'
 
 const searchParams = new URLSearchParams(`bin=${base64Data}`); // 'bin=E+AXQB+A'
-const binQuery = searchParams.get('bin'); // 'E AXQB A', '+' são substituídos por espaços
+const binQuery = searchParams.get("bin"); // 'E AXQB A', '+' são substituídos por espaços
 
 console.log(atob(binQuery) === rawData); // false
 ```
@@ -134,12 +136,12 @@ console.log(atob(binQuery) === rawData); // false
 Você pode evitar isso codificando os dados com o {{jsxref("encodeURIComponent", "encodeURIComponent()")}}.
 
 ```js
-const rawData = '\x13à\x17@\x1F\x80';
+const rawData = "\x13à\x17@\x1F\x80";
 const base64Data = btoa(rawData); // 'E+AXQB+A'
 const encodedBase64Data = encodeURIComponent(base64Data); // 'E%2BAXQB%2BA'
 
 const searchParams = new URLSearchParams(`bin=${encodedBase64Data}`); // 'bin=E%2BAXQB%2BA'
-const binQuery = searchParams.get('bin'); // 'E+AXQB+A'
+const binQuery = searchParams.get("bin"); // 'E+AXQB+A'
 
 console.log(atob(binQuery) === rawData); // true
 ```
@@ -149,10 +151,10 @@ console.log(atob(binQuery) === rawData); // true
 `URLSearchParams` não distingue entre parâmetros com nada após o `=` e um parâmetro que não possui um `=`.
 
 ```js
-const emptyVal = new URLSearchParams('foo=&bar=baz');
-console.log(emptyVal.get('foo')); // retorna ''
-const noEquals = new URLSearchParams('foo&bar=baz');
-console.log(noEquals.get('foo')); // também retorna ''
+const emptyVal = new URLSearchParams("foo=&bar=baz");
+console.log(emptyVal.get("foo")); // retorna ''
+const noEquals = new URLSearchParams("foo&bar=baz");
+console.log(noEquals.get("foo")); // também retorna ''
 console.log(noEquals.toString()); // 'foo=&bar=baz'
 ```
 
@@ -160,7 +162,7 @@ console.log(noEquals.toString()); // 'foo=&bar=baz'
 
 {{Specifications}}
 
-## Compatibilidade de browser
+## Compatibilidade com navegadores
 
 {{Compat}}
 
diff --git a/files/pt-br/web/api/urlsearchparams/values/index.md b/files/pt-br/web/api/urlsearchparams/values/index.md
index e48a1be0083d18..1da8747d7e7fc3 100644
--- a/files/pt-br/web/api/urlsearchparams/values/index.md
+++ b/files/pt-br/web/api/urlsearchparams/values/index.md
@@ -26,7 +26,7 @@ Retorna um {{jsxref("Iteration_protocols","iterator")}}.
 var searchParams = new URLSearchParams("key1=value1&key2=value2");
 
 // Mostra os pares de chave/valor
-for(var value of searchParams.values()) {
+for (var value of searchParams.values()) {
   console.log(value);
 }
 ```
@@ -40,13 +40,11 @@ value2
 
 ## Especificações
 
-| Specification                                                                                    | Status               | Comment            |
-| ------------------------------------------------------------------------------------------------ | -------------------- | ------------------ |
-| {{SpecName('URL', '#urlsearchparams','values() (as iterator<>)')}} | {{Spec2('URL')}} | Definição inicial. |
+{{Specifications}}
 
 ## Compatibilidade com navegadores
 
-{{Compat("api.URLSearchParams.values")}}
+{{Compat}}
 
 ## Veja também
 
diff --git a/files/pt-br/web/api/validitystate/index.md b/files/pt-br/web/api/validitystate/index.md
index 995e271c606a8f..cb8dc351f07ebf 100644
--- a/files/pt-br/web/api/validitystate/index.md
+++ b/files/pt-br/web/api/validitystate/index.md
@@ -37,15 +37,11 @@ Para cada uma das propriedades Booleanas abaixo, caso retorne **`true`**, isso i
 
 ## Especificações
 
-| Especificação                                                                                                            | Status                           | Comentário                                                                        |
-| ------------------------------------------------------------------------------------------------------------------------ | -------------------------------- | --------------------------------------------------------------------------------- |
-| {{ SpecName('HTML WHATWG', 'forms.html#the-constraint-validation-api', 'ValidityState') }} | {{Spec2('HTML WHATWG')}} | Live Standard                                                                     |
-| {{ SpecName('HTML5.1', '#the-constraint-validation-api', 'ValidityState') }}                     | {{Spec2('HTML5.1')}}     | No change from the previous snapshot {{SpecName('HTML5 W3C')}}.            |
-| {{ SpecName('HTML5 W3C', 'forms.html#the-constraint-validation-api', 'ValidityState') }}     | {{Spec2('HTML5 W3C')}}     | First snapshot of {{SpecName('HTML WHATWG')}} containing this interface. |
+{{Specifications}}
 
 ## Compatibilidade com navegadores
 
-{{Compat("api.ValidityState")}}
+{{Compat}}
 
 ## Veja também
 
diff --git a/files/pt-br/web/api/web_animations_api/index.md b/files/pt-br/web/api/web_animations_api/index.md
index db414fc6bcb1f1..215feb9c9bb3eb 100644
--- a/files/pt-br/web/api/web_animations_api/index.md
+++ b/files/pt-br/web/api/web_animations_api/index.md
@@ -44,11 +44,13 @@ The Web Animations API adds some new features to {{domxref("document")}} and {{d
 - {{domxref("Element.getAnimations()")}}
   - : Returns an Array of {{domxref("Animation")}} objects currently affecting an element or which are scheduled to do so in future.
 
-## Specifications
+## Especificações
 
-| Specification                            | Status                               | Comment            |
-| ---------------------------------------- | ------------------------------------ | ------------------ |
-| {{SpecName('Web Animations')}} | {{Spec2('Web Animations')}} | Initial definition |
+{{Specifications}}
+
+## Compatibilidade com navegadores
+
+{{Compat}}
 
 ## See also
 
diff --git a/files/pt-br/web/api/web_animations_api/using_the_web_animations_api/index.md b/files/pt-br/web/api/web_animations_api/using_the_web_animations_api/index.md
index 99336c24c5c8a9..cb90432eb1a5ee 100644
--- a/files/pt-br/web/api/web_animations_api/using_the_web_animations_api/index.md
+++ b/files/pt-br/web/api/web_animations_api/using_the_web_animations_api/index.md
@@ -62,9 +62,9 @@ A primeira coisa que precisamos fazer é criar um [Objeto Keyframe](/pt-BR/docs/
 
 ```js
 var aliceTumbling = [
-  { transform: 'rotate(0) translate3D(-50%, -50%, 0)', color: '#000' },
-  { color: '#431236', offset: 0.3},
-  { transform: 'rotate(360deg) translate3D(-50%, -50%, 0)', color: '#000' }
+  { transform: "rotate(0) translate3D(-50%, -50%, 0)", color: "#000" },
+  { color: "#431236", offset: 0.3 },
+  { transform: "rotate(360deg) translate3D(-50%, -50%, 0)", color: "#000" },
 ];
 ```
 
@@ -83,8 +83,8 @@ Nós precisamos criar também um objeto de propriedades temporais (um objeto {{d
 ```js
 var aliceTiming = {
   duration: 3000,
-  iterations: Infinity
-}
+  iterations: Infinity,
+};
 ```
 
 Você pode notar algumas diferenças aqui comparando com os valores equivalentes representados no CSS:
@@ -99,10 +99,7 @@ Você pode notar algumas diferenças aqui comparando com os valores equivalentes
 Agora vamos juntar o que já fizemos com o método {{domxref("Element.animate()")}}:
 
 ```js
-document.getElementById("alice").animate(
-  aliceTumbling,
-  aliceTiming
-)
+document.getElementById("alice").animate(aliceTumbling, aliceTiming);
 ```
 
 E pronto: a animação começa a tocar (veja a [versão final no Codepen](http://codepen.io/rachelnabors/pen/rxpmJL)).
@@ -112,13 +109,14 @@ O método `animate()` pode ser chamado em qualquer elemento do DOM que pode ser
 ```js
 document.getElementById("alice").animate(
   [
-    { transform: 'rotate(0) translate3D(-50%, -50%, 0)', color: '#000' },
-    { color: '#431236', offset: 0.3},
-    { transform: 'rotate(360deg) translate3D(-50%, -50%, 0)', color: '#000' }
-  ], {
+    { transform: "rotate(0) translate3D(-50%, -50%, 0)", color: "#000" },
+    { color: "#431236", offset: 0.3 },
+    { transform: "rotate(360deg) translate3D(-50%, -50%, 0)", color: "#000" },
+  ],
+  {
     duration: 3000,
-    iterations: Infinity
-  }
+    iterations: Infinity,
+  },
 );
 ```
 
@@ -127,10 +125,12 @@ E se nós precisarmos somente especificar a duração da animação e não suas
 ```js
 document.getElementById("alice").animate(
   [
-    { transform: 'rotate(0) translate3D(-50%, -50%, 0)', color: '#000' },
-    { color: '#431236', offset: 0.3},
-    { transform: 'rotate(360deg) translate3D(-50%, -50%, 0)', color: '#000' }
-  ], 3000);
+    { transform: "rotate(0) translate3D(-50%, -50%, 0)", color: "#000" },
+    { color: "#431236", offset: 0.3 },
+    { transform: "rotate(360deg) translate3D(-50%, -50%, 0)", color: "#000" },
+  ],
+  3000,
+);
 ```
 
 ## Controlando a reprodução com play(), pause(), reverse() e updatePlaybackRate()
@@ -146,15 +146,16 @@ Nesse jogo, Alice tem uma animação que a encolhe ou aumenta seu tamanho, que c
 Vamos falar sobre a animação da Alice depois, mas por enquanto, vamos dissecar esta animação do cupcake.
 
 ```js
-var nommingCake = document.getElementById('eat-me_sprite').animate(
-[
-  { transform: 'translateY(0)' },
-  { transform: 'translateY(-80%)' }
-], {
-  fill: 'forwards',
-  easing: 'steps(4, end)',
-  duration: aliceChange.effect.timing.duration / 2
-});
+var nommingCake = document
+  .getElementById("eat-me_sprite")
+  .animate(
+    [{ transform: "translateY(0)" }, { transform: "translateY(-80%)" }],
+    {
+      fill: "forwards",
+      easing: "steps(4, end)",
+      duration: aliceChange.effect.timing.duration / 2,
+    },
+  );
 ```
 
 O método {{domxref("Element.animate()")}} vai rodar imediatamente depois de ser chamado. Para evitar que o bolinho se coma sozinho antes da interação do usuário, chamamos o {{domxref("Animation.pause()")}} imediatamente depois de criar a animação:
@@ -172,15 +173,13 @@ nommingCake.play();
 Especificamente, nós queremos linka-lo à animação da Alice, para ela crescer assim que o cupcake é mordido. Podemos fazer isso com a seguinte função:
 
 ```js
-var growAlice = function() {
-
+var growAlice = function () {
   // Play Alice's animation.
   aliceChange.play();
 
   // Play the cake's animation.
   nommingCake.play();
-
-}
+};
 ```
 
 Quando o usuário clicar ou pressionar seu dedo no bolinho em uma tela de toque, podemos chamar a função `growAlice` para fazer todas as animações tocarem:
@@ -199,10 +198,10 @@ cake.addEventListener("touchstart", growAlice, false);
 Vamos dar uma olhada primeiro no método `playbackRate` — um valor negativo vai fazer a animação tocar ao contrário. Quando Alice bebe da garrafa, ela encolhe. Isso porque a garrafa muda o `playbackRate` da animação de 1 para -1:
 
 ```js
-var shrinkAlice = function() {
+var shrinkAlice = function () {
   aliceChange.playbackRate = -1;
   aliceChange.play();
-}
+};
 
 bottle.addEventListener("mousedown", shrinkAlice, false);
 bottle.addEventListener("touchstart", shrinkAlice, false);
@@ -215,22 +214,20 @@ Em [Alice Através do Espelho](https://en.wikipedia.org/wiki/Through_the_Looking
 Já que crianças pequenas se cansam facilmente, diferente de peças de xadrez autônomas, Alice está constantemente desacelerando. Nós podemos fazer isso definindo uma queda no `playbackRate` da animação dela. Usamos o `updatePlaybackRate()` no lugar de definir manualmente o playbackRate, já que isso produz uma atualização mais suave:
 
 ```js
-setInterval( function() {
-
+setInterval(function () {
   // Make sure the playback rate never falls below .4
-  if (redQueen_alice.playbackRate > .4) {
-    redQueen_alice.updatePlaybackRate(redQueen_alice.playbackRate * .9);
+  if (redQueen_alice.playbackRate > 0.4) {
+    redQueen_alice.updatePlaybackRate(redQueen_alice.playbackRate * 0.9);
   }
-
 }, 3000);
 ```
 
 Mas impulsioná-las clicando ou tocando na tela aumenta a velocidade delas por multiplicar o playbackRate:
 
 ```js
-var goFaster = function() {
+var goFaster = function () {
   redQueen_alice.updatePlaybackRate(redQueen_alice.playbackRate * 1.1);
-}
+};
 
 document.addEventListener("click", goFaster);
 document.addEventListener("touchstart", goFaster);
@@ -243,11 +240,9 @@ Os elementos do fundo também tem `playbackRate`s que também são afetados pelo
 Imagine outras maneiras de utilizar o playbackRate, como melhorar a acessibilidade para usuários com disfunções vestibulares permitindo que eles desacelerem as animações do site todo. Isso é impossível de fazer via CSS sem recalcular todas as regras, mas com a Web Animations API, podemos utilizar o método {{domxref("document.getAnimations()")}} para iterar todas animações de uma página e dividir pela metade seu `playbackRate`, como por exemplo:
 
 ```js
-document.getAnimations().forEach(
-  function (animation) {
-    animation.updatePlaybackRate(animation.playbackRate * .5);
-  }
-);
+document.getAnimations().forEach(function (animation) {
+  animation.updatePlaybackRate(animation.playbackRate * 0.5);
+});
 ```
 
 Com a Web Animations API, você só precisa mudar uma simples propriedade!
@@ -255,21 +250,25 @@ Com a Web Animations API, você só precisa mudar uma simples propriedade!
 Outra coisa que é difícil de fazer somente com Animações CSS é criar dependências de valores fornecidos por outras animações. Por exemplo, no logo Aumentando e Encolhendo Alice, você pode ter notado algo estranho sobre a duração do bolinho:
 
 ```js
-duration: aliceChange.effect.getComputedTiming().duration / 2
+duration: aliceChange.effect.getComputedTiming().duration / 2;
 ```
 
 Para entender o que está acontecendo, vamos dar uma olhada na animação da Alice:
 
 ```js
-var aliceChange = document.getElementById('alice').animate(
-  [
-    { transform: 'translate(-50%, -50%) scale(.5)' },
-    { transform: 'translate(-50%, -50%) scale(2)' }
-  ], {
-    duration: 8000,
-    easing: 'ease-in-out',
-    fill: 'both'
-  });
+var aliceChange = document
+  .getElementById("alice")
+  .animate(
+    [
+      { transform: "translate(-50%, -50%) scale(.5)" },
+      { transform: "translate(-50%, -50%) scale(2)" },
+    ],
+    {
+      duration: 8000,
+      easing: "ease-in-out",
+      fill: "both",
+    },
+  );
 ```
 
 A animação da Alice a fazia ir de metade de seu tamanho para o dobro em 8 segundos. Então nós a pausamos:
@@ -295,14 +294,12 @@ O `effect` nos permite acessar os keyframes e propriedades temporais da animaç
 E nós podemos fazer a mesma coisa quando definimos as durações da garrafa e do bolinho:
 
 ```js
-var drinking = document.getElementById('liquid').animate(
-[
-  { height: '100%' },
-  { height: '0' }
-], {
-  fill: 'forwards',
-  duration: aliceChange.effect.getComputedTiming().duration / 2
-});
+var drinking = document
+  .getElementById("liquid")
+  .animate([{ height: "100%" }, { height: "0" }], {
+    fill: "forwards",
+    duration: aliceChange.effect.getComputedTiming().duration / 2,
+  });
 drinking.pause();
 ```
 
diff --git a/files/pt-br/web/api/web_audio_api/index.md b/files/pt-br/web/api/web_audio_api/index.md
index 3a169e21703b40..15a8280535db20 100644
--- a/files/pt-br/web/api/web_audio_api/index.md
+++ b/files/pt-br/web/api/web_audio_api/index.md
@@ -222,7 +222,7 @@ Você pode encontrar vários exemplos em nosso [repositório webaudio-example](h
 - [howler.js](https://github.com/goldfire/howler.js/): uma biblioteca de áudio JS que tem como padrão [Web Audio API](https://webaudio.github.io/web-audio-api/) e retorna para [HTML Audio](https://html.spec.whatwg.org/multipage/media.html#the-audio-element), além de fornecer outros recursos úteis.
 - [Mooog](https://github.com/mattlima/mooog): encadeamento de AudioNodes no estilo jQuery, envios/retornos no estilo do mixer e muito mais.
 - [XSound](https://xsound.jp/): Biblioteca Web Audio API para Sintetizador, Efeitos, Visualização, Gravação, etc.
-- [OpenLang](https://github.com/chrisjohndigital/OpenLang): aplicativo da Web do laboratório de linguagem de vídeo HTML usando a API de áudio da Web para gravar e combinar vídeo e áudio de diferentes fontes em um único arquivo ([fonte no GitHub]( https://github.com/chrisjohndigital/OpenLang))
+- [OpenLang](https://github.com/chrisjohndigital/OpenLang): aplicativo da Web do laboratório de linguagem de vídeo HTML usando a API de áudio da Web para gravar e combinar vídeo e áudio de diferentes fontes em um único arquivo ([fonte no GitHub](https://github.com/chrisjohndigital/OpenLang))
 - [Pts.js](https://ptsjs.org/): Simplifica a visualização de áudio na web ([guide](https://ptsjs.org/guide/sound-0800))
 
 ### Tópicos relacionados
diff --git a/files/pt-br/web/api/web_audio_api/simple_synth/index.md b/files/pt-br/web/api/web_audio_api/simple_synth/index.md
index f98720e68ae7bb..62d4b61a755151 100644
--- a/files/pt-br/web/api/web_audio_api/simple_synth/index.md
+++ b/files/pt-br/web/api/web_audio_api/simple_synth/index.md
@@ -1,5 +1,5 @@
 ---
-title: 'Tutorial e exemplo: Teclado de Sintetizador Simples'
+title: "Tutorial e exemplo: Teclado de Sintetizador Simples"
 slug: Web/API/Web_Audio_API/Simple_synth
 original_slug: Web/API/API_Web_Audio/Sintetizador_simples
 ---
@@ -40,13 +40,20 @@ Primeiro criamos o `
` para conter a barra de opções, para ser personaliza
Volume: - + - +
+
``` Especificamos um valor padrão de 0.5, e provemos um elemento {{HTMLElement("datalist")}} no qual é conectado ao range usando o atributo [`name`](/pt-BR/docs/Web/HTML/Global_attributes#name) para achar uma lista de opções cujo ID encaixa; nesse caso, o conjunto de informações é nomeado de `"volume"`. isso nos permite prover um conjunto de valores comuns e strings especiais que o browser pode de forma opcional escolher mostrar de alguma maneira; e então atribuimos nomes aos valores 0.0 ("Mute") e 1.0 ("100%"). @@ -87,7 +94,11 @@ E no lado da barra de configurações, colocamos um rótulo e um elemento {{HTML .key { cursor: pointer; - font: 16px "Open Sans", "Lucida Grande", "Arial", sans-serif; + font: + 16px "Open Sans", + "Lucida Grande", + "Arial", + sans-serif; border: 1px solid black; border-radius: 5px; width: 20px; @@ -132,7 +143,11 @@ E no lado da barra de configurações, colocamos um rótulo e um elemento {{HTML .settingsBar { padding-top: 8px; - font: 14px "Open Sans", "Lucida Grande", "Arial", sans-serif; + font: + 14px "Open Sans", + "Lucida Grande", + "Arial", + sans-serif; position: relative; vertical-align: middle; width: 100%; @@ -147,7 +162,8 @@ E no lado da barra de configurações, colocamos um rótulo e um elemento {{HTML vertical-align: middle; } -.left span, .left input { +.left span, +.left input { vertical-align: middle; } @@ -239,70 +255,70 @@ function createNoteTable() { ... várias oitavas não mostradas para manter breve ... ```js hidden - noteFreq[2]["C"] = 65.406391325149658; - noteFreq[2]["C#"] = 69.295657744218024; - noteFreq[2]["D"] = 73.416191979351890; - noteFreq[2]["D#"] = 77.781745930520227; - noteFreq[2]["E"] = 82.406889228217482; - noteFreq[2]["F"] = 87.307057858250971; - noteFreq[2]["F#"] = 92.498605677908599; - noteFreq[2]["G"] = 97.998858995437323; - noteFreq[2]["G#"] = 103.826174394986284; - noteFreq[2]["A"] = 110.000000000000000; - noteFreq[2]["A#"] = 116.540940379522479; - noteFreq[2]["B"] = 123.470825314031027; - - noteFreq[3]["C"] = 130.812782650299317; - noteFreq[3]["C#"] = 138.591315488436048; - noteFreq[3]["D"] = 146.832383958703780; - noteFreq[3]["D#"] = 155.563491861040455; - noteFreq[3]["E"] = 164.813778456434964; - noteFreq[3]["F"] = 174.614115716501942; - noteFreq[3]["F#"] = 184.997211355817199; - noteFreq[3]["G"] = 195.997717990874647; - noteFreq[3]["G#"] = 207.652348789972569; - noteFreq[3]["A"] = 220.000000000000000; - noteFreq[3]["A#"] = 233.081880759044958; - noteFreq[3]["B"] = 246.941650628062055; - - noteFreq[4]["C"] = 261.625565300598634; - noteFreq[4]["C#"] = 277.182630976872096; - noteFreq[4]["D"] = 293.664767917407560; - noteFreq[4]["D#"] = 311.126983722080910; - noteFreq[4]["E"] = 329.627556912869929; - noteFreq[4]["F"] = 349.228231433003884; - noteFreq[4]["F#"] = 369.994422711634398; - noteFreq[4]["G"] = 391.995435981749294; - noteFreq[4]["G#"] = 415.304697579945138; - noteFreq[4]["A"] = 440.000000000000000; - noteFreq[4]["A#"] = 466.163761518089916; - noteFreq[4]["B"] = 493.883301256124111; - - noteFreq[5]["C"] = 523.251130601197269; - noteFreq[5]["C#"] = 554.365261953744192; - noteFreq[5]["D"] = 587.329535834815120; - noteFreq[5]["D#"] = 622.253967444161821; - noteFreq[5]["E"] = 659.255113825739859; - noteFreq[5]["F"] = 698.456462866007768; - noteFreq[5]["F#"] = 739.988845423268797; - noteFreq[5]["G"] = 783.990871963498588; - noteFreq[5]["G#"] = 830.609395159890277; - noteFreq[5]["A"] = 880.000000000000000; - noteFreq[5]["A#"] = 932.327523036179832; - noteFreq[5]["B"] = 987.766602512248223; - - noteFreq[6]["C"] = 1046.502261202394538; - noteFreq[6]["C#"] = 1108.730523907488384; - noteFreq[6]["D"] = 1174.659071669630241; - noteFreq[6]["D#"] = 1244.507934888323642; - noteFreq[6]["E"] = 1318.510227651479718; - noteFreq[6]["F"] = 1396.912925732015537; - noteFreq[6]["F#"] = 1479.977690846537595; - noteFreq[6]["G"] = 1567.981743926997176; - noteFreq[6]["G#"] = 1661.218790319780554; - noteFreq[6]["A"] = 1760.000000000000000; - noteFreq[6]["A#"] = 1864.655046072359665; - noteFreq[6]["B"] = 1975.533205024496447; +noteFreq[2]["C"] = 65.406391325149658; +noteFreq[2]["C#"] = 69.295657744218024; +noteFreq[2]["D"] = 73.41619197935189; +noteFreq[2]["D#"] = 77.781745930520227; +noteFreq[2]["E"] = 82.406889228217482; +noteFreq[2]["F"] = 87.307057858250971; +noteFreq[2]["F#"] = 92.498605677908599; +noteFreq[2]["G"] = 97.998858995437323; +noteFreq[2]["G#"] = 103.826174394986284; +noteFreq[2]["A"] = 110.0; +noteFreq[2]["A#"] = 116.540940379522479; +noteFreq[2]["B"] = 123.470825314031027; + +noteFreq[3]["C"] = 130.812782650299317; +noteFreq[3]["C#"] = 138.591315488436048; +noteFreq[3]["D"] = 146.83238395870378; +noteFreq[3]["D#"] = 155.563491861040455; +noteFreq[3]["E"] = 164.813778456434964; +noteFreq[3]["F"] = 174.614115716501942; +noteFreq[3]["F#"] = 184.997211355817199; +noteFreq[3]["G"] = 195.997717990874647; +noteFreq[3]["G#"] = 207.652348789972569; +noteFreq[3]["A"] = 220.0; +noteFreq[3]["A#"] = 233.081880759044958; +noteFreq[3]["B"] = 246.941650628062055; + +noteFreq[4]["C"] = 261.625565300598634; +noteFreq[4]["C#"] = 277.182630976872096; +noteFreq[4]["D"] = 293.66476791740756; +noteFreq[4]["D#"] = 311.12698372208091; +noteFreq[4]["E"] = 329.627556912869929; +noteFreq[4]["F"] = 349.228231433003884; +noteFreq[4]["F#"] = 369.994422711634398; +noteFreq[4]["G"] = 391.995435981749294; +noteFreq[4]["G#"] = 415.304697579945138; +noteFreq[4]["A"] = 440.0; +noteFreq[4]["A#"] = 466.163761518089916; +noteFreq[4]["B"] = 493.883301256124111; + +noteFreq[5]["C"] = 523.251130601197269; +noteFreq[5]["C#"] = 554.365261953744192; +noteFreq[5]["D"] = 587.32953583481512; +noteFreq[5]["D#"] = 622.253967444161821; +noteFreq[5]["E"] = 659.255113825739859; +noteFreq[5]["F"] = 698.456462866007768; +noteFreq[5]["F#"] = 739.988845423268797; +noteFreq[5]["G"] = 783.990871963498588; +noteFreq[5]["G#"] = 830.609395159890277; +noteFreq[5]["A"] = 880.0; +noteFreq[5]["A#"] = 932.327523036179832; +noteFreq[5]["B"] = 987.766602512248223; + +noteFreq[6]["C"] = 1046.502261202394538; +noteFreq[6]["C#"] = 1108.730523907488384; +noteFreq[6]["D"] = 1174.659071669630241; +noteFreq[6]["D#"] = 1244.507934888323642; +noteFreq[6]["E"] = 1318.510227651479718; +noteFreq[6]["F"] = 1396.912925732015537; +noteFreq[6]["F#"] = 1479.977690846537595; +noteFreq[6]["G"] = 1567.981743926997176; +noteFreq[6]["G#"] = 1661.218790319780554; +noteFreq[6]["A"] = 1760.0; +noteFreq[6]["A#"] = 1864.655046072359665; +noteFreq[6]["B"] = 1975.533205024496447; ``` ```js @@ -379,9 +395,17 @@ Com esta tabela no lugar, podemos descobrir a frequência para uma dada nota em ```js hidden if (!Object.entries) { - Object.entries = function entries(O) { - return reduce(keys(O), (e, k) => concat(e, typeof k === 'string' && isEnumerable(O, k) ? [[k, O[k]]] : []), []); - }; + Object.entries = function entries(O) { + return reduce( + keys(O), + (e, k) => + concat( + e, + typeof k === "string" && isEnumerable(O, k) ? [[k, O[k]]] : [], + ), + [], + ); + }; } ``` @@ -403,12 +427,12 @@ function setup() { // our purposes we don't need them. Each octave is inserted // into a
of class "octave". - noteFreq.forEach(function(keys, idx) { + noteFreq.forEach(function (keys, idx) { let keyList = Object.entries(keys); let octaveElem = document.createElement("div"); octaveElem.className = "octave"; - keyList.forEach(function(key) { + keyList.forEach(function (key) { if (key[0].length == 1) { octaveElem.appendChild(createKey(key[0], idx, key[1])); } @@ -417,14 +441,16 @@ function setup() { keyboard.appendChild(octaveElem); }); - document.querySelector("div[data-note='B'][data-octave='5']").scrollIntoView(false); + document + .querySelector("div[data-note='B'][data-octave='5']") + .scrollIntoView(false); sineTerms = new Float32Array([0, 0, 1, 0, 1]); cosineTerms = new Float32Array(sineTerms.length); customWaveform = audioContext.createPeriodicWave(cosineTerms, sineTerms); - for (i=0; i<9; i++) { - oscList[i] = {}; + for (i = 0; i < 9; i++) { + oscList[i] = {}; } } @@ -548,7 +574,7 @@ A barra de rolagem do volume na barra de opções dá uma simples interface para ```js function changeVolume(event) { - masterGainNode.gain.value = volumeControl.value + masterGainNode.gain.value = volumeControl.value; } ``` diff --git a/files/pt-br/web/api/web_components/index.md b/files/pt-br/web/api/web_components/index.md index a00a4e551524a4..6528f6c4aebd68 100644 --- a/files/pt-br/web/api/web_components/index.md +++ b/files/pt-br/web/api/web_components/index.md @@ -134,23 +134,11 @@ Mais exemplos serão adicionados com o passar do tempo. ## Especificações -| Especificação | Status | Comentário | -| ---------------------------------------------------------------------------------------------------------------------------- | -------------------------------- | ------------------------------------------------------------------------------------------------- | -| {{SpecName("HTML WHATWG","scripting.html#the-template-element","<template> element")}} | {{Spec2("HTML WHATWG")}} | Definição de {{HTMLElement("template")}}. | -| {{SpecName("HTML WHATWG","custom-elements.html#custom-elements","custom elements")}} | {{Spec2("HTML WHATWG")}} | Definição de [Elementos HTML Customizados](/pt-BR/docs/Web/Web_Components/Using_custom_elements). | -| {{SpecName("DOM WHATWG","#shadow-trees","shadow trees")}} | {{Spec2("DOM WHATWG")}} | Definição de [Shadow DOM](/pt-BR/docs/Web/Web_Components/Using_shadow_DOM). | -| {{SpecName("HTML Imports", "", "")}} | {{Spec2("HTML Imports")}} | Definição inicial de [HTML Imports](/pt-BR/docs/Web/Web_Components/HTML_Imports). | -| {{SpecName("Shadow DOM", "", "")}} | {{Spec2("Shadow DOM")}} | Definição inicial de [Shadow DOM](/pt-BR/docs/Web/Web_Components/Using_shadow_DOM). | +{{Specifications}} ## Compatibilidade com navegadores -Em geral: - -- Web components são suportados por padrão pelo Firefox (versão 63), Chrome, e Opera. -- Safari suporta muitas das funcionalidades de web component, porém menos do que os navegadores citados acima. -- Edge está trabalhando na implementação. - -Para obter informações detalhadas sobre o suporte de funções específicas nos navegadores, você deve consultar as páginas de referência listadas abaixo. +{{Compat}} ## Veja também diff --git a/files/pt-br/web/api/web_components/using_custom_elements/index.md b/files/pt-br/web/api/web_components/using_custom_elements/index.md index 354023932d6405..369cea22a849c2 100644 --- a/files/pt-br/web/api/web_components/using_custom_elements/index.md +++ b/files/pt-br/web/api/web_components/using_custom_elements/index.md @@ -23,7 +23,7 @@ Para registar um custom element na página, use o método {{domxref("CustomEleme Então, por exemplo, podemos definir um custom element [word-count](https://mdn.github.io/web-components-examples/word-count-web-component/) `(contagem-palavras)` assim: ```js -customElements.define('word-count', WordCount, { extends: 'p' }); +customElements.define("word-count", WordCount, { extends: "p" }); ``` O elemento é chamado de `word-count`, seu objeto de classe é `WordCount`, e estende o elemento {{htmlelement("p")}}. @@ -81,42 +81,47 @@ Dentro do construtor, definimos toda a funcionalidade que o elemento terá quand ```js // Create a shadow root -this.attachShadow({mode: 'open'}); // sets and returns 'this.shadowRoot' +this.attachShadow({ mode: "open" }); // sets and returns 'this.shadowRoot' // Create (nested) span elements -const wrapper = document.createElement('span'); -wrapper.setAttribute('class','wrapper'); -const icon = wrapper.appendChild(document.createElement('span')); -icon.setAttribute('class','icon'); -icon.setAttribute('tabindex', 0); +const wrapper = document.createElement("span"); +wrapper.setAttribute("class", "wrapper"); +const icon = wrapper.appendChild(document.createElement("span")); +icon.setAttribute("class", "icon"); +icon.setAttribute("tabindex", 0); // Insert icon from defined attribute or default icon -const img = icon.appendChild(document.createElement('img')); -img.src = this.hasAttribute('img') ? this.getAttribute('img') : 'img/default.png'; +const img = icon.appendChild(document.createElement("img")); +img.src = this.hasAttribute("img") + ? this.getAttribute("img") + : "img/default.png"; -const info = wrapper.appendChild(document.createElement('span')); -info.setAttribute('class','info'); +const info = wrapper.appendChild(document.createElement("span")); +info.setAttribute("class", "info"); // Take attribute content and put it inside the info span -info.textContent = this.getAttribute('data-text'); +info.textContent = this.getAttribute("data-text"); // Create some CSS to apply to the shadow dom -const style = document.createElement('style'); -style.textContent = '.wrapper {' + -// CSS truncated for brevity +const style = document.createElement("style"); +style.textContent = + ".wrapper {" + + // CSS truncated for brevity -// attach the created elements to the shadow DOM -this.shadowRoot.append(style,wrapper); + // attach the created elements to the shadow DOM + this.shadowRoot.append(style, wrapper); ``` Por fim, registramos nosso custom element no `CustomElementRegistry` usando o método`define()` mencionado anteriormente — nos parâmetros especificamos o nome do elemento e, em seguida, o nome da classe que define sua funcionalidade: ```js -customElements.define('popup-info', PopUpInfo); +customElements.define("popup-info", PopUpInfo); ``` Agora está disponível para uso em nossa página. Em nosso HTML, nós o usamos assim: ```html - ``` @@ -131,9 +136,9 @@ Por exemplo, dê uma olhada neste código de nosso exemplo [popup-info-box-exter ```js // Aplicar estilos externos ao shadow dom -const linkElem = document.createElement('link'); -linkElem.setAttribute('rel', 'stylesheet'); -linkElem.setAttribute('href', 'style.css'); +const linkElem = document.createElement("link"); +linkElem.setAttribute("rel", "stylesheet"); +linkElem.setAttribute("href", "style.css"); // Anexe o elemento criado ao shadow dom shadow.appendChild(linkElem); @@ -167,16 +172,14 @@ Não explicaremos a funcionalidade do elemento em detalhes aqui, mas você pode Em seguida, registramos o elemento usando o método `define()` como antes, exceto que, desta vez, ele também inclui um objeto de opções que detalha de qual elemento nosso elemento personalizado herda: ```js -customElements.define('expanding-list', ExpandingList, { extends: "ul" }); +customElements.define("expanding-list", ExpandingList, { extends: "ul" }); ``` Usar o elemento integrado em um documento da web também parece um pouco diferente: ```html ``` @@ -205,10 +208,10 @@ Vejamos um exemplo em uso. O código abaixo é retirado do exemplo [life-cycle-c O construtor da classe é realmente simples - aqui anexamos um shadow DOM ao elemento e, em seguida, anexamos os elementos vazios {{htmlelement("div")}} e {{htmlelement("style")}} ao shadow root: ```js -const shadow = this.attachShadow({mode: 'open'}); +const shadow = this.attachShadow({ mode: "open" }); -const div = document.createElement('div'); -const style = document.createElement('style'); +const div = document.createElement("div"); +const style = document.createElement("style"); shadow.appendChild(style); shadow.appendChild(div); ``` @@ -218,11 +221,11 @@ A função chave neste exemplo é `updateStyle()` — isso pega um elemento, peg ```js function updateStyle(elem) { const shadow = elem.shadowRoot; - shadow.querySelector('style').textContent = ` + shadow.querySelector("style").textContent = ` div { - width: ${elem.getAttribute('l')}px; - height: ${elem.getAttribute('l')}px; - background-color: ${elem.getAttribute('c')}; + width: ${elem.getAttribute("l")}px; + height: ${elem.getAttribute("l")}px; + background-color: ${elem.getAttribute("c")}; } `; } diff --git a/files/pt-br/web/api/web_crypto_api/index.md b/files/pt-br/web/api/web_crypto_api/index.md index c2ec39f50b1f8c..60af38c8b21025 100644 --- a/files/pt-br/web/api/web_crypto_api/index.md +++ b/files/pt-br/web/api/web_crypto_api/index.md @@ -42,10 +42,8 @@ A Web Crypto API pode ser utilizada: ## Especificações -| Especificação | Status | Comentário | -| ---------------------------------------- | ------------------------------------ | ----------------- | -| {{SpecName("Web Crypto API")}} | {{Spec2("Web Crypto API")}} | Definição inicial | +{{Specifications}} ## Compatibilidade com navegadores -{{Compat("api.Crypto")}} +{{Compat}} diff --git a/files/pt-br/web/api/web_storage_api/index.md b/files/pt-br/web/api/web_storage_api/index.md index 2566a84de96866..d12cff1547e803 100644 --- a/files/pt-br/web/api/web_storage_api/index.md +++ b/files/pt-br/web/api/web_storage_api/index.md @@ -38,9 +38,7 @@ Nós também fornecemos um [event output page](http://mdn.github.io/web-storage- ## Especificações -| Especificação | Status | Comentário | -| ------------------------------------ | -------------------------------- | ---------- | -| {{SpecName('Web Storage')}} | {{Spec2('Web Storage')}} | | +{{Specifications}} ## Compatibilidade com navegadores diff --git a/files/pt-br/web/api/web_storage_api/using_the_web_storage_api/index.md b/files/pt-br/web/api/web_storage_api/using_the_web_storage_api/index.md index ccb417d311a2a7..87ed22336db2f6 100644 --- a/files/pt-br/web/api/web_storage_api/using_the_web_storage_api/index.md +++ b/files/pt-br/web/api/web_storage_api/using_the_web_storage_api/index.md @@ -13,9 +13,9 @@ A API Web Storage fornece mecanismos pelos quais os navegadores podem armazenar Objetos `Storage` são simples conjuntos contendo pares de chave/valor, de forma parecida com objetos, porém eles permanecem intactos mesmo após a página ser recarregada. As chaves e valores são sempre strings (note que chaves cujo nome seja um número inteiro serão automaticamente convertidas par strings, assim como acontece nos objetos). Você pode acessar esses valores como você faria com um objeto ou usando os métodos {{domxref("Storage.getItem()")}} e {{domxref("Storage.setItem()")}}. As três linhas seguintes definem o valor de `corDefinida` de maneiras diferentes, mas com o mesmo resultado: ```js -localStorage.corDefinida = '#a4509b'; -localStorage['corDefinida'] = '#a4509b'; -localStorage.setItem('corDefinida', '#a4509b'); +localStorage.corDefinida = "#a4509b"; +localStorage["corDefinida"] = "#a4509b"; +localStorage.setItem("corDefinida", "#a4509b"); ``` > **Nota:** Recomendamos que você utilize a API Web Storage (`setItem`, `getItem`, `removeItem`, `key`, `length`) para evitar as [armadilhas](http://www.2ality.com/2012/01/objects-as-maps.html) associadas ao uso de objetos literais como mapas de chave-valor. @@ -41,37 +41,37 @@ Here is a function that detects whether localStorage is both supported and avail ```js function storageAvailable(type) { - try { - var storage = window[type], - x = '__storage_test__'; - storage.setItem(x, x); - storage.removeItem(x); - return true; - } - catch(e) { - return e instanceof DOMException && ( - // everything except Firefox - e.code === 22 || - // Firefox - e.code === 1014 || - // test name field too, because code might not be present - // everything except Firefox - e.name === 'QuotaExceededError' || - // Firefox - e.name === 'NS_ERROR_DOM_QUOTA_REACHED') && - // acknowledge QuotaExceededError only if there's something already stored - storage.length !== 0; - } + try { + var storage = window[type], + x = "__storage_test__"; + storage.setItem(x, x); + storage.removeItem(x); + return true; + } catch (e) { + return ( + e instanceof DOMException && + // everything except Firefox + (e.code === 22 || + // Firefox + e.code === 1014 || + // test name field too, because code might not be present + // everything except Firefox + e.name === "QuotaExceededError" || + // Firefox + e.name === "NS_ERROR_DOM_QUOTA_REACHED") && + // acknowledge QuotaExceededError only if there's something already stored + storage.length !== 0 + ); + } } ``` And here is how you would use it: ```js -if (storageAvailable('localStorage')) { +if (storageAvailable("localStorage")) { // Yippee! We can use localStorage awesomeness -} -else { +} else { // Too bad, no localStorage for us } ``` @@ -97,7 +97,7 @@ We have also provided an [event output page](https://mdn.github.io/dom-examples/ To start with on [main.js](https://github.com/mdn/dom-examples/blob/master/web-storage/main.js), we will test whether the storage object has already been populated (i.e., the page was previously accessed): ```js -if(!localStorage.getItem('bgcolor')) { +if (!localStorage.getItem("bgcolor")) { populateStorage(); } else { setStyles(); @@ -114,17 +114,17 @@ As noted above, values can be retrieved from storage using {{domxref("Storage.ge ```js function setStyles() { - var currentColor = localStorage.getItem('bgcolor'); - var currentFont = localStorage.getItem('font'); - var currentImage = localStorage.getItem('image'); + var currentColor = localStorage.getItem("bgcolor"); + var currentFont = localStorage.getItem("font"); + var currentImage = localStorage.getItem("image"); - document.getElementById('bgcolor').value = currentColor; - document.getElementById('font').value = currentFont; - document.getElementById('image').value = currentImage; + document.getElementById("bgcolor").value = currentColor; + document.getElementById("font").value = currentFont; + document.getElementById("image").value = currentImage; - htmlElem.style.backgroundColor = '#' + currentColor; + htmlElem.style.backgroundColor = "#" + currentColor; pElem.style.fontFamily = currentFont; - imgElem.setAttribute('src', currentImage); + imgElem.setAttribute("src", currentImage); } ``` @@ -136,9 +136,9 @@ Here, the first three lines grab the values from local storage. Next, we set the ```js function populateStorage() { - localStorage.setItem('bgcolor', document.getElementById('bgcolor').value); - localStorage.setItem('font', document.getElementById('font').value); - localStorage.setItem('image', document.getElementById('image').value); + localStorage.setItem("bgcolor", document.getElementById("bgcolor").value); + localStorage.setItem("font", document.getElementById("font").value); + localStorage.setItem("image", document.getElementById("image").value); setStyles(); } @@ -161,12 +161,12 @@ The {{domxref("StorageEvent")}} is fired whenever a change is made to the {{domx On the events page (see [events.js](https://github.com/mdn/dom-examples/blob/master/web-storage/event.js)) the only JavaScript is as follows: ```js -window.addEventListener('storage', function(e) { - document.querySelector('.my-key').textContent = e.key; - document.querySelector('.my-old').textContent = e.oldValue; - document.querySelector('.my-new').textContent = e.newValue; - document.querySelector('.my-url').textContent = e.url; - document.querySelector('.my-storage').textContent = e.storageArea; +window.addEventListener("storage", function (e) { + document.querySelector(".my-key").textContent = e.key; + document.querySelector(".my-old").textContent = e.oldValue; + document.querySelector(".my-new").textContent = e.newValue; + document.querySelector(".my-url").textContent = e.url; + document.querySelector(".my-storage").textContent = e.storageArea; }); ``` @@ -179,11 +179,9 @@ Web Storage also provides a couple of simple methods to remove data. We don't us - {{domxref("Storage.removeItem()")}} takes a single argument — the key of the data item you want to remove — and removes it from the storage object for that domain. - {{domxref("Storage.clear()")}} takes no arguments, and simply empties the entire storage object for that domain. -## Specifications +## Especificações -| Specification | Status | Comment | -| ---------------------------------------------------------------------------- | -------------------------------- | ------- | -| {{SpecName('HTML WHATWG', 'webstorage.html#webstorage')}} | {{Spec2('HTML WHATWG')}} | | +{{Specifications}} ## Compatibilidade com navegadores diff --git a/files/pt-br/web/api/web_workers_api/index.md b/files/pt-br/web/api/web_workers_api/index.md index 1248bd0f81aa2d..35371a6613a764 100644 --- a/files/pt-br/web/api/web_workers_api/index.md +++ b/files/pt-br/web/api/web_workers_api/index.md @@ -52,10 +52,11 @@ Você pode descobrir mais informações sobre como essas demonstrações funcion ## Especificações -| Especificação | Status | Comentário | -| -------------------------------------------------------- | -------------------------------- | ---------------------------------------------------- | -| {{SpecName('HTML WHATWG', '#toc-workers')}} | {{Spec2('HTML WHATWG')}} | No change from {{SpecName("Web Workers")}}. | -| {{SpecName('Web Workers')}} | {{Spec2('Web Workers')}} | Initial definition. | +{{Specifications}} + +## Compatibilidade com navegadores + +{{Compat}} ## Veja também diff --git a/files/pt-br/web/api/webgl_api/index.md b/files/pt-br/web/api/webgl_api/index.md index 4a6ffc5952653c..b2e10aa77f094d 100644 --- a/files/pt-br/web/api/webgl_api/index.md +++ b/files/pt-br/web/api/webgl_api/index.md @@ -123,12 +123,7 @@ Veja também os posts [WebGL 2 lands in Firefox](https://hacks.mozilla.org/2017/ ## Especificações -| Especificação | Status | Comentário | -| ---------------------------------------- | ------------------------------------ | ----------------------------------------------------- | -| {{SpecName('WebGL')}} | {{Spec2('WebGL')}} | Definição inicial. Baseada em OpenGL ES 2.0 | -| {{SpecName('WebGL2')}} | {{Spec2('WebGL2')}} | Criada com base no WebGL 1. Baseada em OpenGL ES 3.0. | -| {{SpecName('OpenGL ES 2.0')}} | {{Spec2('OpenGL ES 2.0')}} | | -| {{SpecName('OpenGL ES 3.0')}} | {{Spec2('OpenGL ES 3.0')}} | | +{{Specifications}} ## Compatibilidade com navegadores diff --git a/files/pt-br/web/api/webgl_api/tutorial/adding_2d_content_to_a_webgl_context/index.md b/files/pt-br/web/api/webgl_api/tutorial/adding_2d_content_to_a_webgl_context/index.md index e3f9eca7218336..7b2e7aae728795 100644 --- a/files/pt-br/web/api/webgl_api/tutorial/adding_2d_content_to_a_webgl_context/index.md +++ b/files/pt-br/web/api/webgl_api/tutorial/adding_2d_content_to_a_webgl_context/index.md @@ -36,7 +36,10 @@ function initShaders() { gl.useProgram(shaderProgram); - vertexPositionAttribute = gl.getAttribLocation(shaderProgram, "aVertexPosition"); + vertexPositionAttribute = gl.getAttribLocation( + shaderProgram, + "aVertexPosition", + ); gl.enableVertexAttribArray(vertexPositionAttribute); } ``` @@ -74,14 +77,14 @@ function getShader(gl, id) { Uma vez que o elemento com o ID específico é encontrado, seu texto é lido na variável theSource. ```js - if (shaderScript.type == "x-shader/x-fragment") { - shader = gl.createShader(gl.FRAGMENT_SHADER); - } else if (shaderScript.type == "x-shader/x-vertex") { - shader = gl.createShader(gl.VERTEX_SHADER); - } else { - // Tipo de shader desconhecido - return null; - } +if (shaderScript.type == "x-shader/x-fragment") { + shader = gl.createShader(gl.FRAGMENT_SHADER); +} else if (shaderScript.type == "x-shader/x-vertex") { + shader = gl.createShader(gl.VERTEX_SHADER); +} else { + // Tipo de shader desconhecido + return null; +} ``` Uma vez que o código para o shader tenha sido lido, nós observamos o tipo MIME do objeto shader para determinar se é um sombreamento de vértice (MIME type "x-shader/x-vertex") ou um fragmento de shader (MIME type "x-shader/x-fragment"), em seguinda crie um tipo de shader apropriado para a partir do código fonte recuperado. @@ -144,17 +147,14 @@ A vértice (vertex) do shader define a posição e a forma de cada vértice. Before we can render our square, we need to create the buffer that contains its vertices. We'll do that using a function we call `initBuffers()`; as we explore more advanced WebGL concepts, this routine will be augmented to create more — and more complex — 3D objects. ```js -var horizAspect = 480.0/640.0; +var horizAspect = 480.0 / 640.0; function initBuffers() { squareVerticesBuffer = gl.createBuffer(); gl.bindBuffer(gl.ARRAY_BUFFER, squareVerticesBuffer); var vertices = [ - 1.0, 1.0, 0.0, - -1.0, 1.0, 0.0, - 1.0, -1.0, 0.0, - -1.0, -1.0, 0.0 + 1.0, 1.0, 0.0, -1.0, 1.0, 0.0, 1.0, -1.0, 0.0, -1.0, -1.0, 0.0, ]; gl.bufferData(gl.ARRAY_BUFFER, new Float32Array(vertices), gl.STATIC_DRAW); @@ -173,7 +173,7 @@ Once the shaders are established and the object constructed, we can actually ren function drawScene() { gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT); - perspectiveMatrix = makePerspective(45, 640.0/480.0, 0.1, 100.0); + perspectiveMatrix = makePerspective(45, 640.0 / 480.0, 0.1, 100.0); loadIdentity(); mvTranslate([-0.0, 0.0, -6.0]); @@ -216,7 +216,11 @@ function mvTranslate(v) { function setMatrixUniforms() { var pUniform = gl.getUniformLocation(shaderProgram, "uPMatrix"); - gl.uniformMatrix4fv(pUniform, false, new Float32Array(perspectiveMatrix.flatten())); + gl.uniformMatrix4fv( + pUniform, + false, + new Float32Array(perspectiveMatrix.flatten()), + ); var mvUniform = gl.getUniformLocation(shaderProgram, "uMVMatrix"); gl.uniformMatrix4fv(mvUniform, false, new Float32Array(mvMatrix.flatten())); diff --git a/files/pt-br/web/api/webgl_api/tutorial/getting_started_with_webgl/index.md b/files/pt-br/web/api/webgl_api/tutorial/getting_started_with_webgl/index.md index b5d2f07924fb21..23d120a95dfa01 100644 --- a/files/pt-br/web/api/webgl_api/tutorial/getting_started_with_webgl/index.md +++ b/files/pt-br/web/api/webgl_api/tutorial/getting_started_with_webgl/index.md @@ -38,7 +38,9 @@ function main() { // Só continua se o WebGL estiver disponível e funcionando if (!gl) { - alert("Incapaz de inicializar o WebGL.Seu navegador ou sua máquina não suporta."); + alert( + "Incapaz de inicializar o WebGL.Seu navegador ou sua máquina não suporta.", + ); return; } diff --git a/files/pt-br/web/api/webrtc_api/simple_rtcdatachannel_sample/index.md b/files/pt-br/web/api/webrtc_api/simple_rtcdatachannel_sample/index.md index ae83a941b57233..2d7b77d19a9dbb 100644 --- a/files/pt-br/web/api/webrtc_api/simple_rtcdatachannel_sample/index.md +++ b/files/pt-br/web/api/webrtc_api/simple_rtcdatachannel_sample/index.md @@ -18,7 +18,11 @@ Primeiro, vamos dar uma olhada rápida no [HTML que é necessário](https://gith - ``` @@ -26,15 +30,23 @@ Primeiro, vamos dar uma olhada rápida no [HTML que é necessário](https://gith Depois, há uma caixa que contém o campo de _input_ no qual o usuário pode digitar uma mensagem para transmitir, com um botão para enviar o texto digitado. Este {{HTMLElement("div")}} será o primeiro ponto (peer) no canal. ```html -
- - -
+
+ + +
``` Finalmente, há uma pequena caixa na qual vamos inserir as mensagens. Este bloco {{HTMLElement("div")}} será o segundo ponto do par (peer). @@ -57,17 +69,17 @@ Quando o script é executado, configuramos um {{event("load")}} ouvinte de event ```js function startup() { - connectButton = document.getElementById('connectButton'); - disconnectButton = document.getElementById('disconnectButton'); - sendButton = document.getElementById('sendButton'); - messageInputBox = document.getElementById('message'); - receiveBox = document.getElementById('receivebox'); + connectButton = document.getElementById("connectButton"); + disconnectButton = document.getElementById("disconnectButton"); + sendButton = document.getElementById("sendButton"); + messageInputBox = document.getElementById("message"); + receiveBox = document.getElementById("receivebox"); // Define os ouvintes de eventos para os elementos da interface do usuário - connectButton.addEventListener('click', connectPeers, false); - disconnectButton.addEventListener('click', disconnectPeers, false); - sendButton.addEventListener('click', sendMessage, false); + connectButton.addEventListener("click", connectPeers, false); + disconnectButton.addEventListener("click", disconnectPeers, false); + sendButton.addEventListener("click", sendMessage, false); } ``` @@ -109,13 +121,13 @@ O próximo passo é configurar cada conexão com os ouvintes do ICE que serão c > **Nota:** Em um cenário do mundo real em que os dois pares não estão sendo executados no mesmo contexto, o processo é um pouco mais complexo; Cada lado fornece, um de cada vez, um sugestão sobre como conectar (por exemplo, UDP, UDP com um relay, TCP, etc.) chamando {{domxref("RTCPeerConnection.addIceCandidate()")}}, e eles vão de um lado para outro até chegarem a um acordo. Mas aqui, acabamos de aceitar a primeira oferta de cada lado, uma vez que não existe uma rede real envolvida. ```js - localConnection.onicecandidate = e => !e.candidate - || remoteConnection.addIceCandidate(e.candidate) - .catch(handleAddCandidateError); +localConnection.onicecandidate = (e) => + !e.candidate || + remoteConnection.addIceCandidate(e.candidate).catch(handleAddCandidateError); - remoteConnection.onicecandidate = e => !e.candidate - || localConnection.addIceCandidate(e.candidate) - .catch(handleAddCandidateError); +remoteConnection.onicecandidate = (e) => + !e.candidate || + localConnection.addIceCandidate(e.candidate).catch(handleAddCandidateError); ``` Configuramos cada {{domxref("RTCPeerConnection")}} para ter um manipulador de eventos (event handler) para o evento {{event("icecandidate")}} . @@ -125,13 +137,18 @@ Configuramos cada {{domxref("RTCPeerConnection")}} para ter um manipulador de ev A última coisa que precisamos fazer para começar a conectar nossos pares é criar uma oferta de conexão. ```js - localConnection.createOffer() - .then(offer => localConnection.setLocalDescription(offer)) - .then(() => remoteConnection.setRemoteDescription(localConnection.localDescription)) - .then(() => remoteConnection.createAnswer()) - .then(answer => remoteConnection.setLocalDescription(answer)) - .then(() => localConnection.setRemoteDescription(remoteConnection.localDescription)) - .catch(handleCreateDescriptionError); +localConnection + .createOffer() + .then((offer) => localConnection.setLocalDescription(offer)) + .then(() => + remoteConnection.setRemoteDescription(localConnection.localDescription), + ) + .then(() => remoteConnection.createAnswer()) + .then((answer) => remoteConnection.setLocalDescription(answer)) + .then(() => + localConnection.setRemoteDescription(remoteConnection.localDescription), + ) + .catch(handleCreateDescriptionError); ``` Vamos passar por isto linha por linha e decifrar o que significa. @@ -151,13 +168,13 @@ Vamos passar por isto linha por linha e decifrar o que significa. Como cada lado da conexão peer-to-peer é conectado com sucesso, o evento correspondente {{domxref("RTCPeerConnection")}}'s {{event("icecandidate")}} é disparado. Esses manipuladores podem fazer o que for necessário, mas, neste exemplo, tudo o que precisamos fazer é atualizar a interface do usuário: ```js - function handleLocalAddCandidateSuccess() { - connectButton.disabled = true; - } +function handleLocalAddCandidateSuccess() { + connectButton.disabled = true; +} - function handleRemoteAddCandidateSuccess() { - disconnectButton.disabled = false; - } +function handleRemoteAddCandidateSuccess() { + disconnectButton.disabled = false; +} ``` A única coisa que fazemos aqui é desativar o botão "Conectar" quando o ponto local estiver conectado e ativar o botão "Desconectar" quando o ponto remoto se conectar. @@ -167,12 +184,12 @@ A única coisa que fazemos aqui é desativar o botão "Conectar" quando o ponto Uma vez que o {{domxref("RTCPeerConnection")}} é aberto, o evento {{event("datachannel")}} é enviado para o ponto remoto para completar o processo de abertura do canal de dados; Isso invoca nosso método `receiveChannelCallback()`, que se parece com isso: ```js - function receiveChannelCallback(event) { - receiveChannel = event.channel; - receiveChannel.onmessage = handleReceiveMessage; - receiveChannel.onopen = handleReceiveChannelStatusChange; - receiveChannel.onclose = handleReceiveChannelStatusChange; - } +function receiveChannelCallback(event) { + receiveChannel = event.channel; + receiveChannel.onmessage = handleReceiveMessage; + receiveChannel.onopen = handleReceiveChannelStatusChange; + receiveChannel.onclose = handleReceiveChannelStatusChange; +} ``` O evento{{event("datachannel")}} inclui, em sua propriedade de canal, uma referência a um {{domxref("RTCDataChannel")}} Representando o ponto remoto do canal. Isso é salvo, e nós configuramos, no canal, ouvintes de eventos para os eventos que queremos manipular. Uma vez feito isso, nosso método `handleReceiveMessage()` Será chamado cada vez que os dados são recebidos pelo ponto remoto, e o método `handleReceiveChannelStatusChange()` será chamado sempre que mudar o estado da conexão do canal, para que possamos reagir quando o canal estiver totalmente aberto e quando ele for fechado. @@ -184,24 +201,24 @@ Ambos nossos pontos locais e remotos usam um único método para lidar com event Quando o ponto local experimenta um evento aberto ou fechado, o método`handleSendChannelStatusChange()` é chamado: ```js - function handleSendChannelStatusChange(event) { - if (sendChannel) { - var state = sendChannel.readyState; - - if (state === "open") { - messageInputBox.disabled = false; - messageInputBox.focus(); - sendButton.disabled = false; - disconnectButton.disabled = false; - connectButton.disabled = true; - } else { - messageInputBox.disabled = true; - sendButton.disabled = true; - connectButton.disabled = false; - disconnectButton.disabled = true; - } +function handleSendChannelStatusChange(event) { + if (sendChannel) { + var state = sendChannel.readyState; + + if (state === "open") { + messageInputBox.disabled = false; + messageInputBox.focus(); + sendButton.disabled = false; + disconnectButton.disabled = false; + connectButton.disabled = true; + } else { + messageInputBox.disabled = true; + sendButton.disabled = true; + connectButton.disabled = false; + disconnectButton.disabled = true; } } +} ``` Se o estado do canal mudou para "open", isso indica que terminamos de estabelecer o link entre os dois pares. A interface do usuário é atualizada de forma correspondente: ativando o elemento de input de texto para a mensagem a ser enviada, focando este elemento de input para que o usuário comece imediatamente a digitar, habilitando os botões "Enviar" e "Desconectar", que são agora utilizáveis, E desativando o botão "Conectar", uma vez que não é necessário quando a conexão está aberta. @@ -211,12 +228,13 @@ Se o estado do canal mudou para "closed", ocorre o conjunto oposto de ações: a Nosso exemplo de par remoto, por outro lado, ignora os eventos de alteração de status, exceto para registrar o evento no console: ```js - function handleReceiveChannelStatusChange(event) { - if (receiveChannel) { - console.log("Receive channel's status has changed to " + - receiveChannel.readyState); - } +function handleReceiveChannelStatusChange(event) { + if (receiveChannel) { + console.log( + "Receive channel's status has changed to " + receiveChannel.readyState, + ); } +} ``` O método `handleReceiveChannelStatusChange()` recebe como parâmetro de entrada o evento que ocorreu; Este será um {{domxref("RTCDataChannelEvent")}}. @@ -226,13 +244,13 @@ O método `handleReceiveChannelStatusChange()` recebe como parâmetro de entrada Quando o usuário pressiona o botão "Enviar", o método sendMessage() que estabelecemos como o manipulador para o evento do botão {{event("click")}} é chamado. Esse método é bastante simples: ```js - function sendMessage() { - var message = messageInputBox.value; - sendChannel.send(message); +function sendMessage() { + var message = messageInputBox.value; + sendChannel.send(message); - messageInputBox.value = ""; - messageInputBox.focus(); - } + messageInputBox.value = ""; + messageInputBox.focus(); +} ``` Primeiro, o texto da mensagem é obtido dos atributos do elemento de _input_ [`value`](/pt-BR/docs/Web/HTML/Element/input#value) . Isso é enviado para o ponto remoto, ligando para {{domxref("RTCDataChannel.send", "sendChannel.send()")}}. E está tudo aí! O resto deste método é apenas um pouco de açúcar para experiência do usuário - a caixa de entrada é esvaziada e re-focada para que o usuário comece imediatamente a digitar outra mensagem. @@ -242,13 +260,13 @@ Primeiro, o texto da mensagem é obtido dos atributos do elemento de _input_ [`v Quando ocorre um evento de "mensagem" no canal remoto, nosso método `handleReceiveMessage()` é chamado como o manipulador de eventos. ```js - function handleReceiveMessage(event) { - var el = document.createElement("p"); - var txtNode = document.createTextNode(event.data); +function handleReceiveMessage(event) { + var el = document.createElement("p"); + var txtNode = document.createTextNode(event.data); - el.appendChild(txtNode); - receiveBox.appendChild(el); - } + el.appendChild(txtNode); + receiveBox.appendChild(el); +} ``` Este método simplesmente executa alguns injeções básicas {{Glossary("DOM")}} ; cria um novo {{HTMLElement("p")}} (paragraph) elemento, então cria um novo nó {{domxref("Text")}} contendo o texto da mensagem, que é recebido na propriedade de dados do evento. Este nó de texto é anexado como um filho do novo elemento, que é então inserido no bloco _receiveBox_, fazendo com que ele desenhe na janela do navegador. @@ -258,32 +276,31 @@ Este método simplesmente executa alguns injeções básicas {{Glossary("DOM")}} Quando o usuário clica no botão "Desconectar", o método `disconnectPeers()` previamente configurado como o manipulador desse botão é chamado. ```js - function disconnectPeers() { - - // Close the RTCDataChannels if they're open. +function disconnectPeers() { + // Close the RTCDataChannels if they're open. - sendChannel.close(); - receiveChannel.close(); + sendChannel.close(); + receiveChannel.close(); - // Close the RTCPeerConnections + // Close the RTCPeerConnections - localConnection.close(); - remoteConnection.close(); + localConnection.close(); + remoteConnection.close(); - sendChannel = null; - receiveChannel = null; - localConnection = null; - remoteConnection = null; + sendChannel = null; + receiveChannel = null; + localConnection = null; + remoteConnection = null; - // Update user interface elements + // Update user interface elements - connectButton.disabled = false; - disconnectButton.disabled = true; - sendButton.disabled = true; + connectButton.disabled = false; + disconnectButton.disabled = true; + sendButton.disabled = true; - messageInputBox.value = ""; - messageInputBox.disabled = true; - } + messageInputBox.value = ""; + messageInputBox.disabled = true; +} ``` Isso começa por fechar cada par {{domxref("RTCDataChannel")}}, então, de forma semelhante, cada um {{domxref("RTCPeerConnection")}}. Então, todas as referências salvas desses objetos são definidas como null para evitar a reutilização acidental, e a interface do usuário é atualizada para refletir o fato de que a conexão foi fechada. diff --git a/files/pt-br/web/api/websocket/index.md b/files/pt-br/web/api/websocket/index.md index b290ce7d039365..6e5efb05c1292d 100644 --- a/files/pt-br/web/api/websocket/index.md +++ b/files/pt-br/web/api/websocket/index.md @@ -39,17 +39,17 @@ O construtor pode lançar exceções: ## Atributos -| Attributo | Tipo | Descrição | -| ---------------- | ------------------------------------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `binaryType` | {{DOMXref("DOMString")}} | Uma string indica o tipo de dado binário que está sendo transmitido pela conexão. Este deve ser tanto "blob" se o objeto DOM {{domxref("Blob")}} estiver sendo usado ou "arraybuffer" se os objetos {{jsxref("ArrayBuffer")}} estiver sendo usada | -| `bufferedAmount` | `unsigned long` | O número de bites de dados que tem sid consultado usando chamadas para [send](#send) mas não ainda para a rede.Estes valor reseta para zero uma vez que todos os dados tem sido mandados.Este valor não reseta para zero quando a conexão está fechada, se você continuar chamando [send](#send), isto continuará escalando. **Leitura online** | +| Attributo | Tipo | Descrição | +| ---------------- | ---------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `binaryType` | {{DOMXref("DOMString")}} | Uma string indica o tipo de dado binário que está sendo transmitido pela conexão. Este deve ser tanto "blob" se o objeto DOM {{domxref("Blob")}} estiver sendo usado ou "arraybuffer" se os objetos {{jsxref("ArrayBuffer")}} estiver sendo usada | +| `bufferedAmount` | `unsigned long` | O número de bites de dados que tem sid consultado usando chamadas para [send](#send) mas não ainda para a rede.Estes valor reseta para zero uma vez que todos os dados tem sido mandados.Este valor não reseta para zero quando a conexão está fechada, se você continuar chamando [send](#send), isto continuará escalando. **Leitura online** | | `extensions` | {{DOMXref("DOMString")}} | As extensões selecionadas pelo servidor. Este é atualmente apenas a string vazia ou uma lista de extensões negociadas pela conexão. | -| `onclose` | {{domxref("EventListener")}} | Um event listener para ser chamado quando o `readyState` da conexão do WebSocket mudar para `CLOSED`. O listener recebe um [`CloseEvent`](/pt-BR/docs/Web/API/CloseEvent) "close". | +| `onclose` | {{domxref("EventListener")}} | Um event listener para ser chamado quando o `readyState` da conexão do WebSocket mudar para `CLOSED`. O listener recebe um [`CloseEvent`](/pt-BR/docs/Web/API/CloseEvent) "close". | | `onerror` | {{domxref("EventListener")}} | Um event listener para ser chamado quando ocorrer um erro. Este é um evento simples chamado "erro". | | `onmessage` | {{domxref("EventListener")}} | Um event listener para ser chamado quando uma mensagem é recebida do servidor. O listener recebe um [`MessageEvent`](/pt-BR/docs/Web/API/MessageEvent) "message". | -| `onopen` | {{domxref("EventListener")}} | Um event listener para ser chamado quando o `readyState` da conexão do WebSocket mudar para `OPEN`, isso indica que a conexão está pronta para enviar e receber dados. O evento é simples, com o nome "open". | +| `onopen` | {{domxref("EventListener")}} | Um event listener para ser chamado quando o `readyState` da conexão do WebSocket mudar para `OPEN`, isso indica que a conexão está pronta para enviar e receber dados. O evento é simples, com o nome "open". | | `protocol` | {{DOMXref("DOMString")}} | Uma sequência de caracteres que indica o nome do sub-protocolo selecionado pelo servidor, este será um dos parâmetros especificados no `protocolo` ao criar o objeto WebSocket. | -| `readyState` | `unsigned short` | O estado atual da conexão, este é um dos [Ready state constants](#ready_state_constants). **Apenas leitura.** | +| `readyState` | `unsigned short` | O estado atual da conexão, este é um dos [Ready state constants](#ready_state_constants). **Apenas leitura.** | | `url` | {{DOMXref("DOMString")}} | O URL resolvido pelo construtor. Este é sempre um URL absoluto. **Apenas leitura.** | ## Constantes @@ -129,15 +129,13 @@ void send( > > `A partir de Gecko 11.0, o suporte para {{jsxref ("ArrayBuffer")}} está implementado, mas não {{domxref("Blob")}} tipos de dados.` -## `Especificações` +## Especificações -| `Especificações` | `Status` | `Comentário` | -| ------------------------------------------------------------------------------------------ | ---------------------------------- | ------------------- | -| `{{SpecName("Websockets", "#the-websocket-interface", "WebSocket")}}` | `{{Spec2("Websockets")}}` | `Definição inicial` | +{{Specifications}} -## `Navegador Compatível` +## Compatibilidade com navegadores -{{Compat("api.WebSocket")}} +{{Compat}} ## `Veja também` diff --git a/files/pt-br/web/api/websockets_api/writing_websocket_client_applications/index.md b/files/pt-br/web/api/websockets_api/writing_websocket_client_applications/index.md index 0ab8887d9a9cb7..0e82148f51fe50 100644 --- a/files/pt-br/web/api/websockets_api/writing_websocket_client_applications/index.md +++ b/files/pt-br/web/api/websockets_api/writing_websocket_client_applications/index.md @@ -41,7 +41,10 @@ O browser pode exibir uma descrição de erro mais detalhada na saída do consol Neste simples exemplo, criaremos um novo WebSocket, conectando ao servidor em `ws://www.example.com/socketserver`. Neste exemplo utilizaremos um protocolo customizado denominado "protocolOne", embora possa ser omitido. ```js -var exampleSocket = new WebSocket("ws://www.example.com/socketserver", "protocolOne"); +var exampleSocket = new WebSocket( + "ws://www.example.com/socketserver", + "protocolOne", +); ``` No retorno, `exampleSocket.readyState` está como `CONNECTING`. O `readyState` se tornará `OPEN` quando a conexão estiver pronta para transferir dados. @@ -49,7 +52,10 @@ No retorno, `exampleSocket.readyState` está como `CONNECTING`. O `readyState` s Se quiser abrir uma conexão e for flexível quanto aos protocolos suportados, você pode especificar um array de protocolos: ```js -var exampleSocket = new WebSocket("ws://www.example.com/socketserver", ["protocolOne", "protocolTwo"]); +var exampleSocket = new WebSocket("ws://www.example.com/socketserver", [ + "protocolOne", + "protocolTwo", +]); ``` Uma vez que a conexão for estabelecida (isso é, `readyState` está `OPEN`), `exampleSocket.protocol` informará qual protocolo o servidor selecionou. @@ -61,7 +67,9 @@ Nos exemplos acima, `ws` foi substituído por `http`, de forma similar `wss` sub Uma vez a conexão aberta, você pode iniciar a transmisão de dados ao servidor. Para tanto, chame o método [`send()`]( "en/WebSockets/WebSockets reference/WebSocket#send()") do `WebSocket` para cada mensagem que queira enviar: ```js -exampleSocket.send("Aqui vai algum texto que o servidor esteja aguardando urgentemente!"); +exampleSocket.send( + "Aqui vai algum texto que o servidor esteja aguardando urgentemente!", +); ``` Você pode enviar dados como uma string, {{ domxref("Blob") }}, ou um [`ArrayBuffer`](/pt-BR/JavaScript_typed_arrays/ArrayBuffer). @@ -72,7 +80,9 @@ Visto que estabelecer uma conexão funciona de forma assícrona e, consequenteme ```js exampleSocket.onopen = function (event) { - exampleSocket.send("Aqui vai algum texto que o servidor esteja aguardando urgentemente!"); + exampleSocket.send( + "Aqui vai algum texto que o servidor esteja aguardando urgentemente!", + ); }; ``` @@ -87,8 +97,8 @@ function sendText() { var msg = { type: "message", text: document.getElementById("text").value, - id: clientID, - date: Date.now() + id: clientID, + date: Date.now(), }; // Enviar o objeto msg como um JSON em formato de string. @@ -106,7 +116,7 @@ A API WebSockets é dirigida por [eventos](/pt-BR/docs/Web/Guide/Events/Overview ```js exampleSocket.onmessage = function (event) { console.log(event.data); -} +}; ``` ### Recebendo e interpretando objetos JSON @@ -120,30 +130,38 @@ Vamos considerar que a aplicação cliente de chat remete o envio de dados [Util O código que interpreta as mensagens de entrada se parecerá com esse: ```js -exampleSocket.onmessage = function(event) { +exampleSocket.onmessage = function (event) { var f = document.getElementById("chatbox").contentDocument; var text = ""; var msg = JSON.parse(event.data); var time = new Date(msg.date); var timeStr = time.toLocaleTimeString(); - switch(msg.type) { + switch (msg.type) { case "id": clientID = msg.id; setUsername(); break; case "username": - text = "User " + msg.name + " signed in at " + timeStr + "
"; + text = + "User " + + msg.name + + " signed in at " + + timeStr + + "
"; break; case "message": text = "(" + timeStr + ") " + msg.name + ": " + msg.text + "
"; break; case "rejectusername": - text = "Seu usuario foi configurado como " + msg.name + " porque o nome que você escolheu está em uso.
" + text = + "Seu usuario foi configurado como " + + msg.name + + " porque o nome que você escolheu está em uso.
"; break; case "userlist": var ul = ""; - for (i=0; i < msg.users.length; i++) { + for (i = 0; i < msg.users.length; i++) { ul += msg.users[i] + "
"; } document.getElementById("userlistbox").innerHTML = ul; diff --git a/files/pt-br/web/api/websockets_api/writing_websocket_server/index.md b/files/pt-br/web/api/websockets_api/writing_websocket_server/index.md index 1eb68e6549188c..7284da1aaaf83f 100644 --- a/files/pt-br/web/api/websockets_api/writing_websocket_server/index.md +++ b/files/pt-br/web/api/websockets_api/writing_websocket_server/index.md @@ -1,5 +1,5 @@ --- -title: 'Escrevendo um servidor WebSocket em C #' +title: "Escrevendo um servidor WebSocket em C #" slug: Web/API/WebSockets_API/Writing_WebSocket_server original_slug: WebSockets/Writing_WebSocket_server --- diff --git a/files/pt-br/web/api/webvr_api/index.md b/files/pt-br/web/api/webvr_api/index.md index 730537d388599a..152075e2cab75b 100644 --- a/files/pt-br/web/api/webvr_api/index.md +++ b/files/pt-br/web/api/webvr_api/index.md @@ -59,13 +59,11 @@ Você pode encontrar uma série de exemplos nesses repositórios Github: ## Especificações -| Specificação | Status | Comentario | -| ---------------------------- | ------------------------ | ------------------ | -| {{SpecName('WebVR')}} | {{Spec2('WebVR')}} | Initial definition | +{{Specifications}} ## Compatibilidade com navegadores -{{Compat("api.Navigator.getVRDisplays")}} +{{Compat}} ## Veja Também diff --git a/files/pt-br/web/api/webvr_api/using_the_webvr_api/index.md b/files/pt-br/web/api/webvr_api/using_the_webvr_api/index.md index 3674206c3f605e..474e9cda6f6d79 100644 --- a/files/pt-br/web/api/webvr_api/using_the_webvr_api/index.md +++ b/files/pt-br/web/api/webvr_api/using_the_webvr_api/index.md @@ -70,20 +70,20 @@ The first WebVR-related code you'll meet is this following block: var frameData = new VRFrameData(); var vrDisplay; -var btn = document.querySelector('.stop-start'); +var btn = document.querySelector(".stop-start"); var normalSceneFrame; var vrSceneFrame; -var poseStatsBtn = document.querySelector('.pose-stats'); -var poseStatsSection = document.querySelector('section'); -poseStatsSection.style.visibility = 'hidden'; // hide it initially +var poseStatsBtn = document.querySelector(".pose-stats"); +var poseStatsSection = document.querySelector("section"); +poseStatsSection.style.visibility = "hidden"; // hide it initially -var posStats = document.querySelector('.pos'); -var orientStats = document.querySelector('.orient'); -var linVelStats = document.querySelector('.lin-vel'); -var linAccStats = document.querySelector('.lin-acc'); -var angVelStats = document.querySelector('.ang-vel'); -var angAccStats = document.querySelector('.ang-acc'); +var posStats = document.querySelector(".pos"); +var orientStats = document.querySelector(".orient"); +var linVelStats = document.querySelector(".lin-vel"); +var linAccStats = document.querySelector(".lin-acc"); +var angVelStats = document.querySelector(".ang-vel"); +var angAccStats = document.querySelector(".ang-acc"); var poseStatsDisplayed = false; ``` @@ -121,11 +121,11 @@ function start() { Next, we start the process of actually rendering the scene onto the canvas, by setting the canvas to fill the entire browser viewport, and running the rendering loop (`drawScene()`) for the first time. This is the non-WebVR — normal — rendering loop. ```js - // draw the scene normally, without WebVR - for those who don't have it and want to see the scene in their browser +// draw the scene normally, without WebVR - for those who don't have it and want to see the scene in their browser - canvas.width = window.innerWidth; - canvas.height = window.innerHeight; - drawScene(); +canvas.width = window.innerWidth; +canvas.height = window.innerHeight; +drawScene(); ``` Now onto our first WebVR-specific code. First of all, we check to see if {{domxref("Navigator.getVRDisplays")}} exists — this is the entry point into the API, and therefore good basic feature detection for WebVR. You'll see at the end of the block (inside the `else` clause) that if this doesn't exist, we log a message to indicate that WebVR 1.1 isn't supported by the browser. @@ -179,21 +179,21 @@ With our presentation request successful, we now want to start setting up to ren We then do some simple math to calculate the total width of the VRDisplay rendering area based on the eye {{domxref("VREyeParameters.renderWidth")}} and {{domxref("VREyeParameters.renderHeight")}}. ```js - // Set the canvas size to the size of the vrDisplay viewport +// Set the canvas size to the size of the vrDisplay viewport - var leftEye = vrDisplay.getEyeParameters('left'); - var rightEye = vrDisplay.getEyeParameters('right'); +var leftEye = vrDisplay.getEyeParameters("left"); +var rightEye = vrDisplay.getEyeParameters("right"); - canvas.width = Math.max(leftEye.renderWidth, rightEye.renderWidth) * 2; - canvas.height = Math.max(leftEye.renderHeight, rightEye.renderHeight); +canvas.width = Math.max(leftEye.renderWidth, rightEye.renderWidth) * 2; +canvas.height = Math.max(leftEye.renderHeight, rightEye.renderHeight); ``` Next, we {{domxref("Window.cancelAnimationFrame()", "cancel the animation loop")}} previously set in motion by the {{domxref("Window.requestAnimationFrame()")}} call inside the `drawScene()` function, and instead invoke `drawVRScene()`. This function renders the same scene as before, but with some special WebVR magic going on. The loop inside here is maintained by WebVR's special {{domxref("VRDisplay.requestAnimationFrame")}} method. ```js - // stop the normal presentation, and start the vr presentation - window.cancelAnimationFrame(normalSceneFrame); - drawVRScene(); +// stop the normal presentation, and start the vr presentation +window.cancelAnimationFrame(normalSceneFrame); +drawVRScene(); ``` Finally, we update the button text so that the next time it is pressed, it will stop presentation to the VR display. @@ -255,39 +255,42 @@ Next, we call {{domxref("VRDisplay.getFrameData()")}}, passing it the name of th This has to be called on every frame so the rendered view is always up-to-date. ```js - // Populate frameData with the data of the next frame to display - vrDisplay.getFrameData(frameData); +// Populate frameData with the data of the next frame to display +vrDisplay.getFrameData(frameData); ``` Now we retrieve the current {{domxref("VRPose")}} from the {{domxref("VRFrameData.pose")}} property, store the position and orientation for use later on, and send the current pose to the pose stats box for display, if the `poseStatsDisplayed` variable is set to true. ```js - // You can get the position, orientation, etc. of the display from the current frame's pose +// You can get the position, orientation, etc. of the display from the current frame's pose - var curFramePose = frameData.pose; - var curPos = curFramePose.position; - var curOrient = curFramePose.orientation; - if(poseStatsDisplayed) { - displayPoseStats(curFramePose); - } +var curFramePose = frameData.pose; +var curPos = curFramePose.position; +var curOrient = curFramePose.orientation; +if (poseStatsDisplayed) { + displayPoseStats(curFramePose); +} ``` We now clear the canvas before we start drawing on it, so that the next frame is clearly seen, and we don't also see previous rendered frames: ```js - // Clear the canvas before we start drawing on it. +// Clear the canvas before we start drawing on it. - gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT); +gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT); ``` We now render the view for both the left and right eyes. First of all we need to create projection and view locations for use in the rendering. these are {{domxref("WebGLUniformLocation")}} objects, created using the {{domxref("WebGLRenderingContext.getUniformLocation()")}} method, passing it the shader program's identifier and an identifying name as parameters. ```js - // WebVR: Create the required projection and view matrix locations needed - // for passing into the uniformMatrix4fv methods below - - var projectionMatrixLocation = gl.getUniformLocation(shaderProgram, "projMatrix"); - var viewMatrixLocation = gl.getUniformLocation(shaderProgram, "viewMatrix"); +// WebVR: Create the required projection and view matrix locations needed +// for passing into the uniformMatrix4fv methods below + +var projectionMatrixLocation = gl.getUniformLocation( + shaderProgram, + "projMatrix", +); +var viewMatrixLocation = gl.getUniformLocation(shaderProgram, "viewMatrix"); ``` The next rendering step involves: @@ -297,21 +300,29 @@ The next rendering step involves: - Running the `drawGeometry()` function, which renders the actual scene — because of what we specified in the previous two steps, we will render it for the left eye only. ```js - // WebVR: Render the left eye’s view to the left half of the canvas - gl.viewport(0, 0, canvas.width * 0.5, canvas.height); - gl.uniformMatrix4fv(projectionMatrixLocation, false, frameData.leftProjectionMatrix); - gl.uniformMatrix4fv(viewMatrixLocation, false, frameData.leftViewMatrix); - drawGeometry(); +// WebVR: Render the left eye’s view to the left half of the canvas +gl.viewport(0, 0, canvas.width * 0.5, canvas.height); +gl.uniformMatrix4fv( + projectionMatrixLocation, + false, + frameData.leftProjectionMatrix, +); +gl.uniformMatrix4fv(viewMatrixLocation, false, frameData.leftViewMatrix); +drawGeometry(); ``` We now do exactly the same thing, but for the right eye: ```js - // WebVR: Render the right eye’s view to the right half of the canvas - gl.viewport(canvas.width * 0.5, 0, canvas.width * 0.5, canvas.height); - gl.uniformMatrix4fv(projectionMatrixLocation, false, frameData.rightProjectionMatrix); - gl.uniformMatrix4fv(viewMatrixLocation, false, frameData.rightViewMatrix); - drawGeometry(); +// WebVR: Render the right eye’s view to the right half of the canvas +gl.viewport(canvas.width * 0.5, 0, canvas.width * 0.5, canvas.height); +gl.uniformMatrix4fv( + projectionMatrixLocation, + false, + frameData.rightProjectionMatrix, +); +gl.uniformMatrix4fv(viewMatrixLocation, false, frameData.rightViewMatrix); +drawGeometry(); ``` Next we define our `drawGeometry()` function. Most of this is just general WebGL code required to draw our 3D cube. You'll see some WebVR-specific parts in the `mvTranslate()` and `mvRotate()` function calls — these pass matrices into the WebGL program that define the translation and rotation of the cube for the current frame @@ -321,75 +332,75 @@ You'll see that we are modifying these values by the position (`curPos`) and ori This is a quick and dirty way to use VR pose data, but it illustrates the basic principle. ```js - function drawGeometry() { - // Establish the perspective with which we want to view the - // scene. Our field of view is 45 degrees, with a width/height - // ratio of 640:480, and we only want to see objects between 0.1 units - // and 100 units away from the camera. +function drawGeometry() { + // Establish the perspective with which we want to view the + // scene. Our field of view is 45 degrees, with a width/height + // ratio of 640:480, and we only want to see objects between 0.1 units + // and 100 units away from the camera. - perspectiveMatrix = makePerspective(45, 640.0/480.0, 0.1, 100.0); + perspectiveMatrix = makePerspective(45, 640.0 / 480.0, 0.1, 100.0); - // Set the drawing position to the "identity" point, which is - // the center of the scene. + // Set the drawing position to the "identity" point, which is + // the center of the scene. - loadIdentity(); + loadIdentity(); - // Now move the drawing position a bit to where we want to start - // drawing the cube. + // Now move the drawing position a bit to where we want to start + // drawing the cube. - mvTranslate([ - 0.0 - (curPos[0] * 25) + (curOrient[1] * 25), - 5.0 - (curPos[1] * 25) - (curOrient[0] * 25), - -15.0 - (curPos[2] * 25) - ]); + mvTranslate([ + 0.0 - curPos[0] * 25 + curOrient[1] * 25, + 5.0 - curPos[1] * 25 - curOrient[0] * 25, + -15.0 - curPos[2] * 25, + ]); - // Save the current matrix, then rotate before we draw. + // Save the current matrix, then rotate before we draw. - mvPushMatrix(); - mvRotate(cubeRotation, [0.25, 0, 0.25 - curOrient[2] * 0.5]); + mvPushMatrix(); + mvRotate(cubeRotation, [0.25, 0, 0.25 - curOrient[2] * 0.5]); - // Draw the cube by binding the array buffer to the cube's vertices - // array, setting attributes, and pushing it to GL. + // Draw the cube by binding the array buffer to the cube's vertices + // array, setting attributes, and pushing it to GL. - gl.bindBuffer(gl.ARRAY_BUFFER, cubeVerticesBuffer); - gl.vertexAttribPointer(vertexPositionAttribute, 3, gl.FLOAT, false, 0, 0); + gl.bindBuffer(gl.ARRAY_BUFFER, cubeVerticesBuffer); + gl.vertexAttribPointer(vertexPositionAttribute, 3, gl.FLOAT, false, 0, 0); - // Set the texture coordinates attribute for the vertices. + // Set the texture coordinates attribute for the vertices. - gl.bindBuffer(gl.ARRAY_BUFFER, cubeVerticesTextureCoordBuffer); - gl.vertexAttribPointer(textureCoordAttribute, 2, gl.FLOAT, false, 0, 0); + gl.bindBuffer(gl.ARRAY_BUFFER, cubeVerticesTextureCoordBuffer); + gl.vertexAttribPointer(textureCoordAttribute, 2, gl.FLOAT, false, 0, 0); - // Specify the texture to map onto the faces. + // Specify the texture to map onto the faces. - gl.activeTexture(gl.TEXTURE0); - gl.bindTexture(gl.TEXTURE_2D, cubeTexture); - gl.uniform1i(gl.getUniformLocation(shaderProgram, "uSampler"), 0); + gl.activeTexture(gl.TEXTURE0); + gl.bindTexture(gl.TEXTURE_2D, cubeTexture); + gl.uniform1i(gl.getUniformLocation(shaderProgram, "uSampler"), 0); - // Draw the cube. + // Draw the cube. - gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, cubeVerticesIndexBuffer); - setMatrixUniforms(); - gl.drawElements(gl.TRIANGLES, 36, gl.UNSIGNED_SHORT, 0); + gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, cubeVerticesIndexBuffer); + setMatrixUniforms(); + gl.drawElements(gl.TRIANGLES, 36, gl.UNSIGNED_SHORT, 0); - // Restore the original matrix + // Restore the original matrix - mvPopMatrix(); - } + mvPopMatrix(); +} ``` The next bit of the code has nothing to do with WebVR — it just updates the rotation of the cube on each frame: ```js - // Update the rotation for the next draw, if it's time to do so. +// Update the rotation for the next draw, if it's time to do so. - var currentTime = (new Date).getTime(); - if (lastCubeUpdateTime) { - var delta = currentTime - lastCubeUpdateTime; +var currentTime = new Date().getTime(); +if (lastCubeUpdateTime) { + var delta = currentTime - lastCubeUpdateTime; - cubeRotation += (30 * delta) / 1000.0; - } + cubeRotation += (30 * delta) / 1000.0; +} - lastCubeUpdateTime = currentTime; +lastCubeUpdateTime = currentTime; ``` The last part of the rendering loop involves us calling {{domxref("VRDisplay.submitFrame()")}} — now all the work has been done and we've rendered the display on the {{htmlelement("canvas")}}, this method then submits the frame to the VR display so it is displayed on there as well. @@ -451,8 +462,14 @@ The WebVR spec features a number of events that are fired, allowing our app code To demonstrate how they work, our simple demo includes the following example: ```js -window.addEventListener('vrdisplaypresentchange', function(e) { - console.log('Display ' + e.display.displayId + ' presentation has changed. Reason given: ' + e.reason + '.'); +window.addEventListener("vrdisplaypresentchange", function (e) { + console.log( + "Display " + + e.display.displayId + + " presentation has changed. Reason given: " + + e.reason + + ".", + ); }); ``` diff --git a/files/pt-br/web/api/window/beforeunload_event/index.md b/files/pt-br/web/api/window/beforeunload_event/index.md index fa831e55584cad..204f48ed19164b 100644 --- a/files/pt-br/web/api/window/beforeunload_event/index.md +++ b/files/pt-br/web/api/window/beforeunload_event/index.md @@ -31,19 +31,19 @@ Quando uma _string_ é atribuída na propriedade `returnValue` do _Event_, uma c ## Propriedades -| Propriedade | Tipo | Descrição | -| ------------------------------------- | ------------------------------------ | ---------------------------------------------------------------------- | +| Propriedade | Tipo | Descrição | +| ------------------------------- | -------------------------- | ---------------------------------------------------------------------- | | `target` {{readOnlyInline}} | {{domxref("EventTarget")}} | O evento alvo (the topmost target in the DOM tree). | -| `type` {{readOnlyInline}} | {{domxref("DOMString")}} | O tipo de evento. | -| `bubbles` {{readOnlyInline}} | {{jsxref("Boolean")}} | O evento é normalmente _bubble_? | -| `cancelable` {{readOnlyInline}} | {{jsxref("Boolean")}} | É possível cancelar o evento? | -| `returnValue` | {{domxref("DOMString")}} | O valor de retorno do evento (a mensagem que será exibida ao usuário). | +| `type` {{readOnlyInline}} | {{domxref("DOMString")}} | O tipo de evento. | +| `bubbles` {{readOnlyInline}} | {{jsxref("Boolean")}} | O evento é normalmente _bubble_? | +| `cancelable` {{readOnlyInline}} | {{jsxref("Boolean")}} | É possível cancelar o evento? | +| `returnValue` | {{domxref("DOMString")}} | O valor de retorno do evento (a mensagem que será exibida ao usuário). | ## Exemplos ```js window.addEventListener("beforeunload", function (event) { - event.returnValue = "\o/"; + event.returnValue = "\\o/"; }); // equivalente a @@ -56,10 +56,10 @@ Navegadores baseados no WebKit não seguem a especificação para caixas de diá ```js window.addEventListener("beforeunload", function (e) { - var confirmationMessage = "\o/"; + var confirmationMessage = "\\o/"; - e.returnValue = confirmationMessage; // Gecko, Trident, Chrome 34+ - return confirmationMessage; // Gecko, WebKit, Chrome <34 + e.returnValue = confirmationMessage; // Gecko, Trident, Chrome 34+ + return confirmationMessage; // Gecko, WebKit, Chrome <34 }); ``` diff --git a/files/pt-br/web/api/window/blur_event/index.md b/files/pt-br/web/api/window/blur_event/index.md index 41281a9a298b59..ce048da13114da 100644 --- a/files/pt-br/web/api/window/blur_event/index.md +++ b/files/pt-br/web/api/window/blur_event/index.md @@ -24,46 +24,45 @@ element.onblur = function() { console.log("evento onblur detectado!"); }; ```html - - -exemplo de evento onblur - - - - - - - -
- -
- -

Clique no elemento acima para dá-lo focus, depois clique fora do elemento.
Recarregue a pagina através do NavBar.

- - + + exemplo de evento onblur + + + + + + + +
+ +
+ +

+ Clique no elemento acima para dá-lo focus, depois clique fora do + elemento.
+ Recarregue a pagina através do NavBar. +

+ ``` @@ -75,6 +74,8 @@ Em contraste cp, MSIE--O qual faz quase todos os elementos receberem o evento bl ## Especificações -| Especificação | Status | Comentário | -| -------------------------------------------------------------------------------------------- | -------------------------------- | ---------- | -| {{SpecName('HTML WHATWG','webappapis.html#handler-onblur','onblur')}} | {{Spec2('HTML WHATWG')}} | | +{{Specifications}} + +## Compatibilidade com navegadores + +{{Compat}} diff --git a/files/pt-br/web/api/window/closed/index.md b/files/pt-br/web/api/window/closed/index.md index 423d323dc72483..b66420c85cae2b 100644 --- a/files/pt-br/web/api/window/closed/index.md +++ b/files/pt-br/web/api/window/closed/index.md @@ -50,11 +50,15 @@ function refreshPopupWindow() { popupWindow.location.reload(true); } else { // Abra uma nova janela de popup - popupWindow = window.open("popup.html","dataWindow"); + popupWindow = window.open("popup.html", "dataWindow"); } } ``` -## Especificação +## Especificações -HTML5 +{{Specifications}} + +## Compatibilidade com navegadores + +{{Compat}} diff --git a/files/pt-br/web/api/window/domcontentloaded_event/index.md b/files/pt-br/web/api/window/domcontentloaded_event/index.md index 78c146e2eeaad4..12318cfe8c3014 100644 --- a/files/pt-br/web/api/window/domcontentloaded_event/index.md +++ b/files/pt-br/web/api/window/domcontentloaded_event/index.md @@ -29,12 +29,12 @@ Se você quer que o DOM seja analisado o mais rápido possível após uma requis ## Propriedades -| Property | Type | Description | -| ------------------------------------- | ------------------------------------ | ------------------------------------- | +| Property | Type | Description | +| ------------------------------- | -------------------------- | ------------------------------------- | | `target` {{readonlyInline}} | {{domxref("EventTarget")}} | Alvo do evento (O topo do DOM). | -| `type` {{readonlyInline}} | {{domxref("DOMString")}} | Tipo de evento | -| `bubbles` {{readonlyInline}} | {{jsxref("Boolean")}} | O evento é por padrão bubbles ou não. | -| `cancelable` {{readonlyInline}} | {{jsxref("Boolean")}} | O evento pode ser cancelado ou não. | +| `type` {{readonlyInline}} | {{domxref("DOMString")}} | Tipo de evento | +| `bubbles` {{readonlyInline}} | {{jsxref("Boolean")}} | O evento é por padrão bubbles ou não. | +| `cancelable` {{readonlyInline}} | {{jsxref("Boolean")}} | O evento pode ser cancelado ou não. | ## Exemplo @@ -42,7 +42,7 @@ Se você quer que o DOM seja analisado o mais rápido possível após uma requis ```html @@ -52,12 +52,11 @@ Se você quer que o DOM seja analisado o mais rápido possível após uma requis ```html ``` @@ -77,9 +76,13 @@ if (document.readyState === "loading") { // Ainda carregando } ``` +## Especificações + +{{Specifications}} + ## Compatibilidade com navegadores -{{Compat("api.Window.DOMContentLoaded_event")}} +{{Compat}} ## Eventos Relacionados diff --git a/files/pt-br/web/api/window/error_event/index.md b/files/pt-br/web/api/window/error_event/index.md index 72097a621c8254..c4e1b4b4005db2 100644 --- a/files/pt-br/web/api/window/error_event/index.md +++ b/files/pt-br/web/api/window/error_event/index.md @@ -47,13 +47,13 @@ Quando um erro de sintaxe**(?)** ocorre em um script, carregado de uma [origem d ```js window.onerror = function (msg, url, lineNo, columnNo, error) { - var string = msg.toLowerCase(); - var substring = "script error"; - if (string.indexOf(substring) > -1){ - alert('Script Error: See Browser Console for Detail'); - } else { - alert(msg, url, lineNo, columnNo, error); - } + var string = msg.toLowerCase(); + var substring = "script error"; + if (string.indexOf(substring) > -1) { + alert("Script Error: See Browser Console for Detail"); + } else { + alert(msg, url, lineNo, columnNo, error); + } return false; }; ``` @@ -62,15 +62,11 @@ Quando usamos a marcação HTML inline (` - window.addEventListener("load", function(event) { + window.addEventListener("load", function (event) { console.log("Todos os recursos terminaram o carregamento!"); }); diff --git a/files/pt-br/web/api/window/localstorage/index.md b/files/pt-br/web/api/window/localstorage/index.md index 64f7c9fffcbec3..b03e6c08c4d024 100644 --- a/files/pt-br/web/api/window/localstorage/index.md +++ b/files/pt-br/web/api/window/localstorage/index.md @@ -23,20 +23,18 @@ Objeto {{domxref("Storage")}}. O seguinte trecho acessa o objeto {{domxref("Storage")}} local do domínio atual e adiciona um item usando o {{domxref("Storage.setItem()")}}. ```js -localStorage.setItem('meuGato', 'Tom'); +localStorage.setItem("meuGato", "Tom"); ``` > **Nota:** **Nota: Por favor veja o artigo** [Using the Web Storage API](/pt-BR/docs/Web/API/Web_Storage_API/Using_the_Web_Storage_API) **para um exemplo completo.** ## Especificações -| Especificação | Status | Comentário | -| ------------------------------------------------------------------------------------ | -------------------------------- | ---------- | -| {{SpecName('Web Storage', '#dom-localstorage', 'localStorage')}} | {{Spec2('Web Storage')}} | | +{{Specifications}} -## Navegadores compatíveis +## Compatibilidade com navegadores -{{Compat("api.Window.localStorage")}} +{{Compat}} ## Veja também diff --git a/files/pt-br/web/api/window/location/index.md b/files/pt-br/web/api/window/location/index.md index e2917344e13896..a14a02ead2bc34 100644 --- a/files/pt-br/web/api/window/location/index.md +++ b/files/pt-br/web/api/window/location/index.md @@ -46,7 +46,7 @@ Considere o exemplo a seguir, que vai recarregar a página usando o método [`re ```js function reloadPageWithHash() { var initialPage = location.pathname; - location.replace('http://example.com/#' + initialPage); + location.replace("http://example.com/#" + initialPage); } ``` @@ -56,9 +56,19 @@ function reloadPageWithHash() { ```js function showLoc() { - var oLocation = location, aLog = ["Property (Typeof): Value", "location (" + (typeof oLocation) + "): " + oLocation ]; - for (var sProp in oLocation){ - aLog.push(sProp + " (" + (typeof oLocation[sProp]) + "): " + (oLocation[sProp] || "n/a")); + var oLocation = location, + aLog = [ + "Property (Typeof): Value", + "location (" + typeof oLocation + "): " + oLocation, + ]; + for (var sProp in oLocation) { + aLog.push( + sProp + + " (" + + typeof oLocation[sProp] + + "): " + + (oLocation[sProp] || "n/a"), + ); } alert(aLog.join("\n")); } @@ -69,7 +79,7 @@ function showLoc() { ### Exemplo #5: Enviando uma linha de dados para o servidor para modificar a propriedade search ```js -function sendData (sData) { +function sendData(sData) { location.search = sData; } @@ -83,89 +93,348 @@ A URL atual com "?Some%20data" anexada é enviada para o servidor (se nenhuma a ```html - - -MDN Exemplo - - - - - -

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nullam ultrices dolor ac dolor imperdiet ullamcorper. Suspendisse quam libero, luctus auctor mollis sed, malesuada condimentum magna. Quisque in ante tellus, in placerat est. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Donec a mi magna, quis mattis dolor. Etiam sit amet ligula quis urna auctor imperdiet nec faucibus ante. Mauris vel consectetur dolor. Nunc eget elit eget velit pulvinar fringilla consectetur aliquam purus. Curabitur convallis, justo posuere porta egestas, velit erat ornare tortor, non viverra justo diam eget arcu. Phasellus adipiscing fermentum nibh ac commodo. Nam turpis nunc, suscipit a hendrerit vitae, volutpat non ipsum.

-

Duis lobortis sapien quis nisl luctus porttitor. In tempor semper libero, eu tincidunt dolor eleifend sit amet. Ut nec velit in dolor tincidunt rhoncus non non diam. Morbi auctor ornare orci, non euismod felis gravida nec. Curabitur elementum nisi a eros rutrum nec blandit diam placerat. Aenean tincidunt risus ut nisi consectetur cursus. Ut vitae quam elit. Donec dignissim est in quam tempor consequat. Aliquam aliquam diam non felis convallis suscipit. Nulla facilisi. Donec lacus risus, dignissim et fringilla et, egestas vel eros. Duis malesuada accumsan dui, at fringilla mauris bibendum quis. Cras adipiscing ultricies fermentum. Praesent bibendum condimentum feugiat.

-

Go to bookmark #2 ]

-

Vivamus blandit massa ut metus mattis in fringilla lectus imperdiet. Proin ac ante a felis ornare vehicula. Fusce pellentesque lacus vitae eros convallis ut mollis magna pellentesque. Pellentesque placerat enim at lacus ultricies vitae facilisis nisi fringilla. In tincidunt tincidunt tincidunt. Nulla vitae tempor nisl. Etiam congue, elit vitae egestas mollis, ipsum nisi malesuada turpis, a volutpat arcu arcu id risus.

-

Nam faucibus, ligula eu fringilla pulvinar, lectus tellus iaculis nunc, vitae scelerisque metus leo non metus. Proin mattis lobortis lobortis. Quisque accumsan faucibus erat, vel varius tortor ultricies ac. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed nec libero nunc. Nullam tortor nunc, elementum a consectetur et, ultrices eu orci. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque a nisl eu sem vehicula egestas.

-

Aenean viverra varius mauris, sed elementum lacus interdum non. Phasellus sit amet lectus vitae eros egestas pellentesque fermentum eget magna. Quisque mauris nisl, gravida vitae placerat et, condimentum id metus. Nulla eu est dictum dolor pulvinar volutpat. Pellentesque vitae sollicitudin nunc. Donec neque magna, lobortis id egestas nec, sodales quis lectus. Fusce cursus sollicitudin porta. Suspendisse ut tortor in mauris tincidunt rhoncus. Maecenas tincidunt fermentum facilisis. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas.

-

Suspendisse turpis nisl, consectetur in lacinia ut, ornare vel mi. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Proin non lectus eu turpis vulputate cursus. Mauris interdum tincidunt erat id pharetra. Nullam in libero elit, sed consequat lectus. Morbi odio nisi, porta vitae molestie ut, gravida ut nunc. Ut non est dui, id ullamcorper orci. Praesent vel elementum felis. Maecenas ornare, dui quis auctor hendrerit, turpis sem ullamcorper odio, in auctor magna metus quis leo. Morbi at odio ante.

-

Curabitur est ipsum, porta ac viverra faucibus, eleifend sed eros. In sit amet vehicula tortor. Vestibulum viverra pellentesque erat a elementum. Integer commodo ultricies lorem, eget tincidunt risus viverra et. In enim turpis, porttitor ac ornare et, suscipit sit amet nisl. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Pellentesque vel ultrices nibh. Sed commodo aliquam aliquam. Nulla euismod, odio ut eleifend mollis, nisi dui gravida nibh, vitae laoreet turpis purus id ipsum. Donec convallis, velit non scelerisque bibendum, diam nulla auctor nunc, vel dictum risus ipsum sit amet est. Praesent ut nibh sit amet nibh congue pulvinar. Suspendisse dictum porttitor tempor.

-

Vestibulum dignissim erat vitae lectus auctor ac bibendum eros semper. Integer aliquet, leo non ornare faucibus, risus arcu tristique dolor, a aliquet massa mauris quis arcu. In porttitor, lectus ac semper egestas, ligula magna laoreet libero, eu commodo mauris odio id ante. In hac habitasse platea dictumst. In pretium erat diam, nec consequat eros. Praesent augue mi, consequat sed porttitor at, volutpat vitae eros. Sed pretium pharetra dapibus. Donec auctor interdum erat, lacinia molestie nibh commodo ut. Maecenas vestibulum vulputate felis, ut ullamcorper arcu faucibus in. Curabitur id arcu est. In semper mollis lorem at pellentesque. Sed lectus nisl, vestibulum id scelerisque eu, feugiat et tortor. Pellentesque porttitor facilisis ultricies.

-

Go to bookmark #1 | Go to bookmark #1 without using location.hash | Go to bookmark #3 ]

-

Phasellus tempus fringilla nunc, eget sagittis orci molestie vel. Nulla sollicitudin diam non quam iaculis ac porta justo venenatis. Quisque tellus urna, molestie vitae egestas sit amet, suscipit sed sem. Quisque nec lorem eu velit faucibus tristique ut ut dolor. Cras eu tortor ut libero placerat venenatis ut ut massa. Sed quis libero augue, et consequat libero. Morbi rutrum augue sed turpis elementum sed luctus nisl molestie. Aenean vitae purus risus, a semper nisl. Pellentesque malesuada, est id sagittis consequat, libero mauris tincidunt tellus, eu sagittis arcu purus rutrum eros. Quisque eget eleifend mi. Duis pharetra mi ac eros mattis lacinia rutrum ipsum varius.

-

Fusce cursus pulvinar aliquam. Duis justo enim, ornare vitae elementum sed, porta a quam. Aliquam eu enim eu libero mollis tempus. Morbi ornare aliquam posuere. Proin faucibus luctus libero, sed ultrices lorem sagittis et. Vestibulum malesuada, ante nec molestie vehicula, quam diam mollis ipsum, rhoncus posuere mauris lectus in eros. Nullam feugiat ultrices augue, ac sodales sem mollis in.

-

Here is the bookmark #3

-

Proin vitae sem non lorem pellentesque molestie. Nam tempus massa et turpis placerat sit amet sollicitudin orci sodales. Pellentesque enim enim, sagittis a lobortis ut, tempus sed arcu. Aliquam augue turpis, varius vel bibendum ut, aliquam at diam. Nam lobortis, dui eu hendrerit pellentesque, sem neque porttitor erat, non dapibus velit lectus in metus. Vestibulum sit amet felis enim. In quis est vitae nunc malesuada consequat nec nec sapien. Suspendisse aliquam massa placerat dui lacinia luctus sed vitae risus. Fusce tempus, neque id ultrices volutpat, mi urna auctor arcu, viverra semper libero sem vel enim. Mauris dictum, elit non placerat malesuada, libero elit euismod nibh, nec posuere massa arcu eu risus. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer urna velit, dapibus eget varius feugiat, pellentesque sit amet ligula. Maecenas nulla nisl, facilisis eu egestas scelerisque, mollis eget metus. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Morbi sed congue mi.

-

Fusce metus velit, pharetra at vestibulum nec, facilisis porttitor mi. Curabitur ligula sapien, fermentum vel porttitor id, rutrum sit amet magna. Sed sit amet sollicitudin turpis. Aenean luctus rhoncus dolor, et pulvinar ante egestas et. Donec ac massa orci, quis dapibus augue. Vivamus consectetur auctor pellentesque. Praesent vestibulum tincidunt ante sed consectetur. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Fusce purus metus, imperdiet vitae iaculis convallis, bibendum vitae turpis.

-

Fusce aliquet molestie dolor, in ornare dui sodales nec. In molestie sollicitudin felis a porta. Mauris nec orci sit amet orci blandit tristique congue nec nunc. Praesent et tellus sollicitudin mauris accumsan fringilla. Morbi sodales, justo eu sollicitudin lacinia, lectus sapien ullamcorper eros, quis molestie urna elit bibendum risus. Proin eget tincidunt quam. Nam luctus commodo mauris, eu posuere nunc luctus non. Nulla facilisi. Vivamus eget leo rhoncus quam accumsan fringilla. Aliquam sit amet lorem est. Nullam vel tellus nibh, id imperdiet orci. Integer egestas leo eu turpis blandit scelerisque.

-

Etiam in blandit tellus. Integer sed varius quam. Vestibulum dapibus mi gravida arcu viverra blandit. Praesent tristique augue id sem adipiscing pellentesque. Sed sollicitudin, leo sed interdum elementum, nisi ante condimentum leo, eget ornare libero diam semper quam. Vivamus augue urna, porta eget ultrices et, dapibus ut ligula. Ut laoreet consequat faucibus. Praesent at lectus ut lectus malesuada mollis. Nam interdum adipiscing eros, nec sodales mi porta nec. Proin et quam vitae sem interdum aliquet. Proin vel odio at lacus vehicula aliquet.

-

Etiam placerat dui ut sem ornare vel vestibulum augue mattis. Sed semper malesuada mi, eu bibendum lacus lobortis nec. Etiam fringilla elementum risus, eget consequat urna laoreet nec. Etiam mollis quam non sem convallis vel consectetur lectus ullamcorper. Aenean mattis lacus quis ligula mattis eget vestibulum diam hendrerit. In non placerat mauris. Praesent faucibus nunc quis eros sagittis viverra. In hac habitasse platea dictumst. Suspendisse eget nisl erat, ac molestie massa. Praesent mollis vestibulum tincidunt. Fusce suscipit laoreet malesuada. Aliquam erat volutpat. Aliquam dictum elementum rhoncus. Praesent in est massa, pulvinar sodales nunc. Pellentesque gravida euismod mi ac convallis.

-

Mauris vel odio vel nulla facilisis lacinia. Aliquam ultrices est at leo blandit tincidunt. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Suspendisse porttitor adipiscing facilisis. Duis cursus quam iaculis augue interdum porttitor. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Duis vulputate magna ac metus pretium condimentum. In tempus, est eget vestibulum blandit, velit massa dignissim nisl, ut scelerisque lorem neque vel velit. Maecenas fermentum commodo viverra. Curabitur a nibh non velit aliquam cursus. Integer semper condimentum tortor a pellentesque. Pellentesque semper, nisl id porttitor vehicula, sem dui feugiat lacus, vitae consequat augue urna vel odio.

-

Vestibulum id neque nec turpis iaculis pulvinar et a massa. Vestibulum sed nibh vitae arcu eleifend egestas. Mauris fermentum ultrices blandit. Suspendisse vitae lorem libero. Aenean et pellentesque tellus. Morbi quis neque orci, eu dignissim dui. Fusce sollicitudin mauris ac arcu vestibulum imperdiet. Proin ultricies nisl sit amet enim imperdiet eu ornare dui tempus. Maecenas lobortis nisi a tortor vestibulum vel eleifend tellus vestibulum. Donec metus sapien, hendrerit a fermentum id, dictum quis libero.

-

Pellentesque a lorem nulla, in tempor justo. Duis odio nisl, dignissim sed consequat sit amet, hendrerit ac neque. Nunc ac augue nec massa tempor rhoncus. Nam feugiat, tellus a varius euismod, justo nisl faucibus velit, ut vulputate justo massa eu nibh. Sed bibendum urna quis magna facilisis in accumsan dolor malesuada. Morbi sit amet nunc risus, in faucibus sem. Nullam sollicitudin magna sed sem mollis id commodo libero condimentum. Duis eu massa et lacus semper molestie ut adipiscing sem.

-

Sed id nulla mi, eget suscipit eros. Aliquam tempus molestie rutrum. In quis varius elit. Nullam dignissim neque nec velit vulputate porttitor. Mauris ac ligula sit amet elit fermentum rhoncus. In tellus urna, pulvinar quis condimentum ut, porta nec justo. In hac habitasse platea dictumst. Proin volutpat elit id quam molestie ac commodo lacus sagittis. Quisque placerat, augue tempor placerat pulvinar, nisi nisi venenatis urna, eget convallis eros velit quis magna. Suspendisse volutpat iaculis quam, ut tristique lacus luctus quis.

-

Nullam commodo suscipit lacus non aliquet. Phasellus ac nisl lorem, sed facilisis ligula. Nam cursus lobortis placerat. Sed dui nisi, elementum eu sodales ac, placerat sit amet mauris. Pellentesque dapibus tellus ut ipsum aliquam eu auctor dui vehicula. Quisque ultrices laoreet erat, at ultrices tortor sodales non. Sed venenatis luctus magna, ultricies ultricies nunc fringilla eget. Praesent scelerisque urna vitae nibh tristique varius consequat neque luctus. Integer ornare, erat a porta tempus, velit justo fermentum elit, a fermentum metus nisi eu ipsum. Vivamus eget augue vel dui viverra adipiscing congue ut massa. Praesent vitae eros erat, pulvinar laoreet magna. Maecenas vestibulum mollis nunc in posuere. Pellentesque sit amet metus a turpis lobortis tempor eu vel tortor. Cras sodales eleifend interdum.

- + + + MDN Exemplo + + + + + +

+ Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nullam ultrices + dolor ac dolor imperdiet ullamcorper. Suspendisse quam libero, luctus + auctor mollis sed, malesuada condimentum magna. Quisque in ante tellus, in + placerat est. Pellentesque habitant morbi tristique senectus et netus et + malesuada fames ac turpis egestas. Donec a mi magna, quis mattis dolor. + Etiam sit amet ligula quis urna auctor imperdiet nec faucibus ante. Mauris + vel consectetur dolor. Nunc eget elit eget velit pulvinar fringilla + consectetur aliquam purus. Curabitur convallis, justo posuere porta + egestas, velit erat ornare tortor, non viverra justo diam eget arcu. + Phasellus adipiscing fermentum nibh ac commodo. Nam turpis nunc, suscipit + a hendrerit vitae, volutpat non ipsum. +

+

+ Duis lobortis sapien quis nisl luctus porttitor. In tempor semper libero, + eu tincidunt dolor eleifend sit amet. Ut nec velit in dolor tincidunt + rhoncus non non diam. Morbi auctor ornare orci, non euismod felis gravida + nec. Curabitur elementum nisi a eros rutrum nec blandit diam placerat. + Aenean tincidunt risus ut nisi consectetur cursus. Ut vitae quam elit. + Donec dignissim est in quam tempor consequat. Aliquam aliquam diam non + felis convallis suscipit. Nulla facilisi. Donec lacus risus, dignissim et + fringilla et, egestas vel eros. Duis malesuada accumsan dui, at fringilla + mauris bibendum quis. Cras adipiscing ultricies fermentum. Praesent + bibendum condimentum feugiat. +

+

+ [ Go to bookmark #2 ] +

+

+ Vivamus blandit massa ut metus mattis in fringilla lectus imperdiet. Proin + ac ante a felis ornare vehicula. Fusce pellentesque lacus vitae eros + convallis ut mollis magna pellentesque. Pellentesque placerat enim at + lacus ultricies vitae facilisis nisi fringilla. In tincidunt tincidunt + tincidunt. Nulla vitae tempor nisl. Etiam congue, elit vitae egestas + mollis, ipsum nisi malesuada turpis, a volutpat arcu arcu id risus. +

+

+ Nam faucibus, ligula eu fringilla pulvinar, lectus tellus iaculis nunc, + vitae scelerisque metus leo non metus. Proin mattis lobortis lobortis. + Quisque accumsan faucibus erat, vel varius tortor ultricies ac. Lorem + ipsum dolor sit amet, consectetur adipiscing elit. Sed nec libero nunc. + Nullam tortor nunc, elementum a consectetur et, ultrices eu orci. Lorem + ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque a nisl eu + sem vehicula egestas. +

+

+ Aenean viverra varius mauris, sed elementum lacus interdum non. Phasellus + sit amet lectus vitae eros egestas pellentesque fermentum eget magna. + Quisque mauris nisl, gravida vitae placerat et, condimentum id metus. + Nulla eu est dictum dolor pulvinar volutpat. Pellentesque vitae + sollicitudin nunc. Donec neque magna, lobortis id egestas nec, sodales + quis lectus. Fusce cursus sollicitudin porta. Suspendisse ut tortor in + mauris tincidunt rhoncus. Maecenas tincidunt fermentum facilisis. + Pellentesque habitant morbi tristique senectus et netus et malesuada fames + ac turpis egestas. +

+

+ Suspendisse turpis nisl, consectetur in lacinia ut, ornare vel mi. Lorem + ipsum dolor sit amet, consectetur adipiscing elit. Proin non lectus eu + turpis vulputate cursus. Mauris interdum tincidunt erat id pharetra. + Nullam in libero elit, sed consequat lectus. Morbi odio nisi, porta vitae + molestie ut, gravida ut nunc. Ut non est dui, id ullamcorper orci. + Praesent vel elementum felis. Maecenas ornare, dui quis auctor hendrerit, + turpis sem ullamcorper odio, in auctor magna metus quis leo. Morbi at odio + ante. +

+

+ Curabitur est ipsum, porta ac viverra faucibus, eleifend sed eros. In sit + amet vehicula tortor. Vestibulum viverra pellentesque erat a elementum. + Integer commodo ultricies lorem, eget tincidunt risus viverra et. In enim + turpis, porttitor ac ornare et, suscipit sit amet nisl. Vestibulum ante + ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; + Pellentesque vel ultrices nibh. Sed commodo aliquam aliquam. Nulla + euismod, odio ut eleifend mollis, nisi dui gravida nibh, vitae laoreet + turpis purus id ipsum. Donec convallis, velit non scelerisque bibendum, + diam nulla auctor nunc, vel dictum risus ipsum sit amet est. Praesent ut + nibh sit amet nibh congue pulvinar. Suspendisse dictum porttitor tempor. +

+

+ Vestibulum dignissim erat vitae lectus auctor ac bibendum eros semper. + Integer aliquet, leo non ornare faucibus, risus arcu tristique dolor, a + aliquet massa mauris quis arcu. In porttitor, lectus ac semper egestas, + ligula magna laoreet libero, eu commodo mauris odio id ante. In hac + habitasse platea dictumst. In pretium erat diam, nec consequat eros. + Praesent augue mi, consequat sed porttitor at, volutpat vitae eros. Sed + pretium pharetra dapibus. Donec auctor interdum erat, lacinia molestie + nibh commodo ut. Maecenas vestibulum vulputate felis, ut ullamcorper arcu + faucibus in. Curabitur id arcu est. In semper mollis lorem at + pellentesque. Sed lectus nisl, vestibulum id scelerisque eu, feugiat et + tortor. Pellentesque porttitor facilisis ultricies. +

+

+ [ Go to bookmark #1 + | + Go to bookmark #1 without using location.hash + | + Go to bookmark #3 ] +

+

+ Phasellus tempus fringilla nunc, eget sagittis orci molestie vel. Nulla + sollicitudin diam non quam iaculis ac porta justo venenatis. Quisque + tellus urna, molestie vitae egestas sit amet, suscipit sed sem. Quisque + nec lorem eu velit faucibus tristique ut ut dolor. Cras eu tortor ut + libero placerat venenatis ut ut massa. Sed quis libero augue, et consequat + libero. Morbi rutrum augue sed turpis elementum sed luctus nisl molestie. + Aenean vitae purus risus, a semper nisl. Pellentesque malesuada, est id + sagittis consequat, libero mauris tincidunt tellus, eu sagittis arcu purus + rutrum eros. Quisque eget eleifend mi. Duis pharetra mi ac eros mattis + lacinia rutrum ipsum varius. +

+

+ Fusce cursus pulvinar aliquam. Duis justo enim, ornare vitae elementum + sed, porta a quam. Aliquam eu enim eu libero mollis tempus. Morbi ornare + aliquam posuere. Proin faucibus luctus libero, sed ultrices lorem sagittis + et. Vestibulum malesuada, ante nec molestie vehicula, quam diam mollis + ipsum, rhoncus posuere mauris lectus in eros. Nullam feugiat ultrices + augue, ac sodales sem mollis in. +

+

Here is the bookmark #3

+

+ Proin vitae sem non lorem pellentesque molestie. Nam tempus massa et + turpis placerat sit amet sollicitudin orci sodales. Pellentesque enim + enim, sagittis a lobortis ut, tempus sed arcu. Aliquam augue turpis, + varius vel bibendum ut, aliquam at diam. Nam lobortis, dui eu hendrerit + pellentesque, sem neque porttitor erat, non dapibus velit lectus in metus. + Vestibulum sit amet felis enim. In quis est vitae nunc malesuada consequat + nec nec sapien. Suspendisse aliquam massa placerat dui lacinia luctus sed + vitae risus. Fusce tempus, neque id ultrices volutpat, mi urna auctor + arcu, viverra semper libero sem vel enim. Mauris dictum, elit non placerat + malesuada, libero elit euismod nibh, nec posuere massa arcu eu risus. + Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer urna + velit, dapibus eget varius feugiat, pellentesque sit amet ligula. Maecenas + nulla nisl, facilisis eu egestas scelerisque, mollis eget metus. + Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere + cubilia Curae; Morbi sed congue mi. +

+

+ Fusce metus velit, pharetra at vestibulum nec, facilisis porttitor mi. + Curabitur ligula sapien, fermentum vel porttitor id, rutrum sit amet + magna. Sed sit amet sollicitudin turpis. Aenean luctus rhoncus dolor, et + pulvinar ante egestas et. Donec ac massa orci, quis dapibus augue. Vivamus + consectetur auctor pellentesque. Praesent vestibulum tincidunt ante sed + consectetur. Cum sociis natoque penatibus et magnis dis parturient montes, + nascetur ridiculus mus. Fusce purus metus, imperdiet vitae iaculis + convallis, bibendum vitae turpis. +

+

+ Fusce aliquet molestie dolor, in ornare dui sodales nec. In molestie + sollicitudin felis a porta. Mauris nec orci sit amet orci blandit + tristique congue nec nunc. Praesent et tellus sollicitudin mauris accumsan + fringilla. Morbi sodales, justo eu sollicitudin lacinia, lectus sapien + ullamcorper eros, quis molestie urna elit bibendum risus. Proin eget + tincidunt quam. Nam luctus commodo mauris, eu posuere nunc luctus non. + Nulla facilisi. Vivamus eget leo rhoncus quam accumsan fringilla. Aliquam + sit amet lorem est. Nullam vel tellus nibh, id imperdiet orci. Integer + egestas leo eu turpis blandit scelerisque. +

+

+ Etiam in blandit tellus. Integer sed varius quam. Vestibulum dapibus mi + gravida arcu viverra blandit. Praesent tristique augue id sem adipiscing + pellentesque. Sed sollicitudin, leo sed interdum elementum, nisi ante + condimentum leo, eget ornare libero diam semper quam. Vivamus augue urna, + porta eget ultrices et, dapibus ut ligula. Ut laoreet consequat faucibus. + Praesent at lectus ut lectus malesuada mollis. Nam interdum adipiscing + eros, nec sodales mi porta nec. Proin et quam vitae sem interdum aliquet. + Proin vel odio at lacus vehicula aliquet. +

+

+ Etiam placerat dui ut sem ornare vel vestibulum augue mattis. Sed semper + malesuada mi, eu bibendum lacus lobortis nec. Etiam fringilla elementum + risus, eget consequat urna laoreet nec. Etiam mollis quam non sem + convallis vel consectetur lectus ullamcorper. Aenean mattis lacus quis + ligula mattis eget vestibulum diam hendrerit. In non placerat mauris. + Praesent faucibus nunc quis eros sagittis viverra. In hac habitasse platea + dictumst. Suspendisse eget nisl erat, ac molestie massa. Praesent mollis + vestibulum tincidunt. Fusce suscipit laoreet malesuada. Aliquam erat + volutpat. Aliquam dictum elementum rhoncus. Praesent in est massa, + pulvinar sodales nunc. Pellentesque gravida euismod mi ac convallis. +

+

+ Mauris vel odio vel nulla facilisis lacinia. Aliquam ultrices est at leo + blandit tincidunt. Vestibulum ante ipsum primis in faucibus orci luctus et + ultrices posuere cubilia Curae; Suspendisse porttitor adipiscing + facilisis. Duis cursus quam iaculis augue interdum porttitor. Vestibulum + ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia + Curae; Duis vulputate magna ac metus pretium condimentum. In tempus, est + eget vestibulum blandit, velit massa dignissim nisl, ut scelerisque lorem + neque vel velit. Maecenas fermentum commodo viverra. Curabitur a nibh non + velit aliquam cursus. Integer semper condimentum tortor a pellentesque. + Pellentesque semper, nisl id porttitor vehicula, sem dui feugiat lacus, + vitae consequat augue urna vel odio. +

+

+ Vestibulum id neque nec turpis iaculis pulvinar et a massa. Vestibulum sed + nibh vitae arcu eleifend egestas. Mauris fermentum ultrices blandit. + Suspendisse vitae lorem libero. Aenean et pellentesque tellus. Morbi quis + neque orci, eu dignissim dui. Fusce sollicitudin mauris ac arcu vestibulum + imperdiet. Proin ultricies nisl sit amet enim imperdiet eu ornare dui + tempus. Maecenas lobortis nisi a tortor vestibulum vel eleifend tellus + vestibulum. Donec metus sapien, hendrerit a fermentum id, dictum quis + libero. +

+

+ Pellentesque a lorem nulla, in tempor justo. Duis odio nisl, dignissim sed + consequat sit amet, hendrerit ac neque. Nunc ac augue nec massa tempor + rhoncus. Nam feugiat, tellus a varius euismod, justo nisl faucibus velit, + ut vulputate justo massa eu nibh. Sed bibendum urna quis magna facilisis + in accumsan dolor malesuada. Morbi sit amet nunc risus, in faucibus sem. + Nullam sollicitudin magna sed sem mollis id commodo libero condimentum. + Duis eu massa et lacus semper molestie ut adipiscing sem. +

+

+ Sed id nulla mi, eget suscipit eros. Aliquam tempus molestie rutrum. In + quis varius elit. Nullam dignissim neque nec velit vulputate porttitor. + Mauris ac ligula sit amet elit fermentum rhoncus. In tellus urna, pulvinar + quis condimentum ut, porta nec justo. In hac habitasse platea dictumst. + Proin volutpat elit id quam molestie ac commodo lacus sagittis. Quisque + placerat, augue tempor placerat pulvinar, nisi nisi venenatis urna, eget + convallis eros velit quis magna. Suspendisse volutpat iaculis quam, ut + tristique lacus luctus quis. +

+

+ Nullam commodo suscipit lacus non aliquet. Phasellus ac nisl lorem, sed + facilisis ligula. Nam cursus lobortis placerat. Sed dui nisi, elementum eu + sodales ac, placerat sit amet mauris. Pellentesque dapibus tellus ut ipsum + aliquam eu auctor dui vehicula. Quisque ultrices laoreet erat, at ultrices + tortor sodales non. Sed venenatis luctus magna, ultricies ultricies nunc + fringilla eget. Praesent scelerisque urna vitae nibh tristique varius + consequat neque luctus. Integer ornare, erat a porta tempus, velit justo + fermentum elit, a fermentum metus nisi eu ipsum. Vivamus eget augue vel + dui viverra adipiscing congue ut massa. Praesent vitae eros erat, pulvinar + laoreet magna. Maecenas vestibulum mollis nunc in posuere. Pellentesque + sit amet metus a turpis lobortis tempor eu vel tortor. Cras sodales + eleifend interdum. +

+ ``` -> **Nota:**A função `showNode` é também um exemplo de uso do ciclo` for sem uma section statement. `Neste caso **o ponto e vírgula é sempre colocado imediatamente depois da declaração do ciclo.** +> **Nota:**A função `showNode` é também um exemplo de uso do ciclo`for sem uma section statement.`Neste caso **o ponto e vírgula é sempre colocado imediatamente depois da declaração do ciclo.** ... a mesma coisa mas com uma animação de rolagem na página: ```js var showBookmark = (function () { - var _useHash, _scrollX, _scrollY, _nodeX, _nodeY, _itFrame, _scrollId = -1, _bookMark, - /* - * nDuration: the duration in milliseconds of each frame - * nFrames: number of frames for each scroll - */ - nDuration = 200, nFrames = 10; - - function _next () { - if (_itFrame > nFrames) { clearInterval(_scrollId); _scrollId = -1; return; } + var _useHash, + _scrollX, + _scrollY, + _nodeX, + _nodeY, + _itFrame, + _scrollId = -1, + _bookMark, + /* + * nDuration: the duration in milliseconds of each frame + * nFrames: number of frames for each scroll + */ + nDuration = 200, + nFrames = 10; + + function _next() { + if (_itFrame > nFrames) { + clearInterval(_scrollId); + _scrollId = -1; + return; + } _isBot = true; - document.documentElement.scrollTop = Math.round(_scrollY + (_nodeY - _scrollY) * _itFrame / nFrames); - document.documentElement.scrollLeft = Math.round(_scrollX + (_nodeX - _scrollX) * _itFrame / nFrames); - if (_useHash && _itFrame === nFrames) { location.hash = _bookMark; } + document.documentElement.scrollTop = Math.round( + _scrollY + ((_nodeY - _scrollY) * _itFrame) / nFrames, + ); + document.documentElement.scrollLeft = Math.round( + _scrollX + ((_nodeX - _scrollX) * _itFrame) / nFrames, + ); + if (_useHash && _itFrame === nFrames) { + location.hash = _bookMark; + } _itFrame++; } - function _chkOwner () { - if (_isBot) { _isBot = false; return; } - if (_scrollId > -1) { clearInterval(_scrollId); _scrollId = -1; } + function _chkOwner() { + if (_isBot) { + _isBot = false; + return; + } + if (_scrollId > -1) { + clearInterval(_scrollId); + _scrollId = -1; + } } - if (window.addEventListener) { window.addEventListener("scroll", _chkOwner, false); } - else if (window.attachEvent) { window.attachEvent("onscroll", _chkOwner); } + if (window.addEventListener) { + window.addEventListener("scroll", _chkOwner, false); + } else if (window.attachEvent) { + window.attachEvent("onscroll", _chkOwner); + } return function (sBookmark, bUseHash) { _scrollY = document.documentElement.scrollTop; @@ -175,24 +444,25 @@ var showBookmark = (function () { for ( var nLeft = 0, nTop = 0, oNode = document.querySelector(sBookmark); oNode; - nLeft += oNode.offsetLeft, nTop += oNode.offsetTop, oNode = oNode.offsetParent + nLeft += oNode.offsetLeft, + nTop += oNode.offsetTop, + oNode = oNode.offsetParent ); - _nodeX = nLeft, _nodeY = nTop, _itFrame = 1; - if (_scrollId === -1) { _scrollId = setInterval(_next, Math.round(nDuration / nFrames)); } + (_nodeX = nLeft), (_nodeY = nTop), (_itFrame = 1); + if (_scrollId === -1) { + _scrollId = setInterval(_next, Math.round(nDuration / nFrames)); + } }; })(); ``` ## Especificações -| Especificação | Estatus | Comentário | -| ---------------------------------------------------------------------------------------------------------------- | -------------------------------- | ---------------------------------------------------------- | -| {{SpecName('HTML WHATWG', "history.html#the-location-interface", "Window.location")}} | {{Spec2('HTML WHATWG')}} | Sem mudanças a partir de {{SpecName("HTML5 W3C")}}. | -| {{SpecName('HTML5 W3C', "browsers.html#the-location-interface", "Window.location")}} | {{Spec2('HTML5 W3C')}} | Definição inicial. | +{{Specifications}} ## Compatibilidade com navegadores -{{Compat("api.Window.location")}} +{{Compat}} ## Veja também diff --git a/files/pt-br/web/api/window/matchmedia/index.md b/files/pt-br/web/api/window/matchmedia/index.md index d2044f90a21f23..cf028786fb90a0 100644 --- a/files/pt-br/web/api/window/matchmedia/index.md +++ b/files/pt-br/web/api/window/matchmedia/index.md @@ -33,13 +33,11 @@ Veja [Usando media queries a partir do código](/pt-BR/docs/DOM/Using_media_quer ## Especificações -| Especificações | Status | Comment | -| ---------------------------------------------------------------------------------------------------- | -------------------------------- | ------------------ | -| {{SpecName("CSSOM View", "#dom-window-matchmedia", "Window.matchMedia()")}} | {{Spec2("CSSOM View")}} | Initial definition | +{{Specifications}} -## Compatibilidade do navegador +## Compatibilidade com navegadores -{{Compat("api.Window.matchMedia")}} +{{Compat}} ## Veja também diff --git a/files/pt-br/web/api/window/navigator/index.md b/files/pt-br/web/api/window/navigator/index.md index 18dfc9b278159f..55ef161e641157 100644 --- a/files/pt-br/web/api/window/navigator/index.md +++ b/files/pt-br/web/api/window/navigator/index.md @@ -18,18 +18,19 @@ navigatorObject = window.navigator ### Exemplo #1: Detecta o navegador e retorna uma string ```js -var sBrowser, sUsrAg = navigator.userAgent; +var sBrowser, + sUsrAg = navigator.userAgent; -if(sUsrAg.indexOf("Chrome") > -1) { - sBrowser = "Google Chrome"; +if (sUsrAg.indexOf("Chrome") > -1) { + sBrowser = "Google Chrome"; } else if (sUsrAg.indexOf("Safari") > -1) { - sBrowser = "Apple Safari"; + sBrowser = "Apple Safari"; } else if (sUsrAg.indexOf("Opera") > -1) { - sBrowser = "Opera"; + sBrowser = "Opera"; } else if (sUsrAg.indexOf("Firefox") > -1) { - sBrowser = "Mozilla Firefox"; + sBrowser = "Mozilla Firefox"; } else if (sUsrAg.indexOf("MSIE") > -1) { - sBrowser = "Microsoft Internet Explorer"; + sBrowser = "Microsoft Internet Explorer"; } alert("Você está utilizando: " + sBrowser); @@ -38,25 +39,23 @@ alert("Você está utilizando: " + sBrowser); ### Exemplo #2: Detecta o navegador e retorna um índice ```js -function getBrowserId () { +function getBrowserId() { + var aKeys = ["MSIE", "Firefox", "Safari", "Chrome", "Opera"], + sUsrAg = navigator.userAgent, + nIdx = aKeys.length - 1; - var - aKeys = ["MSIE", "Firefox", "Safari", "Chrome", "Opera"], - sUsrAg = navigator.userAgent, nIdx = aKeys.length - 1; - - for (nIdx; nIdx > -1 && sUsrAg.indexOf(aKeys[nIdx]) === -1; nIdx--); - - return nIdx + for (nIdx; nIdx > -1 && sUsrAg.indexOf(aKeys[nIdx]) === -1; nIdx--); + return nIdx; } console.log(getBrowserId()); ``` -## Especificação +## Especificações + +{{Specifications}} -- {{SpecName("HTML5 W3C", "webappapis.html#the-navigator-object","window.navigator")}} -- {{SpecName("HTML5.1", "webappapis.html#the-navigator-object", "window.navigator")}} -- {{SpecName("HTML WHATWG", "timers.html#the-navigator-object", "window.navigator")}} +## Compatibilidade com navegadores -## Veja também +{{Compat}} diff --git a/files/pt-br/web/api/window/popstate_event/index.md b/files/pt-br/web/api/window/popstate_event/index.md index b0e35e9b035e84..972442f95b585b 100644 --- a/files/pt-br/web/api/window/popstate_event/index.md +++ b/files/pt-br/web/api/window/popstate_event/index.md @@ -26,13 +26,13 @@ Navegadores tendem a lidar com o evento `popstate` diferentemente no carregament ## Propriedades -| Property | Type | Description | -| ------------------------------------- | ------------------------------------ | -------------------------------------------------- | +| Property | Type | Description | +| ------------------------------- | -------------------------- | -------------------------------------------------- | | `target` {{readonlyInline}} | {{domxref("EventTarget")}} | The browsing context (`window`). | -| `type` {{readonlyInline}} | {{domxref("DOMString")}} | The type of event. | -| `bubbles` {{readonlyInline}} | {{jsxref("Boolean")}} | Whether the event normally bubbles or not. | -| `cancelable` {{readonlyInline}} | {{jsxref("Boolean")}} | Whether the event is cancellable or not. | -| `state` {{readonlyInline}} | _any_ | The current history entry's state object (if any). | +| `type` {{readonlyInline}} | {{domxref("DOMString")}} | The type of event. | +| `bubbles` {{readonlyInline}} | {{jsxref("Boolean")}} | Whether the event normally bubbles or not. | +| `cancelable` {{readonlyInline}} | {{jsxref("Boolean")}} | Whether the event is cancellable or not. | +| `state` {{readonlyInline}} | _any_ | The current history entry's state object (if any). | ## Compatiblidade com navegadores @@ -43,15 +43,20 @@ Navegadores tendem a lidar com o evento `popstate` diferentemente no carregament Um página no `http://example.com/example.html roda o código abaixo e irá gerar os logs indicados` ```js -window.onpopstate = function(event) { - console.log("location: " + document.location + ", state: " + JSON.stringify(event.state)); +window.onpopstate = function (event) { + console.log( + "location: " + + document.location + + ", state: " + + JSON.stringify(event.state), + ); }; -history.pushState({page: 1}, "title 1", "?page=1"); -history.pushState({page: 2}, "title 2", "?page=2"); -history.replaceState({page: 3}, "title 3", "?page=3"); +history.pushState({ page: 1 }, "title 1", "?page=1"); +history.pushState({ page: 2 }, "title 2", "?page=2"); +history.replaceState({ page: 3 }, "title 3", "?page=3"); history.back(); // Logs "location: http://example.com/example.html?page=1, state: {"page":1}" history.back(); // Logs "location: http://example.com/example.html, state: null -history.go(2); // Logs "location: http://example.com/example.html?page=3, state: {"page":3} +history.go(2); // Logs "location: http://example.com/example.html?page=3, state: {"page":3} ``` Observe que mesmo que a entrada do histórico inicial(para `http://example.com/example.html`) não tem nenhum estado associado a ele, um evento `popstate`é ainda disparado quando nós ativamos essa entrada após a segunda chamada para `history.back()`. diff --git a/files/pt-br/web/api/window/print/index.md b/files/pt-br/web/api/window/print/index.md index cb433b8936dc07..f0febebe8a0058 100644 --- a/files/pt-br/web/api/window/print/index.md +++ b/files/pt-br/web/api/window/print/index.md @@ -23,11 +23,9 @@ None. None ({{jsxref("undefined")}}). -## Especificação +## Especificações -| Especificação | Status | Comentário | -| -------------------------------------------------------------------------------------------------------- | -------------------------------- | ---------- | -| {{SpecName('HTML WHATWG', 'timers-and-user-prompts.html#printing', 'print()')}} | {{Spec2('HTML WHATWG')}} | | +{{Specifications}} ## Compatibilidade com navegadores diff --git a/files/pt-br/web/api/window/prompt/index.md b/files/pt-br/web/api/window/prompt/index.md index 0ebf55262cfed5..4f8924def9d380 100644 --- a/files/pt-br/web/api/window/prompt/index.md +++ b/files/pt-br/web/api/window/prompt/index.md @@ -26,9 +26,9 @@ if (signo.toLowerCase() == "escorpião") { // há muitas formas de se usar o recurso prompt var sign = window.prompt(); // abrir uma janela de promtpt em branco -var sign = prompt(); // abrir uma janela de promtpt em branco -var sign = window.prompt('Você está se sentindo com sorte'); // abrir uma janela com o texto "Você está se sentindo com sorte" -var sign = window.prompt('Você está se sentindo com sorte', 'certamente'); // abrir uma janela com o texto "Você está se sentindo com sorte" e com o valor padrão "certamente" +var sign = prompt(); // abrir uma janela de promtpt em branco +var sign = window.prompt("Você está se sentindo com sorte"); // abrir uma janela com o texto "Você está se sentindo com sorte" +var sign = window.prompt("Você está se sentindo com sorte", "certamente"); // abrir uma janela com o texto "Você está se sentindo com sorte" e com o valor padrão "certamente" ``` Quando o usuário pressiona o botão OK, o texto digitado no campo de texto é retornado. Se o usuário pressionar OK sem ter digitado qualquer texto, uma cadeia de caracteres vazia é retornada. Se o usuário pressionar o botão Cancelar, esta função retornará `null`. @@ -51,9 +51,13 @@ No Safari, se o usuário clicar em Cancelar, a função retornará uma cadeia de Esta função não tem efeito na versão Modern UI/Metro do Internet Explorer para Windows 8. Ele não exibe o prompt para o usuário, e sempre retornará `undefined`. Não está claro se é um erro ou um comportamento intencional. Versões desktop do IE implementam esta função. -**Especificação** +## Especificações -Especificado em HTML5. +{{Specifications}} + +## Compatibilidade com navegadores + +{{Compat}} ## Veja também diff --git a/files/pt-br/web/api/window/requestanimationframe/index.md b/files/pt-br/web/api/window/requestanimationframe/index.md index a00a09c7042bb2..a83437c06e348b 100644 --- a/files/pt-br/web/api/window/requestanimationframe/index.md +++ b/files/pt-br/web/api/window/requestanimationframe/index.md @@ -32,12 +32,12 @@ Um valor inteiro `long`, a id da requisição, que identifica unicamente a entra ```js var start = null; var element = document.getElementById("ElementoQueVcQuerAnimar"); -element.style.position = 'absolute'; +element.style.position = "absolute"; function step(timestamp) { if (!start) start = timestamp; var progress = timestamp - start; - element.style.left = Math.min(progress/10, 200) + "px"; + element.style.left = Math.min(progress / 10, 200) + "px"; if (progress < 2000) { window.requestAnimationFrame(step); } @@ -46,24 +46,13 @@ function step(timestamp) { window.requestAnimationFrame(step); ``` -## Especificação +## Especificações -| Especificação | Status | Comentário | -| -------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------- | ---------------------------------- | -| {{SpecName('HTML WHATWG', '#animation-frames', 'requestAnimationFrame')}} | {{Spec2('HTML WHATWG')}} | Sem mudanças, substitui a anterior | -| {{SpecName('RequestAnimationFrame', '#dom-windowanimationtiming-requestanimationframe', 'requestAnimationFrame')}} | {{Spec2('RequestAnimationFrame')}} | Definição inicial | +{{Specifications}} ## Compatibilidade com navegadores -{{Compat("api.Window.requestAnimationFrame")}} - -\[1] Anteriro ao Gecko 11.0, mozRequestAnimationFrame() podia ser chamado sem parâmetros de entrada. Isso não é mais suportado, como provavelmente não será parte do padrão - -\[2] O parâmetro do callback é {{domxref("DOMTimeStamp")}} ao invés de {{domxref("DOMHighResTimeStamp")}} se a versão prefixada do método foi utilizada `DOMTimeStamp` possui apenas precisão de milisegundo, mas `DOMHighResTimeStamp` possui precisão mínima de microsegundos. Portanto, o tempo zero é diferente: `DOMHighResTimeStamp` possui o mesmo tempo zero que `performance.now()`, mas DOMTimeStamp possui o mesmo tempo zero que `Date.now().` - -\[3] A chamada correta no Chrome para cancelar a requisição é currently `window.cancelAnimationFrame()`. Versões anteriores, `window.webkitCancelAnimationFrame()` e `window.webkitCancelRequestAnimationFrame()`, foram descontinuados mas possuem suporte por enquanto. - -\[4] Suporte para a versão prefixada foi removida no Firefox 42. +{{Compat}} ## Veja também diff --git a/files/pt-br/web/api/window/requestidlecallback/index.md b/files/pt-br/web/api/window/requestidlecallback/index.md index 650f65084c0e05..b446323830f8a3 100644 --- a/files/pt-br/web/api/window/requestidlecallback/index.md +++ b/files/pt-br/web/api/window/requestidlecallback/index.md @@ -35,15 +35,13 @@ An ID which can be used to cancel the callback by passing it into the {{domxref( See our [complete example](/pt-BR/docs/Web/API/Background_Tasks_API#Example) in the article [Cooperative Scheduling of Background Tasks API](/pt-BR/docs/Web/API/Background_Tasks_API). -## Specifications +## Especificações -| Specification | Status | Comment | -| -------------------------------------------- | ---------------------------------------- | ------------------- | -| {{SpecName('Background Tasks')}} | {{Spec2('Background Tasks')}} | Initial definition. | +{{Specifications}} -## Browser compatibility +## Compatibilidade com navegadores -{{Compat("api.Window.requestIdleCallback")}} +{{Compat}} ## See also diff --git a/files/pt-br/web/api/window/resize_event/index.md b/files/pt-br/web/api/window/resize_event/index.md index 7871bf2ff2cdc3..8a1516a16ebbe3 100644 --- a/files/pt-br/web/api/window/resize_event/index.md +++ b/files/pt-br/web/api/window/resize_event/index.md @@ -28,14 +28,14 @@ Existe uma nova proposta (2017) para permitir que todos os elementos sejam notif ## Properties -| Property | Type | Description | -| ------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -| `target` {{readonlyInline}} | [`EventTarget`](/pt-BR/docs/Web/API/EventTarget) | O evento alto (o primeiro alvo na árvore DOM). | -| `type` {{readonlyInline}} | [`DOMString`](/pt-BR/docs/Web/API/DOMString) | O tipo de evento. | -| `bubbles` {{readonlyInline}} | [`Boolean`](/pt-BR/docs/Web/API/Boolean) | Se o evento normalmente bubbles ou não. | -| `cancelable` {{readonlyInline}} | [`Boolean`](/pt-BR/docs/Web/API/Boolean) | Se o evento é cancelado ou não. | -| `view` {{readonlyInline}} | [`WindowProxy`](/pt-BR/docs/Web/API/WindowProxy) | [`document.defaultView`](/pt-BR/docs/Web/API/Document/defaultView) (`window` do documento) | -| `detail` {{readonlyInline}} | `long` (`float`) | 0. | +| Property | Type | Description | +| ------------------------------- | ------------------------------------------------ | ------------------------------------------------------------------------------------------ | +| `target` {{readonlyInline}} | [`EventTarget`](/pt-BR/docs/Web/API/EventTarget) | O evento alto (o primeiro alvo na árvore DOM). | +| `type` {{readonlyInline}} | [`DOMString`](/pt-BR/docs/Web/API/DOMString) | O tipo de evento. | +| `bubbles` {{readonlyInline}} | [`Boolean`](/pt-BR/docs/Web/API/Boolean) | Se o evento normalmente bubbles ou não. | +| `cancelable` {{readonlyInline}} | [`Boolean`](/pt-BR/docs/Web/API/Boolean) | Se o evento é cancelado ou não. | +| `view` {{readonlyInline}} | [`WindowProxy`](/pt-BR/docs/Web/API/WindowProxy) | [`document.defaultView`](/pt-BR/docs/Web/API/Document/defaultView) (`window` do documento) | +| `detail` {{readonlyInline}} | `long` (`float`) | 0. | ## Examples @@ -46,87 +46,83 @@ Como os eventos `resize` podem ser altamente executados, o evento manipulador n ### requestAnimationFrame + customEvent ```js -(function() { - var throttle = function(type, name, obj) { - obj = obj || window; - var running = false; - var func = function() { - if (running) { return; } - running = true; - requestAnimationFrame(function() { - obj.dispatchEvent(new CustomEvent(name)); - running = false; - }); - }; - obj.addEventListener(type, func); +(function () { + var throttle = function (type, name, obj) { + obj = obj || window; + var running = false; + var func = function () { + if (running) { + return; + } + running = true; + requestAnimationFrame(function () { + obj.dispatchEvent(new CustomEvent(name)); + running = false; + }); }; + obj.addEventListener(type, func); + }; - /* init - you can init any event */ - throttle("resize", "optimizedResize"); + /* init - you can init any event */ + throttle("resize", "optimizedResize"); })(); // handle event -window.addEventListener("optimizedResize", function() { - console.log("Resource conscious resize callback!"); +window.addEventListener("optimizedResize", function () { + console.log("Resource conscious resize callback!"); }); ``` ### requestAnimationFrame ```js -var optimizedResize = (function() { - - var callbacks = [], - running = false; - - // fired on resize event - function resize() { - - if (!running) { - running = true; - - if (window.requestAnimationFrame) { - window.requestAnimationFrame(runCallbacks); - } else { - setTimeout(runCallbacks, 66); - } - } - - } - - // run the actual callbacks - function runCallbacks() { - - callbacks.forEach(function(callback) { - callback(); - }); - - running = false; +var optimizedResize = (function () { + var callbacks = [], + running = false; + + // fired on resize event + function resize() { + if (!running) { + running = true; + + if (window.requestAnimationFrame) { + window.requestAnimationFrame(runCallbacks); + } else { + setTimeout(runCallbacks, 66); + } } + } - // adds callback to loop - function addCallback(callback) { + // run the actual callbacks + function runCallbacks() { + callbacks.forEach(function (callback) { + callback(); + }); - if (callback) { - callbacks.push(callback); - } + running = false; + } + // adds callback to loop + function addCallback(callback) { + if (callback) { + callbacks.push(callback); } + } - return { - // public method to add additional callback - add: function(callback) { - if (!callbacks.length) { - window.addEventListener('resize', resize); - } - addCallback(callback); - } - } -}()); + return { + // public method to add additional callback + add: function (callback) { + if (!callbacks.length) { + window.addEventListener("resize", resize); + } + addCallback(callback); + }, + }; +})(); // start process -optimizedResize.add(function() { - console.log('Resource conscious resize callback!') +optimizedResize.add(function () { + console.log("Resource conscious resize callback!"); }); ``` diff --git a/files/pt-br/web/api/window/scroll/index.md b/files/pt-br/web/api/window/scroll/index.md index 34ec4e8486aec6..478ed17118d47b 100644 --- a/files/pt-br/web/api/window/scroll/index.md +++ b/files/pt-br/web/api/window/scroll/index.md @@ -17,9 +17,9 @@ scroll(options) ### Parâmetros - `x-coord` é o pixel ao longo do eixo horizontal do documento que você - deseja exibido no canto superior esquerdo. + deseja exibido no canto superior esquerdo. - `y-coord` é o pixel ao longo do eixo vertical do documento que você - deseja exibido no canto superior esquerdo. + deseja exibido no canto superior esquerdo. \- ou - diff --git a/files/pt-br/web/api/window/scrollby/index.md b/files/pt-br/web/api/window/scrollby/index.md index d647a74b92eb9a..51b42b0d34c572 100644 --- a/files/pt-br/web/api/window/scrollby/index.md +++ b/files/pt-br/web/api/window/scrollby/index.md @@ -35,6 +35,8 @@ window.scrollBy(0, window.innerHeight); ## Especificações -| Specification | Status | Comment | -| ------------------------------------------------------------------------------------------------ | -------------------------------- | ------------------- | -| {{ SpecName('CSSOM View', '#dom-window-scrollby', 'window.scrollBy()') }} | {{ Spec2('CSSOM View') }} | Initial definition. | +{{Specifications}} + +## Compatibilidade com navegadores + +{{Compat}} diff --git a/files/pt-br/web/api/window/scrollto/index.md b/files/pt-br/web/api/window/scrollto/index.md index ea1762e7fd568f..2d1e9bc41a6eda 100644 --- a/files/pt-br/web/api/window/scrollto/index.md +++ b/files/pt-br/web/api/window/scrollto/index.md @@ -23,7 +23,7 @@ window.scrollTo(x-coord, y-coord) ## Exemplo ```js -window.scrollTo( 0, 1000 ); +window.scrollTo(0, 1000); ``` ## Notas @@ -32,6 +32,8 @@ Essa função é efetivamente a mesma que [window.scroll](/pt-BR/docs/DOM/Window ## Especificações -| Especificação | Status | Comentário | -| -------------------------------------------------------------------------------------------- | -------------------------------- | ------------------ | -| {{ SpecName('CSSOM View', '#dom-window-scroll', 'window.scroll()') }} | {{ Spec2('CSSOM View') }} | Definição inicial. | +{{Specifications}} + +## Compatibilidade com navegadores + +{{Compat}} diff --git a/files/pt-br/web/api/window/scrolly/index.md b/files/pt-br/web/api/window/scrolly/index.md index 4a2be14b4bfeea..75e7c2e22dec91 100644 --- a/files/pt-br/web/api/window/scrolly/index.md +++ b/files/pt-br/web/api/window/scrolly/index.md @@ -22,7 +22,7 @@ var y = window.scrollY; ```js // verificar e ir para a segunda página if (window.scrollY) { - window.scroll(0, 0); // reinicia a posição do scroll para a posição superior esquerda do documento. + window.scroll(0, 0); // reinicia a posição do scroll para a posição superior esquerda do documento. } window.scrollByPages(1); @@ -44,21 +44,27 @@ Para compatibilidade cross-browser, utilize window\.pageYOffset em vez de window ```js var supportPageOffset = window.pageXOffset !== undefined; -var isCSS1Compat = ((document.compatMode || "") === "CSS1Compat"); - -var x = supportPageOffset ? window.pageXOffset : isCSS1Compat ? document.documentElement.scrollLeft : document.body.scrollLeft; -var y = supportPageOffset ? window.pageYOffset : isCSS1Compat ? document.documentElement.scrollTop : document.body.scrollTop; +var isCSS1Compat = (document.compatMode || "") === "CSS1Compat"; + +var x = supportPageOffset + ? window.pageXOffset + : isCSS1Compat + ? document.documentElement.scrollLeft + : document.body.scrollLeft; +var y = supportPageOffset + ? window.pageYOffset + : isCSS1Compat + ? document.documentElement.scrollTop + : document.body.scrollTop; ``` -## Especificação +## Especificações -| Specification | Status | Comment | -| -------------------------------------------------------------------------------------------- | -------------------------------- | ------- | -| {{ SpecName('CSSOM View', '#dom-window-scrolly', 'window.scrollY') }} | {{ Spec2('CSSOM View') }} | | +{{Specifications}} ## Compatibilidade com navegadores -{{Compat("api.Window.scrollY")}} +{{Compat}} ## Veja também diff --git a/files/pt-br/web/api/window/sessionstorage/index.md b/files/pt-br/web/api/window/sessionstorage/index.md index 6051a72bcbd5a4..4212fab1a69920 100644 --- a/files/pt-br/web/api/window/sessionstorage/index.md +++ b/files/pt-br/web/api/window/sessionstorage/index.md @@ -11,10 +11,10 @@ A propriedade `sessionStorage` permite acessar um objeto tipo session {{domxref( ```js // Salva os dados na sessionStorage -sessionStorage.setItem('chave', 'valor'); +sessionStorage.setItem("chave", "valor"); // Obtém os dados da sessionStorage -var data = sessionStorage.getItem('chave'); +var data = sessionStorage.getItem("chave"); ``` ### Valor @@ -26,7 +26,7 @@ Objeto {{domxref("Storage")}}. O seguinte trecho acessa o objeto da sessão do domínio atual {{domxref("Storage")}} e adiciona um item usando o {{domxref("Storage.setItem()")}}. ```js -sessionStorage.setItem('myCat', 'Tom'); +sessionStorage.setItem("myCat", "Tom"); ``` O exemplo a seguir salva automaticamente o conteúdo da caixa de texto, e caso o browser seja acidentalmente recarregado, o conteúdo da caixa de texto é restaurado. @@ -43,7 +43,7 @@ if (sessionStorage.getItem("autosave")) { } // Verifica as mudanças que ocorrem na caixa de texto -field.addEventListener("change", function() { +field.addEventListener("change", function () { // E salva o resultado dentro de um objeto session storage sessionStorage.setItem("autosave", field.value); }); @@ -53,13 +53,11 @@ field.addEventListener("change", function() { ## Especificações -| Especificações | Status | Comentários | -| -------------------------------------------------------------------------------------------------------- | -------------------------------- | ----------- | -| {{SpecName('Web Storage', '#the-sessionstorage-attribute', 'sessionStorage')}} | {{Spec2('Web Storage')}} | | +{{Specifications}} -## Browser compatíveis +## Compatibilidade com navegadores -{{Compat("api.Window.sessionStorage")}} +{{Compat}} ## Veja também diff --git a/files/pt-br/web/api/window/storage_event/index.md b/files/pt-br/web/api/window/storage_event/index.md index 0008c86706fc69..177743b2cb7106 100644 --- a/files/pt-br/web/api/window/storage_event/index.md +++ b/files/pt-br/web/api/window/storage_event/index.md @@ -17,17 +17,23 @@ windowObj.onstorage = function() { ... }; ## Exemplos ```js -window.onstorage = function(e) { - console.log('The ' + e.key + ' key has been changed from ' + e.oldValue + ' to ' + e.newValue + '.'); +window.onstorage = function (e) { + console.log( + "The " + + e.key + + " key has been changed from " + + e.oldValue + + " to " + + e.newValue + + ".", + ); }; ``` ## Especificações -| Especificação | Status | Comentário | -| ------------------------------------------------------------------------------------------------------------ | -------------------------------- | ---------- | -| {{SpecName('HTML WHATWG','webappapis.html#handler-window-onstorage','onstorage')}} | {{Spec2('HTML WHATWG')}} | | +{{Specifications}} ## Compatibilidade com navegadores -{{Compat("api.Window.storage_event")}} +{{Compat}} diff --git a/files/pt-br/web/api/worker/index.md b/files/pt-br/web/api/worker/index.md index 7a029d0cf16165..2a427b8abb3d00 100644 --- a/files/pt-br/web/api/worker/index.md +++ b/files/pt-br/web/api/worker/index.md @@ -58,29 +58,24 @@ The following code snippet shows creation of a {{domxref("Worker")}} object usin ```js var myWorker = new Worker("worker.js"); -var first = document.querySelector('#number1'); -var second = document.querySelector('input#number2'); +var first = document.querySelector("#number1"); +var second = document.querySelector("input#number2"); -first.onchange = function() { - myWorker.postMessage([first.value,second.value]); - console.log('Message posted to worker'); -} +first.onchange = function () { + myWorker.postMessage([first.value, second.value]); + console.log("Message posted to worker"); +}; ``` For a full example, see our[Basic dedicated worker example](https://github.com/mdn/simple-web-worker) ([run dedicated worker](http://mdn.github.io/simple-web-worker/)). -## Specifications +## Especificações -| Specification | Status | Comment | -| ---------------------------------------------------------------- | -------------------------------- | ---------------------------------------------------- | -| {{SpecName('HTML WHATWG', "#worker", "Worker")}} | {{Spec2('HTML WHATWG')}} | No change from {{SpecName("Web Workers")}}. | -| {{SpecName('Web Workers', "#worker", "Worker")}} | {{Spec2('Web Workers')}} | Initial definition. | +{{Specifications}} ## Compatibilidade com navegadores -Support varies for different types of workers. See each worker type's page for specifics. - -{{Compat("api.Worker")}} +{{Compat}} ## See also diff --git a/files/pt-br/web/api/xmldocument/index.md b/files/pt-br/web/api/xmldocument/index.md index 36f8fac9d73fe3..c948e70cb6af09 100644 --- a/files/pt-br/web/api/xmldocument/index.md +++ b/files/pt-br/web/api/xmldocument/index.md @@ -20,14 +20,11 @@ _Esta interface não adiciona nenhum método novo._ ## Especificações -| Especificação | Status | Comentário | -| ---------------------------------------------------------------------------- | -------------------------------- | ------------------ | -| {{SpecName("DOM WHATWG", "#xmldocument", "XMLDocument")}} | {{Spec2("DOM WHATWG")}} | Sem alterações. | -| {{SpecName("DOM4", "#xmldocument", "XMLDocument")}} | {{Spec2("DOM4")}} | Definição Inicial. | +{{Specifications}} ## Compatibilidade com navegadores -{{Compat("api.XMLDocument")}} +{{Compat}} ## Veja também diff --git a/files/pt-br/web/api/xmlhttprequest/abort/index.md b/files/pt-br/web/api/xmlhttprequest/abort/index.md index 8d11aaac08adbf..bceeb341f794cc 100644 --- a/files/pt-br/web/api/xmlhttprequest/abort/index.md +++ b/files/pt-br/web/api/xmlhttprequest/abort/index.md @@ -25,9 +25,9 @@ Nenhum. ```js var xhr = new XMLHttpRequest(), - method = "GET", - url = "https://developer.mozilla.org/"; -xhr.open(method,url,true); + method = "GET", + url = "https://developer.mozilla.org/"; +xhr.open(method, url, true); xhr.send(); @@ -36,13 +36,11 @@ xhr.abort(); ## Especificações -| Especificação | Status | Comentário | -| ------------------------------------------------------------------------ | ------------------------------------ | ---------------------- | -| {{SpecName('XMLHttpRequest', '#the-abort()-method')}} | {{Spec2('XMLHttpRequest')}} | WHATWG living standard | +{{Specifications}} ## Compatibilidade com navegadores -{{Compat("api.XMLHttpRequest.abort")}} +{{Compat}} ## Veja também diff --git a/files/pt-br/web/api/xmlhttprequest/index.md b/files/pt-br/web/api/xmlhttprequest/index.md index 7e9724f6f8ff01..3b641ebe07b1f1 100644 --- a/files/pt-br/web/api/xmlhttprequest/index.md +++ b/files/pt-br/web/api/xmlhttprequest/index.md @@ -622,7 +622,8 @@ Desde sendAsBinary() é um recurso experimental, aqui está uma polyfill para na if (!XMLHttpRequest.prototype.sendAsBinary) { XMLHttpRequest.prototype.sendAsBinary = function (sData) { - var nBytes = sData.length, ui8Data = new Uint8Array(nBytes); + var nBytes = sData.length, + ui8Data = new Uint8Array(nBytes); for (var nIdx = 0; nIdx < nBytes; nIdx++) { ui8Data[nIdx] = sData.charCodeAt(nIdx) & 0xff; } @@ -647,11 +648,15 @@ if (!XMLHttpRequest.prototype.sendAsBinary) { Desde então, foram implementadas uma série de manipuladores de eventos adicionais em vários navegadores ( onload , onerror , onprogress , etc.). Estes são suportados no Firefox. Em particular, veja `nsIXMLHttpRequestEventTarget` and [Using XMLHttpRequest](/pt-BR/DOM/XMLHttpRequest/Using_XMLHttpRequest). -avegadores mais recentes, incluindo o Firefox, também suporta ouvir as XMLHttpRequest eventos via padrão [`addEventListener`](/pt-BR/DOM/element.addEventListener) APIs Além de definir on\* propriedades para uma função de manipulador. +avegadores mais recentes, incluindo o Firefox, também suporta ouvir as XMLHttpRequest eventos via padrão [`addEventListener`](/pt-BR/DOM/element.addEventListener) APIs Além de definir on propriedades para uma função de manipulador. -## Compatibilidade do navegador +## Especificações -{{Compat("api.XMLHttpRequest")}} +{{Specifications}} + +## Compatibilidade com navegadores + +{{Compat}} ## Veja também diff --git a/files/pt-br/web/api/xmlhttprequest/open/index.md b/files/pt-br/web/api/xmlhttprequest/open/index.md index 64a96d8abaf1ca..a4b15f1e2d9f43 100644 --- a/files/pt-br/web/api/xmlhttprequest/open/index.md +++ b/files/pt-br/web/api/xmlhttprequest/open/index.md @@ -37,13 +37,11 @@ XMLHttpRequest.open(method, url, async, user, password) ## Especificações -| Especificação | Status | Comentário | -| ------------------------------------------------------------------------------------ | ------------------------------------ | ------------- | -| {{SpecName('XMLHttpRequest', '#the-open()-method', 'open()')}} | {{Spec2('XMLHttpRequest')}} | Padrão WHATWG | +{{Specifications}} ## Compatibilidade com navegadores -{{Compat("api.XMLHttpRequest.open")}} +{{Compat}} ## Veja também diff --git a/files/pt-br/web/api/xmlhttprequest/readystate/index.md b/files/pt-br/web/api/xmlhttprequest/readystate/index.md index 72b3d35b614929..423c255d19a732 100644 --- a/files/pt-br/web/api/xmlhttprequest/readystate/index.md +++ b/files/pt-br/web/api/xmlhttprequest/readystate/index.md @@ -26,23 +26,23 @@ A propriedade **XMLHttpRequest.readyState** retorna o estado de um XMLHttpReques - DONE - : A Operação de busca está completa. Isso pode significar que a trasferência foi concluída com êxito ou que falhou. -> **Nota:** Os nomes de estado são diferentes no Internet Explorer. Ao invés de `UNSENT`, `OPENED`, `HEADERS_RECEIVED`, `LOADING` e `DONE`, os nomes usados são: READYSTATE_UNINITIALIZED` (0), `READYSTATE_LOADING` (1), `READYSTATE_LOADED` (2), `READYSTATE_INTERACTIVE` (3) e `READYSTATE_COMPLETE` (4). +> **Nota:** Os nomes de estado são diferentes no Internet Explorer. Ao invés de `UNSENT`, `OPENED`, `HEADERS_RECEIVED`, `LOADING` e `DONE`, os nomes usados são: `READYSTATE_UNINITIALIZED`(0), `READYSTATE_LOADING`(1), `READYSTATE_LOADED`(2), `READYSTATE_INTERACTIVE`(3) e `READYSTATE_COMPLETE` (4). ## Exemplo ```js var xhr = new XMLHttpRequest(); -console.log('UNSENT', xhr.readyState); // readyState will be 0 +console.log("UNSENT", xhr.readyState); // readyState will be 0 -xhr.open('GET', '/api', true); -console.log('OPENED', xhr.readyState); // readyState will be 1 +xhr.open("GET", "/api", true); +console.log("OPENED", xhr.readyState); // readyState will be 1 xhr.onprogress = function () { - console.log('LOADING', xhr.readyState); // readyState will be 3 + console.log("LOADING", xhr.readyState); // readyState will be 3 }; xhr.onload = function () { - console.log('DONE', xhr.readyState); // readyState will be 4 + console.log("DONE", xhr.readyState); // readyState will be 4 }; xhr.send(null); @@ -50,10 +50,8 @@ xhr.send(null); ## Especificações -| Especificação | Status | Commentários | -| -------------------------------------------------------- | ------------------------------------ | ---------------------- | -| {{SpecName('XMLHttpRequest', '#states')}} | {{Spec2('XMLHttpRequest')}} | WHATWG living standard | +{{Specifications}} ## Compatibilidade com navegadores -{{Compat("api.XMLHttpRequest.readyState")}} +{{Compat}} diff --git a/files/pt-br/web/api/xmlhttprequest/readystatechange_event/index.md b/files/pt-br/web/api/xmlhttprequest/readystatechange_event/index.md index 80dfdf89e6bc06..1d2e57249ec982 100644 --- a/files/pt-br/web/api/xmlhttprequest/readystatechange_event/index.md +++ b/files/pt-br/web/api/xmlhttprequest/readystatechange_event/index.md @@ -28,24 +28,22 @@ XMLHttpRequest.onreadystatechange = callback; ```js var xhr = new XMLHttpRequest(), - method = "GET", - url = "https://developer.mozilla.org/"; + method = "GET", + url = "https://developer.mozilla.org/"; xhr.open(method, url, true); xhr.onreadystatechange = function () { - if(xhr.readyState === XMLHttpRequest.DONE && xhr.status === 200) { - console.log(xhr.responseText); - } - }; + if (xhr.readyState === XMLHttpRequest.DONE && xhr.status === 200) { + console.log(xhr.responseText); + } +}; xhr.send(); ``` -## Especificação +## Especificações -| Especificação | Status | Comentário | -| ---------------------------------------------------------------------------------------- | ------------------------------------ | ---------------------- | -| {{SpecName('XMLHttpRequest', '#handler-xhr-onreadystatechange')}} | {{Spec2('XMLHttpRequest')}} | WHATWG living standard | +{{Specifications}} ## Compatibilidade com navegadores -{{Compat("api.XMLHttpRequest.readystatechange_event")}} +{{Compat}} diff --git a/files/pt-br/web/api/xmlhttprequest/send/index.md b/files/pt-br/web/api/xmlhttprequest/send/index.md index cd0ef759fc997c..adcf7d65c506cd 100644 --- a/files/pt-br/web/api/xmlhttprequest/send/index.md +++ b/files/pt-br/web/api/xmlhttprequest/send/index.md @@ -36,9 +36,9 @@ A melhor maneira de enviar conteúdo binário (por exemplo, em uploads de arquiv ### Exceções -| Exceção | Descrição | -| ------------------- | ------------------------------------------------------------------------------------- | -| `InvalidStateError` | `send()` já foi invocado para a requisição, e/ou a requisição está completa. | +| Exceção | Descrição | +| ------------------- | -------------------------------------------------------------------------------- | +| `InvalidStateError` | `send()` já foi invocado para a requisição, e/ou a requisição está completa. | | `NetworkError` | O tipo de recurso a ser buscada é um {{domxref("Blob")}} e o método não é `GET`. | ## Exemplo: GET @@ -79,13 +79,11 @@ xhr.send("foo=bar&lorem=ipsum"); ## Especificações -| Especificação | Status | Comentário | -| ------------------------------------------------------------------------------------ | ------------------------------------ | ---------------------- | -| {{SpecName('XMLHttpRequest', '#the-send()-method', 'send()')}} | {{Spec2('XMLHttpRequest')}} | WHATWG living standard | +{{Specifications}} ## Compatibilidade com navegadores -{{Compat("api.XMLHttpRequest.send")}} +{{Compat}} ## Veja também diff --git a/files/pt-br/web/api/xmlhttprequest/setrequestheader/index.md b/files/pt-br/web/api/xmlhttprequest/setrequestheader/index.md index 80552c07938454..7fdbd8383a8ade 100644 --- a/files/pt-br/web/api/xmlhttprequest/setrequestheader/index.md +++ b/files/pt-br/web/api/xmlhttprequest/setrequestheader/index.md @@ -34,13 +34,11 @@ XMLHttpRequest.setRequestHeader(header, value) ## Especificações -| Especificação | Status | Comentário | -| -------------------------------------------------------------------------------------------------------------------- | ------------------------------------ | ---------------------- | -| {{SpecName('XMLHttpRequest', '#the-setRequestHeader()-method', 'setRequestHeader()')}} | {{Spec2('XMLHttpRequest')}} | WHATWG living standard | +{{Specifications}} ## Compatibilidade com navegadores -{{Compat("api.XMLHttpRequest.setRequestHeader")}} +{{Compat}} ## Veja também diff --git a/files/pt-br/web/api/xmlhttprequest/synchronous_and_asynchronous_requests/index.md b/files/pt-br/web/api/xmlhttprequest/synchronous_and_asynchronous_requests/index.md index a5ff321335e1a7..9490cbb22ee495 100644 --- a/files/pt-br/web/api/xmlhttprequest/synchronous_and_asynchronous_requests/index.md +++ b/files/pt-br/web/api/xmlhttprequest/synchronous_and_asynchronous_requests/index.md @@ -3,6 +3,7 @@ title: Requisições síncronas e assíncronas slug: Web/API/XMLHttpRequest/Synchronous_and_Asynchronous_Requests original_slug: Web/API/XMLHttpRequest/Requisicoes_sincronas_e_assincronas --- + `XMLHttpRequest` suporta comunicações síncronas e assíncronas. No geral, entretando, requisições assíncronas devem prevalecer sobre requisições síncronas por questões de performance. Requisições síncronas podem bloquear a execução do codigo, gerando um "congelamento" da tela, prejudicando a experiência do usuário. @@ -46,11 +47,18 @@ A requisição é, de fato, realizada na Linha 15. A rotina de _callback_ é inv Em alguns casos, você pode precisar ler muitos arquivos externos. Esta é uma função padrão que utiliza o objeto `XMLHttpRequest` de forma assíncrona para alternar o conteúdo do arquivo legível para um listener especificado. ```js -function xhrSuccess () { this.callback.apply(this, this.arguments); } +function xhrSuccess() { + this.callback.apply(this, this.arguments); +} -function xhrError () { console.error(this.statusText); } +function xhrError() { + console.error(this.statusText); +} -function loadFile (sURL, fCallback /*, argumentToPass1, argumentToPass2, etc. */) { +function loadFile( + sURL, + fCallback /*, argumentToPass1, argumentToPass2, etc. */, +) { var oReq = new XMLHttpRequest(); oReq.callback = fCallback; oReq.arguments = Array.prototype.slice.call(arguments, 2); @@ -64,7 +72,7 @@ function loadFile (sURL, fCallback /*, argumentToPass1, argumentToPass2, etc. */ Uso: ```js -function showMessage (sMsg) { +function showMessage(sMsg) { alert(sMsg + this.responseText); } @@ -94,25 +102,24 @@ Line 12 actually initiates the request. You can use a timeout to prevent hanging your code forever while waiting for a read to occur. This is done by setting the value of the `timeout` property on the `XMLHttpRequest` object, as shown in the code below: ```js -function loadFile(sUrl, timeout, callback){ - - var args = arguments.slice(3); - var xhr = new XMLHttpRequest(); - xhr.ontimeout = function () { - console.error("The request for " + url + " timed out."); - }; - xhr.onload = function() { - if (xhr.readyState === 4) { - if (xhr.status === 200) { - callback.apply(xhr, args); - } else { - console.error(xhr.statusText); - } - } - }; - xhr.open("GET", url, true); - xhr.timeout = timeout; - xhr.send(null); +function loadFile(sUrl, timeout, callback) { + var args = arguments.slice(3); + var xhr = new XMLHttpRequest(); + xhr.ontimeout = function () { + console.error("The request for " + url + " timed out."); + }; + xhr.onload = function () { + if (xhr.readyState === 4) { + if (xhr.status === 200) { + callback.apply(xhr, args); + } else { + console.error(xhr.statusText); + } + } + }; + xhr.open("GET", url, true); + xhr.timeout = timeout; + xhr.send(null); } ``` @@ -121,7 +128,7 @@ Notice the addition of code to handle the "timeout" event by setting the `ontime Usage: ```js -function showMessage (sMsg) { +function showMessage(sMsg) { alert(sMsg + this.responseText); } @@ -144,7 +151,7 @@ This example demonstrates how to make a simple synchronous request. ```js var request = new XMLHttpRequest(); -request.open('GET', '/bar/foo.txt', false); // `false` makes the request synchronous +request.open("GET", "/bar/foo.txt", false); // `false` makes the request synchronous request.send(null); if (request.status === 200) { @@ -165,19 +172,19 @@ One of the few cases in which a synchronous request does not usually block execu ```html - - -MDN Example - - - + + + MDN Example + + + ``` @@ -193,7 +200,7 @@ Hello World!! self.onmessage = function (event) { if (event.data === "Hello") { var xhr = new XMLHttpRequest(); - xhr.open("GET", "myFile.txt", false); // synchronous request + xhr.open("GET", "myFile.txt", false); // synchronous request xhr.send(null); self.postMessage(xhr.responseText); } @@ -211,13 +218,13 @@ There are some cases in which the synchronous usage of XMLHttpRequest was not re The following example (from the [sendBeacon docs](/pt-BR/docs/Web/API/Navigator/sendBeacon)) shows a theoretical analytics code that attempts to submit data to a server by using a synchronous XMLHttpRequest in an unload handler. This results in the unload of the page to be delayed. ```js -window.addEventListener('unload', logData, false); +window.addEventListener("unload", logData, false); function logData() { - var client = new XMLHttpRequest(); - client.open("POST", "/log", false); // third parameter indicates sync xhr. :( - client.setRequestHeader("Content-Type", "text/plain;charset=UTF-8"); - client.send(analyticsData); + var client = new XMLHttpRequest(); + client.open("POST", "/log", false); // third parameter indicates sync xhr. :( + client.setRequestHeader("Content-Type", "text/plain;charset=UTF-8"); + client.send(analyticsData); } ``` @@ -226,10 +233,10 @@ Using the **`sendBeacon()`** method, the data will be transmitted asynchronously The following example shows a theoretical analytics code pattern that submits data to a server using the by using the **`sendBeacon()`** method. ```js -window.addEventListener('unload', logData, false); +window.addEventListener("unload", logData, false); function logData() { - navigator.sendBeacon("/log", analyticsData); + navigator.sendBeacon("/log", analyticsData); } ``` diff --git a/files/pt-br/web/api/xmlhttprequest/timeout/index.md b/files/pt-br/web/api/xmlhttprequest/timeout/index.md index ab2db9d60ce4a4..fe9e68e9e793a9 100644 --- a/files/pt-br/web/api/xmlhttprequest/timeout/index.md +++ b/files/pt-br/web/api/xmlhttprequest/timeout/index.md @@ -17,7 +17,7 @@ No Internet Explorer, a propriedade timeout pode ser usada apenas depois de o m ```js var xhr = new XMLHttpRequest(); -xhr.open('GET', '/server', true); +xhr.open("GET", "/server", true); xhr.timeout = 2000; // tempo em milisegundos @@ -34,6 +34,8 @@ xhr.send(null); ## Especificações -| Especificação | Status | Comentários | -| ---------------------------------------------------------------------------- | ------------------------------------ | ---------------------- | -| {{SpecName('XMLHttpRequest', '#the-timeout-attribute')}} | {{Spec2('XMLHttpRequest')}} | WHATWG living standard | +{{Specifications}} + +## Compatibilidade com navegadores + +{{Compat}} diff --git a/files/pt-br/web/api/xmlhttprequest/using_xmlhttprequest/index.md b/files/pt-br/web/api/xmlhttprequest/using_xmlhttprequest/index.md index 22b3b0b94ee933..1f7abf5ed12ef8 100644 --- a/files/pt-br/web/api/xmlhttprequest/using_xmlhttprequest/index.md +++ b/files/pt-br/web/api/xmlhttprequest/using_xmlhttprequest/index.md @@ -7,9 +7,9 @@ original_slug: Web/API/XMLHttpRequest/Usando_XMLHttpRequest [`XMLHttpRequest`](/pt-BR/docs/DOM/XMLHttpRequest) torna o envio de requisições HTTP muito fácil. Basta criar uma instância do objeto, abrir uma url e enviar uma requisição. O [status](/pt-BR/docs/HTTP/HTTP_response_codes) [HTTP](/pt-BR/docs/HTTP/HTTP_response_codes)do resultado assim como o seu conteúdo estarão disponíveis quando a transação for completada. Esta página descreve alguns casos comuns de uso desse poderoso objeto JavaScript. ```js -function reqListener () { +function reqListener() { console.log(this.responseText); -}; +} var oReq = new XMLHttpRequest(); oReq.onload = reqListener; @@ -66,10 +66,10 @@ var oReq = new XMLHttpRequest(); oReq.open("GET", url, true); oReq.responseType = "arraybuffer"; -oReq.onload = function(e) { +oReq.onload = function (e) { var arraybuffer = oReq.response; // não é responseText /* ... */ -} +}; oReq.send(); ``` @@ -94,7 +94,7 @@ oReq.open(); // ...A transferência foi cancelada pelo usuário // progresso de transferências do servidor para o cliente (downloads) -function updateProgress (oEvent) { +function updateProgress(oEvent) { if (oEvent.lengthComputable) { var percentComplete = oEvent.loaded / oEvent.total; // ... @@ -149,7 +149,9 @@ POde-se também detectar todas as três condições de fim de carga (`abort`, `l req.addEventListener("loadend", loadEnd, false); function loadEnd(e) { - alert("A transferência terminou (embora não sabemos se ele conseguiu ou não)."); + alert( + "A transferência terminou (embora não sabemos se ele conseguiu ou não).", + ); } ``` @@ -229,12 +231,11 @@ All these things are done automatically by the web browser whenever you submit a ```html - - -Sending forms with pure AJAX – MDN - - - - -

Sending forms with pure AJAX

- -

Using the GET method

- -
-
- Registration example -

- First name:
- Last name: -

-

- -

-
-
- -

Using the POST method

-

Enctype: application/x-www-form-urlencoded (default)

- -
-
- Registration example -

- First name:
- Last name: -

-

- -

-
-
- -

Enctype: text/plain

- -
-
- Registration example -

- Your name: -

-

- Your message:
- -

-

- -

-
-
- -

Enctype: multipart/form-data

- -
-
- Upload example -

- First name:
- Last name:
- Sex: - -
- Password:
- What do you prefer: - -

-

- Post your photos: - -

-

-
- -

-

- Describe yourself:
- -

-

- -

-
-
- - + return function (oFormElement) { + if (!oFormElement.action) { + return; + } + new SubmitRequest(oFormElement); + }; + })(); + + + +

Sending forms with pure AJAX

+ +

Using the GET method

+ +
+
+ Registration example +

+ First name:
+ Last name: +

+

+ +

+
+
+ +

Using the POST method

+

Enctype: application/x-www-form-urlencoded (default)

+ +
+
+ Registration example +

+ First name:
+ Last name: +

+

+ +

+
+
+ +

Enctype: text/plain

+ +
+
+ Registration example +

Your name:

+

+ Your message:
+ +

+

+ +

+
+
+ +

Enctype: multipart/form-data

+ +
+
+ Upload example +

+ First name:
+ Last name:
+ Sex: + + + +
+ Password:
+ What do you prefer: + +

+

+ Post your photos: + +

+

+ +
+ + +

+

+ Describe yourself:
+ +

+

+ +

+
+
+ ``` @@ -511,118 +599,166 @@ The [`FormData`](/pt-BR/docs/DOM/XMLHttpRequest/FormData) constructor lets you c ```html - - -Sending forms with FormData – MDN - - - - -

Sending forms with FormData

- -

Using the GET method

- -
-
- Registration example -

- First name:
- Last name: -

-

- -

-
-
- -

Using the POST method

-

Enctype: application/x-www-form-urlencoded (default)

- -
-
- Registration example -

- First name:
- Last name: -

-

- -

-
-
- -

Enctype: text/plain

- -

The text/plain encoding is not supported by the FormData API.

- -

Enctype: multipart/form-data

- -
-
- Upload example -

- First name:
- Last name:
- Sex: - -
- Password:
- What do you prefer: - -

-

- Post your photos: - -

-

-
- -

-

- Describe yourself:
- -

-

- -

-
-
- - + + + +

Sending forms with FormData

+ +

Using the GET method

+ +
+
+ Registration example +

+ First name:
+ Last name: +

+

+ +

+
+
+ +

Using the POST method

+

Enctype: application/x-www-form-urlencoded (default)

+ +
+
+ Registration example +

+ First name:
+ Last name: +

+

+ +

+
+
+ +

Enctype: text/plain

+ +

The text/plain encoding is not supported by the FormData API.

+ +

Enctype: multipart/form-data

+ +
+
+ Upload example +

+ First name:
+ Last name:
+ Sex: + + + +
+ Password:
+ What do you prefer: + +

+

+ Post your photos: + +

+

+ +
+ + +

+

+ Describe yourself:
+ +

+

+ +

+
+
+ ``` @@ -648,7 +784,11 @@ You can automatically adjust URLs using the following code: ```js var oReq = new XMLHttpRequest(); -oReq.open("GET", url + ((/\?/).test(url) ? "&" : "?") + (new Date()).getTime(), true); +oReq.open( + "GET", + url + (/\?/.test(url) ? "&" : "?") + new Date().getTime(), + true, +); oReq.send(null); ``` @@ -665,16 +805,18 @@ If you end up with an XMLHttpRequest having `status=0` and `statusText=null`, it Instantiating `XMLHttpRequest` from a [JavaScript module](/pt-BR/docs/JavaScript_code_modules/Using) or an XPCOM component works a little differently; it can't be instantiated using the `XMLHttpRequest()` constructor. The constructor is not defined inside components and the code results in an error. The best way to work around this is to use the XPCOM component constructor. ```js -const XMLHttpRequest = Components.Constructor("@mozilla.org/xmlextras/xmlhttprequest;1"); +const XMLHttpRequest = Components.Constructor( + "@mozilla.org/xmlextras/xmlhttprequest;1", +); var oReq = XMLHttpRequest(); ``` Unfortunately in versions of Gecko prior to Gecko 16 there is a bug which can cause requests created this way to be cancelled for no reason. If you need your code to work on Gecko 15 or earlier, you can get the XMLHttpRequest constructor from the hidden DOM window like so. ```js -const { XMLHttpRequest } = Components.classes["@mozilla.org/appshell/appShellService;1"] - .getService(Components.interfaces.nsIAppShellService) - .hiddenDOMWindow; +const { XMLHttpRequest } = Components.classes[ + "@mozilla.org/appshell/appShellService;1" +].getService(Components.interfaces.nsIAppShellService).hiddenDOMWindow; var oReq = XMLHttpRequest(); ```