From 68fc8e96a9629e73469ed457abd955e548ec670c Mon Sep 17 00:00:00 2001 From: Florian Merz Date: Thu, 11 Feb 2021 14:49:58 +0100 Subject: unslug pt-br: move --- files/pt-br/web/api/api_de_desempenho/index.html | 138 --- .../web/api/api_push/best_practices/index.html | 73 -- files/pt-br/web/api/api_push/index.html | 172 --- files/pt-br/web/api/api_web_audio/index.html | 480 -------- .../api_web_audio/sintetizador_simples/index.html | 579 --------- .../web/api/audiocontext/currenttime/index.html | 114 -- .../api/baseaudiocontext/currenttime/index.html | 114 ++ files/pt-br/web/api/battery_status_api/index.html | 58 + .../ondischargingtimechange/index.html | 35 + .../ondischargintimechange/index.html | 35 - .../api/canvas_api/a_basic_ray-caster/index.html | 76 ++ files/pt-br/web/api/canvas_api/index.html | 134 ++ .../tutorial/advanced_animations/index.html | 386 ++++++ .../tutorial/applying_styles_and_colors/index.html | 725 +++++++++++ .../tutorial/basic_animations/index.html | 331 +++++ .../api/canvas_api/tutorial/basic_usage/index.html | 153 +++ .../tutorial/compositing/example/index.html | 294 +++++ .../api/canvas_api/tutorial/compositing/index.html | 112 ++ .../canvas_api/tutorial/drawing_shapes/index.html | 581 +++++++++ .../canvas_api/tutorial/drawing_text/index.html | 169 +++ .../web/api/canvas_api/tutorial/finale/index.html | 49 + files/pt-br/web/api/canvas_api/tutorial/index.html | 56 + .../tutorial/optimizing_canvas/index.html | 115 ++ .../canvas_api/tutorial/using_images/index.html | 333 +++++ .../web/api/crypto/getrandomvalues/index.html | 116 ++ files/pt-br/web/api/cryptokey/algorithm/index.html | 113 -- .../pt-br/web/api/cryptokey/extractable/index.html | 111 -- files/pt-br/web/api/cryptokey/type/index.html | 118 -- files/pt-br/web/api/cryptokey/usages/index.html | 124 -- files/pt-br/web/api/deviceacceleration/index.html | 43 - .../api/devicemotioneventacceleration/index.html | 43 + .../api/devicemotioneventrotationrate/index.html | 93 ++ files/pt-br/web/api/devicerotationrate/index.html | 93 -- .../web/api/document/activeelement/index.html | 165 --- .../web/api/document/elementfrompoint/index.html | 133 -- .../web/api/document/elementoregistrado/index.html | 132 -- .../pt-br/web/api/document/getselection/index.html | 9 - .../api/document/readystatechange_event/index.html | 83 ++ .../web/api/document/registerelement/index.html | 132 ++ .../api/document_object_model/events/index.html | 82 ++ .../api/document_object_model/examples/index.html | 376 ++++++ .../how_to_create_a_dom_tree/index.html | 145 +++ .../pt-br/web/api/document_object_model/index.html | 379 ++++++ .../document_object_model/introduction/index.html | 251 ++++ .../document_object_model/whitespace/index.html | 227 ++++ .../documentorshadowroot/activeelement/index.html | 165 +++ .../elementfrompoint/index.html | 133 ++ .../documentorshadowroot/getselection/index.html | 9 + files/pt-br/web/api/element/accesskey/index.html | 19 - .../web/api/element/addeventlistener/index.html | 322 ----- files/pt-br/web/api/element/blur_event/index.html | 154 +++ files/pt-br/web/api/element/focus_event/index.html | 137 +++ .../pt-br/web/api/element/focusin_event/index.html | 125 ++ .../web/api/element/focusout_event/index.html | 125 ++ files/pt-br/web/api/element/name/index.html | 80 -- .../comparativo_entre_event_targets/index.html | 167 --- .../event/comparison_of_event_targets/index.html | 167 +++ .../api/eventtarget/addeventlistener/index.html | 322 +++++ .../fetch_api/cross-global_fetch_usage/index.html | 35 + .../fetch_api/uso_de_busca_cross-global/index.html | 35 - files/pt-br/web/api/geolocation_api/index.html | 227 ++++ files/pt-br/web/api/history_api/example/index.html | 418 +++++++ files/pt-br/web/api/history_api/exemplo/index.html | 418 ------- .../file_drag_and_drop/index.html | 91 ++ .../web/api/html_drag_and_drop_api/index.html | 258 ++++ .../web/api/htmlcontentelement/select/index.html | 98 ++ .../web/api/htmlcontentelement/seletor/index.html | 98 -- .../pt-br/web/api/htmlelement/accesskey/index.html | 19 + files/pt-br/web/api/htmlelement/blur/index.html | 89 -- files/pt-br/web/api/htmlelement/dataset/index.html | 97 -- files/pt-br/web/api/htmlelement/focus/index.html | 62 - .../pt-br/web/api/htmlelement/innertext/index.html | 86 ++ .../web/api/htmlelement/input_event/index.html | 248 ++++ .../api/htmlmediaelement/abort_event/index.html | 70 ++ .../web/api/htmlorforeignelement/blur/index.html | 89 ++ .../api/htmlorforeignelement/dataset/index.html | 97 ++ .../web/api/htmlorforeignelement/focus/index.html | 62 + .../api/indexeddb_api/usando_indexeddb/index.html | 1281 -------------------- .../api/indexeddb_api/using_indexeddb/index.html | 1281 ++++++++++++++++++++ .../web/api/network_information_api/index.html | 56 + .../index.html" | 55 - files/pt-br/web/api/node/innertext/index.html | 86 -- files/pt-br/web/api/notificacoes/index.html | 217 ---- files/pt-br/web/api/notification/index.html | 217 ++++ files/pt-br/web/api/performance_api/index.html | 138 +++ .../web/api/push_api/best_practices/index.html | 73 ++ files/pt-br/web/api/push_api/index.html | 172 +++ .../api/randomsource/getrandomvalues/index.html | 116 -- files/pt-br/web/api/randomsource/index.html | 109 -- files/pt-br/web/api/selection/index.html | 206 ++++ .../web/api/sele\303\247\303\243o/index.html" | 206 ---- .../api/svgaelement/svgalement.target/index.html | 106 -- files/pt-br/web/api/svgaelement/target/index.html | 106 ++ files/pt-br/web/api/touch_events/index.html | 353 ++++++ .../usando_a_web_animations_api/index.html | 358 ------ .../using_the_web_animations_api/index.html | 358 ++++++ files/pt-br/web/api/web_audio_api/index.html | 480 ++++++++ .../web/api/web_audio_api/simple_synth/index.html | 579 +++++++++ files/pt-br/web/api/web_storage_api/index.html | 139 +++ .../using_the_web_storage_api/index.html | 267 ++++ .../pt-br/web/api/web_storage_api_pt_br/index.html | 139 --- .../using_the_web_storage_api/index.html | 267 ---- .../index.html | 226 ++++ .../index.html | 226 ---- .../simple_rtcdatachannel_sample/index.html | 272 +++++ .../simples_rtcdatachannel_amostra/index.html | 272 ----- files/pt-br/web/api/websockets_api/index.html | 178 +++ .../index.html | 182 +++ .../writing_websocket_server/index.html | 237 ++++ .../writing_websocket_servers/index.html | 263 ++++ .../web/api/window/beforeunload_event/index.html | 106 ++ .../api/window/domcontentloaded_event/index.html | 177 +++ files/pt-br/web/api/window/load_event/index.html | 89 ++ files/pt-br/web/api/window/localstorage/index.html | 123 ++ files/pt-br/web/api/window/onscroll/index.html | 99 -- files/pt-br/web/api/window/url/index.html | 101 -- .../web/api/window/window.localstorage/index.html | 123 -- files/pt-br/web/api/windowbase64/atob/index.html | 72 -- files/pt-br/web/api/windowbase64/index.html | 121 -- .../api/windoworworkerglobalscope/atob/index.html | 72 ++ .../cleartimeout/index.html | 100 ++ .../web/api/windowtimers/cleartimeout/index.html | 100 -- files/pt-br/web/api/windowtimers/index.html | 117 -- .../requisicoes_sincronas_e_assincronas/index.html | 234 ---- .../index.html | 234 ++++ .../usando_xmlhttprequest/index.html | 688 ----------- .../xmlhttprequest/using_xmlhttprequest/index.html | 688 +++++++++++ 127 files changed, 16155 insertions(+), 9112 deletions(-) delete mode 100644 files/pt-br/web/api/api_de_desempenho/index.html delete mode 100644 files/pt-br/web/api/api_push/best_practices/index.html delete mode 100644 files/pt-br/web/api/api_push/index.html delete mode 100644 files/pt-br/web/api/api_web_audio/index.html delete mode 100644 files/pt-br/web/api/api_web_audio/sintetizador_simples/index.html delete mode 100644 files/pt-br/web/api/audiocontext/currenttime/index.html create mode 100644 files/pt-br/web/api/baseaudiocontext/currenttime/index.html create mode 100644 files/pt-br/web/api/battery_status_api/index.html create mode 100644 files/pt-br/web/api/batterymanager/ondischargingtimechange/index.html delete mode 100644 files/pt-br/web/api/batterymanager/ondischargintimechange/index.html create mode 100644 files/pt-br/web/api/canvas_api/a_basic_ray-caster/index.html create mode 100644 files/pt-br/web/api/canvas_api/index.html create mode 100644 files/pt-br/web/api/canvas_api/tutorial/advanced_animations/index.html create mode 100644 files/pt-br/web/api/canvas_api/tutorial/applying_styles_and_colors/index.html create mode 100644 files/pt-br/web/api/canvas_api/tutorial/basic_animations/index.html create mode 100644 files/pt-br/web/api/canvas_api/tutorial/basic_usage/index.html create mode 100644 files/pt-br/web/api/canvas_api/tutorial/compositing/example/index.html create mode 100644 files/pt-br/web/api/canvas_api/tutorial/compositing/index.html create mode 100644 files/pt-br/web/api/canvas_api/tutorial/drawing_shapes/index.html create mode 100644 files/pt-br/web/api/canvas_api/tutorial/drawing_text/index.html create mode 100644 files/pt-br/web/api/canvas_api/tutorial/finale/index.html create mode 100644 files/pt-br/web/api/canvas_api/tutorial/index.html create mode 100644 files/pt-br/web/api/canvas_api/tutorial/optimizing_canvas/index.html create mode 100644 files/pt-br/web/api/canvas_api/tutorial/using_images/index.html create mode 100644 files/pt-br/web/api/crypto/getrandomvalues/index.html delete mode 100644 files/pt-br/web/api/cryptokey/algorithm/index.html delete mode 100644 files/pt-br/web/api/cryptokey/extractable/index.html delete mode 100644 files/pt-br/web/api/cryptokey/type/index.html delete mode 100644 files/pt-br/web/api/cryptokey/usages/index.html delete mode 100644 files/pt-br/web/api/deviceacceleration/index.html create mode 100644 files/pt-br/web/api/devicemotioneventacceleration/index.html create mode 100644 files/pt-br/web/api/devicemotioneventrotationrate/index.html delete mode 100644 files/pt-br/web/api/devicerotationrate/index.html delete mode 100644 files/pt-br/web/api/document/activeelement/index.html delete mode 100644 files/pt-br/web/api/document/elementfrompoint/index.html delete mode 100644 files/pt-br/web/api/document/elementoregistrado/index.html delete mode 100644 files/pt-br/web/api/document/getselection/index.html create mode 100644 files/pt-br/web/api/document/readystatechange_event/index.html create mode 100644 files/pt-br/web/api/document/registerelement/index.html create mode 100644 files/pt-br/web/api/document_object_model/events/index.html create mode 100644 files/pt-br/web/api/document_object_model/examples/index.html create mode 100644 files/pt-br/web/api/document_object_model/how_to_create_a_dom_tree/index.html create mode 100644 files/pt-br/web/api/document_object_model/index.html create mode 100644 files/pt-br/web/api/document_object_model/introduction/index.html create mode 100644 files/pt-br/web/api/document_object_model/whitespace/index.html create mode 100644 files/pt-br/web/api/documentorshadowroot/activeelement/index.html create mode 100644 files/pt-br/web/api/documentorshadowroot/elementfrompoint/index.html create mode 100644 files/pt-br/web/api/documentorshadowroot/getselection/index.html delete mode 100644 files/pt-br/web/api/element/accesskey/index.html delete mode 100644 files/pt-br/web/api/element/addeventlistener/index.html create mode 100644 files/pt-br/web/api/element/blur_event/index.html create mode 100644 files/pt-br/web/api/element/focus_event/index.html create mode 100644 files/pt-br/web/api/element/focusin_event/index.html create mode 100644 files/pt-br/web/api/element/focusout_event/index.html delete mode 100644 files/pt-br/web/api/element/name/index.html delete mode 100644 files/pt-br/web/api/event/comparativo_entre_event_targets/index.html create mode 100644 files/pt-br/web/api/event/comparison_of_event_targets/index.html create mode 100644 files/pt-br/web/api/eventtarget/addeventlistener/index.html create mode 100644 files/pt-br/web/api/fetch_api/cross-global_fetch_usage/index.html delete mode 100644 files/pt-br/web/api/fetch_api/uso_de_busca_cross-global/index.html create mode 100644 files/pt-br/web/api/geolocation_api/index.html create mode 100644 files/pt-br/web/api/history_api/example/index.html delete mode 100644 files/pt-br/web/api/history_api/exemplo/index.html create mode 100644 files/pt-br/web/api/html_drag_and_drop_api/file_drag_and_drop/index.html create mode 100644 files/pt-br/web/api/html_drag_and_drop_api/index.html create mode 100644 files/pt-br/web/api/htmlcontentelement/select/index.html delete mode 100644 files/pt-br/web/api/htmlcontentelement/seletor/index.html create mode 100644 files/pt-br/web/api/htmlelement/accesskey/index.html delete mode 100644 files/pt-br/web/api/htmlelement/blur/index.html delete mode 100644 files/pt-br/web/api/htmlelement/dataset/index.html delete mode 100644 files/pt-br/web/api/htmlelement/focus/index.html create mode 100644 files/pt-br/web/api/htmlelement/innertext/index.html create mode 100644 files/pt-br/web/api/htmlelement/input_event/index.html create mode 100644 files/pt-br/web/api/htmlmediaelement/abort_event/index.html create mode 100644 files/pt-br/web/api/htmlorforeignelement/blur/index.html create mode 100644 files/pt-br/web/api/htmlorforeignelement/dataset/index.html create mode 100644 files/pt-br/web/api/htmlorforeignelement/focus/index.html delete mode 100644 files/pt-br/web/api/indexeddb_api/usando_indexeddb/index.html create mode 100644 files/pt-br/web/api/indexeddb_api/using_indexeddb/index.html create mode 100644 files/pt-br/web/api/network_information_api/index.html delete mode 100644 "files/pt-br/web/api/node/entendendo_o_uso_do_m\303\251todo_appendchild-javascript/index.html" delete mode 100644 files/pt-br/web/api/node/innertext/index.html delete mode 100644 files/pt-br/web/api/notificacoes/index.html create mode 100644 files/pt-br/web/api/notification/index.html create mode 100644 files/pt-br/web/api/performance_api/index.html create mode 100644 files/pt-br/web/api/push_api/best_practices/index.html create mode 100644 files/pt-br/web/api/push_api/index.html delete mode 100644 files/pt-br/web/api/randomsource/getrandomvalues/index.html delete mode 100644 files/pt-br/web/api/randomsource/index.html create mode 100644 files/pt-br/web/api/selection/index.html delete mode 100644 "files/pt-br/web/api/sele\303\247\303\243o/index.html" delete mode 100644 files/pt-br/web/api/svgaelement/svgalement.target/index.html create mode 100644 files/pt-br/web/api/svgaelement/target/index.html create mode 100644 files/pt-br/web/api/touch_events/index.html delete mode 100644 files/pt-br/web/api/web_animations_api/usando_a_web_animations_api/index.html create mode 100644 files/pt-br/web/api/web_animations_api/using_the_web_animations_api/index.html create mode 100644 files/pt-br/web/api/web_audio_api/index.html create mode 100644 files/pt-br/web/api/web_audio_api/simple_synth/index.html create mode 100644 files/pt-br/web/api/web_storage_api/index.html create mode 100644 files/pt-br/web/api/web_storage_api/using_the_web_storage_api/index.html delete mode 100644 files/pt-br/web/api/web_storage_api_pt_br/index.html delete mode 100644 files/pt-br/web/api/web_storage_api_pt_br/using_the_web_storage_api/index.html create mode 100644 files/pt-br/web/api/webgl_api/tutorial/adding_2d_content_to_a_webgl_context/index.html delete mode 100644 files/pt-br/web/api/webgl_api/tutorial/adicionando_conteudo_2d_a_um_contexto_webgl/index.html create mode 100644 files/pt-br/web/api/webrtc_api/simple_rtcdatachannel_sample/index.html delete mode 100644 files/pt-br/web/api/webrtc_api/simples_rtcdatachannel_amostra/index.html create mode 100644 files/pt-br/web/api/websockets_api/index.html create mode 100644 files/pt-br/web/api/websockets_api/writing_websocket_client_applications/index.html create mode 100644 files/pt-br/web/api/websockets_api/writing_websocket_server/index.html create mode 100644 files/pt-br/web/api/websockets_api/writing_websocket_servers/index.html create mode 100644 files/pt-br/web/api/window/beforeunload_event/index.html create mode 100644 files/pt-br/web/api/window/domcontentloaded_event/index.html create mode 100644 files/pt-br/web/api/window/load_event/index.html create mode 100644 files/pt-br/web/api/window/localstorage/index.html delete mode 100644 files/pt-br/web/api/window/onscroll/index.html delete mode 100644 files/pt-br/web/api/window/url/index.html delete mode 100644 files/pt-br/web/api/window/window.localstorage/index.html delete mode 100644 files/pt-br/web/api/windowbase64/atob/index.html delete mode 100644 files/pt-br/web/api/windowbase64/index.html create mode 100644 files/pt-br/web/api/windoworworkerglobalscope/atob/index.html create mode 100644 files/pt-br/web/api/windoworworkerglobalscope/cleartimeout/index.html delete mode 100644 files/pt-br/web/api/windowtimers/cleartimeout/index.html delete mode 100644 files/pt-br/web/api/windowtimers/index.html delete mode 100644 files/pt-br/web/api/xmlhttprequest/requisicoes_sincronas_e_assincronas/index.html create mode 100644 files/pt-br/web/api/xmlhttprequest/synchronous_and_asynchronous_requests/index.html delete mode 100644 files/pt-br/web/api/xmlhttprequest/usando_xmlhttprequest/index.html create mode 100644 files/pt-br/web/api/xmlhttprequest/using_xmlhttprequest/index.html (limited to 'files/pt-br/web/api') diff --git a/files/pt-br/web/api/api_de_desempenho/index.html b/files/pt-br/web/api/api_de_desempenho/index.html deleted file mode 100644 index 1b6997e293..0000000000 --- a/files/pt-br/web/api/api_de_desempenho/index.html +++ /dev/null @@ -1,138 +0,0 @@ ---- -title: API de Desempenho -slug: Web/API/API_de_Desempenho -translation_of: Web/API/Performance_API ---- -
{{DefaultAPISidebar("High Resolution Time")}}
- -

The High Resolution Time standard defines a {{domxref("Performance")}} interface that supports client-side latency measurements within applications. The {{domxref("Performance")}} interfaces are considered high resolution because they are accurate to a thousandth of a millisecond (subject to hardware or software constraints). The interfaces support a number of use cases including calculating frame-rates (potentially important in animations) and benchmarking (such as the time to load a resource).

- -

Since a platform's system clock is subject to various skews (such as NTP adjustments), the interfaces support a monotonic clock i.e. a clock that is always increasing. As such, the Performance API defines a {{domxref("DOMHighResTimeStamp")}} type rather than using the {{jsxref("Date.now","Date.now()")}} interface.

- -

DOMHighResTimeStamp

- -

The {{domxref("DOMHighResTimeStamp")}} type, as its name implies, represents a high resolution point in time. This type is a double and is used by the performance interfaces. The value could be a discrete point in time or the difference in time between two discrete points in time.

- -

The unit of DOMHighResTimeStamp is milliseconds and should be accurate to 5 µs (microseconds). However, If the browser is unable to provide a time value accurate to 5 microseconds (because, for example, due to hardware or software constraints), the browser can represent the value as a time in milliseconds accurate to a millisecond.

- -

Methods

- -

The {{domxref("Performance")}} interface has two methods. The {{domxref("Performance.now","now()")}} method returns a {{domxref("DOMHighResTimeStamp")}} whose value that depends on the {{domxref("PerformanceTiming.navigationStart","navigation start")}} and scope. If the scope is a window, the value is the time the browser context was created and if the scope is a {{domxref("Worker","worker")}}, the value is the time the worker was created.

- -

The {{domxref("Performance.toJSON","toJSON()")}} method returns a serialization of the {{domxref("Performance")}} object, for those attributes that can be serialized.

- -

Properties

- -

The {{domxref("Performance")}} interface has two properties. The {{domxref("Performance.timing","timing")}} property returns a {{domxref("PerformanceTiming")}} object containing latency-related performance information such as the start of navigation time, start and end times for redirects, start and end times for responses, etc.

- -

The {{domxref("Performance.navigation","navigation")}} property returns a {{domxref("PerformanceNavigation")}} object representing the type of navigation that occurs in the given browsing context, such as the page was navigated to from history, the page was navigated to by following a link, etc.

- -

Interfaces

- -
-
{{domxref('Performance')}}
-
Provides methods and properties containing timing-related performance information for the given page.
-
{{domxref('PerformanceEntry')}}
-
Provides methods and properties the encapsulate a single performance metric that is part of the performance timeline.
-
{{domxref('PerformanceFrameTiming')}}
-
Provides methods and properties containing frame timing data about the browser's event loop.
-
{{domxref('PerformanceMark')}}
-
An abstract interface for performance entries with an entry type of "mark". Entries of this type are created by calling performance.mark() to add a named DOMHighResTimeStamp (the mark) to the browser's performance timeline.
-
{{domxref('PerformanceMeasure')}}
-
An abstract interface for performance entries with an entry type of "measure". Entries of this type are created by calling performance.measure() to add a namedDOMHighResTimeStamp (the measure) between two marks to the browser's performance timeline.
-
{{domxref('PerformanceNavigationTiming')}}
-
Provides methods and properties to store and retrieve high resolution timestamps or metrics regarding the browser's document navigation events.
-
{{domxref('PerformanceObserver')}}
-
Provides methods and properties used to observe performance measurement events and be notified of new performance entries as they are recorded in the browser's performance timeline.
-
{{domxref('PerformanceResourceTiming')}}
-
Provides methods and properties for retrieving and analyzing detailed network timing data regarding the loading of an application's resources.
-
- -

Specifications

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
SpecificationStatusComment
{{SpecName('Highres Time')}}{{Spec2('Highres Time')}}Initial definition.
{{SpecName('Highres Time Level 2')}}{{Spec2('Highres Time Level 2')}}Adds performance attribute on Window and WorkerGlobalScope.
{{SpecName('Highres Time Level 3')}}{{Spec2('Highres Time Level 3')}}Add timeOrigin property to Performance interface.
{{SpecName('Frame Timing')}}{{Spec2('Frame Timing')}}Adds PerformanceFrameTiming interface.
{{SpecName('Navigation Timing')}}{{Spec2('Navigation Timing')}}Adds the PerformanceTiming and PerformanceNavigation interfaces. Adds timing and navigation properties to the Performance interface.
{{SpecName('Navigation Timing Level 2')}}{{Spec2('Navigation Timing Level 2')}}Adds the PerformanceNavigationTiming interface. Obsolete's the the PerformanceTiming interface, the PerformanceNavigation interface, as well as the timing and navigation properties to the Performance interface.
{{SpecName('Performance Timeline')}}{{Spec2('Performance Timeline')}}Adds the PerformanceEntry interface, the PerformanceEntryList type, as well as the getEntries(), getEntriesByType(), and getEntriesByName() methods on the Performance interface.
{{SpecName('Performance Timeline Level 2')}}{{Spec2('Performance Timeline Level 2')}}Adds serializer to the PerformanceEntry interface as well as adding the PerformanceObserver interface and callback
{{SpecName('Resource Timing')}}{{Spec2('Resource Timing')}}Adds the PerformanceResourceTiming interface. Adds the clearResourceTimings() method, the setResourceTimingBufferSize() method, and the onresourcetimingbufferfull event handler to the Performance interface. Also adds the Timing-Allow-Origin response header.
{{SpecName('Resource Timing 2')}}{{Spec2('Resource Timing 2')}}Adds the nextHopProtocol, workerStart, transferSize, encodedBodySize, and decodedBodySize properties to the PerformanceResourceTiming interface.
{{SpecName('Resource Timing 3')}}{{Spec2('Resource Timing 3')}}
{{SpecName('User Timing')}}{{Spec2('User Timing')}}Adds mark(), clearMarks(), measure() and clearMeasures() methods to the Performance interface. Adds the PerformanceMark and PeformanceMeasure interfaces.
{{SpecName('User Timing Level 2')}}{{Spec2('User Timing Level 2')}}
- -

Implementation status

- -

As shown in the {{domxref("Performance")}} interface's Browser Compatibility table, most of these interfaces are broadly implemented by desktop browsers.

- -

To test your browser's support for the {{domxref("Performance")}} interface, run the perf-api-support application.

- -

See Also

- - diff --git a/files/pt-br/web/api/api_push/best_practices/index.html b/files/pt-br/web/api/api_push/best_practices/index.html deleted file mode 100644 index 9b0fafd2b7..0000000000 --- a/files/pt-br/web/api/api_push/best_practices/index.html +++ /dev/null @@ -1,73 +0,0 @@ ---- -title: Melhores práticas -slug: Web/API/API_Push/Best_Practices -tags: - - Apps - - Iniciante - - Melhores Práticas - - Notificações - - Push API - - Usabilidade -translation_of: Web/API/Push_API/Best_Practices ---- -

{{draft}}

- -

Este artigo proporciona um compilado das melhores práticas a serem usadas enquanto estiver desenvolvendo websites e aplicações que usem Notificações push para engajamento de usuários.

- -
-

“Se feito de uma maneira correta, as notificações ajudam os usuarios, se não, so irritam.” — Conversa entre dois desenvolvedores a respeito da etica das notificações push.

-
- -

Visão Geral do web push notifications

- -

Notificações Web Push (criadas usando uma combinação das APIs de Notificações, Push e Service Worker) são parte de um movimento crescente em que desenvolvedores e comerciantes estão usando para conseguir atenção para seus sites. Uma procura rápida pelo termo "web push notifications", irá resultar em vários artigos, em que especialistas em marketing que acreditam que deve-se usar a API de Push para recapturar a atenção de pessoas que saíram de seu site para que possam terminar o que estavam fazendo, por exemplo, uma compra, ou então enviar as últimas notícias e até recomendação de produtos

- -

O Lado obscuro

- -

Essa novidade oferece uma oportunidade nova e inexplorada para sites empresariais chegarem aos seus consumidores finais. Seu usuário trocou de aba para responder um email? Consiga-os de volta com uma oferta que expira em um tempo limitado ou oferecendo frete grátis, o qual ele não vai poder ignorar

- -

Mas sério, qual o melhor uso das notificações push? Ou é apenas uma nova interação dos bons e velhos pop-ups?

- -
-

O envio de notificações push não corre o risco de acabar na pasta de spam. Nem pode ser bloqueado por bloqueadores de anúncios. Ele aparece na sua área de trabalho, mesmo quando o site está fechado. No celular, ele aparece na barra de notificações, assim como as notificações por push do aplicativo, mesmo quando o navegador não está em execução.” — um site de marketing anonimo

-
- -

Bons usos das notificações

- -

Mas há também um lado bom no que se diz respeito as notificações por push. Digamos que você e sua equipe usem normalmente um programa de bate-papo para se comunicar, mas hoje você está feliz e saltitante trabalhando e surge um problema. Digamos que seu gerente tenha encontrado um problema nas aprovações e queira receber seu feedback sobre algo antes que ela prossiga.

- -

Neste documento, falaremos sobre o uso correto das notificações por push da web. Às vezes, eles podem eliminar a frustração e o aborrecimento e, às vezes, causá-los. Cabe a você, como desenvolvedor, fazer recomendações (e decisões) sábias sobre o uso de notificações por push.

- -

O que se espera alcançar com as notificações push?

- -

Como tudo, com grande poder vem uma grande responsabilidade. Toda notificação push devem ser úteis e sensíveis ao tempo, o usuário sempre deve fornecer a permissão antes de recebe-la primeiro e deve-se oferecer uma maneira fácil de optar por não receber mais no futuro.

- -

Temos que responder algumas perguntas basicas para verificar se as notificações são necessarias:

- - - -

Além da questão de saber se uma notificação por push é necessária, existem muitas variedades de notificações por push, variando de casual e efêmera a persistente e exigente.

- -

Aconselhamos que você use as notificações que exigem uma interação de forma conciente e com moderação, pois estas podem irritar seu usuario e afasta-lo. Suas notificações devem ser acolhedoras, não hostis.

- -

Gerando confiança

- -

Alguns estudos mostraram que até 60% das notificações por push não chegam ao usuário final. Permitir que seu usuario receba notificações por push em tempo real exige confiança, por parte do aplicativo. Você pode criar confiança ao ter um site bem projetado que forneça um bom conteúdo e que mostre respeito pelo usuário alem de um valor claro para que o usuario aceite as notificações push.

- -

Mitigações dos navegadores

- -

Por causa dos abusos da utilização das notificações por push no passado, os desenvolvedores de navegadores começaram a implementar estratégias para ajudar a mitigar esse problema. Por exemplo, o Safari 12.1 agora exige - e outros navegadores já o fazem ou estão planejando[1] fazer—que o usuário interaja com a página de alguma forma antes que ela possa solicitar permissão para executar notificações por push, assim como já acontece com os popups. Isso pelo menos impede que o usuário receba espontaneamente essa pergunta em páginas da Web que apenas olharam de uma só vez, raramente ou nunca mais.

- -

[1] No caso do Firefox, veja {{bug(1524619)}}, podemos observar que Firefox 68 implementa isso, desabilitado por padrão, usando a preferência dom.webnotifications.requireuserinteraction.

- -

Veja também

- - diff --git a/files/pt-br/web/api/api_push/index.html b/files/pt-br/web/api/api_push/index.html deleted file mode 100644 index 563b711cd8..0000000000 --- a/files/pt-br/web/api/api_push/index.html +++ /dev/null @@ -1,172 +0,0 @@ ---- -title: API Push -slug: Web/API/API_Push -tags: - - API - - Experimental - - Notificações - - Push - - Referencia - - Service Workers -translation_of: Web/API/Push_API ---- -
{{DefaultAPISidebar("Push API")}}{{SeeCompatTable}}
- -

A API Push torna possível que aplicações web recebam mensagens enviadas a elas de um servidor, indepententemente de aplicação estar ou não em primeiro plano, ou até mesmo carregada, em um agente de usuário. Isso permite que desenvolvedores entreguem notificações e atualizações assíncronas a usuários que optarem por elas, resultando num melhor engajamento com conteúdo novo oportuno.

- -
-

Nota: Esta documentação cobre a especificação W3C da API Push; se você procura pela documentação do sistema de notificação proprietária do mecanismo push, veja Simple Push.

-
- -

Conceitos e uso de Push

- -

Para uma aplicação receber mensagens push, ela precisa ter um service worker ativo. Quando o service worker está ativo, ele pode se inscrever para utilizar notificações push {{domxref("PushManager.subscribe()")}}.

- -

O resultado de {{domxref("PushSubscription")}} inclui toda informação que a aplicação precisa para receber uma mensagem push: um endpoint e a chave encriptada necessária para o envio de dados.

- -

O service worker será iniciado conforme o necessário para lidar com as mensagens recebidas, que são entregues ao manipulador de evento {{domxref("ServiceWorkerGlobalScope.onpush")}} . Isto permite que a aplicação reaja a cada mensagem recebida, por exemplo para exibir a notificação ao usuário (usando {{domxref("ServiceWorkerRegistration.showNotification()")}}.)

- -

Cada assinatura é única para um service worker.  O endpoint para a assinatura é uma capability URL única: o conhecimento do endpoint é tudo que é necessário para enviar uma mensagem para sua aplicação. A URL do endpoint precisa ser mantida em segredo, ou outras aplicações estranhas poderão enviar mensagens push para a sua aplicação.

- -

A ativação de um service worker para entregar mensagens push pode resultar em um aumento de uso de recursos, particularmente de bateria. Diferentes navegadores tem diferentes formas para lidar com isso — atualmente não existe uma forma padrão. Firefox permite um número limitado (cota) de mensagens push para serem enviadas para uma aplicação, embora as mensagens Push que gerem notificações são isentas deste limite.  O limite é atualizado a cada site visitado. Numa comparação, Chrome não aplica nenhum limite, mas requer que cada mensagem push exiba uma notificação.

- -
-

Nota: A partir do Gecko 44, a cota permitida de mensagens push por aplicação não é incrementada quando uma nova notificação é disparada quando outra está visível, por um período de três segundos. Isso lida com casos em que várias notificações são recebidas ao mesmo tempo, mas nem todas estão visíveis.

-
- -
-

Nota: Chrome atualmente requer que você crie um projeto no Google Cloud Messaging para enviar mensagens push e use um número do projeto e chave da API para o envio de notificações push. Isto também requer um app manifest com alguns parâmetros especiais para usar o serviço. Essa restrição deverá ser removida no futuro.

-
- -

Interfaces

- -
-
{{domxref("PushEvent")}}
-
Representa uma ação push enviada para o global scope de um {{domxref("ServiceWorker")}}. Ele contém informações enviadas de uma aplicação para um {{domxref("PushSubscription")}}.
-
{{domxref("PushManager")}}
-
Fornece uma forma de receber notificações de servidor third-party bem como solicitar URL para notificações push. Essa interface substitui a funcionalidade oferecida que está obsoleta {{domxref("PushRegistrationManager")}} interface.
-
{{domxref("PushMessageData")}}
-
Fornece acesso aos dados push enviados por um servidor, e inclui métodos para manipular os dados recebidos.
-
{{domxref("PushSubscription")}}
-
Fornece a URL de assinatura do endpoint e permite o cancelamento da assinatura de um serviço push.
-
- -

Service worker additions

- -

As seguintes informações adicionais para a Service Worker API foram especificadas na Push API spec, para fornecer um ponto de entrada para usar mensagens Push, e para monitorar e responder os eventos de envio e assinatura.

- -
-
{{domxref("ServiceWorkerRegistration.pushManager")}} {{readonlyinline}}
-
Retorna uma referência para a interface {{domxref("PushManager")}} para administrar assinaturas push incluindo subscrever, obter uma assinatura ativa e acessar o status de permissão de envio. Este é o ponto de entrada para usar mensagens Push.
-
{{domxref("ServiceWorkerGlobalScope.onpush")}}
-
Um manipulador de eventos disparado sempre que um evento  {{Event("push")}} ocorre; isto é, sempre que uma mensagem do servidor de envio for recebida.
-
{{domxref("ServiceWorkerGlobalScope.onpushsubscriptionchange")}}
-
Um manipulador de eventos disparado sempre que um evento  {{Event("pushsubscriptionchange")}} ocorre; por exemplo, quando uma assinatura push está inválida, ou está prestes a ser invalidada (ex. quando um serviço push service define um tempo de expiração.)
-
- -

Especificações

- - - - - - - - - - - - - - -
EspecificaçãoStatusComentário
{{SpecName("Push API")}}{{Spec2("Push API")}}Definição Inicial
- -

Compatibilidade em Browsers

- -
{{CompatibilityTable}}
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - - -
FuncionalidadeChromeFirefox (Gecko)Internet ExplorerOperaSafari (WebKit)
Suporte básico{{CompatChrome(42.0)}}{{CompatGeckoDesktop(44.0)}}[1]{{CompatNo}}[2]{{CompatUnknown}}{{CompatUnknown}}
{{domxref("PushEvent.data")}},
- {{domxref("PushMessageData")}}
{{CompatNo}}{{CompatGeckoDesktop(44.0)}}{{CompatNo}}{{CompatNo}}{{CompatNo}}
-
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
FuncionalidadeAndroidAndroid WebviewFirefox Mobile (Gecko)Firefox OSIE MobileOpera MobileSafari MobileChrome for Android
Suporte básico{{CompatNo}}{{CompatNo}}{{CompatNo}}{{CompatNo}}{{CompatUnknown}}[2]{{CompatUnknown}}{{CompatUnknown}}{{CompatChrome(42.0)}}
{{domxref("PushEvent.data")}},
- {{domxref("PushMessageData")}}
{{CompatNo}}{{CompatNo}}{{CompatNo}}{{CompatNo}}{{CompatNo}}{{CompatNo}}{{CompatNo}}{{CompatNo}}
-
- -

[1] Atualmente disponível apenas nas versões desktop do Firefox; ainda, mensagens push são encaminhadas apenas quando o Firefox está em execução.

- -

[2] Ainda não implementado. Veja Microsoft Edge status information.

- -

Veja também

- - diff --git a/files/pt-br/web/api/api_web_audio/index.html b/files/pt-br/web/api/api_web_audio/index.html deleted file mode 100644 index 8f582eb524..0000000000 --- a/files/pt-br/web/api/api_web_audio/index.html +++ /dev/null @@ -1,480 +0,0 @@ ---- -title: API Web Áudio -slug: Web/API/API_Web_Audio -tags: - - Web Audio API - - api de áudio - - áudio api - - áudio web -translation_of: Web/API/Web_Audio_API ---- -
-

A API de áudio da web disponibiliza um poderoso e versátil sistema de controle de áudio para a Web, permitindo aos desenvolvedores escolher arquivos de áudio, adicionar efeitos a estes arquivos, criar reprodutores de áudio, aplicar spatial effects (como panning) e muito mais.

-
- -

Web audio: conceitos e uso

- -

A API de Web audio envolve manipulação de operações com áudio dentro de um contexto de áudio, e foi desenvolvida para permitir o roteamento modular. Operações básicas de áudio são feitas com audio nodes (nós de áudio), que são ligados para formar gráficos de roteamento de áudio. Várias fontes - com diferentes tipos de layout de canal - são suportados mesmo em um único contexto. Este design modular permite flexibilidade para criar funções de áudio complexas com efeitos dinâmicos.

- -

Audio nodes são ligados pelas suas entradas e saídas, formando uma cadeia que começa com uma ou mais fontes, passa por um ou mais nodes e então acaba em um destino (embora você não tenha que fornecer um destino, por exemplo, se você quiser apenas visualizar alguns dados de áudio). Um fluxo de trabalho simples, com Web áudio, seria algo parecido com isso:

- -
    -
  1. Crie um contexto de áudio
  2. -
  3. Dentro do contexto, crie fontes de áudio — como <audio>, oscilador, stream
  4. -
  5. Crie efeitos de áudio, como reverb, biquad filter, panner, compressor
  6. -
  7. Escolha o destino final de áudio, por exemplo os auto-falantes de seu sistema
  8. -
  9. Conecte as fontes de áudio com os efeitos, e os efeitos com o destino.
  10. -
- -

A simple box diagram with an outer box labeled Audio context, and three inner boxes labeled Sources, Effects and Destination. The three inner boxes have arrow between them pointing from left to right, indicating the flow of audio information.

- -

O sincronismo é controlado com alta precisão e baixa latência, permitindo aos desenvolvedores escrever códigos que respondam com precisão a eventos e capazes de gerar exemplos específicos, mesmo com uma alta taxa de amostragem. Dessa forma, aplicações como baterias eletrônicas e seqüenciadores estarão facilmente ao alcance dos desenvolvedores.

- -

A API de Web Audio também permite o controle de como o áudio será ordenado. Usando um sistema baseado em um modelo de source-listener, a API permite controlar os painéis de modelo para serem usados e tratados com atenuação de distância induzida ou doppler shift induzido por uma fonte em movimento (ou um ouvinte em movimento).

- -
-

Nota: Você pode ver mais detalhes sobre a teoria da API de Web Audio em nosso artigo Basic concepts behind Web Audio API.

-
- -

Web Audio: Interfaces da API

- -

A API de Web Audio possui um total de 28 interfaces e eventos associados, que nós dividimos e categorizamos em 9 funcionalidades.

- -

Definições gerais de grafos de áudio (audio graph)

- -

Definições gerais que moldam os grafos de áudio no uso da API de Web Audio.

- -
-
{{domxref("AudioContext")}}
-
A interface AudioContext representa um grafo de processamento de áudio construído a partir de módulos de áudio ligados entre si, cada um representado por um {{domxref("AudioNode")}}. Um contexto de áudio (audio context) controla a criação dosnós que ele contém e a execução do processamento de áudio, ou a decodificação. Como tudo acontece dentro de um contexto, você deve criar um AudioContext antes de fazer qualquer outra coisa.
-
{{domxref("AudioNode")}}
-
A interface AudioNode representa um módulo de processamento de áudio como uma fonte de áudio (por exemplo, um HTML {{HTMLElement("áudio")}} ou um elemento {{HTMLElement("vídeo")}}), destino de áudio, módulo de processamento intermediário (por exemplo, um filtro como {{domxref("BiquadFilterNode")}}, ou controle de volume, como {{domxref("GainNode")}}).
-
{{domxref("AudioParam")}}
-
A interface AudioParam representa um parâmetro relacionado ao áudio, como um parâmetro de um {{domxref("AudioNode")}}. Ele pode ser configurado com um valor específico ou uma mudança de valor, e pode ser programado para "acontecer" em um momento específico e seguindo um padrão específico.
-
{{event("ended_(Web_Audio)", "ended")}} (event)
-
O evento ended é disparado quando a reprodução parou porque o fim da mídia foi atingido.
-
- -

Definindo fontes de áudio

- -

Interfaces que definem fontes de áudio para uso na API de Web Audio.

- -
-
{{domxref("OscillatorNode")}}
-
A interface OscillatorNode representa uma onda senoidal. Esta interface é um módulo de processamento de áudio que gera uma onda senoidal com determinada frequência.
-
{{domxref("AudioBuffer")}}
-
A interface AudioBuffer representa uma pequena porção de áudio armazenada na memória, criada a partir de um arquivo de áudio usando o método {{ domxref("AudioContext.decodeAudioData()") }}, ou criado com os dados brutos usando o método {{ domxref("AudioContext.createBuffer()") }}. Uma vez decodificado neste formato o áudio pode ser colocada em um {{ domxref("AudioBufferSourceNode") }}.
-
{{domxref("AudioBufferSourceNode")}}
-
A interface AudioBufferSourceNode representa uma fonte de áudio que consiste em dados de áudio na memória, armazenados em um {{domxref ("AudioBuffer")}}. É um {{domxref ("AudioNode")}} que atua como uma fonte de áudio.
-
{{domxref("MediaElementAudioSourceNode")}}
-
A interface MediaElementAudioSourceNode  representa uma fonte de audio consiste de um HTML5 {{ htmlelement("audio") }} ou {{ htmlelement("video") }} elemento. É uma {{domxref("AudioNode")}} que atua como uma fonte de áudio.
-
{{domxref("MediaStreamAudioSourceNode")}}
-
The MediaStreamAudioSourceNode interface represents an audio source consisting of a WebRTC {{domxref("MediaStream")}} (such as a webcam or microphone.) It is an {{domxref("AudioNode")}} that acts as an audio source.
-
- -

Definindo filtros de efeitos de áudio

- -

Interfaces para definição de efeitos que você deseja aplicar em suas fontes de áudio.

- -
-
{{domxref("BiquadFilterNode")}}
-
The BiquadFilterNode interface represents a simple low-order filter. It is an {{domxref("AudioNode")}} that can represent different kinds of filters, tone control devices or graphic equalizers. A BiquadFilterNode always has exactly one input and one output.
-
{{domxref("ConvolverNode")}}
-
The ConvolverNode interface is an {{domxref("AudioNode")}} that performs a Linear Convolution on a given AudioBuffer, often used to achieve a reverb effect.
-
{{domxref("DelayNode")}}
-
The DelayNode interface represents a delay-line; an {{domxref("AudioNode")}} audio-processing module that causes a delay between the arrival of an input data and its propagation to the output.
-
{{domxref("DynamicsCompressorNode")}}
-
The DynamicsCompressorNode interface provides a compression effect, which lowers the volume of the loudest parts of the signal in order to help prevent clipping and distortion that can occur when multiple sounds are played and multiplexed together at once.
-
{{domxref("GainNode")}}
-
The GainNode interface represents a change in volume. It is an {{domxref("AudioNode")}} audio-processing module that causes a given gain to be applied to the input data before its propagation to the output.
-
{{domxref("WaveShaperNode")}}
-
The WaveShaperNode interface represents a non-linear distorter. It is an {{domxref("AudioNode")}} that use a curve to apply a waveshaping distortion to the signal. Beside obvious distortion effects, it is often used to add a warm feeling to the signal.
-
{{domxref("PeriodicWave")}}
-
Used to define a periodic waveform that can be used to shape the output of an {{ domxref("OscillatorNode") }}.
-
- -

Definindo destinos de áudio

- -

Uma vez que você tenha feito o processamento do seu áudio, estas interfaces definirão aonde será a saída do áudio.

- -
-
{{domxref("AudioDestinationNode")}}
-
The AudioDestinationNode interface represents the end destination of an audio source in a given context — usually the speakers of your device.
-
{{domxref("MediaStreamAudioDestinationNode")}}
-
The MediaElementAudioSourceNode interface represents an audio destination consisting of a WebRTC {{domxref("MediaStream")}} with a single AudioMediaStreamTrack, which can be used in a similar way to a MediaStream obtained from {{ domxref("Navigator.getUserMedia") }}. It is an {{domxref("AudioNode")}} that acts as an audio destination.
-
- -

Análise dos dados e visualização

- -

Se você deseja extrair tempo, frequencia e outras informações do seu áudio, o AnalyserNode é o que você necessita.

- -
-
{{domxref("AnalyserNode")}}
-
The AnalyserNode interface represents a node able to provide real-time frequency and time-domain analysis information, for the purposes of data analysis and visualization.
-
- -

Dividindo e mesclando canais de áudio

- -

Para dividir e mesclar canais de áudio, você utilizará essas interfaces.

- -
-
{{domxref("ChannelSplitterNode")}}
-
The ChannelSplitterNode interface separates the different channels of an audio source out into a set of mono outputs.
-
{{domxref("ChannelMergerNode")}}
-
The ChannelMergerNode interface reunites different mono inputs into a single outputs. Each input will be used to fill a channel of the output.
-
- -

Audio spatialization

- -

These interfaces allow you to add audio spatialization panning effects to your audio sources.

- -
-
{{domxref("AudioListener")}}
-
The AudioListener interface represents the position and orientation of the unique person listening to the audio scene used in audio spatialization.
-
{{domxref("PannerNode")}}
-
The PannerNode interface represents the behavior of a signal in space. It is an {{domxref("AudioNode")}} audio-processing module describing its position with right-hand Cartesian coordinates, its movement using a velocity vector and its directionality using a directionality cone.
-
- -

Processamento de áudio por JavaScript

- -

Se você quiser usar um script externo para processar sua fonte de áudio, Node e eventos abaixo tornarão isto possível.

- -
-
{{domxref("ScriptProcessorNode")}}
-
The ScriptProcessorNode interface allows the generation, processing, or analyzing of audio using JavaScript. It is an {{domxref("AudioNode")}} audio-processing module that is linked to two buffers, one containing the current input, one containing the output. An event, implementing the {{domxref("AudioProcessingEvent")}} interface, is sent to the object each time the input buffer contains new data, and the event handler terminates when it has filled the output buffer with data.
-
{{event("audioprocess")}} (event)
-
The audioprocess event is fired when an input buffer of a Web Audio API {{domxref("ScriptProcessorNode")}} is ready to be processed.
-
{{domxref("AudioProcessingEvent")}}
-
The Web Audio API AudioProcessingEvent represents events that occur when a {{domxref("ScriptProcessorNode")}} input buffer is ready to be processed.
-
- -

Áudio offline

- -

Manipular áudio offline é possível com estas interfaces.

- -
-
{{domxref("OfflineAudioContext")}}
-
The OfflineAudioContext interface is an {{domxref("AudioContext")}} interface representing an audio-processing graph built from linked together {{domxref("AudioNode")}}s. In contrast with a standard AudioContext, an OfflineAudioContext doesn't really render the audio but rather generates it, as fast as it can, in a buffer.
-
{{event("complete")}} (event)
-
The complete event is fired when the rendering of an {{domxref("OfflineAudioContext")}} is terminated.
-
{{domxref("OfflineAudioCompletionEvent")}}
-
The OfflineAudioCompletionEvent represents events that occur when the processing of an {{domxref("OfflineAudioContext")}} is terminated. The {{event("complete")}} event implements this interface.
-
- -

Interfaces obsoletas

- -

As interfaces a seguir foram definidas em versões antigas das especificações da API de Web Audio, mas agora elas estão obsoletas e serão substituidas por outras interfaces.

- -
-
{{domxref("JavaScriptNode")}}
-
Used for direct audio processing via JavaScript. This interface is obsolete, and has been replaced by {{domxref("ScriptProcessorNode")}}.
-
{{domxref("WaveTableNode")}}
-
Used to define a periodic waveform. This interface is obsolete, and has been replaced by {{domxref("PeriodicWave")}}.
-
- -

Exemplo

- -

Este exemplo mostra uma grande variedade de funções da API de Web Audio que podem ser utilizadas. Você pode ver este código em ação na demo Voice-change-o-matic (também verificar o código-fonte completo no Github) - esta é uma demonstração de um modificador de voz de brinquedo experimental; aconselhamos manter seus alto-falantes baixo ao utilizá-lo, pelo menos para começar!

- -

As linhas API de Web Audio estão destacadas; se você quiser encontrar mais informações sobre os diferentes métodos, faça uma busca através das páginas de referência.

- -
var audioCtx = new (window.AudioContext || window.webkitAudioContext)(); // define audio context
-// Webkit/blink browsers need prefix, Safari won't work without window.
-
-var voiceSelect = document.getElementById("voice"); // select box for selecting voice effect options
-var visualSelect = document.getElementById("visual"); // select box for selecting audio visualization options
-var mute = document.querySelector('.mute'); // mute button
-var drawVisual; // requestAnimationFrame
-
-var analyser = audioCtx.createAnalyser();
-var distortion = audioCtx.createWaveShaper();
-var gainNode = audioCtx.createGain();
-var biquadFilter = audioCtx.createBiquadFilter();
-
-function makeDistortionCurve(amount) { // function to make curve shape for distortion/wave shaper node to use
-  var k = typeof amount === 'number' ? amount : 50,
-    n_samples = 44100,
-    curve = new Float32Array(n_samples),
-    deg = Math.PI / 180,
-    i = 0,
-    x;
-  for ( ; i < n_samples; ++i ) {
-    x = i * 2 / n_samples - 1;
-    curve[i] = ( 3 + k ) * x * 20 * deg / ( Math.PI + k * Math.abs(x) );
-  }
-  return curve;
-};
-
-navigator.getUserMedia (
-  // constraints - only audio needed for this app
-  {
-    audio: true
-  },
-
-  // Success callback
-  function(stream) {
-    source = audioCtx.createMediaStreamSource(stream);
-    source.connect(analyser);
-    analyser.connect(distortion);
-    distortion.connect(biquadFilter);
-    biquadFilter.connect(gainNode);
-    gainNode.connect(audioCtx.destination); // connecting the different audio graph nodes together
-
-    visualize(stream);
-    voiceChange();
-
-  },
-
-  // Error callback
-  function(err) {
-    console.log('The following gUM error occured: ' + err);
-  }
-);
-
-function visualize(stream) {
-  WIDTH = canvas.width;
-  HEIGHT = canvas.height;
-
-  var visualSetting = visualSelect.value;
-  console.log(visualSetting);
-
-  if(visualSetting == "sinewave") {
-    analyser.fftSize = 2048;
-    var bufferLength = analyser.frequencyBinCount; // half the FFT value
-    var dataArray = new Uint8Array(bufferLength); // create an array to store the data
-
-    canvasCtx.clearRect(0, 0, WIDTH, HEIGHT);
-
-    function draw() {
-
-      drawVisual = requestAnimationFrame(draw);
-
-      analyser.getByteTimeDomainData(dataArray); // get waveform data and put it into the array created above
-
-      canvasCtx.fillStyle = 'rgb(200, 200, 200)'; // draw wave with canvas
-      canvasCtx.fillRect(0, 0, WIDTH, HEIGHT);
-
-      canvasCtx.lineWidth = 2;
-      canvasCtx.strokeStyle = 'rgb(0, 0, 0)';
-
-      canvasCtx.beginPath();
-
-      var sliceWidth = WIDTH * 1.0 / bufferLength;
-      var x = 0;
-
-      for(var i = 0; i < bufferLength; i++) {
-
-        var v = dataArray[i] / 128.0;
-        var y = v * HEIGHT/2;
-
-        if(i === 0) {
-          canvasCtx.moveTo(x, y);
-        } else {
-          canvasCtx.lineTo(x, y);
-        }
-
-        x += sliceWidth;
-      }
-
-      canvasCtx.lineTo(canvas.width, canvas.height/2);
-      canvasCtx.stroke();
-    };
-
-    draw();
-
-  } else if(visualSetting == "off") {
-    canvasCtx.clearRect(0, 0, WIDTH, HEIGHT);
-    canvasCtx.fillStyle = "red";
-    canvasCtx.fillRect(0, 0, WIDTH, HEIGHT);
-  }
-
-}
-
-function voiceChange() {
-  distortion.curve = new Float32Array;
-  biquadFilter.gain.value = 0; // reset the effects each time the voiceChange function is run
-
-  var voiceSetting = voiceSelect.value;
-  console.log(voiceSetting);
-
-  if(voiceSetting == "distortion") {
-    distortion.curve = makeDistortionCurve(400); // apply distortion to sound using waveshaper node
-  } else if(voiceSetting == "biquad") {
-    biquadFilter.type = "lowshelf";
-    biquadFilter.frequency.value = 1000;
-    biquadFilter.gain.value = 25; // apply lowshelf filter to sounds using biquad
-  } else if(voiceSetting == "off") {
-    console.log("Voice settings turned off"); // do nothing, as off option was chosen
-  }
-
-}
-
-// event listeners to change visualize and voice settings
-
-visualSelect.onchange = function() {
-  window.cancelAnimationFrame(drawVisual);
-  visualize(stream);
-}
-
-voiceSelect.onchange = function() {
-  voiceChange();
-}
-
-mute.onclick = voiceMute;
-
-function voiceMute() { // toggle to mute and unmute sound
-  if(mute.id == "") {
-    gainNode.gain.value = 0; // gain set to 0 to mute sound
-    mute.id = "activated";
-    mute.innerHTML = "Unmute";
-  } else {
-    gainNode.gain.value = 1; // gain set to 1 to unmute sound
-    mute.id = "";
-    mute.innerHTML = "Mute";
-  }
-}
-
- -

Especificações

- - - - - - - - - - - - - - -
EspecificaçãoStatusComentário
{{SpecName('Web Audio API')}}{{Spec2('Web Audio API')}} 
- -

Compatibilidade de navegadores

- -
{{CompatibilityTable}}
- -
- - - - - - - - - - - - - - - - - - - -
FeatureChromeFirefox (Gecko)Internet ExplorerOperaSafari (WebKit)
Basic support14 {{property_prefix("webkit")}}23{{CompatNo}}15 {{property_prefix("webkit")}}
- 22 (unprefixed)
6 {{property_prefix("webkit")}}
-
- -
- - - - - - - - - - - - - - - - - - - - - - - -
FeatureAndroidChromeFirefox Mobile (Gecko)Firefox OSIE PhoneOpera MobileSafari Mobile
Basic support{{CompatNo}}28 {{property_prefix("webkit")}}251.2{{CompatNo}}{{CompatNo}}6 {{property_prefix("webkit")}}
-
- -

 

- -

Veja também

- - - - diff --git a/files/pt-br/web/api/api_web_audio/sintetizador_simples/index.html b/files/pt-br/web/api/api_web_audio/sintetizador_simples/index.html deleted file mode 100644 index b0fdf2a0c4..0000000000 --- a/files/pt-br/web/api/api_web_audio/sintetizador_simples/index.html +++ /dev/null @@ -1,579 +0,0 @@ ---- -title: 'Tutorial e exemplo: Teclado de Sintetizador Simples' -slug: Web/API/API_Web_Audio/Sintetizador_simples -tags: - - Audio - - Exemplo - - Guía - - Media - - Oscilador - - Piano - - Sintetizador - - Tutorial - - Web Audio API -translation_of: Web/API/Web_Audio_API/Simple_synth ---- -
{{DefaultAPISidebar("Web Audio API")}}
- -

Este artigo apresenta o código e uma demonstração funcional de um teclado que você pode tocar usando seu mouse. O teclado lhe permite alternar entre formas de onda padrões e customizadas. Esse exemplo utiliza das seguintes interfaces de Web API: {{domxref("AudioContext")}}, {{domxref("OscillatorNode")}}, {{domxref("PeriodicWave")}}, e {{domxref("GainNode")}}.

- -

Já que {{domxref("OscillatorNode")}} é baseado no {{domxref("AudioScheduledSourceNode")}}, isso até certo ponto também é um exemplo pra isto.

- -

O Teclado Visual

- -

HTML

- -

Existem três componentes primários para o display do nosso teclado virtual. O primeito do qual é o teclado musical em si. Nós extraimos em um par de elementos {{HTMLElement("div")}} aninhados para permitir a rolagem horizontal caso as teclas não encaixem na tela.

- -

O Teclado

- -

Primeiro, criamos o espaço no qual construiremos o teclado. Estaremos construindo o teclado programaticamente, considerando que ao fazer desse jeito teremos a flexibilidade de configurar cada tecla conforme determinamos as informações apropriadas para tecla correspondente. No nosso caso, pegamos a frequência de cada tecla através de uma tabela, mas poderia ser calculado de forma algoritmica também.

- -
<div class="container">
-  <div class="keyboard"></div>
-</div>
-
- -

O {{HTMLElement("div")}} nomeado de "container" é a barra de rolagem que permite o teclado ser rolado horizontalmente se for largo demais para o espaço disponivel. As teclas em si serão inseridas no bloco de classe "keyboard".

- -

A barra de opções

- -

Abaixo do teclado, colocaremos alguns controles para configurar o camada. Por enquanto, teremos dois controles: Um para controlar o volume e outro para selecionar a forma de onda periodica usada ao gerar as notas.

- -
O controle de volume
- -

Primeiro criamos o <div> para conter a barra de opções, para ser personalizado conforme preciso. Então estabelecemos uma caixa que será apresentada no lado esquerdo da barra e colocar um rotulo e um elemento {{HTMLElement("input")}} do tipo "range". O elemento range será tipicamente apresentado como o controle da barra de rolagem ; configuramos ele para permitir qualquer valor entre 0.0 e 1.0 em cada posição.

- -
<div class="settingsBar">
-  <div class="left">
-    <span>Volume: </span>
-    <input type="range" min="0.0" max="1.0" step="0.01"
-        value="0.5" list="volumes" name="volume">
-    <datalist id="volumes">
-      <option value="0.0" label="Mute">
-      <option value="1.0" label="100%">
-    </datalist>
-  </div>
-
- -

Especificamos um valor padrão de 0.5, e provemos um elemento {{HTMLElement("datalist")}} no qual é conectado ao range usando o atributo {{htmlattrxref("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%").

- -
A seleção de forma de onda
- -

E no lado da barra de configurações, colocamos um rótulo e um elemento {{HTMLElement("select")}} nomeado de "waveform" cujas opções correspondem as formas de onda disponiveis.

- -
  <div class="right">
-    <span>Current waveform: </span>
-    <select name="waveform">
-      <option value="sine">Sine</option>
-      <option value="square" selected>Square</option>
-      <option value="sawtooth">Sawtooth</option>
-      <option value="triangle">Triangle</option>
-      <option value="custom">Custom</option>
-    </select>
-  </div>
-</div>
- - - -

JavaScript

- -

O código em JavaScript começa inicializando algumas váriaveis.

- -
let audioContext = new (window.AudioContext || window.webkitAudioContext)();
-let oscList = [];
-let masterGainNode = null;
-
- -
    -
  1. audioContext é colocado para referenciar o objeto global {{domxref("AudioContext")}} (ou webkitAudioContext se  necessário).
  2. -
  3. oscillators está colocado para conter uma lista de todos os osciladores atualmente tocando. Ele começa nulo, afinal não há nenhum oscilador tocando ainda.
  4. -
  5. masterGainNode é colocado como nulo; durante o processo de setup, ele será configurado para contar um {{domxref("GainNode")}} no quall todos os osciladores irão se conectar para permitir o volume geral a ser controlado por apenas uma barra de rolagem.
  6. -
- -
let keyboard = document.querySelector(".keyboard");
-let wavePicker = document.querySelector("select[name='waveform']");
-let volumeControl = document.querySelector("input[name='volume']");
-
- -

Referencias aos elementos que precisaremos acessar são obtidas através dp:

- - - -
let noteFreq = null;
-let customWaveform = null;
-let sineTerms = null;
-let cosineTerms = null;
-
- -

Enfim, variaveis globais que serão usadas quando as formas de onda são criadas:

- - - -

Criando a tabela de notas

- -

A função createNoteTable() constrói a matriz noteFreq para conter uma matriz de objetos representando cada oitava. Cada oitava, possui uma propriedade para cada nota nessa oitava; O nome dessa propriedade é o nome da nota (utilizando da notação em inglês, como "C" para representar "dó"), e o valor é a frequência, em Hertz, daquela nota.

- -
function createNoteTable() {
-  let noteFreq = [];
-  for (let i=0; i< 9; i++) {
-    noteFreq[i] = [];
-  }
-
-  noteFreq[0]["A"] = 27.500000000000000;
-  noteFreq[0]["A#"] = 29.135235094880619;
-  noteFreq[0]["B"] = 30.867706328507756;
-
-  noteFreq[1]["C"] = 32.703195662574829;
-  noteFreq[1]["C#"] = 34.647828872109012;
-  noteFreq[1]["D"] = 36.708095989675945;
-  noteFreq[1]["D#"] = 38.890872965260113;
-  noteFreq[1]["E"] = 41.203444614108741;
-  noteFreq[1]["F"] = 43.653528929125485;
-  noteFreq[1]["F#"] = 46.249302838954299;
-  noteFreq[1]["G"] = 48.999429497718661;
-  noteFreq[1]["G#"] = 51.913087197493142;
-  noteFreq[1]["A"] = 55.000000000000000;
-  noteFreq[1]["A#"] = 58.270470189761239;
-  noteFreq[1]["B"] = 61.735412657015513;
-
- -

... várias oitavas não mostradas para manter breve ...

- - - -
  noteFreq[7]["C"] = 2093.004522404789077;
-  noteFreq[7]["C#"] = 2217.461047814976769;
-  noteFreq[7]["D"] = 2349.318143339260482;
-  noteFreq[7]["D#"] = 2489.015869776647285;
-  noteFreq[7]["E"] = 2637.020455302959437;
-  noteFreq[7]["F"] = 2793.825851464031075;
-  noteFreq[7]["F#"] = 2959.955381693075191;
-  noteFreq[7]["G"] = 3135.963487853994352;
-  noteFreq[7]["G#"] = 3322.437580639561108;
-  noteFreq[7]["A"] = 3520.000000000000000;
-  noteFreq[7]["A#"] = 3729.310092144719331;
-  noteFreq[7]["B"] = 3951.066410048992894;
-
-  noteFreq[8]["C"] = 4186.009044809578154;
-  return noteFreq;
-}
-
- -

O resultado é uma matriz, noteFreq, com um objeto para cada oitava. Cada objeto de oitava tem propriedades nomeadas nela onde a propriedade é o nome da nota com a notação em inglês (Como "C" para representar "dó") e o valor da propriedade é a frequência da nota em Hertz.. o objeto resultando se parece com isso:

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
OctaveNotes
0"A" ⇒ 27.5"A#" ⇒ 29.14"B" ⇒ 30.87
1"C" ⇒ 32.70"C#" ⇒ 34.65"D" ⇒ 36.71"D#" ⇒ 38.89"E" ⇒ 41.20"F" ⇒ 43.65"F#" ⇒ 46.25"G" ⇒ 49"G#" ⇒ 51.9"A" ⇒ 55"A#" ⇒ 58.27"B" ⇒ 61.74
2. . .
- -

Com esta tabela no lugar, podemos descobrir a frequência para uma dada nota em uma oitava particular relativamente fácil. Se queremos a frequência pra nota G# na primeira oitava, nós simplesmente usamos  noteFreq[1]["G#"] e conseguimos o valor 51.9 como resultado.

- -
-

Os valores na tabela de exemplo acima foram arredondados para duas casas decimais.

-
- - - -

Construindo o teclado

- -

A função setup() é responsavel por construir o teclado e preparar a aplicação para tocar a música.

- -
function setup() {
-  noteFreq = createNoteTable();
-
-  volumeControl.addEventListener("change", changeVolume, false);
-
-  masterGainNode = audioContext.createGain();
-  masterGainNode.connect(audioContext.destination);
-  masterGainNode.gain.value = volumeControl.value;
-
-  // Create the keys; skip any that are sharp or flat; for
-  // our purposes we don't need them. Each octave is inserted
-  // into a <div> of class "octave".
-
-  noteFreq.forEach(function(keys, idx) {
-    let keyList = Object.entries(keys);
-    let octaveElem = document.createElement("div");
-    octaveElem.className = "octave";
-
-    keyList.forEach(function(key) {
-      if (key[0].length == 1) {
-        octaveElem.appendChild(createKey(key[0], idx, key[1]));
-      }
-    });
-
-    keyboard.appendChild(octaveElem);
-  });
-
-  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] = {};
-  }
-}
-
-setup();
- -
    -
  1. A tabela que mapeia o nome e oitavas das notas para suas respectivas frequências é criado ao chamar createNoteTable().
  2. -
  3. Um manipulador de eventos é estabelecido ao chamar nosso velho amigo {{domxref("EventTarget.addEventListener", "addEventListener()")}} para cuidar dos eventos do {{event("change")}} no controle de ganho geral. Isso vai simplesmente atualizar o módulo de ganho de volume para o novo valor.
  4. -
  5. Em seguida, nós replicamos cada oitava na tabela de frequências das notas. Para cada oitava, usamos {{jsxref("Object.entries()")}} para conseguir uma lista de notas daquela oitava.
  6. -
  7. Criar um {{HTMLElement("div")}} para contar as notas daquela oitava (para ter um pouco de espaço entre as oitavas), e mudar o nome de classe para "octave".
  8. -
  9. Para cada tecla na oitava, checamos para ver se o nome daquela nota há mais de um caractere. Nós pulamos essas, pois estamos deixando notas sustenidas de fora deste exemplo. Do contrário, chamamos createKey(), especificando uma string, oitava, e frequência. O elemento retornado é anexado na elemento da oitava criada no passo 4.
  10. -
  11. Quando o elemento da oitava é construido, é então anexada ao teclado.
  12. -
  13. Uma vez que o teclado foi construido, nós rolamos para nota "B" na quinta oitava; isso tem o efeito de garantir que o C médio é visivel junto das notas ao redor.
  14. -
  15. Então uma forma de onda customizada é construida usando {{domxref("AudioContext.createPeriodicWave()")}}. Essa forma de onda será usada toda vez que o usuário selecionar "Custom" da seleção de formas de onda.
  16. -
  17. Enfim, a lista de osciladores é iniciada para garantir que está pronta para receber informação identificando quais osciladores estão associados com que teclas.
  18. -
- -

Criando uma tecla

- -

A função createKey()  é chamada toda vez que queremos que uma tecla seja apresentada no nosso teclado virtual. Ela cria elementos da tecla e seu rótulo, adiciona informação dos atributos ao elemento para uso posterior, e coloca modificadores de eventos para os eventos que nos importam.

- -
function createKey(note, octave, freq) {
-  let keyElement = document.createElement("div");
-  let labelElement = document.createElement("div");
-
-  keyElement.className = "key";
-  keyElement.dataset["octave"] = octave;
-  keyElement.dataset["note"] = note;
-  keyElement.dataset["frequency"] = freq;
-
-  labelElement.innerHTML = note + "<sub>" + octave + "</sub>";
-  keyElement.appendChild(labelElement);
-
-  keyElement.addEventListener("mousedown", notePressed, false);
-  keyElement.addEventListener("mouseup", noteReleased, false);
-  keyElement.addEventListener("mouseover", notePressed, false);
-  keyElement.addEventListener("mouseleave", noteReleased, false);
-
-  return keyElement;
-}
-
- -

Após criar  os elementos representando as teclas e seus rótulos, nós configuramos o elemento das teclas ao configurar sua classe para "key" (Que estabelece a aparência). Então adicionamos atributos {{htmlattrxref("data-*")}}  que contém a string da oitava da nota (attribute data-octave), representando a nota a ser tocada (attribute data-note), e frequência (attribute data-frequency) em Hertz. Isso irá nos permitir facilmente pegar informação conforme necessário ao cuidar de eventos.

- -

Fazendo música

- -

Tocando um tom

- -

O trabalho da função playTone() é tocar um tom em uma dada frequência. Isso será usado pelo modificador para eventos acionados nas teclas do teclado, para que toquem as notas apropriadas.

- -
function playTone(freq) {
-  let osc = audioContext.createOscillator();
-  osc.connect(masterGainNode);
-
-  let type = wavePicker.options[wavePicker.selectedIndex].value;
-
-  if (type == "custom") {
-    osc.setPeriodicWave(customWaveform);
-  } else {
-    osc.type = type;
-  }
-
-  osc.frequency.value = freq;
-  osc.start();
-
-  return osc;
-}
-
- -

playTone() começa criando um novo {{domxref("OscillatorNode")}} ao chamar o método {{domxref("AudioContext.createOscillator()")}}. Então conectamos ele para o módulo de ganha geral ao chamar o novo método de osciladores {{domxref("OscillatorNode.connect()")}} method;, Que determina ao oscilador onde ele irá mandar seu output. Ao fazer isso, mudar o valor do ganho do módulo de ganho geral irá mudar o volume de todos os toms gerados.

- -

Então conseguimos o tipo de forma de onda para usar ao checar o valor do controle de seleção de formas de onda na barra de opções. Se o usuário estiver colocado como "custom", chamamos {{domxref("OscillatorNode.setPeriodicWave()")}} para configurar os osciladores para usar nossa forma de onda customizada. Fazer isso automáticamente coloca o {{domxref("OscillatorNode.type", "type")}} do oscilador como custom. Se qualquer outro tipo de forma de onda é selecionado na seleção de formas de ondas, nós simplesmente colocamos os tipos de osciladores no valor da seleção, esse valor será um entre sine, square, triangle, e sawtooth.

- -

A frequência do oscilador é colocada no valor especificado no paramêtro freq ao colocar o valor dos objetos {{domxref("Oscillator.frequency")}} {{domxref("AudioParam")}} . Então, enfim, o oscilador é iniciado e começa a produzir sons ao chamar o método {{domxref("AudioScheduledSourceNode.start()")}} .

- -

Tocando um tom

- -

Quando o evento {{event("mousedown")}} ou {{domxref("mouseover")}} ocorre em uma tecla, queremos que toque a nota correspondente. A função notePressed() é usada como o modificador de eventos para esses eventos.

- -
function notePressed(event) {
-  if (event.buttons & 1) {
-    let dataset = event.target.dataset;
-
-    if (!dataset["pressed"]) {
-      let octave = +dataset["octave"];
-      oscList[octave][dataset["note"]] = playTone(dataset["frequency"]);
-      dataset["pressed"] = "yes";
-    }
-  }
-}
-
- -

Começamos checando se o botão esquerdo do mouse é pressionado, por dois motivos. Primeiro, queremos que apenas o botão esquerdo acione as notas. Segundo, e mais importante, estamos usando isso para cuidar do {{event("mouseover")}} para casos onde o usuário arrasta de tecla a tecla, e só queremos tocar uma nota se o mouse estiver pressionado quando entrar no elemento.

- -

Se o botão do mouse estiver de fato sendo pressionado, recebemos o atributo de tecla pressionada {{htmlattrxref("dataset")}} ; isso torna fácil o acesso das informações de atributo customizadas no elemento. Procuramos por um atributo data-pressed ; caso não haja um(o que indica que a nota não está tocando ainda), chamamos playTone() para começar a tocar a nota, passando no valor dos elementos do atributo data-frequency. O valor retornado do oscilador é guardado no oscList para refêrencia futura, e data-pressed é colocado como yes para indicar que a nota está tocando para que não iniciemos novamente na próxima vez que isso for chamado.

- -

Parando um tom

- -

A função noteReleased() é o modificador de eventos chamado quando o usuário solta o botão do mouse ou move o mouse para fora da tecla que ele está tocando.

- -
function noteReleased(event) {
-  let dataset = event.target.dataset;
-
-  if (dataset && dataset["pressed"]) {
-    let octave = +dataset["octave"];
-    oscList[octave][dataset["note"]].stop();
-    delete oscList[octave][dataset["note"]];
-    delete dataset["pressed"];
-  }
-}
-
- -

noteReleased() usa os atributos customizados data-octave and data-note  para procurar os osciladores das teclas, e então chama o método de oscilador {{domxref("AudioScheduledSourceNode.stop", "stop()")}} para parar de tocar a nota. Finalmente, a entrada oscList para nota é limpa e o atributo data-pressed é removido do elemento da tecla (como identificado pelo {{domxref("event.target")}}), para indicar que a nota não está tocando no momento.

- -

Mudando o volume geral

- -

A barra de rolagem do volume na barra de opções dá uma simples interface para mudar o valor do ganho no módulo de ganho geral, então mudando o volume de todas as notas sendo tocadas. O metódo changeVolume() é o modificador do evento {{event("change")}} na barra de rolagem.

- -
function changeVolume(event) {
-  masterGainNode.gain.value = volumeControl.value
-}
-
- -

Isso simplesmente coloca o valor do módulo de ganho geral gain {{domxref("AudioParam")}} para o novo valor na barra de rolagem.

- -

Resultado

- -

Coloque tudo junto, o resultado é um simples e funcional teclado virtual que funciona com o clique:

- -

{{ EmbedLiveSample('The_video_keyboard', 680, 200) }}

- -

Veja também

- - diff --git a/files/pt-br/web/api/audiocontext/currenttime/index.html b/files/pt-br/web/api/audiocontext/currenttime/index.html deleted file mode 100644 index 71f3c9c894..0000000000 --- a/files/pt-br/web/api/audiocontext/currenttime/index.html +++ /dev/null @@ -1,114 +0,0 @@ ---- -title: AudioContext.currentTime -slug: Web/API/AudioContext/currentTime -tags: - - API - - AudioContext - - Propriedade - - Referencia - - Web Audio API - - currentTime -translation_of: Web/API/BaseAudioContext/currentTime ---- -

{{ APIRef("Web Audio API") }}

- -
-

The currentTime read-only property of the {{ domxref("AudioContext") }} interface returns a double representing an ever-increasing hardware timestamp in seconds that can be used for scheduling audio playback, visualizing timelines, etc. It starts at 0.

-
- -

Syntax

- -
var audioCtx = new AudioContext();
-console.log(audioCtx.currentTime);
-
- -

Exemplo:

- -
var AudioContext = window.AudioContext || window.webkitAudioContext;
-var audioCtx = new AudioContext();
-// Older webkit/blink browsers require a prefix
-
-...
-
-console.log(audioCtx.currentTime);
-
- -

Especificações:

- - - - - - - - - - - - - - -
Especificações:StatusComentario
{{SpecName('Web Audio API', '#widl-AudioContext-currentTime', 'currentTime')}}{{Spec2('Web Audio API')}} 
- -

Compatibilidade:

- -
{{CompatibilityTable}}
- -
- - - - - - - - - - - - - - - - - - - -
FeatureChromeFirefox (Gecko)Internet ExplorerOperaSafari (WebKit)
Basic support{{CompatChrome(10.0)}}{{property_prefix("webkit")}}{{CompatGeckoDesktop(25.0)}} {{CompatNo}}15.0{{property_prefix("webkit")}}
- 22 (unprefixed)
6.0{{property_prefix("webkit")}}
-
- -
- - - - - - - - - - - - - - - - - - - - - - - -
FeatureAndroidFirefox Mobile (Gecko)Firefox OSIE MobileOpera MobileSafari MobileChrome for Android
Basic support{{CompatUnknown}}26.01.2{{CompatUnknown}}{{CompatUnknown}}{{CompatUnknown}}33.0
- -

 

-
- -

Veja também:

- - diff --git a/files/pt-br/web/api/baseaudiocontext/currenttime/index.html b/files/pt-br/web/api/baseaudiocontext/currenttime/index.html new file mode 100644 index 0000000000..71f3c9c894 --- /dev/null +++ b/files/pt-br/web/api/baseaudiocontext/currenttime/index.html @@ -0,0 +1,114 @@ +--- +title: AudioContext.currentTime +slug: Web/API/AudioContext/currentTime +tags: + - API + - AudioContext + - Propriedade + - Referencia + - Web Audio API + - currentTime +translation_of: Web/API/BaseAudioContext/currentTime +--- +

{{ APIRef("Web Audio API") }}

+ +
+

The currentTime read-only property of the {{ domxref("AudioContext") }} interface returns a double representing an ever-increasing hardware timestamp in seconds that can be used for scheduling audio playback, visualizing timelines, etc. It starts at 0.

+
+ +

Syntax

+ +
var audioCtx = new AudioContext();
+console.log(audioCtx.currentTime);
+
+ +

Exemplo:

+ +
var AudioContext = window.AudioContext || window.webkitAudioContext;
+var audioCtx = new AudioContext();
+// Older webkit/blink browsers require a prefix
+
+...
+
+console.log(audioCtx.currentTime);
+
+ +

Especificações:

+ + + + + + + + + + + + + + +
Especificações:StatusComentario
{{SpecName('Web Audio API', '#widl-AudioContext-currentTime', 'currentTime')}}{{Spec2('Web Audio API')}} 
+ +

Compatibilidade:

+ +
{{CompatibilityTable}}
+ +
+ + + + + + + + + + + + + + + + + + + +
FeatureChromeFirefox (Gecko)Internet ExplorerOperaSafari (WebKit)
Basic support{{CompatChrome(10.0)}}{{property_prefix("webkit")}}{{CompatGeckoDesktop(25.0)}} {{CompatNo}}15.0{{property_prefix("webkit")}}
+ 22 (unprefixed)
6.0{{property_prefix("webkit")}}
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + +
FeatureAndroidFirefox Mobile (Gecko)Firefox OSIE MobileOpera MobileSafari MobileChrome for Android
Basic support{{CompatUnknown}}26.01.2{{CompatUnknown}}{{CompatUnknown}}{{CompatUnknown}}33.0
+ +

 

+
+ +

Veja também:

+ + diff --git a/files/pt-br/web/api/battery_status_api/index.html b/files/pt-br/web/api/battery_status_api/index.html new file mode 100644 index 0000000000..603750f72c --- /dev/null +++ b/files/pt-br/web/api/battery_status_api/index.html @@ -0,0 +1,58 @@ +--- +title: Battery Status API +slug: WebAPI/Battery_Status +tags: + - API + - Apps + - Batería + - Firefox OS + - Guia(2) + - Guía + - Mobile + - Obsoleto +translation_of: Web/API/Battery_Status_API +--- +
{{obsolete_header}}
+ +
{{DefaultAPISidebar("Battery API")}}
+ +

A API Battery Status, mais conhecida como Battery API, fornece informações sobre o nível de carga da bateria presente no sistema e permite que você seja notificado por eventos que são enviados quando os níveis sofrem alterações. Isto pode ser usado para ajustar a utilização de recursos do seu aplicativo, reduzindo a quantidade de energia drenada por ele quando a bateria estiver em nível baixo, ou ainda para salvar mudanças antes da bateria acabar, prevenindo a perda de dados.

+ +

A API Battery Status API estende {{domxref("Window.navigator")}} com uma propriedade {{domxref("Navigator.battery")}} que é um objeto {{domxref("BatteryManager")}},  e adiciona alguns novos eventos que você pode receber para monitorar o status da bateria.

+ +

Exemplo

+ +

Neste exemplo, nós observamos as mudanças em ambos os status de carregamento (se estamos ou não conectados e carregando) e para mudanças no nível da bateria. Isto é feito escutando pelos eventos {{event("chargingchange")}} e {{event("levelchange")}}, respectivamente.

+ +
var battery = navigator.battery || navigator.mozBattery || navigator.webkitBattery;
+
+function updateBatteryStatus() {
+  console.log("Status da bateria: " + battery.level * 100 + " %");
+
+  if (battery.charging) {
+    console.log("A bateria está carregando");
+  }
+}
+
+battery.addEventListener("chargingchange", updateBatteryStatus);
+battery.addEventListener("levelchange", updateBatteryStatus);
+updateBatteryStatus();
+
+ +

Veja também o exemplo na especificação.

+ +

Especificações

+ +

{{page("/pt-BR/docs/Web/API/BatteryManager","Specifications")}}

+ +

Compatibilidade entre navegadores

+ +

{{page("/pt-BR/docs/Web/API/BatteryManager","Browser_compatibility")}}

+ +

Veja também

+ + diff --git a/files/pt-br/web/api/batterymanager/ondischargingtimechange/index.html b/files/pt-br/web/api/batterymanager/ondischargingtimechange/index.html new file mode 100644 index 0000000000..4f5c402588 --- /dev/null +++ b/files/pt-br/web/api/batterymanager/ondischargingtimechange/index.html @@ -0,0 +1,35 @@ +--- +title: BatteryManager.ondischargingtimechange +slug: Web/API/BatteryManager/ondischargintimechange +tags: + - API + - Battery API + - Event Handler + - Propriedade + - Referencia +translation_of: Web/API/BatteryManager/ondischargingtimechange +--- +

{{APIRef("Battery API")}}

+ +

Especifica um event listener para receber eventos {{event("dischargingtimechange")}}. Esses eventos ocorrem quando a propriedade {{domxref("BatteryManager.dischargingTime","dischargingTime")}} (tempo de descarregamento) da bateria é atualizada.

+ +

Sintaxe

+ +
navigator.battery.ondischargingtimechange = funcRef
+ +

Onde funcRef é uma função para ser chamada quando o evento {{event("dischargingtimechange")}} ocorre.

+ +

Especificações

+ +

{{page("/pt-BR/docs/Web/API/BatteryManager","Specifications")}}

+ +

Compatibilidade entre navegadores

+ +

{{page("/pt-BR/docs/Web/API/BatteryManager","Browser_compatibility")}}

+ +

Veja também

+ + diff --git a/files/pt-br/web/api/batterymanager/ondischargintimechange/index.html b/files/pt-br/web/api/batterymanager/ondischargintimechange/index.html deleted file mode 100644 index 4f5c402588..0000000000 --- a/files/pt-br/web/api/batterymanager/ondischargintimechange/index.html +++ /dev/null @@ -1,35 +0,0 @@ ---- -title: BatteryManager.ondischargingtimechange -slug: Web/API/BatteryManager/ondischargintimechange -tags: - - API - - Battery API - - Event Handler - - Propriedade - - Referencia -translation_of: Web/API/BatteryManager/ondischargingtimechange ---- -

{{APIRef("Battery API")}}

- -

Especifica um event listener para receber eventos {{event("dischargingtimechange")}}. Esses eventos ocorrem quando a propriedade {{domxref("BatteryManager.dischargingTime","dischargingTime")}} (tempo de descarregamento) da bateria é atualizada.

- -

Sintaxe

- -
navigator.battery.ondischargingtimechange = funcRef
- -

Onde funcRef é uma função para ser chamada quando o evento {{event("dischargingtimechange")}} ocorre.

- -

Especificações

- -

{{page("/pt-BR/docs/Web/API/BatteryManager","Specifications")}}

- -

Compatibilidade entre navegadores

- -

{{page("/pt-BR/docs/Web/API/BatteryManager","Browser_compatibility")}}

- -

Veja também

- - diff --git a/files/pt-br/web/api/canvas_api/a_basic_ray-caster/index.html b/files/pt-br/web/api/canvas_api/a_basic_ray-caster/index.html new file mode 100644 index 0000000000..ca188eb6f9 --- /dev/null +++ b/files/pt-br/web/api/canvas_api/a_basic_ray-caster/index.html @@ -0,0 +1,76 @@ +--- +title: A basic ray-caster +slug: Web/HTML/Canvas/A_basic_ray-caster +translation_of: Web/API/Canvas_API/A_basic_ray-caster +--- +
{{CanvasSidebar}}
+ +
+

Esse artigo disponibiliza um exemplo interessante do mundo real do uso do elemento {{HTMLElement("canvas")}} para fazer renderização via software de um ambiente em 3D utilizando ray-casting.

+
+ +

{{EmbedGHLiveSample("canvas-raycaster/index.html", 900, 300)}}

+ +

Abrir em uma nova janela

+ +

Porquê?

+ +

Depois de perceber, para meu deleite, que o elemento <canvas> que eu estava lendo sobre ele não estava apenas próximo de ser suportado pelo Firefox, mas que  estava com suporte na versão atual do Safari, eu tinha que tentar que fazer um pequeno teste.

+ +

A visão geral do canvas e o tutorial que eu encontrei no MDN são incríveis, mas ninguém havia escrito sobre animação, então eu pensei que poderia portar um exemplo de raycaster básico que eu havia trabalhado um tempo atrás, e ver e ver que tipo de performance nós podemos esperar te um pixel buffer controlado por JavaScript.

+ +

 

+ +

Como?

+ +

A ideia básica é usar o {{domxref("window.setInterval","setInterval()")}} com um delay arbitrário que corresponda a uma taxa de atualização desejada. Depois de cada intervalo uma função de atualização irá redesenhar o canvas mostrando a view atual. Eu sei que poderia ter iniciado com um exemplo mais simples, mas estou certo que o tutorial do canvas vai fazê-lo, e eu queria verificar se poderia fazer isso.

+ +

Sendo assim, a cada atualização, o raycaster verifica se você pressionou qualquer tecla por último, para conservar os cálculos não fazendo casting caso você esteja ocioso. Se você tiver pressionado, então o canvas é limpo, o solo e o céu são desenhados, a posição da câmera e/ou a orientação são atualizados, e os raios são feitos. Como os raios se cruzam paredes, então eles tornam uma tira de tela vertical na cor da parede que eles atingiram, misturado com uma versão mais escura da cor de acordo com a distância para a parede. A altura da fita também é modulada pela distância da câmera para a parede, e é desenhada centrada sobre a linha do horizonte.
+
+ O código que eu acabei com é um amálgama regurgitado dos capítulos de raycaster de um velho André LaMotheTricks do livro de Gurus de Programação de Jogos (ISBN: 0672305070), e um jaspe raycaster que encontrei online, filtrado através da minha compulsão de renomear tudo para que faça sentido Para mim, e todos os ajustes que tinham que ser feitos para fazer as coisas funcionarem bem.

+ +

 

+ +

Resultados

+ +

 

+ +


+ A tela no Safari 2.0.1 apresentou surpreendentemente bem. Com o fator de bloqueio criado para produzir slivers 8 pixels de largura, eu posso executar uma janela de 320 x 240 em 24 fps no meu Apple mini. Firefox 1.5 Beta 1 é ainda mais rápido; Eu posso executar 320 x 240 em 24 fps com 4 pixel slivers. Não exatamente um novo membro da família de software de ID, mas bastante decente considerando que é um ambiente totalmente interpretado, e eu não tenho que se preocupar com a alocação de memória ou modos de vídeo ou rotinas internas de codificação em assembler ou qualquer coisa. O código tenta ser muito eficiente, usando pesquisas de matrizes de valores pré-calculados, mas não sou um guru de otimização, então as coisas provavelmente poderiam ser escritas mais rapidamente.
+
+ Além disso, deixa muito a desejar em termos de tentar ser qualquer tipo de motor de jogo - não há texturas de parede, não sprites, sem portas, nem mesmo teleportadores para chegar a outro nível. Mas estou bastante confiante de que todas essas coisas poderiam ser adicionadas com tempo suficiente. A API de tela aceita a cópia de pixels de imagens, portanto, as texturas parecem possíveis. Vou deixar isso para outro artigo, provavelmente de outra pessoa. =)

+ +

 

+ +

O ray-caster

+ +

 

+ +


+ As pessoas agradáveis ​​aqui têm copiado manualmente meus arquivos para que você possa dar uma olhada, e para o seu prazer de hacking eu postei o conteúdo do arquivo individual como listagem de código (veja abaixo).
+
+ Então você está lá, o fogo até Safari 1.3 ou Firefox 1.5 ou outro navegador que suporta o elemento <canvas> e divirta-se!
+
+ input.js | Level.js | Player.js | RayCaster.html | RayCaster.js | trace.css | trace.js

+ +

 

+ +

 

+ +

 

+ +

 

+ +

See also

+ + diff --git a/files/pt-br/web/api/canvas_api/index.html b/files/pt-br/web/api/canvas_api/index.html new file mode 100644 index 0000000000..821909e726 --- /dev/null +++ b/files/pt-br/web/api/canvas_api/index.html @@ -0,0 +1,134 @@ +--- +title: Canvas +slug: Web/HTML/Canvas +tags: + - API + - Canvas + - Referência(2) +translation_of: Web/API/Canvas_API +--- +

{{CanvasSidebar}}

+ +

A Canvas API provê maneiras de desenhar gráficos via JavaScript e via elemento HTML {{HtmlElement("canvas")}}. Entre outras coisas, ele pode ser utilizado para animação, gráficos de jogos, visualização de dados, manipulação de fotos e processamento de vídeo em tempo real.

+ +

A Canvas API foca amplamente em gráficos 2D. A WebGL API, que também usa o elemento <canvas>, desenha gráficos 2D e 3D acelerados por hardware.

+ +

Exemplo básico

+ +

Este exemplo simples desenha um retângulo verde para um canvas.

+ +

HTML

+ +
<canvas id="canvas"></canvas>
+
+ +

JavaScript

+ +

O método {{domxref("Document.getElementById()")}} pega uma referência para o elemento HTML <canvas>. Em seguida, o método {{domxref("HTMLCanvasElement.getContext()")}} pega o contexto daquele elemento - a coisa sobre a qual o desenho será renderizado.

+ +

O desenho atual é feito usando a interface {{domxref("CanvasRenderingContext2D")}}. A propriedade {{domxref("CanvasRenderingContext2D.fillStyle", "fillStyle")}} faz o retângulo verde. O método {{domxref("CanvasRenderingContext2D.fillRect()", "fillRect()")}} coloca seu canto superior direito em (10, 10) e dá a ele o tamanho de 150 unidades de largura e 100 de altura.

+ +
const canvas = document.getElementById('canvas');
+const ctx = canvas.getContext('2d');
+
+ctx.fillStyle = 'green';
+ctx.fillRect(10, 10, 150, 100);
+
+ +

Resultado

+ +

{{ EmbedLiveSample('Exemplo_básico', 700, 180) }}

+ +

Referência

+ + + +
+

Nota: As interfaces relacionadas ao WebGLRenderingContext são referenciadas sob WebGL.

+
+ +

{{domxref("CanvasCaptureMediaStream")}} é uma interface relacionada.

+ +

Guias e Tutoriais

+ +
+
+
Tutorial Canvas
+
Um tutorial compreensivo abordando o uso básico da API de Canvas e suas funcionalidades avançadas.
+
Mergulhando no Canvas HTML5
+
Uma introdução prática e extensa à API Canvas e WebGL.
+
Guia Canvas
+
Uma referência acessível para a API Canvas.
+
Demonstração: Um ray-caster básico 
+
Uma demonstração de animação ray-tracing usando canvas.
+
Manipulando vídeos usando canvas
+
Combinando {{HTMLElement("video")}} e {{HTMLElement("canvas")}} para manipular dados de vídeo em tempo real.
+
+ +

Bibliotecas

+ +

A API Canvas é extremamente poderosa, mas nem sempre é simples de usar. As bibliotecas listadas abaixo podem fazer a criação de projetos baseados em canvas mais rápida e fácil.

+ + + +
+

Nota: Veja a WebGL API para bibliotecas 2D e 3D que usam WebGL.

+
+ +

Especificações

+ +
+ + + + + + + + + + + + + + + +
EspecificaçõesEstadoComentário
{{SpecName('HTML WHATWG', '#2dcontext', 'the 2D rendering context')}}{{Spec2('HTML WHATWG')}}
+
+ +

Compatibilidade de navegador

+ +

Aplicações Mozilla ganharam suporte para <canvas> a partir do Gecko 1.8 (Firefox 1.5). O elemento foi originalmente introduzido pela Apple para o Dashboard OS X e Safari. O Internet Explorer suporta <canvas> quando inclui-se um script do projeto Explorer Canvas, da google. Google Chrome e Opera 9 também suportam <canvas>.

+ +

Ver também

+ + diff --git a/files/pt-br/web/api/canvas_api/tutorial/advanced_animations/index.html b/files/pt-br/web/api/canvas_api/tutorial/advanced_animations/index.html new file mode 100644 index 0000000000..23f072420e --- /dev/null +++ b/files/pt-br/web/api/canvas_api/tutorial/advanced_animations/index.html @@ -0,0 +1,386 @@ +--- +title: Advanced animations +slug: Web/Guide/HTML/Canvas_tutorial/Advanced_animations +tags: + - Animation + - Animations + - Canvas + - animated + - efeitos em animações +translation_of: Web/API/Canvas_API/Tutorial/Advanced_animations +--- +
{{CanvasSidebar}} {{PreviousNext("Web/API/Canvas_API/Tutorial/Basic_animations", "Web/API/Canvas_API/Tutorial/Pixel_manipulation_with_canvas")}}
+ +
+

No último capítulo nós fizemos algumas animações básicas  e fomos conhecer caminhos para conseguir com que as coisas se movessem. Nesta parte prestaremos mais atenção nos movimentos e vamos adicionar algumas físicas para fazer nossas animações mais avançadas.

+
+ +

Desenhe uma bola

+ +

Nós estamos indo usar uma bola para nossa animação estudada. Então vamos pintar aquela bola desenhada no canvas. O seguinte código configurará.

+ +
<canvas id="canvas" width="600" height="300"></canvas>
+
+ +

 Como usual, nós precisamos de um contexto de desenho primeiro. Para desenhar a bola, nós criaremos um objeto bola ao qual contém propriedades e um método draw() para pintar no canvas.

+ +
var canvas = document.getElementById('canvas');
+var ctx = canvas.getContext('2d');
+
+var ball = {
+  x: 100,
+  y: 100,
+  radius: 25,
+  color: 'blue',
+  draw: function() {
+    ctx.beginPath();
+    ctx.arc(this.x, this.y, this.radius, 0, Math.PI * 2, true);
+    ctx.closePath();
+    ctx.fillStyle = this.color;
+    ctx.fill();
+  }
+};
+
+ball.draw();
+ +

Nada de especial aqui, a bola é atualmente um simples círculos e desenha com ajuda de 

+ +

{{domxref("CanvasRenderingContext2D.arc()", "arc()")}} method.

+ +

Adicionando velocidade

+ +

Agora que você tem a bola, Nós estamos prontos para adicionar uma animação como nós temos aprendido no último capítulo deste tutorial. Denovo, {{domxref("window.requestAnimationFrame()")}} ajuda-nos a controlar a animação. a bola pega o movimento adicionando um vetor de velocidade para a posição. Para cada frame, N[ós também {{domxref("CanvasRenderingContext2D.clearRect", "clear", "", 1)}}o canvas para remover velhor círculos da prioridade dos frames.

+ +
var canvas = document.getElementById('canvas');
+var ctx = canvas.getContext('2d');
+var raf;
+
+var ball = {
+  x: 100,
+  y: 100,
+  vx: 5,
+  vy: 2,
+  radius: 25,
+  color: 'blue',
+  draw: function() {
+    ctx.beginPath();
+    ctx.arc(this.x, this.y, this.radius, 0, Math.PI * 2, true);
+    ctx.closePath();
+    ctx.fillStyle = this.color;
+    ctx.fill();
+  }
+};
+
+function draw() {
+  ctx.clearRect(0,0, canvas.width, canvas.height);
+  ball.draw();
+  ball.x += ball.vx;
+  ball.y += ball.vy;
+  raf = window.requestAnimationFrame(draw);
+}
+
+canvas.addEventListener('mouseover', function(e) {
+  raf = window.requestAnimationFrame(draw);
+});
+
+canvas.addEventListener('mouseout', function(e) {
+  window.cancelAnimationFrame(raf);
+});
+
+ball.draw();
+
+ +

Limites

+ +

Sem um teste de limite de colisão nossa bola correria para fora do canvas rapidamente. Nós precisamos checar se a posição x e y da bola está fora das dimensões do canvas e invertida a direção do vetor de velocidade. Para fazer isto, Nós adicionamos a seguinte checagem para o método draw():

+ +
if (ball.y + ball.vy > canvas.height || ball.y + ball.vy < 0) {
+  ball.vy = -ball.vy;
+}
+if (ball.x + ball.vx > canvas.width || ball.x + ball.vx < 0) {
+  ball.vx = -ball.vx;
+}
+ +

Primeira demonstração

+ +

Deixe-me ver como isto fica em ação até agora. Mova seu mouse dentro do canvas para iniciar a animação.

+ + + +

{{EmbedLiveSample("First_demo", "610", "310")}}

+ +

Aceleração

+ +

Para fazer o movimento tão real, você para jogar com a velocidade como isto, por exemplo:

+ +
ball.vy *= .99;
+ball.vy += .25;
+ +

Esta diminuição da velocidade vertical para cada frame. Assim que a bola somente saltar no chão no final.

+ + + +

{{EmbedLiveSample("Second_demo", "610", "310")}}

+ +

Efeito de arrastar

+ +

Até agora nós temos feito uso do {{domxref("CanvasRenderingContext2D.clearRect", "clearRect")}} méthodo quando limpar as prioridades do frame.Se você substituir este método com um semi-transparente {{domxref("CanvasRenderingContext2D.fillRect", "fillRect")}}, você pode fácilmente criar um efeito de arrastar.

+ +
ctx.fillStyle = 'rgba(255, 255, 255, 0.3)';
+ctx.fillRect(0, 0, canvas.width, canvas.height);
+ + + +

{{EmbedLiveSample("Third_demo", "610", "310")}}

+ +

Adicione um controle de mouse

+ +

 

+ +

Para conseguir alguns controles sobre a bola, nós podemos fazer isto seguindo nosso mouse usando o evento mouseover, por exemplo. O clique por exemplo. O evento clique que libera a bola e deixa seu limite de novo.

+ + + +
var canvas = document.getElementById('canvas');
+var ctx = canvas.getContext('2d');
+var raf;
+var running = false;
+
+var ball = {
+  x: 100,
+  y: 100,
+  vx: 5,
+  vy: 1,
+  radius: 25,
+  color: 'blue',
+  draw: function() {
+    ctx.beginPath();
+    ctx.arc(this.x, this.y, this.radius, 0, Math.PI * 2, true);
+    ctx.closePath();
+    ctx.fillStyle = this.color;
+    ctx.fill();
+  }
+};
+
+function clear() {
+  ctx.fillStyle = 'rgba(255, 255, 255, 0.3)';
+  ctx.fillRect(0,0,canvas.width,canvas.height);
+}
+
+function draw() {
+  clear();
+  ball.draw();
+  ball.x += ball.vx;
+  ball.y += ball.vy;
+
+  if (ball.y + ball.vy > canvas.height || ball.y + ball.vy < 0) {
+    ball.vy = -ball.vy;
+  }
+  if (ball.x + ball.vx > canvas.width || ball.x + ball.vx < 0) {
+    ball.vx = -ball.vx;
+  }
+
+  raf = window.requestAnimationFrame(draw);
+}
+
+canvas.addEventListener('mousemove', function(e) {
+  if (!running) {
+    clear();
+    ball.x = e.clientX;
+    ball.y = e.clientY;
+    ball.draw();
+  }
+});
+
+canvas.addEventListener('click', function(e) {
+  if (!running) {
+    raf = window.requestAnimationFrame(draw);
+    running = true;
+  }
+});
+
+canvas.addEventListener('mouseout', function(e) {
+  window.cancelAnimationFrame(raf);
+  running = false;
+});
+
+ball.draw();
+
+ +

Mova a bola usando seu mouse e libere - o com um clique.

+ +

{{EmbedLiveSample("Adding_mouse_control", "610", "310")}}

+ +

Sair

+ +

Este curto capítulo somente explica algumas técnicas para criar as mais avançadas animações. Há muito mais! Como adicionar um paddle, alguns bricks, e tornar este demo dentro de um jogo Breakout? Cheque a nossa área de Desenvolvimento de jogos para mais artigos de jogos.

+ +

Veja também:

+ + + +

{{PreviousNext("Web/API/Canvas_API/Tutorial/Basic_animations", "Web/API/Canvas_API/Tutorial/Pixel_manipulation_with_canvas")}}

diff --git a/files/pt-br/web/api/canvas_api/tutorial/applying_styles_and_colors/index.html b/files/pt-br/web/api/canvas_api/tutorial/applying_styles_and_colors/index.html new file mode 100644 index 0000000000..f711570b9f --- /dev/null +++ b/files/pt-br/web/api/canvas_api/tutorial/applying_styles_and_colors/index.html @@ -0,0 +1,725 @@ +--- +title: Aplicando estilos e cores +slug: Web/Guide/HTML/Canvas_tutorial/Applying_styles_and_colors +translation_of: Web/API/Canvas_API/Tutorial/Applying_styles_and_colors +--- +
{{CanvasSidebar}} {{PreviousNext("Web/API/Canvas_API/Tutorial/Drawing_shapes", "Web/API/Canvas_API/Tutorial/Drawing_text")}}
+ +
+

No capítulo sobre desenhando formas com canvas, usamos apenas os estilos padrões de preenchimento e linha. Aqui vamos explorar as opções do canvas que temos à nossa disposição para tornar nossos desenhos um pouco mais atraentes. Você aprenderá a adicionar cores diferentes, estilos de linhas, gradientes, padrões e sombras aos seus desenhos.

+
+ +

Cores

+ +

Até agora só vimos métodos do contexto de desenho. Se quisermos aplicar cores a uma forma, existem duas propriedades importantes que podemos utilizar: fillStyle e strokeStyle.

+ +
+
{{domxref("CanvasRenderingContext2D.fillStyle", "fillStyle = color")}}
+
Define o estilo usado ao preencher (fill) formas.
+
{{domxref("CanvasRenderingContext2D.strokeStyle", "strokeStyle = color")}}
+
Define o estilo para os contornos (strokes) das formas.
+
+ +

color é uma string que representa um CSS {{cssxref("<color>")}}, um objeto gradiente, ou um objeto padrão. Examinaremos sobre objetos de gradiente e padrão mais tarde. Por padrão, a cor do contorno (stroke color) e a cor de preenchimento (fill color) estão definidos como preto (valor de cor no CSS é #000000).

+ +
+

Nota: Quando você definir as propriedades strokeStyle e/ou fillStyle , o novo valor será o padrão para todas as formas desenhadas a partir de então.  Para toda forma que você quiser uma cor diferente, você vai precisar alterar o valor da propriedade fillStyle ou strokeStyle.

+
+ +

As strings validas que você pode inserir devem, de acordo com a especificação ser valores CSS {{cssxref("<color>")}}. Cada um dos exemplos a seguir, descrevem a mesma cor.

+ +
// these all set the fillStyle to 'orange'
+
+ctx.fillStyle = 'orange';
+ctx.fillStyle = '#FFA500';
+ctx.fillStyle = 'rgb(255, 165, 0)';
+ctx.fillStyle = 'rgba(255, 165, 0, 1)';
+
+ +

Um fillStyle exemplo

+ +

Neste exemplo, nós vamos mais uma vez utilizar dois for loops para desenhar uma grade de retângulos, cada um com uma cor diferente. A imagem do resultado, deve parecer como a captura de tela. Não existe nada de muito espetacular acontecendo aqui. Nós usamos as duas variéveis i and j para gerar uma única cor em RGB para cada quadrado, e apenas modificando os valores vermelho e verde. O canal azul possui um valor fixo. Modificando os canais, você pode gerar todos os tipos de paletas. Aumentando os passos, você pode alcançar algo que se parece com a paleta de cores dos usuários de Photoshop.

+ +
function draw() {
+  var ctx = document.getElementById('canvas').getContext('2d');
+  for (var i = 0; i < 6; i++) {
+    for (var j = 0; j < 6; j++) {
+      ctx.fillStyle = 'rgb(' + Math.floor(255 - 42.5 * i) + ',' +
+                       Math.floor(255 - 42.5 * j) + ',0)';
+      ctx.fillRect(j * 25, i * 25, 25, 25);
+    }
+  }
+}
+ + + +

O resultado se parece com isto:

+ +

{{EmbedLiveSample("A_fillStyle_example", 160, 160, "https://mdn.mozillademos.org/files/5417/Canvas_fillstyle.png")}}

+ +

Um strokeStyle exemplo

+ +

Este exemplo é similar com o anterior, porém utiliza a propriedade strokeStyle para alterar a cor de contorno das formas. Nós usamos o método arc()  para desenhar círculos ao invés de quadrados.

+ +
  function draw() {
+    var ctx = document.getElementById('canvas').getContext('2d');
+    for (var i = 0; i < 6; i++) {
+      for (var j = 0; j < 6; j++) {
+        ctx.strokeStyle = 'rgb(0,' + Math.floor(255 - 42.5 * i) + ',' +
+                         Math.floor(255 - 42.5 * j) + ')';
+        ctx.beginPath();
+        ctx.arc(12.5 + j * 25, 12.5 + i * 25, 10, 0, Math.PI * 2, true);
+        ctx.stroke();
+      }
+    }
+  }
+
+ + + +

O resultado se parece com isto:

+ +

{{EmbedLiveSample("A_strokeStyle_example", "180", "180", "https://mdn.mozillademos.org/files/253/Canvas_strokestyle.png")}}

+ +
Transparência
+ Além de desenhar formas opacas na tela, também podemos desenhar formas semi-transparentes (ou translúcidas). Isso é feito definindo a propriedade globalAlpha ou atribuindo uma cor semitransparente ao estilo de stroke e / ou fill style.
+ +
+
+
{{domxref("CanvasRenderingContext2D.globalAlpha", "globalAlpha = transparencyValue")}}
+
+
+

Aplica o valor de transparência especificado a todas as formas futuras desenhadas na tela. O valor deve estar entre 0,0 (totalmente transparente) e 1,0 (totalmente opaco). Este valor é 1.0 (totalmente opaco) por padrão.
+ A propriedade globalAlpha pode ser útil se você quiser desenhar muitas formas na tela com transparência semelhante, mas, caso contrário, geralmente é mais útil definir a transparência em formas individuais ao definir suas cores.

+ +

Como as propriedades strokeStyle e fillStyle aceitam os valores de cor CSS rgba, podemos usar a notação a seguir para atribuir uma cor transparente a eles.

+
+
+ +
// Assigning transparent colors to stroke and fill style
+
+ctx.strokeStyle = 'rgba(255, 0, 0, 0.5)';
+ctx.fillStyle = 'rgba(255, 0, 0, 0.5)';
+
+ +

A função rgba () é semelhante à função rgb (), mas possui um parâmetro extra. O último parâmetro define o valor da transparência dessa cor específica. O intervalo válido é novamente entre 0,0 (totalmente transparente) e 1,0 (totalmente opaco).

+ +

Um exemplo globalAlpha

+ +

Neste exemplo, desenharemos um plano de fundo de quatro quadrados coloridos diferentes. Além disso, desenharemos um conjunto de círculos semi-transparentes. A propriedade globalAlpha é configurada em 0.2, que será usada para todas as formas a partir desse ponto. Cada passo no loop for desenha um conjunto de círculos com um raio crescente. O resultado final é um gradiente radial. Ao sobrepor cada vez mais círculos um sobre o outro, reduzimos efetivamente a transparência dos círculos que já foram desenhados. Ao aumentar a contagem de etapas e, com efeito, desenhar mais círculos, o plano de fundo desapareceria completamente do centro da imagem.

+ +
function draw() {
+  var ctx = document.getElementById('canvas').getContext('2d');
+  // draw background
+  ctx.fillStyle = '#FD0';
+  ctx.fillRect(0, 0, 75, 75);
+  ctx.fillStyle = '#6C0';
+  ctx.fillRect(75, 0, 75, 75);
+  ctx.fillStyle = '#09F';
+  ctx.fillRect(0, 75, 75, 75);
+  ctx.fillStyle = '#F30';
+  ctx.fillRect(75, 75, 75, 75);
+  ctx.fillStyle = '#FFF';
+
+  // set transparency value
+  ctx.globalAlpha = 0.2;
+
+  // Draw semi transparent circles
+  for (i = 0; i < 7; i++) {
+    ctx.beginPath();
+    ctx.arc(75, 75, 10 + 10 * i, 0, Math.PI * 2, true);
+    ctx.fill();
+  }
+}
+ + + +

{{EmbedLiveSample("A_globalAlpha_example", "180", "180", "https://mdn.mozillademos.org/files/232/Canvas_globalalpha.png")}}

+ +

Um exemplo usando o rgba()

+ +

Neste segundo exemplo, fazemos algo semelhante ao anterior, mas em vez de desenhar círculos uns sobre os outros, desenhei pequenos retângulos com crescente opacidade. O uso de rgba () oferece um pouco mais de controle e flexibilidade, pois podemos definir o estilo de preenchimento e traçado/stroke individualmente.

+ +
function draw() {
+  var ctx = document.getElementById('canvas').getContext('2d');
+
+  // Draw background
+  ctx.fillStyle = 'rgb(255, 221, 0)';
+  ctx.fillRect(0, 0, 150, 37.5);
+  ctx.fillStyle = 'rgb(102, 204, 0)';
+  ctx.fillRect(0, 37.5, 150, 37.5);
+  ctx.fillStyle = 'rgb(0, 153, 255)';
+  ctx.fillRect(0, 75, 150, 37.5);
+  ctx.fillStyle = 'rgb(255, 51, 0)';
+  ctx.fillRect(0, 112.5, 150, 37.5);
+
+  // Draw semi transparent rectangles
+  for (var i = 0; i < 10; i++) {
+    ctx.fillStyle = 'rgba(255, 255, 255, ' + (i + 1) / 10 + ')';
+    for (var j = 0; j < 4; j++) {
+      ctx.fillRect(5 + i * 14, 5 + j * 37.5, 14, 27.5);
+    }
+  }
+}
+ + + +

{{EmbedLiveSample("An_example_using_rgba()", "180", "180", "https://mdn.mozillademos.org/files/246/Canvas_rgba.png")}}

+ +

Line styles

+ +

Existem várias propriedades que permitem estilizar linhas.

+ +
+
{{domxref("CanvasRenderingContext2D.lineWidth", "lineWidth = value")}}
+
Define a largura das linhas desenhadas no futuro.
+
{{domxref("CanvasRenderingContext2D.lineCap", "lineCap = type")}}
+
Define a aparência dos fins das linhas.
+
{{domxref("CanvasRenderingContext2D.lineJoin", "lineJoin = type")}}
+
Define a aparência dos "cantos" onde as linhas se encontram.
+
{{domxref("CanvasRenderingContext2D.miterLimit", "miterLimit = value")}}
+
Estabelece um limite na mitra quando duas linhas se juntam em um ângulo agudo, para permitir controlar a espessura da junção.
+
{{domxref("CanvasRenderingContext2D.getLineDash", "getLineDash()")}}
+
Retorna a matriz de padrão de traço de linha atual que contém um número par de números não negativos
+
{{domxref("CanvasRenderingContext2D.setLineDash", "setLineDash(segments)")}}
+
Define o padrão de traço da linha atual.
+
{{domxref("CanvasRenderingContext2D.lineDashOffset", "lineDashOffset = value")}}
+
Especifica onde iniciar uma matriz de traços em uma linha.
+
+ +

Você entenderá melhor o que eles fazem observando os exemplos abaixo.

+ +

Um exemplo lineWidth

+ +

A largura da linha é a espessura do traçado centralizado no caminho especificado. Em outras palavras, a área desenhada se estende até a metade da largura da linha em ambos os lados do caminho.

+ +

  Como as coordenadas da tela não fazem referência direta aos pixels, deve-se tomar cuidado especial para obter linhas horizontais e verticais nítidas.

+ +

No exemplo abaixo, 10 linhas retas são desenhadas com larguras de linhas crescentes. A linha na extrema esquerda tem 1,0 unidades de largura. No entanto, as linhas de espessura à esquerda e todas as outras linhas com número inteiro ímpar não aparecem nítidas, devido ao posicionamento do caminho.

+ +
function draw() {
+  var ctx = document.getElementById('canvas').getContext('2d');
+  for (var i = 0; i < 10; i++) {
+    ctx.lineWidth = 1 + i;
+    ctx.beginPath();
+    ctx.moveTo(5 + i * 14, 5);
+    ctx.lineTo(5 + i * 14, 140);
+    ctx.stroke();
+  }
+}
+
+ + + +

{{EmbedLiveSample("A_lineWidth_example", "180", "180", "https://mdn.mozillademos.org/files/239/Canvas_linewidth.png")}}

+ +

A obtenção de linhas nítidas requer a compreensão de como os caminhos são traçados. Nas imagens abaixo, a grade representa a grade de coordenadas da tela. Os quadrados entre as linhas de grade são pixels reais na tela. Na primeira imagem da grade abaixo, um retângulo de (2,1) a (5,5) é preenchido. A área inteira entre eles (vermelho claro) cai nos limites dos pixels, portanto, o retângulo preenchido resultante terá bordas nítidas.
+

+ +

Se você considerar um caminho de (3,1) a (3,5) com uma espessura de linha de 1,0, você terminará com a situação na segunda imagem. A área real a ser preenchida (azul escuro) se estende apenas até a metade dos pixels dos dois lados do caminho. Uma aproximação disso deve ser renderizada, o que significa que esses pixels são sombreados apenas parcialmente e resultam em toda a área (azul claro e azul escuro) sendo preenchida com uma cor apenas metade da escuridão da cor real do traço. É o que acontece com a linha de largura 1.0 no código de exemplo anterior.

+ +

Para corrigir isso, você precisa ser muito preciso na criação do seu caminho. Sabendo que uma linha de largura 1,0 estenderá meia unidade para ambos os lados do caminho, criar o caminho de (3,5,1) a (3,5,5) resulta na situação da terceira imagem - a largura da linha 1,0 termina completamente e preenchendo com precisão uma única linha vertical de pixel.
+  

+ +
+

Nota: Esteja ciente de que, no nosso exemplo de linha vertical, a posição Y ainda faz referência a uma posição de linha de grade inteira - se não tivesse, veríamos pixels com meia cobertura nos pontos de extremidade (mas observe também que esse comportamento depende do estilo lineCap atual cujo valor padrão é butt; você pode calcular traçados consistentes com coordenadas de meio pixel para linhas de largura ímpar, configurando o estilo lineCap como quadrado, para que a borda externa do traçado ao redor do ponto de extremidade seja estendida automaticamente para cobrir o pixel inteiro exatamente).

+ +

Observe também que apenas os pontos de extremidade inicial e final de um caminho são afetados: se um caminho for fechado com closePath (), não haverá ponto inicial e final; em vez disso, todos os pontos de extremidade no caminho são conectados ao segmento anterior e ao próximo anexado usando a configuração atual do estilo lineJoin, cujo valor padrão é mitra, com o efeito de estender automaticamente as bordas externas dos segmentos conectados ao seu ponto de interseção. que o traçado renderizado cobrirá exatamente os pixels completos centralizados em cada ponto final se esses segmentos conectados forem horizontais e / ou verticais). Veja as próximas duas seções para demonstrações desses estilos de linha adicionais.

+
+ +

Para linhas de largura uniforme, cada metade acaba sendo uma quantidade inteira de pixels, portanto, você deseja um caminho entre pixels (ou seja, (3,1) a (3,5)), em vez de no meio dos pixels .

+ +

Embora seja um pouco doloroso ao trabalhar inicialmente com gráficos 2D escalonáveis, prestar atenção à grade de pixels e à posição dos caminhos garante que seus desenhos pareçam corretos, independentemente da escala ou de qualquer outra transformação envolvida. Uma linha vertical de 1,0 largura desenhada na posição correta se tornará uma linha nítida de 2 pixels quando aumentada em 2 e aparecerá na posição correta.

+ +

Exemplo lineCap.

+ +

A propriedade lineCap determina como os pontos finais de cada linha são desenhados. Existem três valores possíveis para essa propriedade e são: bunda, redondo e quadrado. Por padrão, essa propriedade está configurada para butt.

+ +
+
butt
+
As extremidades das linhas são quadradas nos pontos finais.
+
round
+
As extremidades das linhas são arredondadas.
+ arredondadas.
+
square
+
As extremidades das linhas são ajustadas ao quadrado, adicionando uma caixa com a mesma largura e metade da altura da espessura da linha.
+
+ +

Neste exemplo, desenharemos três linhas, cada uma com um valor diferente para a propriedade lineCap. Também adicionei dois guias para ver as diferenças exatas entre os três. Cada uma dessas linhas começa e termina exatamente nesses guias.

+ +

A linha à esquerda usa a opção de topo padrão. Você notará que está desenhado completamente alinhado com as guias. O segundo está definido para usar a opção redonda. Isso adiciona um semicírculo ao final que tem um raio com metade da largura da linha. A linha à direita usa a opção quadrada. Isso adiciona uma caixa com largura igual e metade da altura da espessura da linha.

+ +
function draw() {
+  var ctx = document.getElementById('canvas').getContext('2d');
+  var lineCap = ['butt', 'round', 'square'];
+
+  // Draw guides
+  ctx.strokeStyle = '#09f';
+  ctx.beginPath();
+  ctx.moveTo(10, 10);
+  ctx.lineTo(140, 10);
+  ctx.moveTo(10, 140);
+  ctx.lineTo(140, 140);
+  ctx.stroke();
+
+  // Draw lines
+  ctx.strokeStyle = 'black';
+  for (var i = 0; i < lineCap.length; i++) {
+    ctx.lineWidth = 15;
+    ctx.lineCap = lineCap[i];
+    ctx.beginPath();
+    ctx.moveTo(25 + i * 50, 10);
+    ctx.lineTo(25 + i * 50, 140);
+    ctx.stroke();
+  }
+}
+
+ + + +

{{EmbedLiveSample("A_lineCap_example", "180", "180", "https://mdn.mozillademos.org/files/236/Canvas_linecap.png")}}

+ +

Um exemplo de lineJoin

+ +

A propriedade lineJoin determina como dois segmentos de conexão (de linhas, arcos ou curvas) com comprimentos diferentes de zero em uma forma são unidos (segmentos degenerados com comprimentos zero, cujos pontos finais e pontos de controle especificados são exatamente na mesma posição, são ignorados) .

+ +

Existem três valores possíveis para essa propriedade: round, chanfro e mitra. Por padrão, essa propriedade está configurada para mitra. Observe que a configuração lineJoin não terá efeito se os dois segmentos conectados tiverem a mesma direção, porque nenhuma área de junção será adicionada neste caso.

+ +
+
round
+
Arredonda os cantos de uma forma preenchendo um setor adicional de disco centralizado no ponto final comum dos segmentos conectados. O raio desses cantos arredondados é igual à metade da largura da linha.
+
bevel
+
Preenche uma área triangular adicional entre o ponto final comum dos segmentos conectados e os cantos retangulares externos separados de cada segmento.
+
miter
+
Os segmentos conectados são unidos estendendo suas bordas externas para se conectarem em um único ponto, com o efeito de preencher uma área adicional em forma de losango. Essa configuração é efetuada pela propriedade miterLimit, explicada abaixo.
+
+ +

O exemplo abaixo desenha três caminhos diferentes, demonstrando cada uma dessas três configurações de propriedade lineJoin; a saída é mostrada acima.

+ +
function draw() {
+  var ctx = document.getElementById('canvas').getContext('2d');
+  var lineJoin = ['round', 'bevel', 'miter'];
+  ctx.lineWidth = 10;
+  for (var i = 0; i < lineJoin.length; i++) {
+    ctx.lineJoin = lineJoin[i];
+    ctx.beginPath();
+    ctx.moveTo(-5, 5 + i * 40);
+    ctx.lineTo(35, 45 + i * 40);
+    ctx.lineTo(75, 5 + i * 40);
+    ctx.lineTo(115, 45 + i * 40);
+    ctx.lineTo(155, 5 + i * 40);
+    ctx.stroke();
+  }
+}
+
+ + + +

{{EmbedLiveSample("A_lineJoin_example", "180", "180", "https://mdn.mozillademos.org/files/237/Canvas_linejoin.png")}}

+ +

Uma demonstração da propriedade miterLimit

+ +

Como você viu no exemplo anterior, ao unir duas linhas com a opção de esquadria, as bordas externas das duas linhas de junção são estendidas até o ponto em que elas se encontram. Para linhas com ângulos amplos entre si, esse ponto não está longe do ponto de conexão interno. No entanto, à medida que os ângulos entre cada linha diminuem, a distância (comprimento da mitra) entre esses pontos aumenta exponencialmente.

+ +

A propriedade miterLimit determina a que distância o ponto de conexão externo pode ser colocado do ponto de conexão interno. Se duas linhas excederem esse valor, uma junção de chanfro será desenhada. Observe que o comprimento máximo da esquadria é o produto da largura da linha medida no sistema de coordenadas atual, pelo valor dessa propriedade miterLimit (cujo valor padrão é 10.0 no HTML {{HTMLElement ("canvas")}}}), portanto, o O miterLimit pode ser definido independentemente da escala de exibição atual ou de quaisquer transformações afins de caminhos: apenas influencia a forma efetivamente renderizada das arestas da linha.

+ +

Mais exatamente, o limite da mitra é a proporção máxima permitida do comprimento da extensão (na tela HTML, é medida entre o canto externo das arestas unidas da linha e o ponto de extremidade comum dos segmentos de conexão especificados no caminho) pela metade do espessura da linha. Pode ser definido de maneira equivalente como a proporção máxima permitida da distância entre os pontos interno e externo da junção das arestas e a largura total da linha. Em seguida, é igual ao coecante da metade do ângulo interno mínimo dos segmentos de conexão abaixo dos quais nenhuma junção de esquadria será renderizada, mas apenas uma junção de chanfro:

+ + + +

Aqui está uma pequena demonstração na qual você pode definir o mitreLimit dinamicamente e ver como isso afeta as formas na tela. As linhas azuis mostram onde estão os pontos inicial e final de cada uma das linhas no padrão em zigue-zague.

+ +

Se você especificar um valor de miterLimite abaixo de 4.2 nesta demonstração, nenhum dos cantos visíveis poderá ser uma extensão de mitra, mas apenas com um pequeno canal próximo às linhas azuis; com um limite máximo acima de 10, a maioria dos cantos nesta demonstração deve ser levada a uma meia-esquadria das linhas azuis e a altura está diminuindo entre os cantos da esquerda para a direita porque eles estão conectados com ângulos crescentes; com valores intermediários, os cantos do lado esquerdo ou apenas um canto próximo às linhas azuis e os cantos do lado direito com uma extensão de esquadria (também com uma altura decrescente).

+ +
function draw() {
+  var ctx = document.getElementById('canvas').getContext('2d');
+
+  // Clear canvas
+  ctx.clearRect(0, 0, 150, 150);
+
+  // Draw guides
+  ctx.strokeStyle = '#09f';
+  ctx.lineWidth   = 2;
+  ctx.strokeRect(-5, 50, 160, 50);
+
+  // Set line styles
+  ctx.strokeStyle = '#000';
+  ctx.lineWidth = 10;
+
+  // check input
+  if (document.getElementById('miterLimit').value.match(/\d+(\.\d+)?/)) {
+    ctx.miterLimit = parseFloat(document.getElementById('miterLimit').value);
+  } else {
+    alert('Value must be a positive number');
+  }
+
+  // Draw lines
+  ctx.beginPath();
+  ctx.moveTo(0, 100);
+  for (i = 0; i < 24 ; i++){
+    var dy = i % 2 == 0 ? 25 : -25 ;
+    ctx.lineTo(Math.pow(i, 1.5) * 2, 75 + dy);
+  }
+  ctx.stroke();
+  return false;
+}
+
+ + + +

{{EmbedLiveSample("A_demo_of_the_miterLimit_property", "400", "180", "https://mdn.mozillademos.org/files/240/Canvas_miterlimit.png")}}

+ +

Usando linhas tracejadas

+ +

O método setLineDash e a propriedade lineDashOffset especificam o padrão de traço para as linhas. O método setLineDash aceita uma lista de números que especificam distâncias para desenhar alternadamente entre uma linha e uma lacuna. Já a propriedade lineDashOffset define a distância até onde se deve iniciar a linha.

+ +

Neste exemplo, criaremos um efeito de formigas caminhando. É uma técnica de animação frequentemente usada em computação gráfica, pois ajuda o usuário a fazer uma distinção entre a borda e o plano de fundo animando a borda. Mais tarde neste tutorial, você aprenderá como fazer animações básicas.

+ + + +
var ctx = document.getElementById('canvas').getContext('2d');
+var offset = 0;
+
+function draw() {
+  ctx.clearRect(0, 0, canvas.width, canvas.height);
+  ctx.setLineDash([4, 2]);
+  ctx.lineDashOffset = -offset;
+  ctx.strokeRect(10, 10, 100, 100);
+}
+
+function march() {
+  offset++;
+  if (offset > 16) {
+    offset = 0;
+  }
+  draw();
+  setTimeout(march, 20);
+}
+
+march();
+ +

{{EmbedLiveSample("Using_line_dashes", "120", "120", "https://mdn.mozillademos.org/files/9853/marching-ants.png")}}

+ +

Gradients

+ +

Just like any normal drawing program, we can fill and stroke shapes using linear and radial gradients. We create a {{domxref("CanvasGradient")}} object by using one of the following methods. We can then assign this object to the fillStyle or strokeStyle properties.

+ +
+
{{domxref("CanvasRenderingContext2D.createLinearGradient", "createLinearGradient(x1, y1, x2, y2)")}}
+
Creates a linear gradient object with a starting point of (x1, y1) and an end point of (x2, y2).
+
{{domxref("CanvasRenderingContext2D.createRadialGradient", "createRadialGradient(x1, y1, r1, x2, y2, r2)")}}
+
Creates a radial gradient. The parameters represent two circles, one with its center at (x1, y1) and a radius of r1, and the other with its center at (x2, y2) with a radius of r2.
+
+ +

For example:

+ +
var lineargradient = ctx.createLinearGradient(0, 0, 150, 150);
+var radialgradient = ctx.createRadialGradient(75, 75, 0, 75, 75, 100);
+
+ +

Once we've created a CanvasGradient object we can assign colors to it by using the addColorStop() method.

+ +
+
{{domxref("CanvasGradient.addColorStop", "gradient.addColorStop(position, color)")}}
+
Creates a new color stop on the gradient object. The position is a number between 0.0 and 1.0 and defines the relative position of the color in the gradient, and the color argument must be a string representing a CSS {{cssxref("<color>")}}, indicating the color the gradient should reach at that offset into the transition.
+
+ +

You can add as many color stops to a gradient as you need. Below is a very simple linear gradient from white to black.

+ +
var lineargradient = ctx.createLinearGradient(0, 0, 150, 150);
+lineargradient.addColorStop(0, 'white');
+lineargradient.addColorStop(1, 'black');
+
+ +

A createLinearGradient example

+ +

In this example, we'll create two different gradients. As you can see here, both the strokeStyle and fillStyle properties can accept a canvasGradient object as valid input.

+ +
function draw() {
+  var ctx = document.getElementById('canvas').getContext('2d');
+
+  // Create gradients
+  var lingrad = ctx.createLinearGradient(0, 0, 0, 150);
+  lingrad.addColorStop(0, '#00ABEB');
+  lingrad.addColorStop(0.5, '#fff');
+  lingrad.addColorStop(0.5, '#26C000');
+  lingrad.addColorStop(1, '#fff');
+
+  var lingrad2 = ctx.createLinearGradient(0, 50, 0, 95);
+  lingrad2.addColorStop(0.5, '#000');
+  lingrad2.addColorStop(1, 'rgba(0, 0, 0, 0)');
+
+  // assign gradients to fill and stroke styles
+  ctx.fillStyle = lingrad;
+  ctx.strokeStyle = lingrad2;
+
+  // draw shapes
+  ctx.fillRect(10, 10, 130, 130);
+  ctx.strokeRect(50, 50, 50, 50);
+
+}
+
+ + + +

The first is a background gradient. As you can see, we assigned two colors at the same position. You do this to make very sharp color transitions—in this case from white to green. Normally, it doesn't matter in what order you define the color stops, but in this special case, it does significantly. If you keep the assignments in the order you want them to appear, this won't be a problem.

+ +

In the second gradient, we didn't assign the starting color (at position 0.0) since it wasn't strictly necessary, because it will automatically assume the color of the next color stop. Therefore, assigning the black color at position 0.5 automatically makes the gradient, from the start to this stop, black.

+ +

{{EmbedLiveSample("A_createLinearGradient_example", "180", "180", "https://mdn.mozillademos.org/files/235/Canvas_lineargradient.png")}}

+ +

A createRadialGradient example

+ +

In this example, we'll define four different radial gradients. Because we have control over the start and closing points of the gradient, we can achieve more complex effects than we would normally have in the "classic" radial gradients we see in, for instance, Photoshop (that is, a gradient with a single center point where the gradient expands outward in a circular shape).

+ +
function draw() {
+  var ctx = document.getElementById('canvas').getContext('2d');
+
+  // Create gradients
+  var radgrad = ctx.createRadialGradient(45, 45, 10, 52, 50, 30);
+  radgrad.addColorStop(0, '#A7D30C');
+  radgrad.addColorStop(0.9, '#019F62');
+  radgrad.addColorStop(1, 'rgba(1, 159, 98, 0)');
+
+  var radgrad2 = ctx.createRadialGradient(105, 105, 20, 112, 120, 50);
+  radgrad2.addColorStop(0, '#FF5F98');
+  radgrad2.addColorStop(0.75, '#FF0188');
+  radgrad2.addColorStop(1, 'rgba(255, 1, 136, 0)');
+
+  var radgrad3 = ctx.createRadialGradient(95, 15, 15, 102, 20, 40);
+  radgrad3.addColorStop(0, '#00C9FF');
+  radgrad3.addColorStop(0.8, '#00B5E2');
+  radgrad3.addColorStop(1, 'rgba(0, 201, 255, 0)');
+
+  var radgrad4 = ctx.createRadialGradient(0, 150, 50, 0, 140, 90);
+  radgrad4.addColorStop(0, '#F4F201');
+  radgrad4.addColorStop(0.8, '#E4C700');
+  radgrad4.addColorStop(1, 'rgba(228, 199, 0, 0)');
+
+  // draw shapes
+  ctx.fillStyle = radgrad4;
+  ctx.fillRect(0, 0, 150, 150);
+  ctx.fillStyle = radgrad3;
+  ctx.fillRect(0, 0, 150, 150);
+  ctx.fillStyle = radgrad2;
+  ctx.fillRect(0, 0, 150, 150);
+  ctx.fillStyle = radgrad;
+  ctx.fillRect(0, 0, 150, 150);
+}
+
+ + + +

In this case, we've offset the starting point slightly from the end point to achieve a spherical 3D effect. It's best to try to avoid letting the inside and outside circles overlap because this results in strange effects which are hard to predict.

+ +

The last color stop in each of the four gradients uses a fully transparent color. If you want to have a nice transition from this to the previous color stop, both colors should be equal. This isn't very obvious from the code because it uses two different CSS color methods as a demonstration, but in the first gradient #019F62 = rgba(1,159,98,1).

+ +

{{EmbedLiveSample("A_createRadialGradient_example", "180", "180", "https://mdn.mozillademos.org/files/244/Canvas_radialgradient.png")}}

+ +

Patterns

+ +

In one of the examples on the previous page, we used a series of loops to create a pattern of images. There is, however, a much simpler method: the createPattern() method.

+ +
+
{{domxref("CanvasRenderingContext2D.createPattern", "createPattern(image, type)")}}
+
Creates and returns a new canvas pattern object. image is a {{domxref("CanvasImageSource")}} (that is, an {{domxref("HTMLImageElement")}}, another canvas, a {{HTMLElement("video")}} element, or the like. type is a string indicating how to use the image.
+
+ +

The type specifies how to use the image in order to create the pattern, and must be one of the following string values:

+ +
+
repeat
+
Tiles the image in both vertical and horizontal directions.
+
repeat-x
+
Tiles the image horizontally but not vertically.
+
repeat-y
+
Tiles the image vertically but not horizontally.
+
no-repeat
+
Doesn't tile the image. It's used only once.
+
+ +

We use this method to create a {{domxref("CanvasPattern")}} object which is very similar to the gradient methods we've seen above. Once we've created a pattern, we can assign it to the fillStyle or strokeStyle properties. For example:

+ +
var img = new Image();
+img.src = 'someimage.png';
+var ptrn = ctx.createPattern(img, 'repeat');
+
+ +
+

Note: Like with the drawImage() method, you must make sure the image you use is loaded before calling this method or the pattern may be drawn incorrectly.

+
+ +

A createPattern example

+ +

In this last example, we'll create a pattern to assign to the fillStyle property. The only thing worth noting is the use of the image's onload handler. This is to make sure the image is loaded before it is assigned to the pattern.

+ +
function draw() {
+  var ctx = document.getElementById('canvas').getContext('2d');
+
+  // create new image object to use as pattern
+  var img = new Image();
+  img.src = 'https://mdn.mozillademos.org/files/222/Canvas_createpattern.png';
+  img.onload = function() {
+
+    // create pattern
+    var ptrn = ctx.createPattern(img, 'repeat');
+    ctx.fillStyle = ptrn;
+    ctx.fillRect(0, 0, 150, 150);
+
+  }
+}
+
+ + + +

{{EmbedLiveSample("A_createPattern_example", "180", "180", "https://mdn.mozillademos.org/files/222/Canvas_createpattern.png")}}

+ +

Shadows

+ +

Using shadows involves just four properties:

+ +
+
{{domxref("CanvasRenderingContext2D.shadowOffsetX", "shadowOffsetX = float")}}
+
Indicates the horizontal distance the shadow should extend from the object. This value isn't affected by the transformation matrix. The default is 0.
+
{{domxref("CanvasRenderingContext2D.shadowOffsetY", "shadowOffsetY = float")}}
+
Indicates the vertical distance the shadow should extend from the object. This value isn't affected by the transformation matrix. The default is 0.
+
{{domxref("CanvasRenderingContext2D.shadowBlur", "shadowBlur = float")}}
+
Indicates the size of the blurring effect; this value doesn't correspond to a number of pixels and is not affected by the current transformation matrix. The default value is 0.
+
{{domxref("CanvasRenderingContext2D.shadowColor", "shadowColor = color")}}
+
A standard CSS color value indicating the color of the shadow effect; by default, it is fully-transparent black.
+
+ +

The properties shadowOffsetX and shadowOffsetY indicate how far the shadow should extend from the object in the X and Y directions; these values aren't affected by the current transformation matrix. Use negative values to cause the shadow to extend up or to the left, and positive values to cause the shadow to extend down or to the right. These are both 0 by default.

+ +

The shadowBlur property indicates the size of the blurring effect; this value doesn't correspond to a number of pixels and is not affected by the current transformation matrix. The default value is 0.

+ +

The shadowColor property is a standard CSS color value indicating the color of the shadow effect; by default, it is fully-transparent black.

+ +
+

Note: Shadows are only drawn for source-over compositing operations.

+
+ +

A shadowed text example

+ +

This example draws a text string with a shadowing effect.

+ +
function draw() {
+  var ctx = document.getElementById('canvas').getContext('2d');
+
+  ctx.shadowOffsetX = 2;
+  ctx.shadowOffsetY = 2;
+  ctx.shadowBlur = 2;
+  ctx.shadowColor = 'rgba(0, 0, 0, 0.5)';
+
+  ctx.font = '20px Times New Roman';
+  ctx.fillStyle = 'Black';
+  ctx.fillText('Sample String', 5, 30);
+}
+
+ + + +

{{EmbedLiveSample("A_shadowed_text_example", "180", "100", "https://mdn.mozillademos.org/files/2505/shadowed-string.png")}}

+ +

We will look at the font property and fillText method in the next chapter about drawing text.

+ +

Canvas fill rules

+ +

When using fill (or {{domxref("CanvasRenderingContext2D.clip", "clip")}} and {{domxref("CanvasRenderingContext2D.isPointInPath", "isPointinPath")}}) you can optionally provide a fill rule algorithm by which to determine if a point is inside or outside a path and thus if it gets filled or not. This is useful when a path intersects itself or is nested.
+
+ Two values are possible:

+ + + +

In this example we are using the evenodd rule.

+ +
function draw() {
+  var ctx = document.getElementById('canvas').getContext('2d');
+  ctx.beginPath();
+  ctx.arc(50, 50, 30, 0, Math.PI * 2, true);
+  ctx.arc(50, 50, 15, 0, Math.PI * 2, true);
+  ctx.fill('evenodd');
+}
+ + + +

{{EmbedLiveSample("Canvas_fill_rules", "110", "110", "https://mdn.mozillademos.org/files/9855/fill-rule.png")}}

+ +

{{PreviousNext("Web/API/Canvas_API/Tutorial/Drawing_shapes", "Web/API/Canvas_API/Tutorial/Drawing_text")}}

diff --git a/files/pt-br/web/api/canvas_api/tutorial/basic_animations/index.html b/files/pt-br/web/api/canvas_api/tutorial/basic_animations/index.html new file mode 100644 index 0000000000..125e0874a7 --- /dev/null +++ b/files/pt-br/web/api/canvas_api/tutorial/basic_animations/index.html @@ -0,0 +1,331 @@ +--- +title: Basic animations +slug: Web/Guide/HTML/Canvas_tutorial/Basic_animations +translation_of: Web/API/Canvas_API/Tutorial/Basic_animations +--- +

Já que estamos usando JavaScript para controlar {{HTMLElement("canvas")}} elementos, também é muito fácil criar animações interativas. Fazer animações mais complexas pode levar um tempo extra; esperamos introduzir um novo artigo para auxiliar sobre isso em breve.

+ +

Provavelmente a maior limitação é que uma vez que uma forma é desenhada, ela permanece assim. Se precisarmos mover, temos que redesenhar-lá e tudo que foi desenhado antes. Demora muito tempo pra redesenhar frames complexos e a desempenho depende altamente da velocidade do computador em que está rodando.

+ +

Passos para animação básica

+ +

Estes são os passos que você precisa para desenhar um frame:

+ +
    +
  1. Limpe o canvas
    + A menos que a forma que você vai desenhar preencha o canvas completo(por exemplo, uma imagem de fundo), você precisa limpar todas as formas que foram desenhadas anteriormente. O caminho mais fácil para fazer isso é usando o método clearRect().
  2. +
  3. Salve o estado da tela
    + Se você estiver mudando alguma configuração(como estilos, transformações, etc.) que afete o estado do canvas e você quer garantir que o estado original seja usado sempre que um quadro é desenhado, você precisa salvar esse estado original.
  4. +
  5. Desenhe formas animadas
    + A etapa em que você faz a renderização real do quadro.
  6. +
  7. Restaure o estado do canvas
    + Se você salvou o estado, restaure-o antes de desenhar um novo quadro.
  8. +
+ +

Controlando uma animação

+ +

Formas são desenhos na tela usando os canvas métodos diretamente ou chamando personalizadas. Em circunstancias normais, nós somente vemos esses resultados aparecerem na tela quando o script termina de ser executado. Por exemplo, não é possível fazer uma animação dentro de um loop for.

+ +

Isso significa que precisamos de um jeito para executar nossas funções de desenho durante um período de tempo. Existem dois jeitos para controlar uma animação como essa.

+ +

Atualizações agendadas

+ +

Primeiramente há as funções {{domxref("window.setInterval()")}} e {{domxref("window.setTimeout()")}}, que podem ser usadas para chamar uma função específica durante um certo período definido de tempo.

+ +
+

Nota: O método {{domxref("window.requestAnimationFrame()")}} agora é a maneira recomendada de programar animações. Vamos atualizar esse tutorial para abortar isso em breve.

+
+ +
+
setInterval(função,atraso)
+
Inicia repetidamente executando a função específica pela função a cada milissegundo de atraso.
+
setTimeout(função,atraso)
+
Executa a função especificada pela função em milissegundos de atraso.
+
+ +

Se você não quer nenhuma interação do usuário, é melhor usar a função setInterval() que executa repeditamente o código fornecido.

+ +

Atualizar na interação do usuário

+ +

O segundo método que nós podemos usar para controlar uma animação é a entrada do usuário. Se nós quiséssimos criar um jogo, nós poderiamos usar os eventos do teclado ou mouse para controlar a animação. Ao definir {{domxref("EventListener")}}s, nós pegamos qualquer interação do usuário e executamos nossas funções da animação. 

+ +

Se você quer a interação do usuário, você pode usar uma versão menor ou a versão principal do nosso framework pra animação:

+ +
var myAnimation = new MiniDaemon(null, animateShape, 500, Infinity);
+ +

ou

+ +
var myAnimation = new Daemon(null, animateShape, 500, Infinity);
+ +

Nos exemplos abaixo, no entanto, usamos o método {{domxref("window.setInterval()")}} para controlar a animação. Na parte inferior dessa página há alguns links de exemplos que usam {{domxref("window.setTimeout()")}}.

+ +

Um sistema solar animado

+ +

Esse exemplo anima um pequeno modelo do nosso sistema solar.

+ +
var sun = new Image();
+var moon = new Image();
+var earth = new Image();
+function init(){
+  sun.src = 'https://mdn.mozillademos.org/files/1456/Canvas_sun.png';
+  moon.src = 'https://mdn.mozillademos.org/files/1443/Canvas_moon.png';
+  earth.src = 'https://mdn.mozillademos.org/files/1429/Canvas_earth.png';
+  setInterval(draw,100);
+}
+
+function draw() {
+  var ctx = document.getElementById('canvas').getContext('2d');
+
+  ctx.globalCompositeOperation = 'destination-over';
+  ctx.clearRect(0,0,300,300); // clear canvas
+
+  ctx.fillStyle = 'rgba(0,0,0,0.4)';
+  ctx.strokeStyle = 'rgba(0,153,255,0.4)';
+  ctx.save();
+  ctx.translate(150,150);
+
+  // Earth
+  var time = new Date();
+  ctx.rotate( ((2*Math.PI)/60)*time.getSeconds() + ((2*Math.PI)/60000)*time.getMilliseconds() );
+  ctx.translate(105,0);
+  ctx.fillRect(0,-12,50,24); // Shadow
+  ctx.drawImage(earth,-12,-12);
+
+  // Moon
+  ctx.save();
+  ctx.rotate( ((2*Math.PI)/6)*time.getSeconds() + ((2*Math.PI)/6000)*time.getMilliseconds() );
+  ctx.translate(0,28.5);
+  ctx.drawImage(moon,-3.5,-3.5);
+  ctx.restore();
+
+  ctx.restore();
+
+  ctx.beginPath();
+  ctx.arc(150,150,105,0,Math.PI*2,false); // Earth orbit
+  ctx.stroke();
+
+  ctx.drawImage(sun,0,0,300,300);
+}
+
+ + + +

{{EmbedLiveSample("An_animated_solar_system", "310", "310", "https://mdn.mozillademos.org/files/202/Canvas_animation1.png")}}

+ +

Um relógio animado

+ +

Esse exemplos desenha um relógio animado, mostrando sua hora atual.

+ +
function init(){
+  clock();
+  setInterval(clock,1000);
+}
+
+function clock(){
+  var now = new Date();
+  var ctx = document.getElementById('canvas').getContext('2d');
+  ctx.save();
+  ctx.clearRect(0,0,150,150);
+  ctx.translate(75,75);
+  ctx.scale(0.4,0.4);
+  ctx.rotate(-Math.PI/2);
+  ctx.strokeStyle = "black";
+  ctx.fillStyle = "white";
+  ctx.lineWidth = 8;
+  ctx.lineCap = "round";
+
+  // Hour marks
+  ctx.save();
+  for (var i=0;i<12;i++){
+    ctx.beginPath();
+    ctx.rotate(Math.PI/6);
+    ctx.moveTo(100,0);
+    ctx.lineTo(120,0);
+    ctx.stroke();
+  }
+  ctx.restore();
+
+  // Minute marks
+  ctx.save();
+  ctx.lineWidth = 5;
+  for (i=0;i<60;i++){
+    if (i%5!=0) {
+      ctx.beginPath();
+      ctx.moveTo(117,0);
+      ctx.lineTo(120,0);
+      ctx.stroke();
+    }
+    ctx.rotate(Math.PI/30);
+  }
+  ctx.restore();
+
+  var sec = now.getSeconds();
+  var min = now.getMinutes();
+  var hr  = now.getHours();
+  hr = hr>=12 ? hr-12 : hr;
+
+  ctx.fillStyle = "black";
+
+  // write Hours
+  ctx.save();
+  ctx.rotate( hr*(Math.PI/6) + (Math.PI/360)*min + (Math.PI/21600)*sec )
+  ctx.lineWidth = 14;
+  ctx.beginPath();
+  ctx.moveTo(-20,0);
+  ctx.lineTo(80,0);
+  ctx.stroke();
+  ctx.restore();
+
+  // write Minutes
+  ctx.save();
+  ctx.rotate( (Math.PI/30)*min + (Math.PI/1800)*sec )
+  ctx.lineWidth = 10;
+  ctx.beginPath();
+  ctx.moveTo(-28,0);
+  ctx.lineTo(112,0);
+  ctx.stroke();
+  ctx.restore();
+
+  // Write seconds
+  ctx.save();
+  ctx.rotate(sec * Math.PI/30);
+  ctx.strokeStyle = "#D40000";
+  ctx.fillStyle = "#D40000";
+  ctx.lineWidth = 6;
+  ctx.beginPath();
+  ctx.moveTo(-30,0);
+  ctx.lineTo(83,0);
+  ctx.stroke();
+  ctx.beginPath();
+  ctx.arc(0,0,10,0,Math.PI*2,true);
+  ctx.fill();
+  ctx.beginPath();
+  ctx.arc(95,0,10,0,Math.PI*2,true);
+  ctx.stroke();
+  ctx.fillStyle = "rgba(0,0,0,0)";
+  ctx.arc(0,0,3,0,Math.PI*2,true);
+  ctx.fill();
+  ctx.restore();
+
+  ctx.beginPath();
+  ctx.lineWidth = 14;
+  ctx.strokeStyle = '#325FA2';
+  ctx.arc(0,0,142,0,Math.PI*2,true);
+  ctx.stroke();
+
+  ctx.restore();
+}
+ + + +

{{EmbedLiveSample("An_animated_clock", "180", "180", "https://mdn.mozillademos.org/files/203/Canvas_animation2.png")}}

+ +

Um panorama  em loop

+ +

Nesse exemplos, um panorama é rolado da esquerda pra direita. Nós estamos usando uma imagem do Parque Nacional de Yosemite que tiramos da Wikipedia, mas você pode usar qualquer imagem que fosse maior que a tela.

+ +
var img = new Image();
+
+// User Variables - customize these to change the image being scrolled, its
+// direction, and the speed.
+
+img.src = 'https://mdn.mozillademos.org/files/4553/Capitan_Meadows,_Yosemite_National_Park.jpg';
+var CanvasXSize = 800;
+var CanvasYSize = 200;
+var speed = 30; //lower is faster
+var scale = 1.05;
+var y = -4.5; //vertical offset
+
+// Main program
+
+var dx = 0.75;
+var imgW;
+var imgH;
+var x = 0;
+var clearX;
+var clearY;
+var ctx;
+
+img.onload = function() {
+    imgW = img.width*scale;
+    imgH = img.height*scale;
+    if (imgW > CanvasXSize) { x = CanvasXSize-imgW; } // image larger than canvas
+    if (imgW > CanvasXSize) { clearX = imgW; } // image larger than canvas
+    else { clearX = CanvasXSize; }
+    if (imgH > CanvasYSize) { clearY = imgH; } // image larger than canvas
+    else { clearY = CanvasYSize; }
+    //Get Canvas Element
+    ctx = document.getElementById('canvas').getContext('2d');
+    //Set Refresh Rate
+    return setInterval(draw, speed);
+}
+
+function draw() {
+    //Clear Canvas
+    ctx.clearRect(0,0,clearX,clearY);
+    //If image is <= Canvas Size
+    if (imgW <= CanvasXSize) {
+        //reset, start from beginning
+        if (x > (CanvasXSize)) { x = 0; }
+        //draw aditional image
+        if (x > (CanvasXSize-imgW)) { ctx.drawImage(img,x-CanvasXSize+1,y,imgW,imgH); }
+    }
+    //If image is > Canvas Size
+    else {
+        //reset, start from beginning
+        if (x > (CanvasXSize)) { x = CanvasXSize-imgW; }
+        //draw aditional image
+        if (x > (CanvasXSize-imgW)) { ctx.drawImage(img,x-imgW+1,y,imgW,imgH); }
+    }
+    //draw image
+    ctx.drawImage(img,x,y,imgW,imgH);
+    //amount to move
+    x += dx;
+}
+
+ +

Abaixo é o {{HTMLElement("canvas")}} em que a imagem é rolada. Note que a largura e a altura especificadas aqui devem corresponder aos valores das variáveis ​​CanvasXZSize e CanvasYSize no código JavaScript. 

+ +
<canvas id="canvas" width="800" height="200"></canvas>
+ +

Live sample

+ +

{{EmbedLiveSample("A_looping_panorama", "830", "230")}}

+ +

Outros exemplos

+ +
+
Gartic
+
Jogo de desenho para multiplayers.
+
Canvascape
+
Um jogo de aventura 3D (tiro em primeira pessoa).
+
A basic ray-caster
+
Um bom exemplo de como fazer animações usando os controles do teclado.
+
canvas adventure
+
Outro bom exemplo que usa controles de teclado.
+
An interactive Blob
+
Divirta-se com Blob.
+
Flying through a starfield
+
Voe através de estrelas, círculos ou quadrados.
+
iGrapher
+
Um exemplo que ilustra os dados do mercado de ações.
+
+ +

Veja também

+ + + +

{{PreviousNext("Web/Guide/HTML/Canvas_tutorial/Compositing", "Web/Guide/HTML/Canvas_tutorial/Optimizing_canvas")}}

diff --git a/files/pt-br/web/api/canvas_api/tutorial/basic_usage/index.html b/files/pt-br/web/api/canvas_api/tutorial/basic_usage/index.html new file mode 100644 index 0000000000..767a5ff97c --- /dev/null +++ b/files/pt-br/web/api/canvas_api/tutorial/basic_usage/index.html @@ -0,0 +1,153 @@ +--- +title: Utilização básica do Canvas +slug: Web/Guide/HTML/Canvas_tutorial/Utilizacao_basica +tags: + - Canvas + - HTML + - Intermediário + - Tutorial + - graficos +translation_of: Web/API/Canvas_API/Tutorial/Basic_usage +--- +
{{CanvasSidebar}} {{PreviousNext("Web/API/Canvas_API/Tutorial", "Web/API/Canvas_API/Tutorial/Drawing_shapes")}}
+ +
Vamos começar este tutorial olhando para o elemento {{HTMLElement("canvas")}} {{Glossary("HTML")}} em si. No final desta página, você saberá como configurar um contexto de canvas 2D e desenhar um primeiro exemplo em seu navegador.
+ +

O elemento <canvas>

+ +

Vamos começar esse tutorial olhando o elemento  {{HTMLElement("canvas")}} em si.

+ +
<canvas id="tutorial" width="150" height="150"></canvas>
+
+ +

Se parece muito com o elemento <img> com a diferença de não possuir os atributos srcalt. O elemento <canvas> tem apenas dois atributos - width height. Ambos são opcionais e podem ser aplicados utilizando as propriedades DOM respectivas. Se não forem especificados, o canvas será iniciado com 300 pixels de largura por 150 pixels de altura. O elemento pode ser redimensionado por CSS, mas durante a renderização a imagem é escalonada para caber no tamanho do layout.

+ +
+

Nota: Se as suas renderizações parecerem distorcidas, tente especificar os atributos widthheight no <canvas> e não usando CSS.

+
+ +

O atributo id não é específico do elemento <canvas> mas um dos atributos padrão do HTML que pode ser aplicado em (quase) todos os elementos HTML (como o class por exemplo). É sempre uma boa ideia inserir um id pois fica muito mais fácil de capturar o elemento no seu script.

+ +

O elemento <canvas> pode ser estilizado como qualquer imagem (margem, borda, fundo, etc). Contudo, essas regras não afetarão o desenho no canvas. Nós veremos como isso é feito a seguir nesse tutorial. Quando nenhuma regra de estilo for aplicada, o canvas iniciará totalmente transparente.

+ +
+

Conteúdo alternativo

+ +

Uma vez que alguns navegadores mais antigos (em particular, versões do Internet Explorer anteriores a 9) não suportam o elemento {{HTMLElement("canvas")}}, você precisará prover um conteúdo alternativo para ser mostrado nesses navegadores.

+ +

Isto é muito simples: basta inserir o conteúdo alternativo dentro do elemento <canvas>. Navegadores que não suportam o <canvas> irão renderizar o conteúdo alternativo. Já os navegadores que suportam <canvas> irão ignorar o conteúdo alternativo, renderizando o canvas normalmente.

+ +

Por exemplo, podemos prover um texto descritivo do canvas ou uma imagem estática do conteúdo. Algo como isto:

+ +
<canvas id="stockGraph" width="150" height="150">
+  preço das ações: $3.15 +0.15
+</canvas>
+
+<canvas id="clock" width="150" height="150">
+  <img src="images/clock.png" width="150" height="150" alt=""/>
+</canvas>
+
+ +

Tag </canvas> é necessária

+ +

Ao contrário do elemento {{HTMLElement("img")}}, o elemento {{HTMLElement("canvas")}} a tag de fechamento (</canvas>) é necessária.

+ +
+

Nota: Embora as primeiras versões do navegador Safari da Apple não exijam a tag de fechamento, a especificação indica que ela é necessária para que haja maior compatibilidade, portanto não se esqueça de incluí-la. Essas versões do Safari (antes da versão 2.0) irão processar o conteúdo do alternativo, além da própria tela, a menos que você use o CSS para mascará-lo. Felizmente, os usuários dessas versões do Safari são raros hoje em dia.

+
+ +

Se o conteúdo alternativo não for necessário, um simples <canvas id="foo" ...></canvas> é totalmente compatível com todos os navegadores que suportam canvas.

+ +

O contexto de renderização

+ +

{{HTMLElement("canvas")}} cria uma superfície de desenho de tamanho fixo que expõe um ou mais contextos de renderização, que são usados ​​para criar e manipular o conteúdo mostrado. Vamos nos concentrar no contexto de renderização 2D. Outros contextos podem fornecer diferentes tipos de renderização; por exemplo, WebGL usa um contexto 3D ("experimental-WebGL") baseado em OpenGL ES.

+ +

Incialmente o canvas é branco. Para mostrar alguma coisa, primeiro um script precisa acessar o contexto de renderização e desenhar sobre ele. O elemento {{HTMLElement("canvas")}} tem um método chamado getContext(), usado para obter o contexto de renderização e suas funções de desenho. getContext() recebe o tipo de contexto como parâmetro. Para gráficos 2D, que serão abrangidos nesse tutorial, deverá ser especificado "2d".

+ +
var canvas = document.getElementById('tutorial');
+var ctx = canvas.getContext('2d');
+
+ +

A primeira linha recupera o nó DOM do elemento {{HTMLElement ("canvas")}} chamando o método {{domxref ("document.getElementById()")}}. Depois de ter o nó do elemento, podemos acessar o contexto de desenho usando o método getContext().

+ +
+

Verificação de suporte

+ +

O conteúdo alternativo é mostrado nos navegadores que não suportam o elemento {{HTMLElement("canvas")}}, mas essa checagem pode ser feita através de um script simplesmente testando a presença do método getContext():

+ +
var canvas = document.getElementById('tutorial');
+
+if (canvas.getContext){
+  var ctx = canvas.getContext('2d');
+  // codigo de desenho aqui
+} else {
+  // codigo para quando o canvas nao for suportado aqui
+}
+
+
+
+ +

Um modelo de estrutura

+ +

Aqui, um modelo minimalista, que vamos usar como ponto de partida para os exemplos posteriores:

+ +
+

Nota: não é uma boa prática incorporar um script dentro do HTML. Nós fazemos isso aqui para manter o exemplo conciso.

+
+ +
<html>
+  <head>
+    <title>Canvas tutorial</title>
+    <script type="text/javascript">
+      function draw(){
+        var canvas = document.getElementById('tutorial');
+        if (canvas.getContext){
+          var ctx = canvas.getContext('2d');
+        }
+      }
+    </script>
+    <style type="text/css">
+      canvas { border: 1px solid black; }
+    </style>
+  </head>
+  <body onload="draw();">
+    <canvas id="tutorial" width="150" height="150"></canvas>
+  </body>
+</html>
+
+ +

O script inclui a função chamada draw(), que é executada uma vez ao término do carregamento da página; este exemplo usa o evento onload do documento. Essa função, ou uma parecida, poderia usar {{domxref("window.setTimeout()")}}, {{domxref("window.setInterval()")}}, ou qualquer outro manipulador de evento, contanto que a página tenha sido carregada primeiro.

+ +

{{EmbedLiveSample("Um_modelo_de_estrutura", 160, 160)}}

+ +

Um simples exemplo

+ +

Para começar, vamos dar uma olhada num exemplo simples que desenha a interseção de dois retângulos, dos quais um deles tem uma transparência. Exploraremos em mais detalhes o funcionamento nos exemplos posteriores.

+ +
<html>
+ <head>
+  <script type="application/javascript">
+    function draw() {
+      var canvas = document.getElementById("canvas");
+      if (canvas.getContext) {
+        var ctx = canvas.getContext("2d");
+
+        ctx.fillStyle = "rgb(200,0,0)";
+        ctx.fillRect (10, 10, 55, 50);
+
+        ctx.fillStyle = "rgba(0, 0, 200, 0.5)";
+        ctx.fillRect (30, 30, 55, 50);
+      }
+    }
+  </script>
+ </head>
+ <body onload="draw();">
+   <canvas id="canvas" width="150" height="150"></canvas>
+ </body>
+</html>
+ +

Este exemplo parece assim:

+ +

{{EmbedLiveSample("Um_simples_exemplo", 160, 160, "https://mdn.mozillademos.org/files/228/canvas_ex1.png")}}

+ +

{{PreviousNext("Web/Guide/HTML/Canvas_tutorial", "Web/Guide/HTML/Canvas_tutorial/Drawing_shapes")}}

diff --git a/files/pt-br/web/api/canvas_api/tutorial/compositing/example/index.html b/files/pt-br/web/api/canvas_api/tutorial/compositing/example/index.html new file mode 100644 index 0000000000..87de5aa19d --- /dev/null +++ b/files/pt-br/web/api/canvas_api/tutorial/compositing/example/index.html @@ -0,0 +1,294 @@ +--- +title: Exemplo de Composição +slug: Web/Guide/HTML/Canvas_tutorial/Compositing/Exemplo +tags: + - Canvas + - Example + - HTML5 + - Tutorial +translation_of: Web/API/Canvas_API/Tutorial/Compositing/Example +--- +
{{CanvasSidebar}}
+ +

Esse exemplo demonstra várias operações de composição. A saída se parece assim:

+ +

{{ EmbedLiveSample('Exemplo_de_composição', '', '7240px', '', 'Web/Guide/HTML/Canvas_tutorial/Compositing/Exemplo') }}

+ +

Exemplo de composição

+ +

Este código configura os valores globais usados pelo restante do programa.

+ +
var canvas1 = document.createElement("canvas");
+var canvas2 = document.createElement("canvas");
+var gco = [ 'Source-over','Source-in','Source-out','Source-atop',
+            'Destination-over','Destination-in','Destination-out','Destination-atop',
+            'Lighter', 'Copy','XOR', 'Multiply', 'Screen', 'Overlay', 'Darken',
+            'Lighten', 'Color-dodge', 'Color-burn', 'Hard-light', 'Soft-light',
+            'Difference', 'Exclusion', 'HUE', 'Saturation', 'Color', 'Luminosity'
+          ].reverse();
+var gcoText = [
+'Essa é a configuração padrão e desenha novas formas sobre o conteúdo da tela (canvas) existente.',
+'A nova forma é desenhada apenas onde a nova forma e a tela (canvas) de destino se sobrepõem. Todo o resto é transparente. ',
+'A nova forma é desenhada onde ela não sobrepõe o conteúdo da tela (canvas) existente.',
+'A nova forma é somente desenahda onde ela sobrepõe o conteúdo da tela (canvas) existente.',
+'Novas formas são desenhadas por trás do conteúdo da tela (canvas) existente.',
+'O conteúdo da tela (canvas) existente é mantido onde ambos, a nova forma e o conteúdo da tela (canvas) existente, se sobrepõe. Todo o resto é transparente.',
+'O conteúdo existente é mantido onde ele não sobrepõe a nova forma.',
+'A tela (canvas) existente só é mantida onde ela sobrepõe a nova forma. A nova forma é desenahda por trás do conteúdo canvas.',
+'Onde ambas formas se sebrepõem a cor é determinada adicionando seus respectivos valores de cores.',
+'Somente a nova forma é mostrada.',
+'Formas são feitas transparentes onde ambos se sobrepõem e todo o resto é desenhado normalmente.',
+'Os pixels da camada superior são multiplicados pelo pixel correspondente da camada inferior. Uma imagem mais escura é o resultado. ',
+'Os pixels são invertidos, multiplicados e invertidos novamente. Uma imagem mais clara é o resultado (oposto de multiplicar)',
+'Uma combinação de multiplicação e tela. As partes escuras na camada base tornam-se mais escuras e as partes claras tornam-se mais claras.',
+'Mantêm os pixels mais escuro de ambas camadas.',
+'Mantêm os pixels mais claro de ambas camadas.',
+'Divide a camada inferior pela camada superior invertida.',
+'Divide a camada inferior invertida pela camada superior e, em seguida, inverte o resultado.',
+'Uma combinação de multiplicação e tela como sobreposição, mas com a camada superior e inferior trocada.',
+'Uma versão mais suave da luz. Preto ou branco puro não resulta em preto ou branco puro.',
+'Subtrai a camada inferior da camada superior ou vice-versa para obter sempre um valor positivo.',
+'Como diferença, mas com menor contraste.',
+'Preserva o luma e o croma da camada inferior, enquanto adota a tonalidade da camada superior.',
+'Preserva o luma e a tonalidade da camada inferior, enquanto adota o croma da camada superior.',
+'Preserva a luma da camada inferior, enquanto adota a tonalidade e o croma da camada superior.',
+'Preserva a tonalidade e o croma da camada inferior, enquanto adota a luma da camada superior.'
+          ].reverse();
+var width = 320;
+var height = 340;
+ +

Programa principal

+ +

Quando a página é carregada, esse código é executado para configurar e executar o exemplo:

+ +
window.onload = function() {
+    // lum em sRGB
+    var lum = {
+        r: 0.33,
+        g: 0.33,
+        b: 0.33
+    };
+    // redimensiona canvas
+    canvas1.width = width;
+    canvas1.height = height;
+    canvas2.width = width;
+    canvas2.height = height;
+    lightMix();
+    colorSphere();
+    runComposite();
+    return;
+};
+
+ +

E esse código, runComposite (), manipula a maior parte do trabalho, contando com várias funções utilitárias para fazer as partes difíceis.

+ +
function createCanvas() {
+    var canvas = document.createElement("canvas");
+    canvas.style.background = "url("+op_8x8.data+")";
+    canvas.style.border = "1px solid #000";
+    canvas.style.margin = "5px";
+    canvas.width = width/2;
+    canvas.height = height/2;
+    return canvas;
+}
+
+function runComposite() {
+    var dl = document.createElement("dl");
+    document.body.appendChild(dl);
+    while(gco.length) {
+        var pop = gco.pop();
+        var dt = document.createElement("dt");
+        dt.textContent = pop;
+        dl.appendChild(dt);
+        var dd = document.createElement("dd");
+        var p = document.createElement("p");
+        p.textContent = gcoText.pop();
+        dd.appendChild(p);
+
+        var canvasToDrawOn = createCanvas();
+        var canvasToDrawFrom = createCanvas();
+        var canvasToDrawResult = createCanvas();
+
+        var ctx = canvasToDrawResult.getContext('2d');
+        ctx.clearRect(0, 0, width, height)
+        ctx.save();
+        ctx.drawImage(canvas1, 0, 0, width/2, height/2);
+        ctx.globalCompositeOperation = pop;
+        ctx.drawImage(canvas2, 0, 0, width/2, height/2);
+        ctx.globalCompositeOperation = "source-over";
+        ctx.fillStyle = "rgba(0,0,0,0.8)";
+        ctx.fillRect(0, height/2 - 20, width/2, 20);
+        ctx.fillStyle = "#FFF";
+        ctx.font = "14px arial";
+        ctx.fillText(pop, 5, height/2 - 5);
+        ctx.restore();
+
+        var ctx = canvasToDrawOn.getContext('2d');
+        ctx.clearRect(0, 0, width, height)
+        ctx.save();
+        ctx.drawImage(canvas1, 0, 0, width/2, height/2);
+        ctx.fillStyle = "rgba(0,0,0,0.8)";
+        ctx.fillRect(0, height/2 - 20, width/2, 20);
+        ctx.fillStyle = "#FFF";
+        ctx.font = "14px arial";
+        ctx.fillText('Conteúdo existente', 5, height/2 - 5);
+        ctx.restore();
+
+        var ctx = canvasToDrawFrom.getContext('2d');
+        ctx.clearRect(0, 0, width, height)
+        ctx.save();
+        ctx.drawImage(canvas2, 0, 0, width/2, height/2);
+        ctx.fillStyle = "rgba(0,0,0,0.8)";
+        ctx.fillRect(0, height/2 - 20, width/2, 20);
+        ctx.fillStyle = "#FFF";
+        ctx.font = "14px arial";
+        ctx.fillText('Novo conteúdo', 5, height/2 - 5);
+        ctx.restore();
+
+        dd.appendChild(canvasToDrawOn);
+        dd.appendChild(canvasToDrawFrom);
+        dd.appendChild(canvasToDrawResult);
+
+        dl.appendChild(dd);
+    }
+};
+
+ +

Funções Utilitárias

+ +

O programa depende de várias funções utilitárias.

+ +
var lightMix = function() {
+    var ctx = canvas2.getContext("2d");
+    ctx.save();
+    ctx.globalCompositeOperation = "lighter";
+    ctx.beginPath();
+    ctx.fillStyle = "rgba(255,0,0,1)";
+    ctx.arc(100, 200, 100, Math.PI*2, 0, false);
+    ctx.fill()
+    ctx.beginPath();
+    ctx.fillStyle = "rgba(0,0,255,1)";
+    ctx.arc(220, 200, 100, Math.PI*2, 0, false);
+    ctx.fill()
+    ctx.beginPath();
+    ctx.fillStyle = "rgba(0,255,0,1)";
+    ctx.arc(160, 100, 100, Math.PI*2, 0, false);
+    ctx.fill();
+    ctx.restore();
+    ctx.beginPath();
+    ctx.fillStyle = "#f00";
+    ctx.fillRect(0,0,30,30)
+    ctx.fill();
+};
+
+ +
var colorSphere = function(element) {
+    var ctx = canvas1.getContext("2d");
+    var width = 360;
+    var halfWidth = width / 2;
+    var rotate = (1 / 360) * Math.PI * 2; // per degree
+    var offset = 0; // scrollbar offset
+    var oleft = -20;
+    var otop = -20;
+    for (var n = 0; n <= 359; n ++) {
+        var gradient = ctx.createLinearGradient(oleft + halfWidth, otop, oleft + halfWidth, otop + halfWidth);
+        var color = Color.HSV_RGB({ H: (n + 300) % 360, S: 100, V: 100 });
+        gradient.addColorStop(0, "rgba(0,0,0,0)");
+        gradient.addColorStop(0.7, "rgba("+color.R+","+color.G+","+color.B+",1)");
+        gradient.addColorStop(1, "rgba(255,255,255,1)");
+        ctx.beginPath();
+        ctx.moveTo(oleft + halfWidth, otop);
+        ctx.lineTo(oleft + halfWidth, otop + halfWidth);
+        ctx.lineTo(oleft + halfWidth + 6, otop);
+        ctx.fillStyle = gradient;
+        ctx.fill();
+        ctx.translate(oleft + halfWidth, otop + halfWidth);
+        ctx.rotate(rotate);
+        ctx.translate(-(oleft + halfWidth), -(otop + halfWidth));
+    }
+    ctx.beginPath();
+    ctx.fillStyle = "#00f";
+    ctx.fillRect(15,15,30,30)
+    ctx.fill();
+    return ctx.canvas;
+};
+
+ +
// HSV (1978) = H: Hue (tom)
+//              S: Saturation (Saturação)
+//              V: Value (Valor)
+Color = {};
+Color.HSV_RGB = function (o) {
+    var H = o.H / 360,
+        S = o.S / 100,
+        V = o.V / 100,
+        R, G, B;
+    var A, B, C, D;
+    if (S == 0) {
+        R = G = B = Math.round(V * 255);
+    } else {
+        if (H >= 1) H = 0;
+        H = 6 * H;
+        D = H - Math.floor(H);
+        A = Math.round(255 * V * (1 - S));
+        B = Math.round(255 * V * (1 - (S * D)));
+        C = Math.round(255 * V * (1 - (S * (1 - D))));
+        V = Math.round(255 * V);
+        switch (Math.floor(H)) {
+            case 0:
+                R = V;
+                G = C;
+                B = A;
+                break;
+            case 1:
+                R = B;
+                G = V;
+                B = A;
+                break;
+            case 2:
+                R = A;
+                G = V;
+                B = C;
+                break;
+            case 3:
+                R = A;
+                G = B;
+                B = V;
+                break;
+            case 4:
+                R = C;
+                G = A;
+                B = V;
+                break;
+            case 5:
+                R = V;
+                G = A;
+                B = B;
+                break;
+        }
+    }
+    return {
+        R: R,
+        G: G,
+        B: B
+    };
+};
+
+var createInterlace = function (size, color1, color2) {
+    var proto = document.createElement("canvas").getContext("2d");
+    proto.canvas.width = size * 2;
+    proto.canvas.height = size * 2;
+    proto.fillStyle = color1; // top-left
+    proto.fillRect(0, 0, size, size);
+    proto.fillStyle = color2; // top-right
+    proto.fillRect(size, 0, size, size);
+    proto.fillStyle = color2; // bottom-left
+    proto.fillRect(0, size, size, size);
+    proto.fillStyle = color1; // bottom-right
+    proto.fillRect(size, size, size, size);
+    var pattern = proto.createPattern(proto.canvas, "repeat");
+    pattern.data = proto.canvas.toDataURL();
+    return pattern;
+};
+
+var op_8x8 = createInterlace(8, "#FFF", "#eee");
diff --git a/files/pt-br/web/api/canvas_api/tutorial/compositing/index.html b/files/pt-br/web/api/canvas_api/tutorial/compositing/index.html new file mode 100644 index 0000000000..6d9ff5c33d --- /dev/null +++ b/files/pt-br/web/api/canvas_api/tutorial/compositing/index.html @@ -0,0 +1,112 @@ +--- +title: Compositing and clipping +slug: Web/Guide/HTML/Canvas_tutorial/Compositing +translation_of: Web/API/Canvas_API/Tutorial/Compositing +--- +
{{CanvasSidebar}} {{PreviousNext("Web/API/Canvas_API/Tutorial/Transformations", "Web/API/Canvas_API/Tutorial/Basic_animations")}}
+ +
+

Em todo os nossos exemplos prévios, formas estavam sempre desenhadas uma em cima das outras. Este é mais do que adequado para a maioria das situações, mas é limita a ordem no qual a composição das formas são construídas.

+ +

Nós podemos, no entanto, mudar este comportamento por configurar a propriedade globalCompositeOperation. Além disto, a propriedade clipe permite-nos esconder indesejáveis partes da forma.

+
+ +

globalCompositeOperation

+ +

Nós podemos somente desenhar novas formas atrás das existentes formas mas nós podemos também usar isto para mascarar certas áreas, limpar seções do canvas(não limitado para retângulos como o {{domxref("CanvasRenderingContext2D.clearRect", "clearRect()")}} métodos faz) e mais.

+ +
+
{{domxref("CanvasRenderingContext2D.globalCompositeOperation", "globalCompositeOperation = type")}}
+
Este conjunto de operações compostas para aplicar quando desenha novas formas, onde type é uma string identificando quais das 12 operações compostas usar.
+
+ +

Veja os seguintes exemplos de composição para o código dos seguintes exemplos.

+ +

{{ EmbedLiveSample('Exemplo_de_composição', '', '', '', 'Web/Guide/HTML/Canvas_tutorial/Compositing/Exemplo') }}

+ +

Caminhos de recorte (Clipping path)

+ +

Um caminho de recorte (Clipping path) é como uma forma normal canvas mas isto age como uma máscara para esconder indesejáveis partes de formas. Isto é visualizado na imagem na direita. A forma da estrela vermelha é nosso caminho de recorte. Tudo que cai do lado de fora deste caminho não sai desenhado no canvas.

+ +

Se nós compararmos caminho de recorte para a propriedade globalCompositeOperation nós temos visto acima, nós veremos dois modelos de composição que alcança mais ou menos o mesmo efeito no source-in e source-atop. A mais importante diferença entre os dois é que o caminho de recorte nunca desenha algo na tela e o caminho de recorte nunca afeta por adicionar novas formas. Isto faz o caminho do recorte ideal para desenhar múltiplos na área restrita.

+ +

No capítulo sobre formas de desenho (drawing shapes) eu somente mencionei os métodos stroke() e fill(), mas há um método que nós podemos usar com caminhos chamado clip().

+ +
+
{{domxref("CanvasRenderingContext2D.clip", "clip()")}}
+
Volta o caminho atualmente sendo construído no caminho de recorte atual.
+
+ +

Você usou clip() em vez de closePath() para fechar um caminho e voltar para dentro de um caminho de recorte em vez de contornar (stroking) ou completar (filling) o caminho.

+ +

Por padrão o elemento {{HTMLElement("canvas")}} tem um caminho de recorte que é exatamente o mesmo tamanho do canvas em si. Em outras palavras, nenhum recorte ocorreu.

+ +

Um exemplo do recorte

+ +

Neste exemplo, Nós usaremos um recorte circular para restringir o desenho do conjunto de inícios randômicos para uma região particular

+ +
function draw() {
+  var ctx = document.getElementById('canvas').getContext('2d');
+  ctx.fillRect(0, 0, 150, 150);
+  ctx.translate(75, 75);
+
+  // Create a circular clipping path
+  ctx.beginPath();
+  ctx.arc(0, 0, 60, 0, Math.PI * 2, true);
+  ctx.clip();
+
+  // draw background
+  var lingrad = ctx.createLinearGradient(0, -75, 0, 75);
+  lingrad.addColorStop(0, '#232256');
+  lingrad.addColorStop(1, '#143778');
+
+  ctx.fillStyle = lingrad;
+  ctx.fillRect(-75, -75, 150, 150);
+
+  // draw stars
+  for (var j = 1; j < 50; j++) {
+    ctx.save();
+    ctx.fillStyle = '#fff';
+    ctx.translate(75 - Math.floor(Math.random() * 150),
+                  75 - Math.floor(Math.random() * 150));
+    drawStar(ctx, Math.floor(Math.random() * 4) + 2);
+    ctx.restore();
+  }
+
+}
+
+function drawStar(ctx, r) {
+  ctx.save();
+  ctx.beginPath();
+  ctx.moveTo(r, 0);
+  for (var i = 0; i < 9; i++) {
+    ctx.rotate(Math.PI / 5);
+    if (i % 2 === 0) {
+      ctx.lineTo((r / 0.525731) * 0.200811, 0);
+    } else {
+      ctx.lineTo(r, 0);
+    }
+  }
+  ctx.closePath();
+  ctx.fill();
+  ctx.restore();
+}
+
+ + + +

Nas primeiras linhas de código, nós desenhamos um retângulo negro do tamanho do canvas como um pano de fundo, então traduzido da origem para o centro. Próximo, nós criamos o recorte circular do caminho recortado para desenhar um arco e chamá-lo clip(). Caminho de recortes são também parte do canvas com estado salvo. Se nós procuramos guardar o caminho do recorte original nós podemos ter salvo o estado do canvas antes de criar mais um.

+ +

Tudo que for desenhado depois de criado o caminho de recorte somente aparecerá dentro daquele caminho. Você pode ver isto claramente no gradiente linear que está desenhado adiante. Depois deste conjunto de de 50 randomicamente posicionadas e escaladas estrelas for desenhada. Usando a função customizada drawStar(). De novo as estrelas somente aparecerão dentro do caminho de recorte definido.

+ +

Um exemplo de recorte:

+ +

+ +

{{EmbedLiveSample("A_clip_example", "180", "180", "https://mdn.mozillademos.org/files/208/Canvas_clip.png")}}

+ +

{{PreviousNext("Web/API/Canvas_API/Tutorial/Transformations", "Web/API/Canvas_API/Tutorial/Basic_animations")}}

diff --git a/files/pt-br/web/api/canvas_api/tutorial/drawing_shapes/index.html b/files/pt-br/web/api/canvas_api/tutorial/drawing_shapes/index.html new file mode 100644 index 0000000000..f54fca780e --- /dev/null +++ b/files/pt-br/web/api/canvas_api/tutorial/drawing_shapes/index.html @@ -0,0 +1,581 @@ +--- +title: Desenhando formas com canvas +slug: Web/Guide/HTML/Canvas_tutorial/Drawing_shapes +tags: + - Canvas + - Gráficos(2) + - HTML + - HTML Canvas + - HTML5 + - Intermediário + - Tutorial +translation_of: Web/API/Canvas_API/Tutorial/Drawing_shapes +--- +
{{CanvasSidebar}} {{PreviousNext("Web/API/Canvas_API/Tutorial/Basic_usage", "Web/API/Canvas_API/Tutorial/Applying_styles_and_colors")}}
+ +
+

Agora que criamos nosso ambiente em canvas, podemos entrar nos detalhes de como desenhar no canvas. No final deste artigo, você terá aprendido a desenhar retângulos, triângulos, linhas, arcos e curvas, proporcionando familiaridade com algumas das formas básicas. Trabalhar com caminhos (shapes) é essencial ao desenhar objetos na tela e veremos como isso pode ser feito.

+
+ +

A grade

+ +

Antes que possamos começar a desenhar, precisamos falar sobre a grade de tela ou espaço de coordenadas. O modelo HTML na página anterior tinha um elemento canvas de 150 pixels de largura e 150 pixels de altura. À direita, você verá este canvas com a grade padrão sobreposta. Normalmente 1 unidade na grade corresponde a um pixel na tela. A origem desta grade está posicionada no canto superior esquerdo (coordenadas (0,0)). Todos os elementos são colocados em relação a esta origem. Assim, a posição do canto superior esquerdo do quadrado azul, se torna x pixels dos pixels da esquerda e y a partir do topo (coordenadas (x,y)). Mais tarde nesse tutorial vamos ver como podemos traduzir a origem para uma posição diferente, girar a grade e até mesmo escaloná-la. Por enquanto vamos ficar com o padrão.

+ +

Desenhando retângulos

+ +

Diferente do {{Glossary("SVG")}} , o {{HTMLElement("canvas")}} suporta somente formas primitivas: retângulos. Todas as outras formas são criadas a partir da combinação de um ou mais caminhos (paths), lista de pontos conectados por uma linha. Felizmente, temos uma variedade de funções de desenho que tornam possíveis criar formas muito complexas.

+ +

Primeiramente vamos olhar o retângulo. Aqui está listado três funções para desenhar retângulos pelo canvas:

+ +
+
{{domxref("CanvasRenderingContext2D.fillRect", "fillRect(x, y, width, height)")}}
+
Desenha um retângulo preenchido.
+
{{domxref("CanvasRenderingContext2D.strokeRect", "strokeRect(x, y, width, height)")}}
+
Desenha a borda do retângulo.
+
{{domxref("CanvasRenderingContext2D.clearRect", "clearRect(x, y, width, height)")}}
+
Limpa um retângulo específico, tornando-o totalmente transparente.
+
+ +

Cada umas das funções recebem os mesmos parâmetros. x e y determinam a posição no canvas (em relação a origem) no canto superior esquerdo do retângulo. O width (largura) e o height (altura) definem o tamanho do retângulo.

+ +

Abaixo esta listado a função draw() da página anterior, porém utilizando as três funções.

+ +

Exemplo de forma retangular

+ + + +
function draw() {
+  var canvas = document.getElementById('canvas');
+  if (canvas.getContext) {
+    var ctx = canvas.getContext('2d');
+
+    ctx.fillRect(25, 25, 100, 100);
+    ctx.clearRect(45, 45, 60, 60);
+    ctx.strokeRect(50, 50, 50, 50);
+  }
+}
+ +

O resultado desse exemplo é mostrado abaixo.

+ +

{{EmbedLiveSample('Exemplo_de_forma_retangular', 160, 160, "https://mdn.mozillademos.org/files/245/Canvas_rect.png")}}

+ +

A função fillRect() desenha um grande quadrado preto de 100 pixels. A função clearRect() por sua vez apaga um quadrado de 60x60 pixels a partir do centro, por fim, a função strokeRect() é chamada para criar uma borda de 50x50 pixels em volta do quadrado apagado.

+ +

Posteriormente veremos duas alternativas à função clearRect(), nós também aprenderemos como alterar a cor e o estilo das linhas nas camadas renderizadas.

+ +

Ao contrário das funções de paths que veremos na próxima seção, todas as três funções de retângulo desenham imediatamente no canvas.

+ +

Desenhando caminhos/regiões (paths)

+ +

Para criar uma camada usando caminhos (regiões ou paths) é necessário alguns passos extras. Primeiro, cria-se a região de desenho. Depois usa-se comandos de desenho para desenhar nesta região. Por fim, você limita a região (path). Uma vez que a região de desenho está criada, você pode traçar ou preencher o caminho para que seja renderizado. Aqui estão as funções utilizadas para isso:

+ +
+
{{domxref("CanvasRenderingContext2D.beginPath", "beginPath()")}}
+
Cria um novo path. Uma vez criado, futuros comandos de desenho são direcionados do path atual para a construção de um novo path no canvas.
+
+ +
+
Métodos de Caminhos (Path)
+
Métodos para manipuliar diferentes paths para objetos.
+
+ +
+
{{domxref("CanvasRenderingContext2D.closePath", "closePath()")}}
+
Finaliza o path para futuros comandos de desenho, fazendo com que voltem a ser direcionados ao contexto.
+
{{domxref("CanvasRenderingContext2D.stroke", "stroke()")}}
+
Desenha uma borda na camada.
+
{{domxref("CanvasRenderingContext2D.fill", "fill()")}}
+
Desenha uma forma sólida através de preenchimento.
+
+ +

O primeiro passo para criar um caminho é chamar o beginPath(). Internamente, caminhos são armazenados como uma lista de sub-caminhos (linhas, arcos, etc.) que juntos formam uma forma (shape). Sempre que esse método é chamado, a lista é redefinida e podemos começar a desenhar novas formas.

+ +
Nota: Quando o caminho atual está vazio, assim como imediatamente depois de chamar beginPath(), ou em uma tela recém-criada, o primeiro comando de construção de caminho é sempre tratado como um moveTo(), independentemente do que ele seja realmente. Por essa razão, você quase sempre vai precisar definir especificamente sua posição inicial após redefinir um caminho.
+ +

A segunda etapa é chamar os métodos que realmente especificam os caminhos a serem desenhados. Vamos ver isso em breve.

+ +


+ O terceiro, e um passo opcional, é chamar closePath(). Este método tenta fechar a forma desenhando uma linha reta do ponto atual para o início. Se a forma (shape) já foi fechada ou existe apenas um ponto na lista, esta função não faz nada.

+ +
Nota: Quando você chama fill(), todas as formas abertas são fechadas automaticamente, assim você não precisa chamar closePath(). Isso não acontece quando você chamar stroke().
+ +

Desenhando um triângulo

+ +

Por exemplo, o código para desenhar um triângulo seria algo parecido com isto:

+ + + +
function draw() {
+  var canvas = document.getElementById('canvas');
+  if (canvas.getContext){
+    var ctx = canvas.getContext('2d');
+
+    ctx.beginPath();
+    ctx.moveTo(75,50);
+    ctx.lineTo(100,75);
+    ctx.lineTo(100,25);
+    ctx.fill();
+  }
+}
+
+ +

O resultado se parece com isso:

+ +

{{EmbedLiveSample('Desenhando_um_triângulo', 160, 160, "https://mdn.mozillademos.org/files/9847/triangle.png")}}

+ +

Desenhando

+ +

Uma função muito útil, que na verdade não desenha nada, mas torna-se parte da lista de caminhos descritos acima, é a função moveTo(). Você provavelmente pode imaginar melhor isso como se fosse o levantar uma caneta ou lápis de um ponto em um pedaço de papel e colocá-lo no próximo ponto.

+ +
+
{{domxref("CanvasRenderingContext2D.moveTo", "moveTo(x, y)")}}
+
Move a caneta (pen) para as coordenadas especificadas por x e y.
+
+ +

Quando o canvas é inicializado ou beginPath() é chamado, você normalmente vai querer usar a função moveTo() para colocar o ponto inicial em outro lugar. Poderíamos também usar moveTo() para desenhar caminhos não conectados. Dê uma olhada no rosto sorridente abaixo. Eu marquei os lugares onde eu usei o método moveTo() (as linhas vermelhas).

+ +

Caso queira tentar fazer isso, você pode usar o snippet de código abaixo. Basta colá-lo na função draw() que vimos anteriormente.

+ + + +
function draw() {
+  var canvas = document.getElementById('canvas');
+  if (canvas.getContext) {
+    var ctx = canvas.getContext('2d');
+
+    ctx.beginPath();
+    ctx.arc(75, 75, 50, 0, Math.PI * 2, true); // Círculo exterior
+    ctx.moveTo(110, 75);
+    ctx.arc(75, 75, 35, 0, Math.PI, false);  // Boca (sentido horário)
+    ctx.moveTo(65, 65);
+    ctx.arc(60, 65, 5, 0, Math.PI * 2, true);  // Olho esquerdo
+    ctx.moveTo(95, 65);
+    ctx.arc(90, 65, 5, 0, Math.PI * 2, true);  // Olho direito
+    ctx.stroke();
+  }
+}
+
+ +

O resultado aparece como:

+ +

{{EmbedLiveSample("Desenhando", 160, 160, "https://mdn.mozillademos.org/files/252/Canvas_smiley.png")}}

+ +

Se você não gosta de ver linhas conectadas, você pode remover as linhas que chamam a função moveTo().

+ +
+

Nota: Para aprender mais sobre a função arc(), veja sobre {{anch("Arcos")}}.

+
+ +

Linhas

+ +

Para desenhar linhas retas, use o método lineTo().

+ +
+
{{domxref("CanvasRenderingContext2D.lineTo", "lineTo(x, y)")}}
+
Desenha uma linha do ponto atual a até a posição especificada por x e y.
+
+ +

Esse método recebe dois argumentos, x e y, que são as coordenadas do ponto final da linha. O ponto inicial é dependente de caminhos previamente desenhados, onde o ponto final do caminho anterior é o ponto inicial para o seguinte, e assim por diante. O ponto inicial também pode ser alterado usando o método moveTo().
+
+ O exemplo abaixo desenha dois triângulos, um preenchido e um delineado.

+ + + +
function draw() {
+  var canvas = document.getElementById('canvas');
+  if (canvas.getContext){
+    var ctx = canvas.getContext('2d');
+
+    // Filled triangle
+    ctx.beginPath();
+    ctx.moveTo(25,25);
+    ctx.lineTo(105,25);
+    ctx.lineTo(25,105);
+    ctx.fill();
+
+    // Stroked triangle
+    ctx.beginPath();
+    ctx.moveTo(125,125);
+    ctx.lineTo(125,45);
+    ctx.lineTo(45,125);
+    ctx.closePath();
+    ctx.stroke();
+  }
+}
+
+ +

Isso começa chamando o método beginPath() para iniciar um novo shape path. Em seguida, usamos o método moveTo() para mover o ponto inicial para a posição desejada. Logo abaixo, duas linhas, que compõem os dois lados do triângulo, são desenhadas.

+ +

{{EmbedLiveSample("Linhas", 160, 160, "https://mdn.mozillademos.org/files/238/Canvas_lineTo.png")}}

+ +

Você notará a diferença entre o triângulo preenchido (filled) e não prenchido (stroked). Isto ocorre, como mencionado acima, porque as formas são automaticamente fechadas quando um caminho é preenchido, mas não quando são não preenchidos. Se deixássemos de fora o closePath() para os triângulos não preenchidos, apenas duas linhas teriam sido desenhadas, não um triângulo completo.

+ +

Arcos

+ +

Para desenhar arcos, nós usamos os métodos arc() ou arcTo().

+ +
+
{{domxref("CanvasRenderingContext2D.arc", "arc(x, y, radius, startAngle, endAngle, anticlockwise)")}}
+
Desenha um arco centralizado na posição (x, y) com um raio r iniciando em startAngle e terminando em endAngle apontando na direção indicada pelo sentido anti-horário (padronizando para o sentido horário).
+
{{domxref("CanvasRenderingContext2D.arcTo", "arcTo(x1, y1, x2, y2, radius)")}}
+
Desenha um arco com os pontos de controle e raio, conectados ao ponto anterior por uma linha reta.
+
+ +

Vamos dar uma olhada mais detalhada sobre o método arc, que tem seis parâmetros: x e y são as coordenadas do centro do círculo em que o arco deve ser desenhado. radius é o raio. Os parâmetros startAngle e endAngle definem os pontos inicial e final do arco em radianos, ao longo da curva do círculo. Estes são medidos a partir do eixo x. O parâmetro anticlockwise é um valor Booleano que, quando verdadeiro, desenha o arco no sentido anti-horário; Caso contrário, o arco é desenhado no sentido horário.

+ +
+

Nota: Os ângulos na função arc são medidos em radianos, não em graus. Para converter graus em radianos você pode usar a seguinte expressão JavaScript: radians = (Math.PI/180)*degrees.

+
+ +

O exemplo a seguir é um pouco mais complexo do que os que vimos anteriormente. Ele desenha 12 arcos diferentes, todos com diferentes ângulos e preenchimentos.

+ +

Os dois laços for são para iterar através das linhas e colunas de arcos. Para cada arco, é criado um novo caminho chamando beginPath(). No código, cada um dos parâmetros para o arco estão em uma variável somente para demonstração, assim você não precisa fazer isso na vida real.

+ +

As coordenadas x e y devem ser suficientemente claras. O parâmetros radius e startAngle são fixos. O endAngle começa em 180 graus (metade de um círculo) na primeira coluna e aumenta gradualmente em 90 graus, culminando em um círculo completo na última coluna.

+ +

A manipulação do parâmetro clockwise faz com que a primeira e terceira linhas sejam desenhadas como arcos no sentido horário, e a segunda e quarta linhas como arcos no sentido anti-horário. Finalmente, a instrução if faz com que a metade superior dos arcos não sejam preenchidos e a metade inferior dos arcos sejam.

+ +
+

Note: Este exemplo requer um canvas um pouco maior que as outras desta página: 150 x 200 pixels.

+
+ + + +
function draw() {
+  var canvas = document.getElementById('canvas');
+  if (canvas.getContext){
+    var ctx = canvas.getContext('2d');
+
+    for(var i=0;i<4;i++){
+      for(var j=0;j<3;j++){
+        ctx.beginPath();
+        var x              = 25+j*50;               // coordenada x
+        var y              = 25+i*50;               // coordenada y
+        var radius         = 20;                    // Raio do Arco
+        var startAngle     = 0;                     // Ponto inicial no círculo
+        var endAngle       = Math.PI+(Math.PI*j)/2; // Ponto final no círculo
+        var anticlockwise  = i%2==0 ? false : true; // horário ou anti-horário
+
+        ctx.arc(x, y, radius, startAngle, endAngle, anticlockwise);
+
+        if (i>1){
+          ctx.fill();
+        } else {
+          ctx.stroke();
+        }
+      }
+    }
+  }
+}
+
+ +

{{EmbedLiveSample("Arcos", 160, 210, "https://mdn.mozillademos.org/files/204/Canvas_arc.png")}}

+ +

Curvas de Bézier Cúbicas e Quadráticas

+ +

O próximo tipo de caminhos disponíveis são as Curvas de Bézier, disponíveis nas variedades cubícas e quadráticas. Elas são geralmente usadas para desenhar complexas formas orgânicas.

+ +
+
{{domxref("CanvasRenderingContext2D.quadraticCurveTo", "quadraticCurveTo(cp1x, cp1y, x, y)")}}
+
Desenha uma curva de Bézier quadrática da posição atual indicada pelo cursor, até a posição final especificada por x e y, usando o controle de pontos guiados por cp1x e cp1y.
+
{{domxref("CanvasRenderingContext2D.bezierCurveTo", "bezierCurveTo(cp1x, cp1y, cp2x, cp2y, x, y)")}}
+
Desenha uma curva de Bézier cúbica partindo da posição atual indicada pelo cursor, até a posição final especificada por x e y, usando o controle de pontos guiados por (cp1x, cp1y) e (cp2x, cp2y).
+
+ +

A diferença entre estes métodos pode ser descrita de forma melhor usando a imagem à direita. Uma curva quadrática de Bézier tem um ponto inicial e final (pontos azuis) e apenas um ponto de controle (indicado pelo ponto vermelho) enquanto que uma curva cúbica de Bézier utiliza dois pontos de controles.

+ +

Os parâmetros x e y em ambos os métodos são as coordenadas do ponto final. cp1x e cp1y são as coordenadas do primeiro ponto de controle, e cp2x e cp2y são as coordenadas do segundo ponto de controle.

+ +

Usando curvas de Bézier quadráticas e cúbicas pode ser algo bastante desafiador, porque ao contrário de um software de desenho vetorial, como o Adobe Illustrator, não temos resultados visuais imediatos sobre o que estamos fazendo. Isso torna bastante difícil desenhar formas complexas. No exemplo a seguir, vamos desenhar algumas formas orgânicas simples, mas se você tiver tempo e, acima de tudo, paciência, formas muito mais complexas podem ser criadas.

+ +

Não há nada muito difícil nestes exemplos. Em ambos os casos vemos uma sucessão de curvas sendo desenhadas, resultando no fim, em uma forma (shape) completa.

+ +

Curvas de Bézier Quadráticas

+ +

Este exemplo usa múltiplas curvas de Bézier quadráticas para renderizar um balão de fala.

+ + + +
function draw() {
+  var canvas = document.getElementById('canvas');
+  if (canvas.getContext) {
+    var ctx = canvas.getContext('2d');
+
+    // Exemplo de curvas de Bézier quadráticas
+    ctx.beginPath();
+    ctx.moveTo(75,25);
+    ctx.quadraticCurveTo(25,25,25,62.5);
+    ctx.quadraticCurveTo(25,100,50,100);
+    ctx.quadraticCurveTo(50,120,30,125);
+    ctx.quadraticCurveTo(60,120,65,100);
+    ctx.quadraticCurveTo(125,100,125,62.5);
+    ctx.quadraticCurveTo(125,25,75,25);
+    ctx.stroke();
+  }
+}
+
+ +

{{EmbedLiveSample('Curvas_de_Bézier_Quadráticas', 160, 160, "https://mdn.mozillademos.org/files/243/Canvas_quadratic.png")}}

+ +

Curvas de Bézier Cúbicas

+ +

Este exemplo desenha um coração usando curvas de Bézier cúbicas.

+ + + +
function draw() {
+  var canvas = document.getElementById('canvas');
+  if (canvas.getContext){
+    var ctx = canvas.getContext('2d');
+
+    // Exemplo de curvas de Bézier cúbicas
+    ctx.beginPath();
+    ctx.moveTo(75,40);
+    ctx.bezierCurveTo(75,37,70,25,50,25);
+    ctx.bezierCurveTo(20,25,20,62.5,20,62.5);
+    ctx.bezierCurveTo(20,80,40,102,75,120);
+    ctx.bezierCurveTo(110,102,130,80,130,62.5);
+    ctx.bezierCurveTo(130,62.5,130,25,100,25);
+    ctx.bezierCurveTo(85,25,75,37,75,40);
+    ctx.fill();
+  }
+}
+
+ +

{{EmbedLiveSample('Curvas_de_Bézier_Cúbicas', 160, 160, "https://mdn.mozillademos.org/files/207/Canvas_bezier.png")}}

+ +

Retângulos

+ +

Além dos três métodos que vimos em {{anch("Desenhando retângulos")}}, que desenham formas retangulares diretamente no canvas, há também o método rect(), que adiciona uma forma retangular a um caminho (path) atualmente aberto.

+ +
+
{{domxref("CanvasRenderingContext2D.rect", "rect(x, y, width, height)")}}
+
+

Desenha um retângulo cujo canto superior esquerdo é especificado por (x, y) com base em uma largura (width) e uma altura (height).

+
+
+ +

Quando este método é executado, o método moveTo() é automaticamente chamado com os parâmetros (0,0). Em outras palavras, a posição atual do cursor é automaticamente redefinida para as coordenadas padrões.

+ +

Combinando Elementos

+ +

Até agora, em cada exemplo dessa página foi usada apenas um tipo de função de caminho (path) para cada forma (shape). No entanto, não há nenhuma limitação para o número ou tipos de caminhos que você pode usar para criar um shape. Então, neste exemplo final, vamos combinar todas as funções de caminho para fazer um conjunto de personagens de jogo muito conhecido.

+ + + +
function draw() {
+  var canvas = document.getElementById('canvas');
+  if (canvas.getContext){
+    var ctx = canvas.getContext('2d');
+
+    roundedRect(ctx,12,12,150,150,15);
+    roundedRect(ctx,19,19,150,150,9);
+    roundedRect(ctx,53,53,49,33,10);
+    roundedRect(ctx,53,119,49,16,6);
+    roundedRect(ctx,135,53,49,33,10);
+    roundedRect(ctx,135,119,25,49,10);
+
+    ctx.beginPath();
+    ctx.arc(37,37,13,Math.PI/7,-Math.PI/7,false);
+    ctx.lineTo(31,37);
+    ctx.fill();
+
+    for(var i=0;i<8;i++){
+      ctx.fillRect(51+i*16,35,4,4);
+    }
+
+    for(i=0;i<6;i++){
+      ctx.fillRect(115,51+i*16,4,4);
+    }
+
+    for(i=0;i<8;i++){
+      ctx.fillRect(51+i*16,99,4,4);
+    }
+
+    ctx.beginPath();
+    ctx.moveTo(83,116);
+    ctx.lineTo(83,102);
+    ctx.bezierCurveTo(83,94,89,88,97,88);
+    ctx.bezierCurveTo(105,88,111,94,111,102);
+    ctx.lineTo(111,116);
+    ctx.lineTo(106.333,111.333);
+    ctx.lineTo(101.666,116);
+    ctx.lineTo(97,111.333);
+    ctx.lineTo(92.333,116);
+    ctx.lineTo(87.666,111.333);
+    ctx.lineTo(83,116);
+    ctx.fill();
+
+    ctx.fillStyle = "white";
+    ctx.beginPath();
+    ctx.moveTo(91,96);
+    ctx.bezierCurveTo(88,96,87,99,87,101);
+    ctx.bezierCurveTo(87,103,88,106,91,106);
+    ctx.bezierCurveTo(94,106,95,103,95,101);
+    ctx.bezierCurveTo(95,99,94,96,91,96);
+    ctx.moveTo(103,96);
+    ctx.bezierCurveTo(100,96,99,99,99,101);
+    ctx.bezierCurveTo(99,103,100,106,103,106);
+    ctx.bezierCurveTo(106,106,107,103,107,101);
+    ctx.bezierCurveTo(107,99,106,96,103,96);
+    ctx.fill();
+
+    ctx.fillStyle = "black";
+    ctx.beginPath();
+    ctx.arc(101,102,2,0,Math.PI*2,true);
+    ctx.fill();
+
+    ctx.beginPath();
+    ctx.arc(89,102,2,0,Math.PI*2,true);
+    ctx.fill();
+  }
+}
+
+// Uma função útil para desenhar um retângulo com cantos arredondados.
+
+function roundedRect(ctx,x,y,width,height,radius){
+  ctx.beginPath();
+  ctx.moveTo(x,y+radius);
+  ctx.lineTo(x,y+height-radius);
+  ctx.quadraticCurveTo(x,y+height,x+radius,y+height);
+  ctx.lineTo(x+width-radius,y+height);
+  ctx.quadraticCurveTo(x+width,y+height,x+width,y+height-radius);
+  ctx.lineTo(x+width,y+radius);
+  ctx.quadraticCurveTo(x+width,y,x+width-radius,y);
+  ctx.lineTo(x+radius,y);
+  ctx.quadraticCurveTo(x,y,x,y+radius);
+  ctx.stroke();
+}
+
+ +

O resultado é:

+ +

{{EmbedLiveSample("Combinando_Elementos", 160, 160, "https://mdn.mozillademos.org/files/9849/combinations.png")}}

+ +

Não vamos discutir isso em detalhes, uma vez que é realmente muito simples. As coisas mais importantes a serem observadas são o uso da propriedade fillStyle no contexto de desenho e o uso de uma função auxiliar (neste caso roundedRect()). Usando funções auxiliares para construir um desenho frequentemente pode ser muito útil, além de reduzir a quantidade de código que você precisa, bem como a sua complexidade.

+ +

Vamos dar uma nova olhada em fillStyle, em mais detalhes, mais adiante neste tutorial. Aqui, tudo o que estamos fazendo é apenas usando-o para alterar sucessivamente a cor de preenchimento dos caminhos (paths) de cor preta (padrão) para branca.

+ +

Path2D

+ +

Como vimos no último exemplo, pode haver uma série de paths e comandos de desenho para desenhar objetos em sua tela. Para simplificar o código e melhorar o desempenho, o objeto {{domxref("Path2D")}}, disponível em versões recentes dos navegadores, permite armazenar em cache ou gravar esses comandos de desenho. Com ele, você pode construir seus paths rapidamente.
+ Vamos ver como podemos construir um objeto de Path2D:

+ +
+
{{domxref("Path2D.Path2D", "Path2D()")}}
+
+

O construtor de Path2D() retorna um objeto Path2D instanciado recentemente, opcionalmente através de um outro objeto Path2D como argumento (cria uma cópia) ou, opcionalmente, com uma string que representam dados de paths em SVG.

+
+
+ +
new Path2D();     // objeto vazio de Path2D
+new Path2D(path); // cópia de outro objeto de Path2D
+new Path2D(d);    // objeto criado a partir de paths em SVG
+ +

Todos os métodos de caminho (path methods) como moveTo, rect, arc ou quadraticCurveTo, etc., que temos de saber acima, estão disponíveis em Path2D.

+ +

A API Path2D também adiciona uma maneira de combinar caminhos usando o método addPath. Isso pode ser útil quando você deseja criar objetos com vários componentes, por exemplo.

+ +
+
{{domxref("Path2D.addPath", "Path2D.addPath(path [, transform])")}}
+
Adiciona um path para o path atual através de uma matriz de transformação opcional.
+
+ +

Exemplo de Path2D

+ +

Neste exemplo, estamos criando um retângulo e um círculo. Ambos são armazenados como um objeto de Path2D, de modo que eles estão disponíveis para uso posterior. Com a nova API Path2D, vários métodos foram atualizados como, por exemplo, opcionalmente usar um objeto Path2D em vez do path atual. Aqui, os métodos strokefill são usados, ​​com um argumento de path, para desenhar ambos os objetos na tela, por exemplo.

+ + + +
function draw() {
+  var canvas = document.getElementById('canvas');
+  if (canvas.getContext) {
+    var ctx = canvas.getContext('2d');
+
+    var rectangle = new Path2D();
+    rectangle.rect(10, 10, 50, 50);
+
+    var circle = new Path2D();
+    circle.moveTo(125, 35);
+    circle.arc(100, 35, 25, 0, 2 * Math.PI);
+
+    ctx.stroke(rectangle);
+    ctx.fill(circle);
+  }
+}
+
+ +

{{EmbedLiveSample("Exemplo_de_Path2D", 140, 110, "https://mdn.mozillademos.org/files/9851/path2d.png")}}

+ +

Usando paths em SVG

+ +

Outro recurso poderoso da nova API de Path2D é a utilização de dados de path em SVG para inicializar caminhos (paths) no canvas. Isso permite que você crie dados de paths que possam ser utilizados tanto no SVG como no canvas.

+ +

O caminho se moverá para o ponto (M10 10) e então se moverá horizontalmente 80 pontos para a direita (h 80), depois 80 pontos para baixo (v 80), então 80 pontos para a esquerda (h -80) e, por fim, volta para o início (z). Você pode ver este exemplo na página do construtor do Path2D.

+ +
var p = new Path2D('M10 10 h 80 v 80 h -80 Z');
+ +
{{PreviousNext("Web/API/Canvas_API/Tutorial/Basic_usage", "Web/API/Canvas_API/Tutorial/Applying_styles_and_colors")}}
diff --git a/files/pt-br/web/api/canvas_api/tutorial/drawing_text/index.html b/files/pt-br/web/api/canvas_api/tutorial/drawing_text/index.html new file mode 100644 index 0000000000..550719e627 --- /dev/null +++ b/files/pt-br/web/api/canvas_api/tutorial/drawing_text/index.html @@ -0,0 +1,169 @@ +--- +title: Drawing text +slug: Web/Guide/HTML/Canvas_tutorial/Drawing_text +tags: + - Canvas + - Intermediário + - Tutorial + - graficos +translation_of: Web/API/Canvas_API/Tutorial/Drawing_text +--- +
{{CanvasSidebar}} {{PreviousNext("Web/API/Canvas_API/Tutorial/Applying_styles_and_colors", "Web/API/Canvas_API/Tutorial/Using_images")}}
+ +
+

Após entender como aplicar estilos e cores no capítulo anterior, nós veremos agora como desenhar texto dentro do contexto de uma canvas.

+
+ +

Desenhando texto

+ +

O context de renderização da canvas fornece dois métodos para renderização textual: 

+ +
+
{{domxref("CanvasRenderingContext2D.fillText", "fillText(text, x, y [, maxWidth])")}}
+
Preenche com um determinado texto as cordenadas (x,y) recebidas. Opcionalmente com uma largura máxima para o desenho.
+
{{domxref("CanvasRenderingContext2D.strokeText", "strokeText(text, x, y [, maxWidth])")}}
+
Traçeja um determinado texto nas cordenadas (x,y) recebidas. Opcionalmente com uma largura máxima para o desenho.
+
+ +

Um exemplo com fillText

+ +

O texto a seguir é rederizado utilizando fillStyle.

+ +
function draw() {
+  var ctx = document.getElementById('canvas').getContext('2d');
+  ctx.font = '48px serif';
+  ctx.fillText('Hello world', 10, 50);
+}
+ + + +

{{EmbedLiveSample("A_fillText_example", 310, 110)}}

+ +

Um exemplo com strokeText

+ +

 

+ +

O texto é preenchido usando o strokeStyle atual.

+ +

 

+ +
function draw() {
+  var ctx = document.getElementById('canvas').getContext('2d');
+  ctx.font = '48px serif';
+  ctx.strokeText('Hello world', 10, 50);
+}
+ + + +

{{EmbedLiveSample("A_strokeText_example", 310, 110)}}

+ +

Estilo de Texto

+ +

Nos exemplos anteriores, já usamos a propriedade font para tornar o texto um pouco maior que o tamanho padrão. Existem mais algumas propriedades que permitem ajustar a maneira como o texto é exibido no canvas:

+ +
+
{{domxref("CanvasRenderingContext2D.font", "font = value")}}
+
The current text style being used when drawing text. This string uses the same syntax as the CSS {{cssxref("font")}} property. The default font is 10px sans-serif.
+
{{domxref("CanvasRenderingContext2D.textAlign", "textAlign = value")}}
+
Text alignment setting. Possible values: start, end, left, right or center. The default value is start.
+
{{domxref("CanvasRenderingContext2D.textBaseline", "textBaseline = value")}}
+
Baseline alignment setting. Possible values: top, hanging, middle, alphabetic, ideographic, bottom. The default value is alphabetic.
+
{{domxref("CanvasRenderingContext2D.direction", "direction = value")}}
+
Directionality. Possible values: ltr, rtl, inherit. The default value is inherit.
+
+ +

Essas propriedades podem ser similares para você, se você trabalhou com CSS antes.

+ +

O diagrama seguinte do WHATWG demonstra as várias baselines suportadas pela propriedade do textBaselineThe top of the em square is
+roughly at the top of the glyphs in a font, the hanging baseline is
+where some glyphs like आ are anchored, the middle is half-way
+between the top of the em square and the bottom of the em square,
+the alphabetic baseline is where characters like Á, ÿ,
+f, and Ω are anchored, the ideographic baseline is
+where glyphs like 私 and 達 are anchored, and the bottom
+of the em square is roughly at the bottom of the glyphs in a
+font. The top and bottom of the bounding box can be far from these
+baselines, due to glyphs extending far outside the em square.

+ +

O exemplo de uma textBaseline

+ +

Edite o código abaixo e veja as atualizações em tempo real no canvas.

+ +
ctx.font = '48px serif';
+ctx.textBaseline = 'hanging';
+ctx.strokeText('Hello world', 0, 100);
+
+ + + +

{{ EmbedLiveSample('Playable_code', 700, 360) }}

+ +

Advanced text measurements

+ +

In the case you need to obtain more details about the text, the following method allows you to measure it.

+ +
+
{{domxref("CanvasRenderingContext2D.measureText", "measureText()")}}
+
Returns a {{domxref("TextMetrics")}} object containing the width, in pixels, that the specified text will be when drawn in the current text style.
+
+ +

The following code snippet shows how you can measure a text and get its width.

+ +
function draw() {
+  var ctx = document.getElementById('canvas').getContext('2d');
+  var text = ctx.measureText('foo'); // TextMetrics object
+  text.width; // 16;
+}
+
+ +

Notas específicas - Gecko

+ +

No Gecko (a engine de renderização do Firefox, Firefox OS e outras aplicações Mozilla), algumas APIs prefixadas foram implementadas em versões anteriores para escrever texto em um canvas. Essas APIs agora estão depreciadas e removidas, e não são mais garantidas para uso.

+ +

{{PreviousNext("Web/API/Canvas_API/Tutorial/Applying_styles_and_colors", "Web/API/Canvas_API/Tutorial/Using_images")}}

diff --git a/files/pt-br/web/api/canvas_api/tutorial/finale/index.html b/files/pt-br/web/api/canvas_api/tutorial/finale/index.html new file mode 100644 index 0000000000..9cd393b652 --- /dev/null +++ b/files/pt-br/web/api/canvas_api/tutorial/finale/index.html @@ -0,0 +1,49 @@ +--- +title: Conclusão +slug: Web/Guide/HTML/Canvas_tutorial/Conclusão +translation_of: Web/API/Canvas_API/Tutorial/Finale +--- +
{{CanvasSidebar}} {{PreviousNext("Web/API/Canvas_API/Tutorial/Optimizing_canvas")}}
+ +
+

Parabéns! Você terminou o Canvas tutorial! Este conhecimento ajudará você a fazer ótimos gráficos 2D na web.

+
+ +

Mais exemplos e tutoriais

+ +

Há uma variedade de demonstrações e mais explicações sobre canvas nesses sites:

+ +
+
Codepen.io
+
Front End Developer Playground & Code Editor no navegador.
+
HTML5CanvasTutorials
+
Exemplos para a maioria das APIs canvas.
+
31 days of Canvas tutorials
+
Uma ótima fundação para codificação visual em JavaScript .
+
Game development
+
O jogo é uma das atividades de computador mais populares. Novas tecnologias estão chegando constantemente para possibilitar o desenvolvimento de jogos melhores e mais poderosos que podem ser executados em qualquer navegador da Web compatível com os padrões.
+
+ +

Outras Web APIs

+ +

Essas APIs podem ser úteis, quando trabalhando mais com canvas e gráficos:

+ +
+
WebGL
+
API para renderização interativa de gráficos 3D.
+
SVG
+
Scalable Vector Graphics permitem que você descreva imagens como conjuntos de vetores (linhas) e formas, a fim de permitir que eles sejam redimensionados sem problemas, independentemente do tamanho em que são desenhados.
+
Web Audio
+
A Web Audio API fornece um sistema poderoso e versátil para controlar o áudio na Web, permitindo que os desenvolvedores escolham fontes de áudio, adicionem efeitos ao áudio, criem visualizações de áudio, apliquem efeitos espaciais (como panning) e muito mais.
+
+ +

Questions

+ +
+
Stackoverflow
+
Perguntas marcadas como "canvas".
+
Comentários sobre esse tutorial – A comunidade MDN de documentação
+
Se você tiver algum comentário sobre este tutorial ou quiser nos agradecer, fique à vontade para entrar em contato conosco!
+
+ +

{{PreviousNext("Web/API/Canvas_API/Tutorial/Optimizing_canvas")}}

diff --git a/files/pt-br/web/api/canvas_api/tutorial/index.html b/files/pt-br/web/api/canvas_api/tutorial/index.html new file mode 100644 index 0000000000..2f9dbab7df --- /dev/null +++ b/files/pt-br/web/api/canvas_api/tutorial/index.html @@ -0,0 +1,56 @@ +--- +title: Canvas tutorial +slug: Web/Guide/HTML/Canvas_tutorial +tags: + - Canvas + - Graphics + - Guide + - HTML + - HTML5 + - Intermediate + - Web +translation_of: Web/API/Canvas_API/Tutorial +--- +

 {{CanvasSidebar}}

+ +

<canvas> é um elemento HTML que pode ser usado para desenhar usando linguagem de "script" (normalmente JavaScript). Isto pode ser usado, por exemplo, para desenhar gráficos, fazer composições de fotos ou simples (e não tão simples) animações. As imagens à direita mostram exemplos de implementações <canvas> que serão parte deste tutorial.

+ +

Este tutorial descreve como utilizar o elemento <canvas> para desenhar gráficos 2D, iniciando com o básico. Os exemplos fornecidos devem lhe trazer algumas ideias claras sobre o que você pode fazer com o canvas e irá fornecer trechos de código que podem lhe ajudar na contrução do seu próprio conteúdo. 

+ +

Introduzido pela primeira vez no WebKit pela Apple para o OS X Dashboard, o <canvas>, desde então, tem sido implementado em navegadores. Hoje, todos os principais navegadores suportam isso.

+ +

Antes de começar

+ +

Usar o elemento <canvas> não é muito difícil, mas você precisa de um conhecimento básico sobre HTML e JavaScript. O elemento <canvas> não é suportado por alguns navegadores antigos, mas é suportado em versões recentes da maioria dos navegadores. O tamanho padrão de um canvas é de 300px * 150px (largura * altura). Porém, tamanhos customizados podem ser definidos usando as propriedades width e height do CSS. Para desenhar gráficos no canvas iremos usar um contexto de objeto JavaScript, o que criará gráficos em tempo real.

+ +

Nesse tutorial

+ + + +

Veja também

+ + + +

Nota dos contribuidores

+ +

Devido a um erro técnico lamentável que ocorreu na semana de 17 de junho de 2013, perdemos parte do histórico deste tutorial, incluindo atribuições a todos os contribuidores anteriores ao seu conteúdo. Pedimos desculpas por isso, e espero que você nos perdoe desse infeliz infortúnio.

+ +
{{ Next("Web/Guide/HTML/Canvas_tutorial/Utilizacao_basica") }}
diff --git a/files/pt-br/web/api/canvas_api/tutorial/optimizing_canvas/index.html b/files/pt-br/web/api/canvas_api/tutorial/optimizing_canvas/index.html new file mode 100644 index 0000000000..d18afddefa --- /dev/null +++ b/files/pt-br/web/api/canvas_api/tutorial/optimizing_canvas/index.html @@ -0,0 +1,115 @@ +--- +title: Otimizando canvas +slug: Web/Guide/HTML/Canvas_tutorial/Otimizando_Canvas +tags: + - Canvas + - Gráfico 2D + - Otimização +translation_of: Web/API/Canvas_API/Tutorial/Optimizing_canvas +--- +
{{CanvasSidebar}} {{PreviousNext("Web/API/Canvas_API/Tutorial/Hit_regions_and_accessibility", "Web/API/Canvas_API/Tutorial/Finale")}}
+ +
+

O elemento {{HTMLElement("canvas")}} é um dos padrões mais largamente utilizados para renderização de gráficos 2D na Web. É muito usado em jogos e em visualizações complexas. Porém, quando sítios web e aplicativos utilizam canvas até seus limites, começam a surgir problemas de perda de performance. Este artigo tem o objetivo de prover sugestões de otimização de seu elemento canvas e garantir que seu site ou aplicativo funcione melhor.

+
+ +

Dicas de performance

+ +

O que segue é uma coleção de dicas para melhorar a performance.

+ +

Pre-render similar primitives or repeating objects on an off-screen canvas

+ +

If you find yourself with complex drawing operations on each frame, consider creating an offscreen canvas, draw to it once (or whenever it changes) on the offscreen canvas, then on each frame draw the offscreen canvas.

+ +
myEntity.offscreenCanvas = document.createElement('canvas');
+myEntity.offscreenCanvas.width = myEntity.width;
+myEntity.offscreenCanvas.height = myEntity.height;
+myEntity.offscreenContext = myEntity.offscreenCanvas.getContext('2d');
+
+myEntity.render(myEntity.offscreenContext);
+
+ +

Avoid floating-point coordinates and use integers instead

+ +

Sub-pixel rendering occurs when you render objects on a canvas without whole values.

+ +
ctx.drawImage(myImage, 0.3, 0.5);
+
+ +

This causes the browser to do extra calculations to create the anti-aliasing effect. To avoid this, make sure to round all co-ordinates used in calls to {{domxref("CanvasRenderingContext2D.drawImage", "drawImage()")}} using {{jsxref("Math.floor()")}}, for example.

+ +

Don’t scale images in drawImage

+ +

Cache various sizes of your images on an offscreen canvas when loading as opposed to constantly scaling them in {{domxref("CanvasRenderingContext2D.drawImage", "drawImage()")}}.

+ +

Use multiple layered canvases for complex scenes

+ +

You may find you have some elements that are frequently changing and moving around whereas other things (like UI) never change. An optimization in this situation is to create layers using multiple canvas elements.

+ +

For example you could create a UI layer that sits on top of everything and is only drawn during user input. You could create game layer where the frequently updating entities exist and a background layer for entities that rarely update.

+ +
<div id="stage">
+  <canvas id="ui-layer" width="480" height="320"></canvas>
+  <canvas id="game-layer" width="480" height="320"></canvas>
+  <canvas id="background-layer" width="480" height="320"></canvas>
+</div>
+
+<style>
+  #stage {
+    width: 480px;
+    height: 320px;
+    position: relative;
+    border: 2px solid black
+  }
+  canvas { position: absolute; }
+  #ui-layer { z-index: 3 }
+  #game-layer { z-index: 2 }
+  #background-layer { z-index: 1 }
+</style>
+
+ +

CSS for large background images

+ +

If like most games you have a static background image, use a plain {{HTMLElement("div")}} element with a CSS {{cssxref("background")}} property and position it under the canvas. This will avoid drawing a large image to the canvas on every tick.

+ +

Scaling canvas using CSS transforms

+ +

CSS transforms are faster by using the GPU. Best case is to not scale the canvas or have a smaller canvas and scale up rather than a bigger canvas and scale down. For Firefox OS, target 480 x 320 px.

+ +
var scaleX = window.innerWidth / canvas.width;
+var scaleY = window.innerHeight / canvas.height;
+
+var scaleToFit = Math.min(scaleX, scaleY);
+var scaleToCover = Math.max(scaleX, scaleY);
+
+stage.style.transformOrigin = '0 0'; //scale from top left
+stage.style.transform = 'scale(' + scaleToFit + ')';
+
+ +

Turn off transparency

+ +

If your game uses canvas and doesn’t need to be transparent, set the alpha option to false when creating a drawing context with HTMLCanvasElement.getContext(). This information can be used internally to optimize rendering.

+ +
var ctx = canvas.getContext('2d', { alpha: false });
+ +

More tips

+ + + +

See also

+ + + +

{{PreviousNext("Web/API/Canvas_API/Tutorial/Hit_regions_and_accessibility", "Web/API/Canvas_API/Tutorial/Finale")}}

diff --git a/files/pt-br/web/api/canvas_api/tutorial/using_images/index.html b/files/pt-br/web/api/canvas_api/tutorial/using_images/index.html new file mode 100644 index 0000000000..0b0dcfe7e7 --- /dev/null +++ b/files/pt-br/web/api/canvas_api/tutorial/using_images/index.html @@ -0,0 +1,333 @@ +--- +title: Using images +slug: Web/Guide/HTML/Canvas_tutorial/Using_images +translation_of: Web/API/Canvas_API/Tutorial/Using_images +--- +
{{CanvasSidebar}} {{PreviousNext("Web/API/Canvas_API/Tutorial/Drawing_text", "Web/API/Canvas_API/Tutorial/Transformations" )}}
+ +
+

Até agora nós criamos nossos próprios shapes e aplicamos estilos(applied styles) a eles. Um dos recursos mais interessantes do {{HTMLElement("canvas")}} é a capacidade de usar imagens. Eles podem ser usados para composição dinâmica de fotos ou como pano de fundo de gráficos, como sprites em jogos e assim por diante. Imagens externas podem ser usadas em qualquer formato suportado pelo navegador, tais como PNG, GIF, ou JPEG. Você pode até usar a imagem produzida por outros elementos da tela na mesma página que a fonte!

+
+ +

A importação de imagens para o canvas é basicamente um processo de duas etapas:

+ +
    +
  1. Obter uma referência a um objeto {{domxref("HTMLImageElement")}} ou a outro elemento do canvas como fonte. Também é possível usar imagens fornecendo uma URL.
  2. +
  3. Desenhar a imagem no canvas usando a função drawImage() .
  4. +
+ +

Vamos dar uma olhada em como fazer isso.

+ +

Getting images to draw

+ +

The canvas API is able to use any of the following data types as an image source:

+ +
+
{{domxref("HTMLImageElement")}}
+
These are images created using the Image() constructor, as well as any {{HTMLElement("img")}} element.
+
{{domxref("SVGImageElement")}}
+
These are images embedded using the {{SVGElement("image")}} element.
+
{{domxref("HTMLVideoElement")}}
+
Using an HTML {{HTMLElement("video")}} element as your image source grabs the current frame from the video and uses it as an image.
+
{{domxref("HTMLCanvasElement")}}
+
You can use another {{HTMLElement("canvas")}} element as your image source.
+
+ +

These sources are collectively referred to by the type {{domxref("CanvasImageSource")}}.

+ +

There are several ways to get images for use on a canvas.

+ +

Using images from the same page

+ +

We can obtain a reference to images on the same page as the canvas by using one of:

+ + + +

Using images from other domains

+ +

Using the {{htmlattrxref("crossorigin", "img")}} attribute of an {{HTMLElement("img")}} element (reflected by the {{domxref("HTMLImageElement.crossOrigin")}} property), you can request permission to load an image from another domain for use in your call to drawImage(). If the hosting domain permits cross-domain access to the image, the image can be used in your canvas without tainting it; otherwise using the image will taint the canvas.

+ +

Using other canvas elements

+ +

Just as with normal images, we access other canvas elements using either the {{domxref("document.getElementsByTagName()")}} or {{domxref("document.getElementById()")}} method. Be sure you've drawn something to the source canvas before using it in your target canvas.

+ +

One of the more practical uses of this would be to use a second canvas element as a thumbnail view of the other larger canvas.

+ +

Creating an image from scratch

+ +

Another option is to create new {{domxref("HTMLImageElement")}} objects in our script. To do this, you can use the convenient Image() constructor:

+ +
var img = new Image();   // Create new img element
+img.src = 'myImage.png'; // Set source path
+
+ +

When this script gets executed, the image starts loading.

+ +

If you try to call drawImage() before the image has finished loading, it won't do anything (or, in older browsers, may even throw an exception). So you need to be sure to use the load event so you don't try this before the image has loaded:

+ +
var img = new Image();   // Create new img element
+img.addEventListener('load', function() {
+  // execute drawImage statements here
+}, false);
+img.src = 'myImage.png'; // Set source path
+
+ +

If you're only using one external image this can be a good approach, but once you need to track more than one we need to resort to something more clever. It's beyond the scope of this tutorial to look at image pre-loading tactics, but you should keep that in mind.

+ +

Embedding an image via data: URL

+ +

Another possible way to include images is via the data: url. Data URLs allow you to completely define an image as a Base64 encoded string of characters directly in your code.

+ +
var img = new Image();   // Create new img element
+img.src = 'data:image/gif;base64,R0lGODlhCwALAIAAAAAA3pn/ZiH5BAEAAAEALAAAAAALAAsAAAIUhA+hkcuO4lmNVindo7qyrIXiGBYAOw==';
+
+ +

One advantage of data URLs is that the resulting image is available immediately without another round trip to the server. Another potential advantage is that it is also possible to encapsulate in one file all of your CSS, JavaScript, HTML, and images, making it more portable to other locations.

+ +

Some disadvantages of this method are that your image is not cached, and for larger images the encoded url can become quite long.

+ +

Using frames from a video

+ +

You can also use frames from a video being presented by a {{HTMLElement("video")}} element (even if the video is not visible). For example, if you have a {{HTMLElement("video")}} element with the ID "myvideo", you can do this:

+ +
function getMyVideo() {
+  var canvas = document.getElementById('canvas');
+  if (canvas.getContext) {
+    var ctx = canvas.getContext('2d');
+
+    return document.getElementById('myvideo');
+  }
+}
+
+ +

This returns the {{domxref("HTMLVideoElement")}} object for the video, which, as covered earlier, is one of the objects that can be used as a CanvasImageSource.

+ +

Drawing images

+ +

Once we have a reference to our source image object we can use the drawImage() method to render it to the canvas. As we will see later the drawImage() method is overloaded and has several variants. In its most basic form it looks like this:

+ +
+
{{domxref("CanvasRenderingContext2D.drawImage", "drawImage(image, x, y)")}}
+
Draws the CanvasImageSource specified by the image parameter at the coordinates (x, y).
+
+ +
+

SVG images must specify a width and height in the root <svg> element.

+
+ +

Example: A simple line graph

+ +

In the following example, we will use an external image as the backdrop for a small line graph. Using backdrops can make your script considerably smaller because we can avoid the need for code to generate the background. In this example, we're only using one image, so I use the image object's load event handler to execute the drawing statements. The drawImage() method places the backdrop at the coordinate (0, 0), which is the top-left corner of the canvas.

+ + + +
function draw() {
+  var ctx = document.getElementById('canvas').getContext('2d');
+  var img = new Image();
+  img.onload = function() {
+    ctx.drawImage(img, 0, 0);
+    ctx.beginPath();
+    ctx.moveTo(30, 96);
+    ctx.lineTo(70, 66);
+    ctx.lineTo(103, 76);
+    ctx.lineTo(170, 15);
+    ctx.stroke();
+  };
+  img.src = 'https://mdn.mozillademos.org/files/5395/backdrop.png';
+}
+ +

The resulting graph looks like this:

+ +

{{EmbedLiveSample("Example_A_simple_line_graph", 220, 160, "https://mdn.mozillademos.org/files/206/Canvas_backdrop.png")}}

+ +

Scaling

+ +

The second variant of the drawImage() method adds two new parameters and lets us place scaled images on the canvas.

+ +
+
{{domxref("CanvasRenderingContext2D.drawImage", "drawImage(image, x, y, width, height)")}}
+
This adds the width and height parameters, which indicate the size to which to scale the image when drawing it onto the canvas.
+
+ +

Example: Tiling an image

+ +

In this example, we'll use an image as a wallpaper and repeat it several times on the canvas. This is done simply by looping and placing the scaled images at different positions. In the code below, the first for loop iterates over the rows. The second for loop iterates over the columns. The image is scaled to one third of its original size, which is 50x38 pixels.

+ +
+

Note: Images can become blurry when scaling up or grainy if they're scaled down too much. Scaling is probably best not done if you've got some text in it which needs to remain legible.

+
+ + + +
function draw() {
+  var ctx = document.getElementById('canvas').getContext('2d');
+  var img = new Image();
+  img.onload = function() {
+    for (var i = 0; i < 4; i++) {
+      for (var j = 0; j < 3; j++) {
+        ctx.drawImage(img, j * 50, i * 38, 50, 38);
+      }
+    }
+  };
+  img.src = 'https://mdn.mozillademos.org/files/5397/rhino.jpg';
+}
+ +

The resulting canvas looks like this:

+ +

{{EmbedLiveSample("Example_Tiling_an_image", 160, 160, "https://mdn.mozillademos.org/files/251/Canvas_scale_image.png")}}

+ +

Slicing

+ +

The third and last variant of the drawImage() method has eight parameters in addition to the image source. It lets us cut out a section of the source image, then scale and draw it on our canvas.

+ +
+
{{domxref("CanvasRenderingContext2D.drawImage", "drawImage(image, sx, sy, sWidth, sHeight, dx, dy, dWidth, dHeight)")}}
+
Given an image, this function takes the area of the source image specified by the rectangle whose top-left corner is (sx, sy) and whose width and height are sWidth and sHeight and draws it into the canvas, placing it on the canvas at (dx, dy) and scaling it to the size specified by dWidth and dHeight.
+
+ +

To really understand what this does, it may help to look at the image to the right. The first four parameters define the location and size of the slice on the source image. The last four parameters define the rectangle into which to draw the image on the destination canvas.

+ +

Slicing can be a useful tool when you want to make compositions. You could have all elements in a single image file and use this method to composite a complete drawing. For instance, if you want to make a chart you could have a PNG image containing all the necessary text in a single file and depending on your data could change the scale of your chart fairly easily. Another advantage is that you don't need to load every image individually, which can improve load performance.

+ +

Example: Framing an image

+ +

In this example, we'll use the same rhino as in the previous example, but we'll slice out its head and composite it into a picture frame. The picture frame image is a 24-bit PNG which includes a drop shadow. Because 24-bit PNG images include a full 8-bit alpha channel, unlike GIF and 8-bit PNG images, it can be placed onto any background without worrying about a matte color.

+ +
<html>
+ <body onload="draw();">
+   <canvas id="canvas" width="150" height="150"></canvas>
+   <div style="display:none;">
+     <img id="source" src="https://mdn.mozillademos.org/files/5397/rhino.jpg" width="300" height="227">
+     <img id="frame" src="https://mdn.mozillademos.org/files/242/Canvas_picture_frame.png" width="132" height="150">
+   </div>
+ </body>
+</html>
+
+ +
function draw() {
+  var canvas = document.getElementById('canvas');
+  var ctx = canvas.getContext('2d');
+
+  // Draw slice
+  ctx.drawImage(document.getElementById('source'),
+                33, 71, 104, 124, 21, 20, 87, 104);
+
+  // Draw frame
+  ctx.drawImage(document.getElementById('frame'), 0, 0);
+}
+ +

We took a different approach to loading the images this time. Instead of loading them by creating new {{domxref("HTMLImageElement")}} objects, we included them as {{HTMLElement("img")}} tags directly in our HTML source and retrieved the images from those. The images are hidden from output by setting the CSS property {{cssxref("display")}} to none for those images.

+ +

{{EmbedLiveSample("Example_Framing_an_image", 160, 160, "https://mdn.mozillademos.org/files/226/Canvas_drawimage2.jpg")}}

+ +

The script itself is very simple. Each {{HTMLElement("img")}} is assigned an ID attribute, which makes them easy to select using {{domxref("document.getElementById()")}}. We then simply use drawImage() to slice the rhino out of the first image and scale him onto the canvas, then draw the frame on top using a second drawImage() call.

+ + + +

In the final example of this chapter, we'll build a little art gallery. The gallery consists of a table containing several images. When the page is loaded, a {{HTMLElement("canvas")}}  element is inserted for each image and a frame is drawn around it.

+ +

In this case, every image has a fixed width and height, as does the frame that's drawn around them. You could enhance the script so that it uses the image's width and height to make the frame fit perfectly around it.

+ +

The code below should be self-explanatory. We loop through the {{domxref("document.images")}} container and add new canvas elements accordingly. Probably the only thing to note, for those not so familiar with the DOM, is the use of the {{domxref("Node.insertBefore")}} method. insertBefore() is a method of the parent node (a table cell) of the element (the image) before which we want to insert our new node (the canvas element).

+ +
<html>
+ <body onload="draw();">
+     <table>
+      <tr>
+        <td><img src="https://mdn.mozillademos.org/files/5399/gallery_1.jpg"></td>
+        <td><img src="https://mdn.mozillademos.org/files/5401/gallery_2.jpg"></td>
+        <td><img src="https://mdn.mozillademos.org/files/5403/gallery_3.jpg"></td>
+        <td><img src="https://mdn.mozillademos.org/files/5405/gallery_4.jpg"></td>
+      </tr>
+      <tr>
+        <td><img src="https://mdn.mozillademos.org/files/5407/gallery_5.jpg"></td>
+        <td><img src="https://mdn.mozillademos.org/files/5409/gallery_6.jpg"></td>
+        <td><img src="https://mdn.mozillademos.org/files/5411/gallery_7.jpg"></td>
+        <td><img src="https://mdn.mozillademos.org/files/5413/gallery_8.jpg"></td>
+      </tr>
+     </table>
+     <img id="frame" src="https://mdn.mozillademos.org/files/242/Canvas_picture_frame.png" width="132" height="150">
+ </body>
+</html>
+
+ +

And here's some CSS to make things look nice:

+ +
body {
+  background: 0 -100px repeat-x url(https://mdn.mozillademos.org/files/5415/bg_gallery.png) #4F191A;
+  margin: 10px;
+}
+
+img {
+  display: none;
+}
+
+table {
+  margin: 0 auto;
+}
+
+td {
+  padding: 15px;
+}
+
+ +

Tying it all together is the JavaScript to draw our framed images:

+ +
function draw() {
+
+  // Loop through all images
+  for (var i = 0; i < document.images.length; i++) {
+
+    // Don't add a canvas for the frame image
+    if (document.images[i].getAttribute('id') != 'frame') {
+
+      // Create canvas element
+      canvas = document.createElement('canvas');
+      canvas.setAttribute('width', 132);
+      canvas.setAttribute('height', 150);
+
+      // Insert before the image
+      document.images[i].parentNode.insertBefore(canvas,document.images[i]);
+
+      ctx = canvas.getContext('2d');
+
+      // Draw image to canvas
+      ctx.drawImage(document.images[i], 15, 20);
+
+      // Add frame
+      ctx.drawImage(document.getElementById('frame'), 0, 0);
+    }
+  }
+}
+ +

{{EmbedLiveSample("Art_gallery_example", 725, 400)}}

+ +

Controlling image scaling behavior

+ +

As mentioned previously, scaling images can result in fuzzy or blocky artifacts due to the scaling process. You can use the drawing context's {{domxref("CanvasRenderingContext2D.imageSmoothingEnabled", "imageSmoothingEnabled")}} property to control the use of image smoothing algorithms when scaling images within your context. By default, this is true, meaning images will be smoothed when scaled. You can disable this feature like this:

+ +
ctx.mozImageSmoothingEnabled = false;
+ctx.webkitImageSmoothingEnabled = false;
+ctx.msImageSmoothingEnabled = false;
+ctx.imageSmoothingEnabled = false;
+
+ +

{{PreviousNext("Web/API/Canvas_API/Tutorial/Drawing_text", "Web/API/Canvas_API/Tutorial/Transformations")}}

diff --git a/files/pt-br/web/api/crypto/getrandomvalues/index.html b/files/pt-br/web/api/crypto/getrandomvalues/index.html new file mode 100644 index 0000000000..7e54e933ed --- /dev/null +++ b/files/pt-br/web/api/crypto/getrandomvalues/index.html @@ -0,0 +1,116 @@ +--- +title: RandomSource.getRandomValues() +slug: Web/API/RandomSource/getRandomValues +translation_of: Web/API/Crypto/getRandomValues +--- +

{{APIRef("Web Crypto API")}}

+ +

O método RandomSource.getRandomValues() permite que você obtenha valores criptográficos randômicos. O array passado como parametro é preenchido com números randômicos (randômicos no sentido criptográfico).

+ +

Para garantir performance suficiente, as implementações não estão usando um gerador de número randômico de verdade, mas estão usando um gerador de número pseudo-randômico alimentado com um valor com {{Glossary("entropia")}} suficiente. Os PRNG (pseudo-random number generator - gerador de número pseudo-randômico) usados diferem de uma implementação para a outra, mas são adequadas para usos criptográficos. As implementações precisam ter um valor de alimentação com entropia suficiente, como uma fonte de entropia a nível de sistema.

+ +

Sintaxe

+ +
cryptoObj.getRandomValues(typedArray);
+ +

Parâmetros

+ +
+
typedArray
+
É uma {{jsxref("TypedArray")}} de números inteiros, que pode ser {{jsxref("Int8Array")}}, {{jsxref("Uint8Array")}}, {{jsxref("Uint16Array")}}, {{jsxref("Int32Array")}}, ou {{jsxref("Uint32Array")}}. Todos os elementos no array serão sobrescristos com números randômicos.
+
+ +

Exceções

+ + + +

Exemplo

+ +
/* assumindo que window.crypto.getRandomValues está disponível */
+
+var array = new Uint32Array(10);
+window.crypto.getRandomValues(array);
+
+console.log("Seus números da sorte são:");
+for (var i = 0; i < array.length; i++) {
+    console.log(array[i]);
+}
+
+ +

Especificação

+ + + + + + + + + + + + + + +
EspecificaçãoEstadoComentário
{{SpecName('Web Crypto API', '#RandomSource-method-getRandomValues')}}{{Spec2('Web Crypto API')}}Definição inicial
+ + + +

{{ CompatibilityTable() }}

+ +
+ + + + + + + + + + + + + + + + + + + +
FeatureChromeFirefox (Gecko)Internet ExplorerOperaSafari
Basic support11.0 {{ webkitbug("22049") }}21.011.015.03.1
+
+ +
+ + + + + + + + + + + + + + + + + + + + + +
FeatureAndroidChrome for AndroidFirefox Mobile (Gecko)IE MobileOpera MobileSafari Mobile
Basic support{{ CompatNo() }}23.021.011.0{{ CompatNo() }}6
+
+ +

Veja também

+ + diff --git a/files/pt-br/web/api/cryptokey/algorithm/index.html b/files/pt-br/web/api/cryptokey/algorithm/index.html deleted file mode 100644 index d80199a4ed..0000000000 --- a/files/pt-br/web/api/cryptokey/algorithm/index.html +++ /dev/null @@ -1,113 +0,0 @@ ---- -title: CryptoKey.algorithm -slug: Web/API/CryptoKey/algorithm -tags: - - API - - CryptoKey - - Propriedade - - Read-only - - Referencia - - Web Crypto API -translation_of: Web/API/CryptoKey -translation_of_original: Web/API/CryptoKey/algorithm ---- -

{{APIRef("Web Crypto API")}}

- -

A propriedade CryptoKey.algorithm de apenas leitura é um valor opaco contendo todas as informações sobre o algoritmo relacionado à key.

- -

Implementações diferentes tem diferentes tipos de valores opacos para os mesmos: tal objeto não pode ser compartilhado.

- -

Sintaxe

- -
result = key.algorithm
-
- -

Valor de retorno

- - - -

Especificações

- - - - - - - - - - - - - - -
EspecificaçãoStatusComentário
{{ SpecName('Web Crypto API', '#dfn-CryptoKey-algorithm', 'CryptoKey.algorithm') }}{{ Spec2('Web Crypto API') }}Definição inicial.
- -

Compatibilidade de Browser

- -

{{ CompatibilityTable() }}

- -
- - - - - - - - - - - - - - - - - - - - - -
CaracterísticaChromeEdgeFirefox (Gecko)Internet ExplorerOperaSafari
Suporte básico{{ CompatChrome(37) }}{{CompatVersionUnknown}}{{ CompatGeckoDesktop(34) }}{{ CompatNo() }}{{ CompatUnknown() }}{{ CompatNo }}
-
- -
- - - - - - - - - - - - - - - - - - - - - - - -
CaracterísticaAndroidChrome for AndroidEdgeFirefox Mobile (Gecko)IE MobileOpera MobileSafari Mobile
Suporte básico{{CompatVersionUnknown}}37{{CompatVersionUnknown}}{{ CompatGeckoMobile(34) }}{{ CompatNo }}{{ CompatUnknown() }}{{ CompatNo }}
-
- -

Veja também

- - - -

Dicionário

- -

"Key" = "Chave"

diff --git a/files/pt-br/web/api/cryptokey/extractable/index.html b/files/pt-br/web/api/cryptokey/extractable/index.html deleted file mode 100644 index 4fe2885cbc..0000000000 --- a/files/pt-br/web/api/cryptokey/extractable/index.html +++ /dev/null @@ -1,111 +0,0 @@ ---- -title: CryptoKey.extractable -slug: Web/API/CryptoKey/extractable -tags: - - API - - CryptoKey - - Propriedade - - Read-only - - Referencia - - Web Crypto API -translation_of: Web/API/CryptoKey -translation_of_original: Web/API/CryptoKey/extractable ---- -

{{APIRef("Web Crypto API")}}

- -

A propriedade de apenas leitura CryptoKey.extractable que indica se a key bruta do material pode ser extraída, para por exemplo arquivá-la.

- -

Sintaxe

- -
result = key.extractable
-
- -

Valor de retorno

- - - -

Especificações

- - - - - - - - - - - - - - -
EspecificaçãoStatusComentário
{{ SpecName('Web Crypto API', '#dfn-CryptoKey-extractable', 'CryptoKey.extractable') }}{{ Spec2('Web Crypto API') }}Definição inicial.
- -

Compatibilidade de Browser

- -

{{ CompatibilityTable() }}

- -
- - - - - - - - - - - - - - - - - - - - - -
CaracterísticaChromeEdgeFirefox (Gecko)Internet ExplorerOperaSafari
Suporte básico{{ CompatChrome(37) }}{{CompatVersionUnknown}}{{ CompatGeckoDesktop(34) }}{{ CompatNo() }}{{ CompatUnknown() }}{{ CompatNo }}
-
- -
- - - - - - - - - - - - - - - - - - - - - - - -
CaracterísticaAndroidChrome for AndroidEdgeFirefox Mobile (Gecko)IE MobileOpera MobileSafari Mobile
Suporte básico{{CompatVersionUnknown}}37{{CompatVersionUnknown}}{{ CompatGeckoMobile(34) }}{{ CompatNo }}{{ CompatUnknown() }}{{ CompatNo }}
-
- -

Veja também

- - - -

Dicionário

- -

"Key" = "Chave"

diff --git a/files/pt-br/web/api/cryptokey/type/index.html b/files/pt-br/web/api/cryptokey/type/index.html deleted file mode 100644 index 666de87d23..0000000000 --- a/files/pt-br/web/api/cryptokey/type/index.html +++ /dev/null @@ -1,118 +0,0 @@ ---- -title: CryptoKey.type -slug: Web/API/CryptoKey/type -tags: - - API - - Apenas Leitura - - CryptoKey - - Propriedades - - Referencia - - Web Crypto API -translation_of: Web/API/CryptoKey -translation_of_original: Web/API/CryptoKey/type ---- -

{{APIRef("Web Crypto API")}}

- -

CryptoKey.type é uma propriedade de apenas leitura que indica o tipo de key: se for uma key para um algoritmo simétrico ("secret") ou, para um algoritmo assimétrico, ("public" ou "private", dependendo do seu propósito).

- -

Sintaxe

- -
result = key.type
-
- -

Valor de retorno

- - - -

Especificações

- - - - - - - - - - - - - - -
EspecificaçõesStatusComentário
{{ SpecName('Web Crypto API', '#dfn-CryptoKey-type', 'CryptoKey.type') }}{{ Spec2('Web Crypto API') }}Definição inicial.
- -

Compatibilidade de Browser

- -

{{ CompatibilityTable() }}

- -
- - - - - - - - - - - - - - - - - - - - - -
CaracterísticasChromeEdgeFirefox (Gecko)Internet ExplorerOperaSafari
Suporte básico{{ CompatChrome(37) }}{{CompatVersionUnknown}}{{ CompatGeckoDesktop(34) }}{{ CompatNo() }}{{ CompatUnknown() }}{{ CompatNo }}
-
- -
- - - - - - - - - - - - - - - - - - - - - - - -
CaracterísticasAndroidChrome for AndroidEdgeFirefox Mobile (Gecko)IE MobileOpera MobileSafari Mobile
Suporte básico{{CompatVersionUnknown}}37{{CompatVersionUnknown}}{{ CompatGeckoMobile(34) }}{{ CompatNo }}{{ CompatUnknown() }}{{ CompatNo }}
-
- -

Veja também

- - - -

Dicionário:

- -

"Key" = "Chave"

diff --git a/files/pt-br/web/api/cryptokey/usages/index.html b/files/pt-br/web/api/cryptokey/usages/index.html deleted file mode 100644 index c74a658a32..0000000000 --- a/files/pt-br/web/api/cryptokey/usages/index.html +++ /dev/null @@ -1,124 +0,0 @@ ---- -title: CryptoKey.usages -slug: Web/API/CryptoKey/usages -tags: - - API - - CryptoKey - - Propriedade - - Read-only - - Referencia - - Web Crypto API -translation_of: Web/API/CryptoKey -translation_of_original: Web/API/CryptoKey/usages ---- -

{{APIRef("Web Crypto API")}}

- -

A propriedade de apenas leitura CryptoKey.usages é um conjunto enumerado que indica os propósitos da key.

- -

Possíveis valores são:

- - - -

Sintaxe

- -
result = key.usages
-
- -

Valor de retorno

- - - -

Especificações

- - - - - - - - - - - - - - -
EspecificaçãoStatusComentário
{{ SpecName('Web Crypto API', '#dfn-CryptoKey-usages', 'CryptoKey.usages') }}{{ Spec2('Web Crypto API') }}Definição inicial.
- -

Compatibilidade de Browser

- -

{{ CompatibilityTable() }}

- -
- - - - - - - - - - - - - - - - - - - - - -
CaracterísticaChromeEdgeFirefox (Gecko)Internet ExplorerOperaSafari
Suporte básico{{ CompatChrome(37) }}{{CompatVersionUnknown}}{{ CompatGeckoDesktop(34) }}{{ CompatNo() }}{{ CompatUnknown() }}{{ CompatNo }}
-
- -
- - - - - - - - - - - - - - - - - - - - - - - -
CaracterísticaAndroidChrome for AndroidEdgeFirefox Mobile (Gecko)IE MobileOpera MobileSafari Mobile
Suporte básico{{CompatVersionUnknown}}37{{CompatVersionUnknown}}{{ CompatGeckoMobile(34) }}{{ CompatNo }}{{ CompatUnknown() }}{{ CompatNo }}
-
- -

Veja também

- - - -

Dicionário:

- -

"Key" = "Chave"

diff --git a/files/pt-br/web/api/deviceacceleration/index.html b/files/pt-br/web/api/deviceacceleration/index.html deleted file mode 100644 index e8e5432e4a..0000000000 --- a/files/pt-br/web/api/deviceacceleration/index.html +++ /dev/null @@ -1,43 +0,0 @@ ---- -title: DeviceAcceleration -slug: Web/API/DeviceAcceleration -tags: - - API - - Experimental - - Interface -translation_of: Web/API/DeviceMotionEventAcceleration -translation_of_original: Web/API/DeviceAcceleration ---- -
{{ ApiRef("Device Orientation Events") }}{{SeeCompatTable}}
- -

Um objeto DeviceAcceleration fornece informações sobre a quantidade de aceleração que o dispositivo desempenha ao longo dos três eixos.

- -

Propriedades

- -
-
{{domxref("DeviceAcceleration.x")}} {{readonlyInline}}
-
A quantidade de aceleração ao longo do eixo X. Somente leitura.
-
{{domxref("DeviceAcceleration.y")}} {{readonlyInline}}
-
A quantidade de aceleração ao longo do eixo Y. Somente leitura.
-
{{domxref("DeviceAcceleration.z")}} {{readonlyInline}}
-
A quantidade de aceleração ao longo do eixo Z.Somente leitura.
-
- -

Especificações

- - - - - - - - - - - - - - - - -
EspecificaçõesStatusComentario
{{SpecName("Device Orientation", "#device_acceleration", "DeviceAcceleration")}}{{Spec2("Device Orientation")}}Definição inicial
diff --git a/files/pt-br/web/api/devicemotioneventacceleration/index.html b/files/pt-br/web/api/devicemotioneventacceleration/index.html new file mode 100644 index 0000000000..e8e5432e4a --- /dev/null +++ b/files/pt-br/web/api/devicemotioneventacceleration/index.html @@ -0,0 +1,43 @@ +--- +title: DeviceAcceleration +slug: Web/API/DeviceAcceleration +tags: + - API + - Experimental + - Interface +translation_of: Web/API/DeviceMotionEventAcceleration +translation_of_original: Web/API/DeviceAcceleration +--- +
{{ ApiRef("Device Orientation Events") }}{{SeeCompatTable}}
+ +

Um objeto DeviceAcceleration fornece informações sobre a quantidade de aceleração que o dispositivo desempenha ao longo dos três eixos.

+ +

Propriedades

+ +
+
{{domxref("DeviceAcceleration.x")}} {{readonlyInline}}
+
A quantidade de aceleração ao longo do eixo X. Somente leitura.
+
{{domxref("DeviceAcceleration.y")}} {{readonlyInline}}
+
A quantidade de aceleração ao longo do eixo Y. Somente leitura.
+
{{domxref("DeviceAcceleration.z")}} {{readonlyInline}}
+
A quantidade de aceleração ao longo do eixo Z.Somente leitura.
+
+ +

Especificações

+ + + + + + + + + + + + + + + + +
EspecificaçõesStatusComentario
{{SpecName("Device Orientation", "#device_acceleration", "DeviceAcceleration")}}{{Spec2("Device Orientation")}}Definição inicial
diff --git a/files/pt-br/web/api/devicemotioneventrotationrate/index.html b/files/pt-br/web/api/devicemotioneventrotationrate/index.html new file mode 100644 index 0000000000..872b3c6f25 --- /dev/null +++ b/files/pt-br/web/api/devicemotioneventrotationrate/index.html @@ -0,0 +1,93 @@ +--- +title: DeviceRotationRate +slug: Web/API/DeviceRotationRate +translation_of: Web/API/DeviceMotionEventRotationRate +translation_of_original: Web/API/DeviceRotationRate +--- +

{{ ApiRef("Device Orientation Events") }} {{SeeCompatTable}}

+ +

Um objeto DeviceRotationRate fornece informações sobre a taxa na qual o dispositivo está girando em torno de todos os três eixos.

+ +

Properties

+ +
+
{{ domxref("DeviceRotationRate.alpha") }} {{readonlyInline}}
+
A quantidade de rotação em torno do eixo Z, em graus por segundo.
+
{{ domxref("DeviceRotationRate.beta") }} {{readonlyInline}}
+
A quantidade de rotação em torno do eixo Y, em graus por segundo
+
{{ domxref("DeviceRotationRate.gamma") }} {{readonlyInline}}
+
A quantidade de rotação em torno do eixo X, em graus por segundo
+
+ +

Especificações

+ + + + + + + + + + + + + + + + +
EspecificacõesStatusComentario
{{SpecName('Device Orientation')}}{{Spec2('Device Orientation')}}Definição inicial.
+ + + +

{{CompatibilityTable}}

+ +
+ + + + + + + + + + + + + + + + + + + + + +
CaracterísticasChromeEdgeFirefox (Gecko)Internet ExplorerOperaSafari (WebKit)
Suporte básico{{CompatUnknown}}{{CompatVersionUnknown}}{{CompatUnknown}}{{CompatUnknown}}{{CompatUnknown}}{{CompatUnknown}}
+
+ +
+ + + + + + + + + + + + + + + + + + + + + +
CaracterísticasAndroidEdgeFirefox Mobile (Gecko)IE MobileOpera MobileSafari Mobile
Suporte básico{{CompatUnknown}}{{CompatVersionUnknown}}{{CompatUnknown}}{{CompatUnknown}}{{CompatUnknown}}{{CompatUnknown}}
+
diff --git a/files/pt-br/web/api/devicerotationrate/index.html b/files/pt-br/web/api/devicerotationrate/index.html deleted file mode 100644 index 872b3c6f25..0000000000 --- a/files/pt-br/web/api/devicerotationrate/index.html +++ /dev/null @@ -1,93 +0,0 @@ ---- -title: DeviceRotationRate -slug: Web/API/DeviceRotationRate -translation_of: Web/API/DeviceMotionEventRotationRate -translation_of_original: Web/API/DeviceRotationRate ---- -

{{ ApiRef("Device Orientation Events") }} {{SeeCompatTable}}

- -

Um objeto DeviceRotationRate fornece informações sobre a taxa na qual o dispositivo está girando em torno de todos os três eixos.

- -

Properties

- -
-
{{ domxref("DeviceRotationRate.alpha") }} {{readonlyInline}}
-
A quantidade de rotação em torno do eixo Z, em graus por segundo.
-
{{ domxref("DeviceRotationRate.beta") }} {{readonlyInline}}
-
A quantidade de rotação em torno do eixo Y, em graus por segundo
-
{{ domxref("DeviceRotationRate.gamma") }} {{readonlyInline}}
-
A quantidade de rotação em torno do eixo X, em graus por segundo
-
- -

Especificações

- - - - - - - - - - - - - - - - -
EspecificacõesStatusComentario
{{SpecName('Device Orientation')}}{{Spec2('Device Orientation')}}Definição inicial.
- - - -

{{CompatibilityTable}}

- -
- - - - - - - - - - - - - - - - - - - - - -
CaracterísticasChromeEdgeFirefox (Gecko)Internet ExplorerOperaSafari (WebKit)
Suporte básico{{CompatUnknown}}{{CompatVersionUnknown}}{{CompatUnknown}}{{CompatUnknown}}{{CompatUnknown}}{{CompatUnknown}}
-
- -
- - - - - - - - - - - - - - - - - - - - - -
CaracterísticasAndroidEdgeFirefox Mobile (Gecko)IE MobileOpera MobileSafari Mobile
Suporte básico{{CompatUnknown}}{{CompatVersionUnknown}}{{CompatUnknown}}{{CompatUnknown}}{{CompatUnknown}}{{CompatUnknown}}
-
diff --git a/files/pt-br/web/api/document/activeelement/index.html b/files/pt-br/web/api/document/activeelement/index.html deleted file mode 100644 index ca10f98461..0000000000 --- a/files/pt-br/web/api/document/activeelement/index.html +++ /dev/null @@ -1,165 +0,0 @@ ---- -title: Document.activeElement -slug: Web/API/Document/activeElement -tags: - - API - - Document - - HTML DOM - - Property - - Reference -translation_of: Web/API/DocumentOrShadowRoot/activeElement -translation_of_original: Web/API/Document/activeElement ---- -

{{APIRef("DOM")}}

- -

Retorna o {{ domxref("Element", "elemento") }} atualmente em foco, ou seja, o elemento que receberá os eventos do teclado caso o usuário digite algo. Esse atributo é somente-leitura.

- -

Geralmente retorna um {{ HTMLElement("input") }} ou {{ HTMLElement("textarea") }}, caso esteja com uma seleção de texto ativa. Caso esteja, pode obter mais informações sobre a seleção utilizando as propriedades selectionStartselectionEnd. Caso o elemento em foco seja um {{ HTMLElement("select") }}(menu) ou {{ HTMLElement("input") }} do tipo button, checkbox ou radio.

- -
Note: No Mac, elementos que nao sejam campos de texto geralmente não recebem foco.
- -

Normalmente o usuário pode navegar entre os elementos que pode receber foco na página com o uso da tecla tab e ativar estes elementos com a tecla espaço (apertar um botão ou selecionar uma opção).

- -

Não confunda foco com uma seleção de texto no documento, que consiste em sua maioria de nódos de texto estáticos. Veja {{ domxref("window.getSelection()") }}.

- -

Quando não há nada selecionado, o activeElement da página é o {{ HTMLElement("body") }} ou null

- -
-

Este atributo é parte da seção "Em desenvolvimento" da especificação do HTML 5.

-
- -

Sintaxe

- -
var curElement = document.activeElement;
-
- -

Exemplo

- -
<!DOCTYPE HTML>
-<html>
-<head>
-    <script type="text/javascript" charset="utf-8">
-    function init() {
-
-        function onMouseUp(e) {
-            console.log(e);
-            var outputElement = document.getElementById('output-element');
-            var outputText = document.getElementById('output-text');
-            var selectedTextArea = document.activeElement;
-            var selection = selectedTextArea.value.substring(
-            selectedTextArea.selectionStart, selectedTextArea.selectionEnd);
-            outputElement.innerHTML = selectedTextArea.id;
-            outputText.innerHTML = selection;
-        }
-
-        document.getElementById("ta-example-one").addEventListener("mouseup", onMouseUp, false);
-        document.getElementById("ta-example-two").addEventListener("mouseup", onMouseUp, false);
-    }
-    </script>
-</head>
-<body onload="init()">
-<div>
-    Select some text from one of the Textareas below:
-</div>
-<form id="frm-example" action="#" accept-charset="utf-8">
-<textarea name="ta-example-one" id="ta-example-one" rows="8" cols="40">
-This is Textarea Example One:
-Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec tincidunt, lorem a porttitor molestie, odio nibh iaculis libero, et accumsan nunc orci eu dui.
-</textarea>
-<textarea name="ta-example-two" id="ta-example-two" rows="8" cols="40">
-This is Textarea Example Two:
-Fusce ullamcorper, nisl ac porttitor adipiscing, urna orci egestas libero, ut accumsan orci lacus laoreet diam. Morbi sed euismod diam.
-</textarea>
-</form>
-Active Element Id: <span id="output-element"></span><br/>
-Selected Text: <span id="output-text"></span>
-
-</body>
-</html>
-
- -

View on JSFiddle

- -

Notas

- -

Originalmente apresentada como extensão DOM proprietária no Internet Explorer 4, esta propriedade também é suportada no Opera e Safari (versão 4 ou maior)

- -

Especificações

- - - - - - - - - - - - - - - - -
SpecificationStatusComment
{{SpecName('HTML WHATWG', 'interaction.html#dom-document-activeelement', 'activeElement')}}{{Spec2('HTML WHATWG')}} 
- -

Compatibilidade nos navegadores

- -

{{ CompatibilityTable() }}

- -
- - - - - - - - - - - - - - - - - - - -
FeatureChromeFirefox (Gecko)Internet ExplorerOperaSafari (WebKit)
Basic support23.04 [1]9.64.0
-
- -
- - - - - - - - - - - - - - - - - - - -
FeatureAndroidFirefox Mobile (Gecko)IE PhoneOpera MobileSafari Mobile
Basic support{{ CompatUnknown() }}{{ CompatUnknown() }}{{ CompatUnknown() }}{{ CompatUnknown() }}{{ CompatUnknown() }}
-
- -

[1]: O IE9 tem um bug que ao tentar acessar o activeElement do {{domxref("window.parent")}} {{domxref("Document")}} de um {{HTMLElement("iframe")}}(i.e. parent.document.activeElement) é lançado um erro

- -

Eventos relacionados

- - diff --git a/files/pt-br/web/api/document/elementfrompoint/index.html b/files/pt-br/web/api/document/elementfrompoint/index.html deleted file mode 100644 index c64d67dd08..0000000000 --- a/files/pt-br/web/api/document/elementfrompoint/index.html +++ /dev/null @@ -1,133 +0,0 @@ ---- -title: Document.elementFromPoint() -slug: Web/API/Document/elementFromPoint -tags: - - API - - CSSOM View - - Method - - NeedsMarkupWork - - NeedsMobileBrowserCompatibility - - Reference -translation_of: Web/API/DocumentOrShadowRoot/elementFromPoint -translation_of_original: Web/API/Document/elementFromPoint ---- -
{{APIRef("DOM")}}
- -

O método elementFromPoint() da interface {{domxref("Document")}} retorna o elemento de maior nível nas coordenadas especificadas.

- -

Se o elemento no ponto especificado pertencer à outro documento (por exemplo, um subdocumento em um iframe), será retornado o pai do subdocumento (o próprio iframe). Se o elemento em determinado ponto for anônimo ou for um conteudo gerado por XBL, como por exemplo barras de scroll de caixas de texto, então será retornado o primeiro elemento pai, não-anônimo (por exemplo, a própria caixa de texto).

- -

Se o ponto especificado estiver fora dos limites visíveis do documento ou tiver uma coordenada negativa, o resultado é null.

- -

Se você precisa encontrar uma posição específica dentro do elemento, use {{domxref("Document.caretPositionFromPoint()")}}.

- -

{{Note("Chamados por documentos XUL devem esperar até o evento onload ser acionado antes de chamar este método.")}}

- -

Sintaxe

- -
var element = document.elementFromPoint(x, y);
- -

Parâmetros

- -
-
x
-
Uma posição horizontal dentro do viewport atual.
-
y
-
Uma position vertical dentro do viewport atual.
-
- -

Valor retornado

- -

O objeto de nível mais alto {{domxref("Element")}} dentro das coordenadas declaradas.

- -

Exemplo

- -
<!DOCTYPE html>
-<html lang="en">
-<head>
-<title>exemplo de elementFromPoint</title>
-
-<script>
-function changeColor(newColor) {
-  elem = document.elementFromPoint(2, 2);
-  elem.style.color = newColor;
-}
-</script>
-</head>
-
-<body>
-<p id="para1">Algum texto aqui</p>
-<button onclick="changeColor('blue');">azul</button>
-<button onclick="changeColor('red');">vermelho</button>
-</body>
-</html>
-
- -

Especificações

- - - - - - - - - - - - - - -
EspecificaçãoStatusComment
{{SpecName('CSSOM View', '#dom-document-elementfrompoint', 'elementFromPoint')}}{{Spec2('CSSOM View')}}Definição Inicial.
- -

Compatibilidade entre navegadores

- -

{{CompatibilityTable}}

- -
- - - - - - - - - - - - - - - - - - - -
FuncionalidadeChromeFirefox (Gecko)Internet ExplorerOperaSafari
Basic support {{CompatChrome(4.0)}}35.510.50{{CompatVersionUnknown}}
-
- -
- - - - - - - - - - - - - - - - - - - - - -
FuncionalidadeAndroidChrome para AndroidFirefox Mobile (Gecko)IE MobileOpera MobileSafari Mobile
Basic support{{CompatUnknown}}{{CompatVersionUnknown}}{{CompatUnknown}}{{CompatUnknown}}{{CompatUnknown}}{{CompatUnknown}}
-
diff --git a/files/pt-br/web/api/document/elementoregistrado/index.html b/files/pt-br/web/api/document/elementoregistrado/index.html deleted file mode 100644 index bff318b3a9..0000000000 --- a/files/pt-br/web/api/document/elementoregistrado/index.html +++ /dev/null @@ -1,132 +0,0 @@ ---- -title: Document.registerElement() -slug: Web/API/Document/ElementoRegistrado -tags: - - DOM - - Document.registerElement() - - ELEMENTO DOM - - Web Components - - registerElement -translation_of: Web/API/Document/registerElement ---- -

{{APIRef("DOM")}}

- -
-

Note:document.registerElement() está depreciado em favor do customElements.define().

-
- -

O método document.registerElement() registra um novo elemento personalizado no browser e returna um construtor para o novo elemento.

- -
-

Nota: Esta é uma tecnologia experimental. O browser você precisa usar suporte à componentes web. Veja Habilitando componentes web no Firefox.

-
- -

Sintaxe

- -
var constructor = document.registerElement(tag-name, options);
- -

Parâmetros

- -
-
tag-name
-
O nome do elemento personalizado. O nome precisa conter um dash (-), por exemplo minha-tag.
-
Opções{{optional_inline}}
-
-

Um projeto com propriedades protótipo como base para o elememento personalizado, e extends, uma existente tag para estender. Ambos são opcionais.

-
-
- -

Exemplo

- -

Aqui é um exemplo muito simples:

- -
var Mytag = document.registerElement('my-tag');
-
- -

Agora as novas tags são registradas no browser.

- -

Uma variável Mytag tem um construtor que você pode usar para criar um elemento my-tag nos documentos como seguem:

- -
document.body.appendChild(new Mytag());
- -

Isto insere um elemento vazio my-tag que será visível se você usar o browser para desenvolvedores. Isto não será visível se você usar a ferramenta visão da capacidade do código fonte do browser. E isto não será visível no browser a menos que você adicione alguns conteúdos para a tag. Aqui está um caminho para adicionar conteúdo a nova tag:

- -
var mytag = document.getElementsByTagName("my-tag")[0];
-mytag.textContent = "I am a my-tag element.";
- -

Especificações

- - - - - - - - - - - - - - -
EspecificaçãoEstadoComentário
{{SpecName('Custom Elements')}}{{Spec2('Custom Elements')}} -

definição inicial

-
- -

Compatibilidade do Browser

- -

{{CompatibilityTable}}

- -
- - - - - - - - - - - - - - - - - - - -
CaracterísticaChromeFirefox (Gecko)Internet ExplorerOperaSafari
Suporte básico3531[1]{{CompatNo}}25{{CompatNo}}
-
- -
- - - - - - - - - - - - - - - - - - - -
FeatureAndroidFirefox Mobile (Gecko)IE MobileOpera MobileSafari Mobile
Suporte básico4.4.431[1]{{CompatNo}}25{{CompatNo}}
-
- -

[1] Esta API é implementada uma preferência

- -

Veja também

- - diff --git a/files/pt-br/web/api/document/getselection/index.html b/files/pt-br/web/api/document/getselection/index.html deleted file mode 100644 index 2f52375799..0000000000 --- a/files/pt-br/web/api/document/getselection/index.html +++ /dev/null @@ -1,9 +0,0 @@ ---- -title: Document.getSelection() -slug: Web/API/Document/getSelection -translation_of: Web/API/DocumentOrShadowRoot/getSelection -translation_of_original: Web/API/Document/getSelection ---- -

{{APIRef("DOM")}}

- -

Esse método funciona de forma idêntica ao método {{domxref("Window.getSelection()")}};  Ele retorna um objeto {{domxref("Selection")}} representando o texto atualmente selecionado no documento.

diff --git a/files/pt-br/web/api/document/readystatechange_event/index.html b/files/pt-br/web/api/document/readystatechange_event/index.html new file mode 100644 index 0000000000..185350cb54 --- /dev/null +++ b/files/pt-br/web/api/document/readystatechange_event/index.html @@ -0,0 +1,83 @@ +--- +title: readystatechange +slug: Web/Events/readystatechange +translation_of: Web/API/Document/readystatechange_event +--- +

{{ApiRef}}

+ +

O evento readystatechange é ativado quando o atributo readyState de um documento é alterado.

+ +

Informações gerais

+ +
+
Especificação
+
HTML5
+
Interface
+
Event
+
Propaga
+
Não
+
Cancelável
+
Não
+
Alvo
+
Document
+
Ação Padrão
+
Nenhuma.
+
+ +

Propriedades

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
PropertyTypeDescription
target {{readonlyInline}}{{domxref("EventTarget")}}The event target (the topmost target in the DOM tree).
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.
+ +

Exemplo

+ +
// alternativa ao DOMContentLoaded
+document.onreadystatechange = function () {
+    if (document.readyState == "interactive") {
+        initApplication();
+    }
+}
+
+ +

Compatibilidade entre Navegadores

+ +

Este evento tem sido suportado pelo Internet Explorer há várias versões, e pode ser usada como uma alternativa para o evento DOMContentLoaded (veja a seção cross-browser fallback).

+ +

Eventos Relacionados

+ + diff --git a/files/pt-br/web/api/document/registerelement/index.html b/files/pt-br/web/api/document/registerelement/index.html new file mode 100644 index 0000000000..bff318b3a9 --- /dev/null +++ b/files/pt-br/web/api/document/registerelement/index.html @@ -0,0 +1,132 @@ +--- +title: Document.registerElement() +slug: Web/API/Document/ElementoRegistrado +tags: + - DOM + - Document.registerElement() + - ELEMENTO DOM + - Web Components + - registerElement +translation_of: Web/API/Document/registerElement +--- +

{{APIRef("DOM")}}

+ +
+

Note:document.registerElement() está depreciado em favor do customElements.define().

+
+ +

O método document.registerElement() registra um novo elemento personalizado no browser e returna um construtor para o novo elemento.

+ +
+

Nota: Esta é uma tecnologia experimental. O browser você precisa usar suporte à componentes web. Veja Habilitando componentes web no Firefox.

+
+ +

Sintaxe

+ +
var constructor = document.registerElement(tag-name, options);
+ +

Parâmetros

+ +
+
tag-name
+
O nome do elemento personalizado. O nome precisa conter um dash (-), por exemplo minha-tag.
+
Opções{{optional_inline}}
+
+

Um projeto com propriedades protótipo como base para o elememento personalizado, e extends, uma existente tag para estender. Ambos são opcionais.

+
+
+ +

Exemplo

+ +

Aqui é um exemplo muito simples:

+ +
var Mytag = document.registerElement('my-tag');
+
+ +

Agora as novas tags são registradas no browser.

+ +

Uma variável Mytag tem um construtor que você pode usar para criar um elemento my-tag nos documentos como seguem:

+ +
document.body.appendChild(new Mytag());
+ +

Isto insere um elemento vazio my-tag que será visível se você usar o browser para desenvolvedores. Isto não será visível se você usar a ferramenta visão da capacidade do código fonte do browser. E isto não será visível no browser a menos que você adicione alguns conteúdos para a tag. Aqui está um caminho para adicionar conteúdo a nova tag:

+ +
var mytag = document.getElementsByTagName("my-tag")[0];
+mytag.textContent = "I am a my-tag element.";
+ +

Especificações

+ + + + + + + + + + + + + + +
EspecificaçãoEstadoComentário
{{SpecName('Custom Elements')}}{{Spec2('Custom Elements')}} +

definição inicial

+
+ +

Compatibilidade do Browser

+ +

{{CompatibilityTable}}

+ +
+ + + + + + + + + + + + + + + + + + + +
CaracterísticaChromeFirefox (Gecko)Internet ExplorerOperaSafari
Suporte básico3531[1]{{CompatNo}}25{{CompatNo}}
+
+ +
+ + + + + + + + + + + + + + + + + + + +
FeatureAndroidFirefox Mobile (Gecko)IE MobileOpera MobileSafari Mobile
Suporte básico4.4.431[1]{{CompatNo}}25{{CompatNo}}
+
+ +

[1] Esta API é implementada uma preferência

+ +

Veja também

+ + diff --git a/files/pt-br/web/api/document_object_model/events/index.html b/files/pt-br/web/api/document_object_model/events/index.html new file mode 100644 index 0000000000..4d04915450 --- /dev/null +++ b/files/pt-br/web/api/document_object_model/events/index.html @@ -0,0 +1,82 @@ +--- +title: Events and the DOM +slug: DOM/Referencia_do_DOM/Events +translation_of: Web/API/Document_Object_Model/Events +--- +
{{DefaultAPISidebar("DOM")}}
+ +

Introdução

+ +

Este capítulo descreve o Modelo de Eventos do DOM. A interface de Eventos é descrita, assim como a interface para registro de eventos em nodes(ou nódulos) no DOM, e event listeners, e vários outros exemplos que mostram como diversas interfaces de evento se relacionam uma com a outraThere is an excellent diagram that clearly explains the three phases of event flow through the DOM in the DOM Level 3 Events draft.

+ +

Existe um excelente diagrama que explica claramente as três fases do percurso de eventos no DOM em DOM Level 3 Events draft.

+ +

Registrando event listeners

+ +

Existem 3 formas de registrar uma manipulação de eventos para um elemento DOM.

+ +

{{domxref("EventTarget.addEventListener")}}

+ +
// Assuming myButton is a button element
+myButton.addEventListener('click', greet, false)
+function greet(event){
+    // print and have a look at the event object
+    // always print arguments in case of overlooking any other arguments
+    console.log('greet:', arguments)
+    alert('hello world')
+}
+
+ +

Este é o método que você deve usar em páginas web modernas.

+ +
+

Nota: Internet Explorer 6–8 não suportavam este método, oferecendo uma API {{domxref("EventTarget.attachEvent")}} parecida no lugar. Para compatibilidade cross-browser, use uma das muitas bibliotecas JavaScript disponíveis.

+
+ +

Mais detalhes podem encontrada na página de referência {{domxref("EventTarget.addEventListener")}}.

+ +

atributo HTML

+ +
<button onclick="alert('Hello world!')">
+
+ +

O código JavaScript no atributo é passado para o objeto Evento através do parâmetro event . O valor return é tratado de uma maneira especial, descrita na especificação HTML.

+ +
+

Cuidado: Este método deve ser evitado! Ele suja a marcação, e a faz menos legível. Preocupações com o conteúdo/estrutura e comportamento não são bem separadas, tornando mais díficil encontrar um bug.

+
+ +

DOM element properties

+ +
// Supondo que myButton seja um elemento button
+myButton.onclick = function(event){alert('Hello world')}
+
+ +

A função pode ser definida para receber um parâmetro event . O valor return é tratado de maneira especial, descrita na especificação HTML.

+ +

O problema deste método é que apenas uma manipulação pode ser definida por elemento e por evento.

+ +

Acessando interfaces doEvento

+ +

Manipulações do Evento podem ser atribuídas a vários objetos (incluindo elementos DOM, documentos, o {{domxref("window")}} object, etc.). Quando um evento ocorre, o objeto do evento é criado e passado sequencialmente ao event listeners.

+ +

A interface {{domxref("Event")}} é acessível de dentro da função manipuladora, atrás do objeto evento passado como primeiro argumento. O seguinte exemplo simples mostra como um objeto evento é passado á função manipuladora do evento, e pode usado de dentro de tal função.

+ +
function print(evt) {
+  // the evt parameter is automatically assigned the event object
+  // take care of the differences between console.log & alert
+  console.log('print:', evt)
+  alert(evt)
+}
+// any function should have an appropriate name, that's what called semantic
+table_el.onclick = print
+
+ + + + diff --git a/files/pt-br/web/api/document_object_model/examples/index.html b/files/pt-br/web/api/document_object_model/examples/index.html new file mode 100644 index 0000000000..87ec3601e2 --- /dev/null +++ b/files/pt-br/web/api/document_object_model/examples/index.html @@ -0,0 +1,376 @@ +--- +title: Examples of web and XML development using the DOM +slug: DOM/Referencia_do_DOM/Examples +translation_of: Web/API/Document_Object_Model/Examples +--- +

Este capítulo fornece exemplos mais longos de desenvolvimento de Web e XML usando o DOM. Sempre que possível, os exemplos usam APIs, truques e padrões comuns no JavaScript para manipular o objeto de documento.

+ +

Exemplo 1: altura e largura

+ +

O exemplo a seguir mostra o uso das propriedades de altura e largura ao lado de imagens de dimensões variáveis:

+ +
<!DOCTYPE html>
+<html lang="en">
+<head>
+<title>width/height example</title>
+<script>
+function init() {
+  var arrImages = new Array(3);
+
+  arrImages[0] = document.getElementById("image1");
+  arrImages[1] = document.getElementById("image2");
+  arrImages[2] = document.getElementById("image3");
+
+  var objOutput = document.getElementById("output");
+  var strHtml = "<ul>";
+
+  for (var i = 0; i < arrImages.length; i++) {
+    strHtml += "<li>image" + (i+1) +
+            ": height=" + arrImages[i].height +
+            ", width=" + arrImages[i].width +
+            ", style.height=" + arrImages[i].style.height +
+            ", style.width=" + arrImages[i].style.width +
+            "<\/li>";
+  }
+
+  strHtml += "<\/ul>";
+
+  objOutput.innerHTML = strHtml;
+}
+</script>
+</head>
+<body onload="init();">
+
+<p>Image 1: no height, width, or style
+  <img id="image1" src="http://www.mozilla.org/images/mozilla-banner.gif">
+</p>
+
+<p>Image 2: height="50", width="500", but no style
+  <img id="image2"
+       src="http://www.mozilla.org/images/mozilla-banner.gif"
+       height="50" width="500">
+</p>
+
+<p>Image 3: no height, width, but style="height: 50px; width: 500px;"
+  <img id="image3"
+       src="http://www.mozilla.org/images/mozilla-banner.gif"
+       style="height: 50px; width: 500px;">
+</p>
+
+<div id="output"> </div>
+</body>
+</html>
+
+ +

Exemplo 2: Atributos de Imagem

+ +
<!DOCTYPE html>
+<html lang="en">
+<head>
+<title>Modifying an image border</title>
+
+<script>
+function setBorderWidth(width) {
+  document.getElementById("img1").style.borderWidth = width + "px";
+}
+</script>
+</head>
+
+<body>
+<p>
+  <img id="img1"
+       src="image1.gif"
+       style="border: 5px solid green;"
+       width="100" height="100" alt="border test">
+</p>
+
+<form name="FormName">
+  <input type="button" value="Make border 20px-wide" onclick="setBorderWidth(20);" />
+  <input type="button" value="Make border 5px-wide"  onclick="setBorderWidth(5);" />
+</form>
+
+</body>
+</html>
+
+ +

Exemplo 3: Manipulando Estilos

+ +

Neste exemplo simples, algumas propriedades de estilo básicas de um elemento de parágrafo HTML são acessadas usando o objeto de estilo no elemento e as propriedades de estilo CSS do objeto, que podem ser recuperadas e definidas a partir do DOM. Neste caso, você está manipulando os estilos individuais diretamente. No próximo exemplo (veja Exemplo 4), você pode usar folhas de estilo e suas regras para alterar estilos para documentos inteiros.

+ +
<!DOCTYPE html>
+<html lang="en">
+<head>
+<title>Changing color and font-size example</title>
+
+<script>
+function changeText() {
+  var p = document.getElementById("pid");
+
+  p.style.color = "blue"
+  p.style.fontSize = "18pt"
+}
+</script>
+</head>
+<body>
+
+<p id="pid" onclick="window.location.href = 'http://www.cnn.com/';">linker</p>
+
+<form>
+  <p><input value="rec" type="button" onclick="changeText();" /></p>
+</form>
+
+</body>
+</html>
+
+ +

Exemplo 4: Usando folhas de estilo

+ +

A propriedade styleSheets no objeto de documento retorna uma lista das folhas de estilo que foram carregadas nesse documento. Você pode acessar essas folhas de estilo e suas regras individualmente usando os objetos stylesheet, style e CSSRule, como demonstrado neste exemplo, que imprime todos os seletores de regras de estilo para o console.

+ +
var ss = document.styleSheets;
+
+for(var i = 0; i < ss.length; i++) {
+  for(var j = 0; j < ss[i].cssRules.length; j++) {
+    dump( ss[i].cssRules[j].selectorText + "\n" );
+  }
+}
+ +

Para um documento com uma única folha de estilo na qual as três regras a seguir são definidas:

+ +
body { background-color: darkblue; }
+p { font-face: Arial; font-size: 10pt; margin-left: .125in; }
+#lumpy { display: none; }
+
+ +

Este script produz o seguinte:

+ +
BODY
+P
+#LUMPY
+
+ +

 

+ +

Exemplo 5: Propagação de Eventos

+ +

Este exemplo demonstra como eventos disparar e são tratados no DOM de uma forma muito simples. Quando o corpo deste documento HTML é carregado, um ouvinte de evento é registrado com a linha superior da tabela. O ouvinte de eventos processa o evento executando a função stopEvent, que altera o valor na célula inferior da tabela.

+ +

No entanto, stopEvent também chama um método de objeto de evento, {{domxref ("event.stopPropagation")}}, que mantém o evento de borbulhar mais para cima no DOM. Observe que a própria tabela possui um manipulador de eventos {{domxref ("element.onclick", "onclick")}} que deve exibir uma mensagem quando a tabela é clicada. Mas o método stopEvent interrompeu a propagação e, portanto, após a atualização dos dados na tabela, a fase de evento é efetivamente encerrada e uma caixa de alerta é exibida para confirmar isso.

+ +
<!DOCTYPE html>
+<html lang="en">
+<head>
+<title>Event Propagation</title>
+
+<style>
+#t-daddy { border: 1px solid red }
+#c1 { background-color: pink; }
+</style>
+
+<script>
+function stopEvent(ev) {
+  c2 = document.getElementById("c2");
+  c2.innerHTML = "hello";
+
+  // this ought to keep t-daddy from getting the click.
+  ev.stopPropagation();
+  alert("event propagation halted.");
+}
+
+function load() {
+  elem = document.getElementById("tbl1");
+  elem.addEventListener("click", stopEvent, false);
+}
+</script>
+</head>
+
+<body onload="load();">
+
+<table id="t-daddy" onclick="alert('hi');">
+  <tr id="tbl1">
+    <td id="c1">one</td>
+  </tr>
+  <tr>
+    <td id="c2">two</td>
+  </tr>
+</table>
+
+</body>
+</html>
+
+ +

Exemplo 6: getComputedStyle

+ +

Este exemplo demonstra como o método {{domxref ("window.getComputedStyle")}} pode ser usado para obter os estilos de um elemento que não são definidos usando o atributo de estilo ou com JavaScript (por exemplo, elt.style.backgroundColor = "rgb (173, 216, 230) "). Estes últimos tipos de estilos podem ser recuperados com a propriedade {{domxref ("element.style", "elt.style")}} mais direta, cujas propriedades estão listadas na Lista de Propriedades do DOM CSS.

+ +

GetComputedStyle() retorna um objeto ComputedCSSStyleDeclaration, cujas propriedades de estilo individuais podem ser referenciadas com o método getPropertyValue() desse objeto, como mostra o seguinte exemplo de documento.

+ +
<!DOCTYPE html>
+<html lang="en">
+<head>
+
+<title>getComputedStyle example</title>
+
+<script>
+function cStyles() {
+  var RefDiv = document.getElementById("d1");
+  var txtHeight = document.getElementById("t1");
+  var h_style = document.defaultView.getComputedStyle(RefDiv, null).getPropertyValue("height");
+
+  txtHeight.value = h_style;
+
+  var txtWidth = document.getElementById("t2");
+  var w_style = document.defaultView.getComputedStyle(RefDiv, null).getPropertyValue("width");
+
+  txtWidth.value = w_style;
+
+  var txtBackgroundColor = document.getElementById("t3");
+  var b_style = document.defaultView.getComputedStyle(RefDiv, null).getPropertyValue("background-color");
+
+  txtBackgroundColor.value = b_style;
+}
+</script>
+
+<style>
+#d1 {
+  margin-left: 10px;
+  background-color: rgb(173, 216, 230);
+  height: 20px;
+  max-width: 20px;
+}
+</style>
+
+</head>
+
+<body>
+
+<div id="d1">&nbsp;</div>
+
+<form action="">
+  <p>
+    <button type="button" onclick="cStyles();">getComputedStyle</button>
+    height<input id="t1" type="text" value="1" />
+    max-width<input id="t2" type="text" value="2" />
+    bg-color<input id="t3" type="text" value="3" />
+  </p>
+</form>
+
+</body>
+</html>
+
+ +

Exemplo 7: Exibindo Propriedades de Evento do Objeto

+ +

Este exemplo usa métodos DOM para exibir todas as propriedades do objeto {{domxref ("window.onload")}} {{domxref ("evento")}} e seus valores em uma tabela. Ele também mostra uma técnica útil de usar um laço para iterar sobre as propriedades de um objeto para obter seus valores.

+ +

As propriedades dos objetos de evento diferem muito entre os navegadores, o WHATWG DOM Standard lista as propriedades padrão, porém muitos navegadores estenderam muito esses valores.

+ +

Coloque o seguinte código em um arquivo de texto em branco e carregue-o em uma variedade de navegadores, você ficará surpreso com o número diferente e nomes de propriedades. Você também pode querer adicionar alguns elementos na página e chamar essa função de manipuladores de eventos diferentes.

+ +
<!DOCTYPE html>
+<html lang="en">
+<head>
+<meta charset="utf-8"/>
+<title>Show Event properties</title>
+
+<style>
+table { border-collapse: collapse; }
+thead { font-weight: bold; }
+td { padding: 2px 10px 2px 10px; }
+
+.odd { background-color: #efdfef; }
+.even { background-color: #ffffff; }
+</style>
+
+<script>
+
+function showEventProperties(e) {
+  function addCell(row, text) {
+    var cell = row.insertCell(-1);
+    cell.appendChild(document.createTextNode(text));
+  }
+
+  var e = e || window.event;
+  document.getElementById('eventType').innerHTML = e.type;
+
+  var table = document.createElement('table');
+  var thead = table.createTHead();
+  var row = thead.insertRow(-1);
+  var lableList = ['#', 'Property', 'Value'];
+  var len = lableList.length;
+
+  for (var i=0; i<len; i++) {
+    addCell(row, lableList[i]);
+  }
+
+  var tbody = document.createElement('tbody');
+  table.appendChild(tbody);
+
+  for (var p in e) {
+    row = tbody.insertRow(-1);
+    row.className = (row.rowIndex % 2)? 'odd':'even';
+    addCell(row, row.rowIndex);
+    addCell(row, p);
+    addCell(row, e[p]);
+  }
+
+  document.body.appendChild(table);
+}
+
+window.onload = function(event){
+  showEventProperties(event);
+}
+</script>
+</head>
+
+<body>
+<h1>Properties of the DOM <span id="eventType"></span> Event Object</h1>
+</body>
+
+</html>
+
+ +

Exemplo 8: Usando a interface de tabela  do DOM

+ +

A interface DOM HTMLTableElement fornece alguns métodos de conveniência para criar e manipular tabelas. Dois métodos usados com freqüência são {{domxref ("HTMLTableElement.insertRow")}} e {{domxref ("tableRow.insertCell")}}.

+ +

Para adicionar uma linha e algumas células a uma tabela existente:

+ +
<table id="table0">
+ <tr>
+  <td>Row 0 Cell 0</td>
+  <td>Row 0 Cell 1</td>
+ </tr>
+</table>
+
+<script>
+var table = document.getElementById('table0');
+var row = table.insertRow(-1);
+var cell,
+    text;
+
+for (var i = 0; i < 2; i++) {
+  cell = row.insertCell(-1);
+  text = 'Row ' + row.rowIndex + ' Cell ' + i;
+  cell.appendChild(document.createTextNode(text));
+}
+</script>
+
+ +


+ Notas

+ + + + + + diff --git a/files/pt-br/web/api/document_object_model/how_to_create_a_dom_tree/index.html b/files/pt-br/web/api/document_object_model/how_to_create_a_dom_tree/index.html new file mode 100644 index 0000000000..e6dd923fb5 --- /dev/null +++ b/files/pt-br/web/api/document_object_model/how_to_create_a_dom_tree/index.html @@ -0,0 +1,145 @@ +--- +title: How to create a DOM tree +slug: DOM/Referencia_do_DOM/How_to_create_a_DOM_tree +translation_of: Web/API/Document_object_model/How_to_create_a_DOM_tree +--- +

{{draft}}

+ +

Esta página descreve como usar DOM Core API DOM em JavaScript para criar e modificar objetos do DOM. Aplica-se a todas as aplicações baseadas em Gecko (como o Firefox), tanto em código privilegiado (extensões) como em código não privilegiado (páginas web)

+ +

Criando uma árvore DOM dinamicamente

+ +

Considere o seguinte documento XML:

+ +
<?xml version="1.0"?>
+<people>
+  <person first-name="eric" middle-initial="H" last-name="jung">
+    <address street="321 south st" city="denver" state="co" country="usa"/>
+    <address street="123 main st" city="arlington" state="ma" country="usa"/>
+  </person>
+
+  <person first-name="jed" last-name="brown">
+    <address street="321 north st" city="atlanta" state="ga" country="usa"/>
+    <address street="123 west st" city="seattle" state="wa" country="usa"/>
+    <address street="321 south avenue" city="denver" state="co" country="usa"/>
+  </person>
+</people>
+
+ +

A W3C DOM API, suportada pelo Mozilla, pode ser usada para criar uma representação na memória deste documento, da seguinte forma:

+ +
var doc = document.implementation.createDocument("", "", null);
+var peopleElem = doc.createElement("people");
+
+var personElem1 = doc.createElement("person");
+personElem1.setAttribute("first-name", "eric");
+personElem1.setAttribute("middle-initial", "h");
+personElem1.setAttribute("last-name", "jung");
+
+var addressElem1 = doc.createElement("address");
+addressElem1.setAttribute("street", "321 south st");
+addressElem1.setAttribute("city", "denver");
+addressElem1.setAttribute("state", "co");
+addressElem1.setAttribute("country", "usa");
+personElem1.appendChild(addressElem1);
+
+var addressElem2 = doc.createElement("address");
+addressElem2.setAttribute("street", "123 main st");
+addressElem2.setAttribute("city", "arlington");
+addressElem2.setAttribute("state", "ma");
+addressElem2.setAttribute("country", "usa");
+personElem1.appendChild(addressElem2);
+
+var personElem2 = doc.createElement("person");
+personElem2.setAttribute("first-name", "jed");
+personElem2.setAttribute("last-name", "brown");
+
+var addressElem3 = doc.createElement("address");
+addressElem3.setAttribute("street", "321 north st");
+addressElem3.setAttribute("city", "atlanta");
+addressElem3.setAttribute("state", "ga");
+addressElem3.setAttribute("country", "usa");
+personElem2.appendChild(addressElem3);
+
+var addressElem4 = doc.createElement("address");
+addressElem4.setAttribute("street", "123 west st");
+addressElem4.setAttribute("city", "seattle");
+addressElem4.setAttribute("state", "wa");
+addressElem4.setAttribute("country", "usa");
+personElem2.appendChild(addressElem4);
+
+var addressElem5 = doc.createElement("address");
+addressElem5.setAttribute("street", "321 south avenue");
+addressElem5.setAttribute("city", "denver");
+addressElem5.setAttribute("state", "co");
+addressElem5.setAttribute("country", "usa");
+personElem2.appendChild(addressElem5);
+
+peopleElem.appendChild(personElem1);
+peopleElem.appendChild(personElem2);
+doc.appendChild(peopleElem);
+
+ +

Veja também o capítulo DOM chapter of the XUL Tutorial.

+ +

Você pode automatizar a criação de uma árvore DOM usando um algoritmo reverso JXON em associação com a seguinte representação JSON:

+ +
{
+  "people": {
+    "person": [{
+      "address": [{
+        "@street": "321 south st",
+        "@city": "denver",
+        "@state": "co",
+        "@country": "usa"
+      }, {
+        "@street": "123 main st",
+        "@city": "arlington",
+        "@state": "ma",
+        "@country": "usa"
+      }],
+      "@first-name": "eric",
+      "@middle-initial": "H",
+      "@last-name": "jung"
+    }, {
+      "address": [{
+        "@street": "321 north st",
+        "@city": "atlanta",
+        "@state": "ga",
+        "@country": "usa"
+      }, {
+        "@street": "123 west st",
+        "@city": "seattle",
+        "@state": "wa",
+        "@country": "usa"
+      }, {
+        "@street": "321 south avenue",
+        "@city": "denver",
+        "@state": "co",
+        "@country": "usa"
+      }],
+      "@first-name": "jed",
+      "@last-name": "brown"
+    }]
+  }
+}
+
+ +

E daí?

+ +

As árvores DOM podem ser consultadas usando expressões XPath, convertidas em strings ou gravadas em arquivos locais ou remotos usando XMLSerializer (sem ter que primeiro converter para uma string), POSTed para um servidor web (via XMLHttpRequest), transformado usando XSLT, XLink, convertido para um objeto JavaScript através de um algoritmo JXON, etc.

+ +

Você pode usar árvores DOM para modelar dados que não são adequados para RDF (ou talvez você simplesmente não goste de RDF). Outra aplicação é que, uma vez que XUL é XML, a UI de sua aplicação pode ser manipulada, baixada, carregada, salva, carregada, convertida ou transformada de forma bastante fácil.

+ +

Veja também

+ + + +

{{ languages( { "fr": "fr/Comment_cr\u00e9er_un_arbre_DOM", "ja": "ja/How_to_create_a_DOM_tree", "zh-cn": "zh-cn/How_to_create_a_DOM_tree" } ) }}

diff --git a/files/pt-br/web/api/document_object_model/index.html b/files/pt-br/web/api/document_object_model/index.html new file mode 100644 index 0000000000..b0ae4420a6 --- /dev/null +++ b/files/pt-br/web/api/document_object_model/index.html @@ -0,0 +1,379 @@ +--- +title: Modelo de Objeto de Documento (DOM) +slug: DOM/Referencia_do_DOM +translation_of: Web/API/Document_Object_Model +--- +

{{DefaultAPISidebar("DOM")}}

+ +

Modelo de Objeto de Documento  (DOM) é uma interface de programação para documentos HTML, XML e SVG . Ele fornece uma representação estruturada do documento como uma árvore. O DOM define métodos que permitem acesso à árvore, para que eles possam alterar a estrutura, estilo e conteúdo do documento. O DOM fornece uma representação do documento como um grupo estruturado de nós e objetos, possuindo várias propriedades e métodos. Os nós também podem ter manipuladores de eventos que lhe são inerentes, e uma vez que um evento é acionado, os manipuladores de eventos são executados. Essencialmente, ele conecta páginas web a scripts ou linguagens de programação.

+ +

Embora o DOM seja frequentemente acessado usando JavaScript, não é uma parte da linguagem JavaScript. Ele também pode ser acessado por outras linguagens.

+ +

Uma introdução ao DOM está disponível.

+ +

DOM interfaces

+ +
+ +
+ +

Interfaces DOM obsoletas

+ +

O Modelo de Objeto de Documento foi altamente simplificado. Para conseguir isso, as seguintes interfaces presentes na especificação DOM nível 3 ou especificação anterior foi removida. Ainda não está muito claro se alguns podem ser reintroduzidos ou não, mas por enquanto eles têm que ser considerados obsoletos e devem ser evitados:

+ +
+ +
+ +

Interfaces HTML

+ +

Um documento contendo HTML é descrito usando o {{domxref("HTMLDocument")}} interface. Nota-se que a especificação HTML também se extende a {{domxref("Document")}} interface.

+ +

Um objeto HTMLDocument também da acesso á vários recursos de navegadores como a aba ou janela, em que uma página é desenhada usando {{domxref("Window")}} interface, o {{domxref("window.style", "Style")}} associado a ele (normalmente CSS), a história do navegador relativa ao contexto, {{domxref("window.history", "History")}}. Eventualmente, {{domxref("Selection")}} é feito no documento.

+ +

HTML elemento interfaces

+ +
+ +
+ +

Outras interfaces

+ +
+ +
+ +

Obsoleto HTML interfaces

+ +
+ +
+ +

SVG interfaces

+ +

SVG elemento  interfaces

+ +
+ +
+ +

SVG data type interfaces

+ +

Aqui estão a DOM API para tipos de dados utilizados nas definições de propriedades SVG e atributos.

+ +
+

Nota: Starting in {{Gecko("5.0")}}, the following SVG-related DOM interfaces representing lists of objects are now indexable and can be accessed ; in addition, they have a length property indicating the number of items in the lists: {{domxref("SVGLengthList")}}, {{domxref("SVGNumberList")}}, {{domxref("SVGPathSegList")}}, and {{domxref("SVGPointList")}}.

+
+ +

Static type

+ +
+ +
+ +

Animated type

+ +
+ +
+ + + +
+ +
+ +

Other SVG interfaces

+ +
+ +
+ +

Veja também

+ + diff --git a/files/pt-br/web/api/document_object_model/introduction/index.html b/files/pt-br/web/api/document_object_model/introduction/index.html new file mode 100644 index 0000000000..010a5ecd54 --- /dev/null +++ b/files/pt-br/web/api/document_object_model/introduction/index.html @@ -0,0 +1,251 @@ +--- +title: Introdução ao DOM +slug: DOM/Referencia_do_DOM/Introdução +translation_of: Web/API/Document_Object_Model/Introduction +--- +

O DOM (Document Object Model) é a representação de dados dos objetos que compõem a estrutura e o conteúdo de um documento na Web. Neste guia, apresentaremos brevemente o DOM. Veremos como o DOM representa um documento {{Glossary ("HTML")}} ou {{Glossary ("XML")}} na memória e como você usa APIs para criar aplicativos e conteúdo da Web.

+ +

O que é o DOM?

+ +

O Document Object Model (DOM) é uma interface de programação para os documentos HTML e XML. Representa a página de forma que os programas possam alterar a estrutura do documento, alterar o estilo e conteúdo. O DOM representa o documento com nós e objetos, dessa forma, as linguagens de programação podem se conectar à página.

+ +

Uma página da Web é um documento. Este documento pode ser exibido na janela do navegador ou como a fonte HTML. Mas é o mesmo documento nos dois casos. O DOM (Document Object Model) representa o mesmo documento para que possa ser manipulado. O DOM é uma representação orientada a objetos da página da web, que pode ser modificada com uma linguagem de script como JavaScript.

+ +

Os padrões W3C DOM e WHATWG DOM são implementados na maioria dos navegadores modernos. Muitos navegadores estendem o padrão; portanto, é necessário ter cuidado ao usá-los na Web, onde os documentos podem ser acessados por vários navegadores com diferentes DOMs.

+ +

Por exemplo, o DOM padrão especifica que o método getElementsByTagName no código abaixo deve retornar uma lista de todos os elementos <p> no documento:

+ +
var paragraphs = document.getElementsByTagName("p");
+// paragraphs[0] is the first <p> element
+// paragraphs[1] is the second <p> element, etc.
+alert(paragraphs[0].nodeName);
+
+ +

Todas as propriedades, métodos e eventos disponíveis para manipular e criar páginas da Web são organizados em objetos (por exemplo, o objeto de document que representa o próprio documento, o objeto de table que implementa a Interface especial DOM {{domxref ("HTMLTableElement")}}}}  para acessar tabelas HTML e assim por diante). Esta documentação fornece uma referência objeto a objeto ao DOM.

+ +

O DOM moderno é construído usando várias APIs que trabalham juntas. O DOM principal define os objetos que descrevem fundamentalmente um documento e os objetos dentro dele. Isso é expandido conforme necessário por outras APIs que adicionam novos recursos e capacidades ao DOM. Por exemplo, a HTML DOM API adiciona suporte para representar documentos HTML no DOM principal.

+ +

DOM e JavaScript

+ +

O pequeno exemplo acima, como quase todos os exemplos nesta referência, é {{glossary ("JavaScript")}}. Ou seja, está escrito em JavaScript, mas usa o DOM para acessar o documento e seus elementos. O DOM não é uma linguagem de programação, mas sem ela, a linguagem JavaScript não teria nenhum modelo ou noção de páginas da web, documentos HTML, documentos XML e suas partes componentes (por exemplo, elementos). Cada elemento de um documento - o documento como um todo, o cabeçalho, as tabelas do documento, os cabeçalhos da tabela, o texto nas células da tabela - faz parte do modelo de objeto do documento desse documento, para que todos possam ser acessados e manipulados usando o método DOM e uma linguagem de script como JavaScript.

+ +

No início, o JavaScript e o DOM estavam fortemente interligados, mas, eventualmente, evoluíram para entidades separadas. O conteúdo da página é armazenado no DOM e pode ser acessado e manipulado via JavaScript, para que possamos escrever esta equação aproximada:

+ +

API (página HTML ou XML) = DOM + JS (linguagem de script)

+ +

O DOM foi projetado para ser independente de qualquer linguagem de programação específica, disponibilizando a representação estrutural do documento a partir de uma única API consistente. Embora nos concentremos exclusivamente no JavaScript nesta documentação de referência, as implementações do DOM podem ser construídas para qualquer idioma, como este exemplo em Python demonstra:

+ +
# exemplo de DOM com Python
+import xml.dom.minidom as m
+doc = m.parse(r"C:\Projects\Py\chap1.xml")
+doc.nodeName # propriedade do objeto de documento DOM
+p_list = doc.getElementsByTagName("para")
+
+ +

Para obter mais informações sobre quais tecnologias estão envolvidas na criação de JavaScript na Web, consulte JavaScript technologies overview.

+ +

Acessando o DOM

+ +

Você não precisa fazer nada de especial para começar a usar o DOM. Navegadores diferentes têm implementações diferentes do DOM, e essas implementações exibem graus variados de conformidade com o padrão DOM real (um assunto que tentamos evitar nesta documentação), mas todo navegador usa um modelo de objeto de documento para tornar as páginas da web acessíveis via JavaScript.

+ +

Quando você cria um script - seja embutido em um elemento(tag) <script> ou incluído na página da web por meio de uma instrução de carregamento de script - você pode começar imediatamente a usar a API para o {{domxref ("document")}} ou { {domxref ("Window", "window")}} elementos para manipular o próprio documento ou obter os filhos desse documento, que são os vários elementos na página da web. Sua programação DOM pode ser algo tão simples quanto o exemplo seguinte, que exibe uma mensagem de alerta usando a função {{domxref ("window.alert", "alert()")}} da função {{domxref ("Window", " window ")}} ou pode usar métodos DOM mais sofisticados para criar realmente novo conteúdo, como no extenso exemplo abaixo.

+ +

O JavaScript a seguir exibirá um alerta quando o documento for carregado (e quando todo o DOM estiver disponível para uso):

+ +
<body onload="window.alert('Welcome to my home page!');">
+
+ +

Outro exemplo. Esta função cria um novo elemento H1, adiciona texto a esse elemento e, em seguida, adiciona o H1 à árvore deste documento:

+ +
<html>
+  <head>
+    <script>
+       // run this function when the document is loaded
+       window.onload = function() {
+
+         // create a couple of elements in an otherwise empty HTML page
+         var heading = document.createElement("h1");
+         var heading_text = document.createTextNode("Big Head!");
+         heading.appendChild(heading_text);
+         document.body.appendChild(heading);
+      }
+    </script>
+  </head>
+  <body>
+  </body>
+</html>
+
+ +

Tipos de dados fundamentais

+ +

Esta referência tenta descrever os vários objetos e tipos em termos simples. Mas há vários tipos de dados diferentes sendo transmitidos pela API que você deve conhecer.

+ +
+

Nota: Como a grande maioria do código que usa o DOM gira em torno da manipulação de documentos HTML, é comum sempre se referir aos nós no DOM como elementos, pois em um documento HTML, cada nó é um elemento. Apesar de não ser estritamente precisa, a documentação que você encontrará no MDN frequentemente fará a mesma coisa, por causa de quão comum é essa suposição.

+
+ +

A tabela a seguir descreve brevemente esses tipos de dados.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Tipos de dados (Interface)Descrição
{{domxref("Document")}}Quando um membro retorna um objeto do tipo document (por exemplo, a propriedade ownerDocument de um elemento retorna o document ao qual ele pertence),esse objeto é o próprio objeto de  document raiz. O capítulo DOM document Reference descreve o objeto do document .
{{domxref("Node")}}Todo objeto localizado em um documento é um nó de algum tipo. Em um documento HTML, um objeto pode ser um nó de elemento, mas também um nó de texto ou atributo.
{{domxref("Element")}} +

O tipo do element é baseado em node. Isso se refere a um elemento ou um nó do tipo element retornado por um membro do DOM API. Ao invés de dizer, por exemplo, que o método {{domxref("document.createElement()")}}  retorna um objeto de referência para um nó, nós apenas dizemos que esse método retorna o element que acabou de ser criado no DOM. Os objetos do element  implementam a interface DOM Element e também a mais básica interface Node, sendo ambas incluídas juntas nessa referência. Em um documento HTML, elementos são ainda mais aprimorados pelas APIs HTML DOM. A interface {{domxref("HTMLElement")}} bem como outras interfaces descrevem capacidades de tipos especifícos de elementos (por exemlo, {{domxref("HTMLTableElement")}} para elementos {{HTMLElement("table")}}).

+
{{domxref("NodeList")}}Uma nodeList é um array de elementos comos os que são retornados pelo método {{domxref("document.getElementsByTagName()")}}. Itens numa nodeList são acessados por índices em uma das duas formas: +
    +
  • list.item(1)
  • +
  • list[1]
  • +
+ Esses dois são equivalentes. No primeiro, item() é o método único no objeto da nodeList. O último  usa uma sintaxe típica de array para buscar o segundo item na lista.
{{domxref("Attribute")}}Quando um attribute é retornado por um membro (por exemplo, pelo método createAttribute()), é um objeto de referência que expõe uma interface especial (embora pequena) para atributos. Atributos são nós no DOM bem como elementos, mesmo que raramente você possa usá-los como tal.
{{domxref("NamedNodeMap")}} +

 é como um array, mas os itens são acessados por nome ou índice, embora este último caso seja meramente uma conveniência para enumeração, já que eles não estão em uma ordem específica na lista. Um namedNodeMap possui um método item () para esse propósito, e você também pode adicionar e remover itens de um namedNodeMap.

+ +

Um namedNodeMap é como um array, mas os itens são acessados por nome ou índice, embora este último caso seja meramente uma conveniência para enumeração, já que eles não estão em uma ordem específica na lista. O namedNodeMap possui um método item() para esse propósito, e você também pode adicionar e remover itens de um namedNodeMap.

+
+ +

Tenha em mente algumas considerações de terminologia comuns que existem. É comum referir-se a qualquer nó {{domxref("Attribute")}} simplesmente como um attribute, por exemplo, e referir-se a um array de nós DOM como um nodeList. Você encontrará esses termos e outros a serem introduzidos e usados em toda a documentação.

+ +

DOM interfaces

+ +

Esse guia é sobre os objetos e o que você pode usar ao manipular a hierarquia do DOM. Há muitos aspectos que tornam entender como eles funcionam confuso. Por exemplo, o objeto representando o elemento HTML form pega a propriedade name da interface do HTMLFormElement mas a sua propriedade className vem da interface HTMLElement. Em ambos os casos, a propriedade que você quer está naquele objeto do formulário.

+ +

Mas o relacionamento entre objetos e interfaces que são implementadas no DOM pode ser confuso, então essa seção busca mostrar um pouco sobre as interfaces na especificação do DOM e como elas são disponibilizadas.

+ +

Interfaces e Objetos

+ +

Muitos objetos pegam emprestados de várias interfaces diferentes. O objeto table por exemplo implementa uma interface especializada {{domxref("HTMLTableElement")}}, que inclui métodos como createCaption e insertRow. Mas como é também um elemento HTML, table implementa a interface Element descrita no capítulo DOM {{domxref("Element")}} Reference. E finalmente, já que um elemento HTML é também, no que diz respeito ao DOM, um nó na árvore de nós que fazem o modelo de objeto para uma página HTML ou XML, o objeto table também implementa a interface Node mais básica, de onde deriva Element.

+ +

Quando você pegar a referência para um objeto table, como no exemplo a seguir, você rotineiramente usa todas as três interfaces de forma intercambiável no objeto, talvez sem saber.

+ +
var tabela = document.getElementById("table");
+var atributosTabela = tabela.attributes; // interface Node/Element
+for (var i = 0; i < atributosTabela.length; i++) {
+  // interface HTMLTableElement: atributo border
+  if (atributosTabela[i].nodeName.toLowerCase() == "border")
+    tabela.border = "1";
+}
+// interface HTMLTableElement: atributo summary
+table.summary = "nota: aumento de borda";
+
+ +

Interfaces Core no DOM

+ +

Essa seção lista algumas das interfaces mais utilizadas no DOM. A ideia não é descrever o que essas APIs fazem aqui mas para te dar uma ideia de que tipos de métodos e propriedades você verá bastante conforme for usando o DOM. Essas APIs são usadas nos exemplos mais extensos no capítulo de DOM Examples ao fim desse livro.

+ +

Objetos Document e window são os objetos cujas interfaces você geralmente utiliza mais frequentemente em programação DOM. De forma simples, o objeto window representa algo como o browser, e o objeto document é a raiz de todo o documento em si. Element herda dessa interface Node genérica, e juntamente com essas duas interfaces fornecem muitos dos métodos e propriedades que você utiliza em elementos individuais. Esses elementos podem também ter interfaces específicas para lidar com o tipo de dado que esses elementos contêm, como no exemplo do objeto table na seção anterior.

+ +

A seguir uma lista breve de APIs comuns em scripting de páginas web e XML usando o DOM.

+ + + +

Testando a DOM API

+ +

Esse documento fornece amostras para cada interface que você pode usar ao desenvolver. Em alguns casos, as amostras são páginas completas em HTML, com o acesso ao DOM em um elemento <script>, a interface (ex. botões) necessária para ativar o script num formulário, e os elementos HTML pelo qual o DOM opera listados também. Quando esse é o caso, você pode copiar e colar o exemplo em um novo documento HTML, salvar e rodar o exemplo pelo browser.

+ +

Há alguns casos, porém, que os exemplos são mais concisos. Para rodar exemplos que apenas demonstram o relacionamento básico da interface para os elementos HTML, você pode criar uma página teste em que as interfaces podem ser fácilmente acessadas por scripts. A simples página web a seguir fornece um elemento <script> no header em que você pode colocar funções para testar a interface, alguns elementos HTML com atributos que você consegue buscar, definir ou manipular, e a interface web do usuário necessária para chamar essas funções pelo broswer.

+ +

Você pode usar essa página teste ou criar uma similar para testar as interfaces DOM que quiser e ver como elas funcionam numa plataforma broswer. Você pode alterar os conteúdos da função test() como achar necessário, criar mais botões ou adicionar elementos se necessário.

+ +
<html>
+  <head>
+    <title>Testes DOM</title>
+    <script type="application/javascript">
+    function setBodyAttr(attr, value){
+      if (document.body) eval('document.body.'+attr+'="'+value+'"');
+      else notSupported();
+    }
+    </script>
+  </head>
+  <body>
+    <div style="margin: .5in; height: 400;">
+      <p><b><tt>text</tt></b></p>
+      <form>
+        <select onChange="setBodyAttr('text',
+        this.options[this.selectedIndex].value);">
+          <option value="black">preto
+          <option value="darkblue">azul escuro
+        </select>
+        <p><b><tt>bgColor</tt></b></p>
+        <select onChange="setBodyAttr('bgColor',
+        this.options[this.selectedIndex].value);">
+          <option value="white">branco
+          <option value="lightgrey">cinza
+        </select>
+        <p><b><tt>link</tt></b></p>
+        <select onChange="setBodyAttr('link',
+        this.options[this.selectedIndex].value);">
+          <option value="blue">azul
+          <option value="green">verde
+        </select>  <small>
+        <a href="http://algum.website.tld/pagina.html" id="amostra">
+        (link)</a></small><br>
+      </form>
+      <form>
+        <input type="button" value="version" onclick="ver()" />
+      </form>
+    </div>
+  </body>
+</html>
+
+ +

Para testar várias interfaces numa única página - por exemplo, um conjunto de propriedades que afete as cores de uma página web - você pode criar uma página de teste similar com um console inteiro de botões, textfields e outros elementos HTML. A screenshot a seguir te dá uma ideia de como interfaces podem ser agrupadas para testes.

+ +
+
Figura 0.1 Página de Teste DOM
+Image:DOM_Ref_Introduction_to_the_DOM.gif
+ +

Nesse exemplo, os menus drop-down atualizam dinamicamente os aspectos acessáveis pelo DOM na página web como o fundo (bgColor), a cor dos hiperlinks (aLink), e a cor do texto (text). Porém, ao desenhar suas páginas de teste, testar as interfaces conforme for lendo sobre elas é uma parte importante para aprender a usar o DOM de forma efetiva.

+ + + + + +
{{DefaultAPISidebar("DOM")}}
diff --git a/files/pt-br/web/api/document_object_model/whitespace/index.html b/files/pt-br/web/api/document_object_model/whitespace/index.html new file mode 100644 index 0000000000..f4bebc3678 --- /dev/null +++ b/files/pt-br/web/api/document_object_model/whitespace/index.html @@ -0,0 +1,227 @@ +--- +title: Whitespace no DOM +slug: DOM/Referencia_do_DOM/Whitespace_in_the_DOM +tags: + - DOM + - Intermediário +translation_of: Web/API/Document_Object_Model/Whitespace +--- +

O problema

+ +

A presença de espaço branco no DOM pode dificultar a manipulação da árvore de conteúdo de formas imprevisíveis. No Mozilla, todo o espaço branco no conteúdo de texto do documento original é representado no DOM (isso não inclui whitespace entre tags). (Isso é necessário internamente para que o editor possa preservar a formatação de documentos e também que white-space: pre irá funcionar em CSS). Isso significa que:

+ + + +

Em outras palavras, a árvore do DOM para o documento seguinte irá parecer como a imagem abaixo (usando "\n" para representar novas linhas):

+ +
<!-- Meu documento -->
+<html>
+<head>
+  <title>Meu documento</title>
+</head>
+<body>
+  <h1>Cabeçalho</h1>
+  <p>
+    Parágrafo
+  </p>
+</body>
+</html>
+
+ +

+ +

Isto pode fazer as coisas um pouco difíceis para qualquer usuário do DOM que quer iterar através do conteúdo, excluindo o whitespace.

+ +

Facilitando as coisas

+ +

É possível formatar o código como mostrado abaixo para contornar o problema:

+ +
<!-- Impressão bonita convencional
+     com espaços brancos (whitespaces) entre as tags:
+ -->
+<div>
+ <ul>
+  <li>Posição 1</li>
+  <li>Posição 2</li>
+  <li>Posição 3</li>
+ </ul>
+</div>
+
+<!-- Impressão bonita ajustada ao problema:
+ -->
+<div
+ ><ul
+  ><li>Posição 1</li
+  ><li>Posição 2</li
+  ><li>Posição 3</li
+ ></ul
+></div>
+
+ +


+ O código Javascript abaixo define funções diversas que fazem a manipulação de whitespace no DOM mais fácil.

+ +
/**
+ * Em todo, o whitespace é definido como um dos caracteres
+ *  "\t" TAB \u0009
+ *  "\n" LF  \u000A
+ *  "\r" CR  \u000D
+ *  " "  SPC \u0020
+ *
+ * Isto não usa o "\s" do Javascript porque inclui espaços
+ * que não quebram (e alguns outros caracteres).
+ */
+
+
+/**
+ * Determina se um conteúdo de texto do nó é inteiramente whitespace.
+ *
+ * @param nod  Um nó implementando a interface |CharacterData| (por exemplo:
+ *             |Text|, |Comment|, ou nó |CDATASection|
+ * @return     Verdadeiro se todo conteúdo de texto de |nod| é whitespace,
+ *             de outra forma é falso.
+ */
+function is_all_ws( nod )
+{
+  // Usa as características do ECMA-262 Edition 3 String e RegExp
+  return !(/[^\t\n\r ]/.test(nod.textContent));
+}
+
+
+/**
+ * Determina se um nó deve ser ignorado pela função de iterador.
+ *
+ * @param nod  Um objeto implementando a interface DOM1 |Node|.
+ * @return     verdadeiro se o nó é:
+ *                1) Um nó |Text| que é todo whitespace
+ *                2) Um nó |Comment|
+ *             do contrário é falso.
+ */
+
+function is_ignorable( nod )
+{
+  return ( nod.nodeType == 8) || // Um nó de comentário
+         ( (nod.nodeType == 3) && is_all_ws(nod) ); // um nó de texto, todo whitespace
+}
+
+/**
+ * Versão de |previousSibling| que pula nós que são inteiramente
+ * whitespace ou comentários.  (Normalmente |previousSibling| é uma propriedade
+ * de todos os nós do DOM que dá o nó irmão, o nó que é
+ * um filho do mesmo parente, que ocorre imediatamente antes do
+ * nó de referência.)
+ *
+ * @param sib  O nó de referência.
+ * @return     Ou:
+ *               1) O irmão mais próximo do |sib| que não é
+ *                  ignorável de acordo com |is_ignorable|, ou
+ *               2) nulo se tal nó não existe.
+ */
+function node_before( sib )
+{
+  while ((sib = sib.previousSibling)) {
+    if (!is_ignorable(sib)) return sib;
+  }
+  return null;
+}
+
+/**
+ * Versão de |nextSibling| que pula nós que são inteiramente
+ * whitespace ou comentários.
+ *
+ * @param sib  O nó de referência.
+ * @return     Ou:
+ *               1) O irmão mais próximo do |sib| que não é
+ *                  ignorável de acordo com |is_ignorable|, ou
+ *               2) nulo se tal nó não existe.
+ */
+function node_after( sib )
+{
+  while ((sib = sib.nextSibling)) {
+    if (!is_ignorable(sib)) return sib;
+  }
+  return null;
+}
+
+/**
+ * Versão de  |lastChild| que pula nós que são inteiramente
+ * whitespace ou comentários.  (Normalmente |lastChild| é uma propriedade
+ * de todos os nós do DOM que dá o último dos nós contidos
+ * diretamente no nó de referência.)
+ *
+ * @param sib  O nó de referência.
+ * @return     Ou:
+ *               1) O último filho do |sib| que não é
+ *                  ignorável de acordo com |is_ignorable|, ou
+ *               2) nulo se tal nó não existe.
+ */
+function last_child( par )
+{
+  var res=par.lastChild;
+  while (res) {
+    if (!is_ignorable(res)) return res;
+    res = res.previousSibling;
+  }
+  return null;
+}
+
+/**
+ * Versão de |firstChild| que pula nós que são inteiramente
+ * whitespace ou comentários.
+ *
+ * @param sib  O nó de referência.
+ * @return     Ou:
+ *               1) O primeiro nó do |sib| que não é
+ *                  ignorável de acordo com |is_ignorable|, ou
+ *               2) nulo se tal nó não existe.
+ */
+function first_child( par )
+{
+  var res=par.firstChild;
+  while (res) {
+    if (!is_ignorable(res)) return res;
+    res = res.nextSibling;
+  }
+  return null;
+}
+
+/**
+ * Versão de |data| que não inclui whitespace no início
+ * e final e normaliza todos whitespaces para um espaço individual.  (Normalmente
+ * |data| é uma propriedade de nós de texto que dá o texto do nó.)
+ *
+ * @param txt  O nó de texto do qual data deve ser retornado
+ * @return     Uma string dando os conteúdos de um nó de texto com
+ *             whitespace colapsado.
+ */
+function data_of( txt )
+{
+  var data = txt.textContent;
+  // Usa características do ECMA-262 Edition 3 String e RegExp
+  data = data.replace(/[\t\n\r ]+/g, " ");
+  if (data.charAt(0) == " ")
+    data = data.substring(1, data.length);
+  if (data.charAt(data.length - 1) == " ")
+    data = data.substring(0, data.length - 1);
+  return data;
+}
+
+ +

Exemplo

+ +

O código seguinte demonstra o uso das funções acima. Ele itera através dos filhos de um elemento (dos quais filhos são todos os elementos) para encontrar aquele cujo o texto seja "Este é o terceiro parágrafo", e então muda o atributo da classe e os conteúdos daquele parágrafo.

+ +
var cur = first_child(document.getElementById("teste"));
+while (cur)
+{
+  if (data_of(cur.firstChild) == "Este é o terceiro parágrafo.")
+  {
+      cur.className = "mágica";
+      cur.firstChild.textContent = "Este é o parágrafo mágico";
+  }
+  cur = node_after(cur);
+}
+
diff --git a/files/pt-br/web/api/documentorshadowroot/activeelement/index.html b/files/pt-br/web/api/documentorshadowroot/activeelement/index.html new file mode 100644 index 0000000000..ca10f98461 --- /dev/null +++ b/files/pt-br/web/api/documentorshadowroot/activeelement/index.html @@ -0,0 +1,165 @@ +--- +title: Document.activeElement +slug: Web/API/Document/activeElement +tags: + - API + - Document + - HTML DOM + - Property + - Reference +translation_of: Web/API/DocumentOrShadowRoot/activeElement +translation_of_original: Web/API/Document/activeElement +--- +

{{APIRef("DOM")}}

+ +

Retorna o {{ domxref("Element", "elemento") }} atualmente em foco, ou seja, o elemento que receberá os eventos do teclado caso o usuário digite algo. Esse atributo é somente-leitura.

+ +

Geralmente retorna um {{ HTMLElement("input") }} ou {{ HTMLElement("textarea") }}, caso esteja com uma seleção de texto ativa. Caso esteja, pode obter mais informações sobre a seleção utilizando as propriedades selectionStartselectionEnd. Caso o elemento em foco seja um {{ HTMLElement("select") }}(menu) ou {{ HTMLElement("input") }} do tipo button, checkbox ou radio.

+ +
Note: No Mac, elementos que nao sejam campos de texto geralmente não recebem foco.
+ +

Normalmente o usuário pode navegar entre os elementos que pode receber foco na página com o uso da tecla tab e ativar estes elementos com a tecla espaço (apertar um botão ou selecionar uma opção).

+ +

Não confunda foco com uma seleção de texto no documento, que consiste em sua maioria de nódos de texto estáticos. Veja {{ domxref("window.getSelection()") }}.

+ +

Quando não há nada selecionado, o activeElement da página é o {{ HTMLElement("body") }} ou null

+ +
+

Este atributo é parte da seção "Em desenvolvimento" da especificação do HTML 5.

+
+ +

Sintaxe

+ +
var curElement = document.activeElement;
+
+ +

Exemplo

+ +
<!DOCTYPE HTML>
+<html>
+<head>
+    <script type="text/javascript" charset="utf-8">
+    function init() {
+
+        function onMouseUp(e) {
+            console.log(e);
+            var outputElement = document.getElementById('output-element');
+            var outputText = document.getElementById('output-text');
+            var selectedTextArea = document.activeElement;
+            var selection = selectedTextArea.value.substring(
+            selectedTextArea.selectionStart, selectedTextArea.selectionEnd);
+            outputElement.innerHTML = selectedTextArea.id;
+            outputText.innerHTML = selection;
+        }
+
+        document.getElementById("ta-example-one").addEventListener("mouseup", onMouseUp, false);
+        document.getElementById("ta-example-two").addEventListener("mouseup", onMouseUp, false);
+    }
+    </script>
+</head>
+<body onload="init()">
+<div>
+    Select some text from one of the Textareas below:
+</div>
+<form id="frm-example" action="#" accept-charset="utf-8">
+<textarea name="ta-example-one" id="ta-example-one" rows="8" cols="40">
+This is Textarea Example One:
+Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec tincidunt, lorem a porttitor molestie, odio nibh iaculis libero, et accumsan nunc orci eu dui.
+</textarea>
+<textarea name="ta-example-two" id="ta-example-two" rows="8" cols="40">
+This is Textarea Example Two:
+Fusce ullamcorper, nisl ac porttitor adipiscing, urna orci egestas libero, ut accumsan orci lacus laoreet diam. Morbi sed euismod diam.
+</textarea>
+</form>
+Active Element Id: <span id="output-element"></span><br/>
+Selected Text: <span id="output-text"></span>
+
+</body>
+</html>
+
+ +

View on JSFiddle

+ +

Notas

+ +

Originalmente apresentada como extensão DOM proprietária no Internet Explorer 4, esta propriedade também é suportada no Opera e Safari (versão 4 ou maior)

+ +

Especificações

+ + + + + + + + + + + + + + + + +
SpecificationStatusComment
{{SpecName('HTML WHATWG', 'interaction.html#dom-document-activeelement', 'activeElement')}}{{Spec2('HTML WHATWG')}} 
+ +

Compatibilidade nos navegadores

+ +

{{ CompatibilityTable() }}

+ +
+ + + + + + + + + + + + + + + + + + + +
FeatureChromeFirefox (Gecko)Internet ExplorerOperaSafari (WebKit)
Basic support23.04 [1]9.64.0
+
+ +
+ + + + + + + + + + + + + + + + + + + +
FeatureAndroidFirefox Mobile (Gecko)IE PhoneOpera MobileSafari Mobile
Basic support{{ CompatUnknown() }}{{ CompatUnknown() }}{{ CompatUnknown() }}{{ CompatUnknown() }}{{ CompatUnknown() }}
+
+ +

[1]: O IE9 tem um bug que ao tentar acessar o activeElement do {{domxref("window.parent")}} {{domxref("Document")}} de um {{HTMLElement("iframe")}}(i.e. parent.document.activeElement) é lançado um erro

+ +

Eventos relacionados

+ + diff --git a/files/pt-br/web/api/documentorshadowroot/elementfrompoint/index.html b/files/pt-br/web/api/documentorshadowroot/elementfrompoint/index.html new file mode 100644 index 0000000000..c64d67dd08 --- /dev/null +++ b/files/pt-br/web/api/documentorshadowroot/elementfrompoint/index.html @@ -0,0 +1,133 @@ +--- +title: Document.elementFromPoint() +slug: Web/API/Document/elementFromPoint +tags: + - API + - CSSOM View + - Method + - NeedsMarkupWork + - NeedsMobileBrowserCompatibility + - Reference +translation_of: Web/API/DocumentOrShadowRoot/elementFromPoint +translation_of_original: Web/API/Document/elementFromPoint +--- +
{{APIRef("DOM")}}
+ +

O método elementFromPoint() da interface {{domxref("Document")}} retorna o elemento de maior nível nas coordenadas especificadas.

+ +

Se o elemento no ponto especificado pertencer à outro documento (por exemplo, um subdocumento em um iframe), será retornado o pai do subdocumento (o próprio iframe). Se o elemento em determinado ponto for anônimo ou for um conteudo gerado por XBL, como por exemplo barras de scroll de caixas de texto, então será retornado o primeiro elemento pai, não-anônimo (por exemplo, a própria caixa de texto).

+ +

Se o ponto especificado estiver fora dos limites visíveis do documento ou tiver uma coordenada negativa, o resultado é null.

+ +

Se você precisa encontrar uma posição específica dentro do elemento, use {{domxref("Document.caretPositionFromPoint()")}}.

+ +

{{Note("Chamados por documentos XUL devem esperar até o evento onload ser acionado antes de chamar este método.")}}

+ +

Sintaxe

+ +
var element = document.elementFromPoint(x, y);
+ +

Parâmetros

+ +
+
x
+
Uma posição horizontal dentro do viewport atual.
+
y
+
Uma position vertical dentro do viewport atual.
+
+ +

Valor retornado

+ +

O objeto de nível mais alto {{domxref("Element")}} dentro das coordenadas declaradas.

+ +

Exemplo

+ +
<!DOCTYPE html>
+<html lang="en">
+<head>
+<title>exemplo de elementFromPoint</title>
+
+<script>
+function changeColor(newColor) {
+  elem = document.elementFromPoint(2, 2);
+  elem.style.color = newColor;
+}
+</script>
+</head>
+
+<body>
+<p id="para1">Algum texto aqui</p>
+<button onclick="changeColor('blue');">azul</button>
+<button onclick="changeColor('red');">vermelho</button>
+</body>
+</html>
+
+ +

Especificações

+ + + + + + + + + + + + + + +
EspecificaçãoStatusComment
{{SpecName('CSSOM View', '#dom-document-elementfrompoint', 'elementFromPoint')}}{{Spec2('CSSOM View')}}Definição Inicial.
+ +

Compatibilidade entre navegadores

+ +

{{CompatibilityTable}}

+ +
+ + + + + + + + + + + + + + + + + + + +
FuncionalidadeChromeFirefox (Gecko)Internet ExplorerOperaSafari
Basic support {{CompatChrome(4.0)}}35.510.50{{CompatVersionUnknown}}
+
+ +
+ + + + + + + + + + + + + + + + + + + + + +
FuncionalidadeAndroidChrome para AndroidFirefox Mobile (Gecko)IE MobileOpera MobileSafari Mobile
Basic support{{CompatUnknown}}{{CompatVersionUnknown}}{{CompatUnknown}}{{CompatUnknown}}{{CompatUnknown}}{{CompatUnknown}}
+
diff --git a/files/pt-br/web/api/documentorshadowroot/getselection/index.html b/files/pt-br/web/api/documentorshadowroot/getselection/index.html new file mode 100644 index 0000000000..2f52375799 --- /dev/null +++ b/files/pt-br/web/api/documentorshadowroot/getselection/index.html @@ -0,0 +1,9 @@ +--- +title: Document.getSelection() +slug: Web/API/Document/getSelection +translation_of: Web/API/DocumentOrShadowRoot/getSelection +translation_of_original: Web/API/Document/getSelection +--- +

{{APIRef("DOM")}}

+ +

Esse método funciona de forma idêntica ao método {{domxref("Window.getSelection()")}};  Ele retorna um objeto {{domxref("Selection")}} representando o texto atualmente selecionado no documento.

diff --git a/files/pt-br/web/api/element/accesskey/index.html b/files/pt-br/web/api/element/accesskey/index.html deleted file mode 100644 index e0425e3645..0000000000 --- a/files/pt-br/web/api/element/accesskey/index.html +++ /dev/null @@ -1,19 +0,0 @@ ---- -title: Element.accessKey -slug: Web/API/Element/accessKey -translation_of: Web/API/HTMLElement/accessKey -translation_of_original: Web/API/Element/accessKey ---- -
{{APIRef("DOM")}}
- -
 
- -

A propriedade Element.accessKey define a tecla pelo qual o usuário pode pressionar para saltar para este elemento.

- -
-

Nota: A propriedade Element.accessKey é raramente usada por causa dos conflitos múltiplos com os atalhos pré-definidos nos navegadores. Para contornar isto, os navegadores implementam o comportamento da tecla de acesso se as teclas são pressionadas com outras teclas "qualificadas" (como Alt + tecla de acesso).

-
- -

 

- -

 

diff --git a/files/pt-br/web/api/element/addeventlistener/index.html b/files/pt-br/web/api/element/addeventlistener/index.html deleted file mode 100644 index fea1e67e7b..0000000000 --- a/files/pt-br/web/api/element/addeventlistener/index.html +++ /dev/null @@ -1,322 +0,0 @@ ---- -title: Element.addEventListener() -slug: Web/API/Element/addEventListener -translation_of: Web/API/EventTarget/addEventListener ---- -

{{apiref("DOM Events")}}

- -

addEventListener() registra uma única espera de evento em um único alvo. O alvo do evento pode ser um único elemento em um documento, o documento em si, uma janela, ou um XMLHttpRequest.

- -

Para registrar mais de uma espera de evento como alvo, chame addEventListener() para o mesmo alvo mas com diferentes tipos de evento ou captura de parâmetros.

- -

Sintaxe

- -
alvo.addEventListener(type,listener[, options]);
-alvo.addEventListener(type,listener[, useCapture, wantUntrusted {{ Non-standard_inline() }}]); // Gecko/Mozilla only
- -
-
type
-
Uma linha de texto que representa o tipo de evento a ser esperado.
-
listener
-
O objeto que recebe uma notificação quando um evento do tipo especificado ocorre. Esse objeto precisa implementar a interface do EventListener, ou simplesmente executar uma função JavaScript.
-
useCapture {{ optional_inline() }}
-
Se true, useCapture indica que o usuário deseja iniciar uma captura. Depois de iniciada a captura, todos os eventos do tipo especificado serão enviados à listener registrada antes de serem enviados à qualquer EventTarget abaixo dela na hierarquia de DOMs. Eventos que borbulharem para cima na hierarquia não acionarão a escuta designada  a usar a captura. Veja Eventos DOM Nível 3 para uma explicação detalhada. Perceba que esse parâmetro não é opcional em todos os navegadores. Se não for especificado, useCapture é false.
-
wantsUntrusted {{ Non-standard_inline() }}
-
Se true, o evento pode ser acionado por conteúdo não-confiável. Veja Interação entre páginas com e sem privilégios.
-
- -
Nota: useCapture tornou-se opcional somente nas versões mais recentes dos principais navegadores; não era opcional antes do Firefox 6, por exemplo. Você deve especificar esse parâmetro para obter uma maior compatibilidade.
- - -

Exemplo

- -
<!DOCTYPE html>
-<html>
-<head>
-<title>Exemplo de Evento DOM</title>
-
-<style>
-#t { border: 1px solid red }
-#t1 { background-color: pink; }
-</style>
-
-<script>
-// Função para mudar o conteúdo de t2
-function modifyText() {
-  var t2 = document.getElementById("t2");
-  t2.firstChild.nodeValue = "three";
-}
-
-// Função para adicionar uma espera de evento em t
-function load() {
-  var el = document.getElementById("t");
-  el.addEventListener("click", modifyText, false);
-}
-
-document.addEventListener("DOMContentLoaded", load, false);
-</script>
-
-</head>
-<body>
-
-<table id="t">
-   <tr><td id="t1">one</td></tr>
-   <tr><td id="t2">two</td></tr>
-</table>
-
-</body>
-</html>
-
- -

View on JSFiddle

- -

No exemplo acima, modifyText() é uma escuta para eventos de click registrados usando addEventListener(). Um clique em qualquer lugar da tabela irá borbulhar para cima até o manipulador e executar modifyText().

- -

Se você deseja passar parâmetros para a função de escuta, você deve usar uma função anônima.

- -
<!DOCTYPE html>
-<html>
-<head>
-<title>Exemplo de Evento DOM</title>
-
-<style>
-#t { border: 1px solid red }
-#t1 { background-color: pink; }
-</style>
-
-<script>
-
-// Função para mudar o conteúdo de t2
-function modifyText(new_text) {
-  var t2 = document.getElementById("t2");
-  t2.firstChild.nodeValue = new_text;
-}
-
-// Função para adicionar uma espera de evento em t
-function load() {
-  var el = document.getElementById("t");
-  el.addEventListener("click", function(){modifyText("four")}, false);
-}
-</script>
-
-</head>
-<body onload="load();">
-
-<table id="t">
-  <tr><td id="t1">one</td></tr>
-  <tr><td id="t2">two</td></tr>
-</table>
-
-</body>
-</html>
-
- -

Notas

- -

Por que usar addEventListener?

- -

addEventListener é a maneira de registrar uma espera de evento como especificada no W3C DOM. Seus benefícios são os seguintes:

- - - -

Existe outra alternativa, uma maneira ultrapassada de registrar esperas de evento.

- -

Adicionando uma espera de evento durante um disparo de evento

- -

Se um EventListener for somado a um EventTarget enquanto está processando um evento, ele não será ativado pelas ações atuais, mas poderá ser ativado em um período posterior no fluxo de eventos, como na fase de borbulha.

- -

Múltiplas esperas de evento idênticas

- -

Se múltiplas esperas de evento idênticas forem registradas no mesmo EventTarget com os mesmos parâmetros, as versões duplicadas serão descartadas. Elas não fazem o EventListener ser disparado mais de uma vez, e, como as duplicatas são descartadas, elas não precisam ser removidas manualmente com o método removeEventListener.

- -

O valor de this no manipulador

- -

É preferível referenciar o elemento do qual a espera de evento foi disparada, como quando é usado um manipulador genérico para uma série de elementos similares. Quando anexar uma função usando addEventListener(), o valor de this é mudado — perceba que o valor de this é passado para uma função a partir do disparador.

- -

Nos exemplos acima, o valor de this em modifyText(), quando disparado pelo evento de clique, é uma referência à tabela 't'. Isso é um contraste do comportamento que acontece se o manipulador é adicionado ao HTML fonte:

- -
<table id="t" onclick="modifyText();">
-  . . .
- -

O valor de this em modifyText(), quando disparado pelo evento de clique no HTML, será uma referência ao objeto global (no caso, a janela).

- -
Nota: JavaScript 1.8.5 introduz o método Function.prototype.bind(), que permite especificar o valor que deve ser usado como this para todas as chamadas à uma determinada função. Isso evita problemas quando não é claro o que this será, dependendo do contexto do qual a sua função for chamada. Perceba, entretanto, que é preciso manter uma referência da escuta à mão, para que depois você possa removê-la.
- -

Este é um exemplo com e sem bind:

- -
var Algo = function(elemento)
-{
-  this.nome = 'Algo bom';
-  this.onclick1 = function(evento) {
-    console.log(this.nome); // indefinido, porque this é a função de escuta do clique
-  };
-  this.onclick2 = function(evento) {
-    console.log(this.nome); // 'Algo bom', porque this está como objeto Algo através do bind
-  };
-  elemento.addEventListener('click', this.onclick1, false);
-  elemento.addEventListener('click', this.onclick2.bind(this), false); // Truque de bind
-}
-
- -

Outra solução é usar uma função especial chamada handleEvent para capturar quaisquer eventos:

- -
var Algo = function(elemento)
-{
-  this.nome = 'Algo bom';
-  this.handleEvent = function(evento) {
-    console.log(this.nome); // 'Algo bom', porque this é o objeto Algo
-    switch(evento.type) {
-      case 'click':
-        // seu codigo aqui...
-        break;
-      case 'dblclick':
-        // seu codigo aqui...
-        break;
-    }
-  };
-  elemento.addEventListener('click', this, false); // Não this.handleEvent, só this
-  elemento.addEventListener('dblclick', this, false); // Não this.handleEvent, só this
-}
-
- -

Internet Explorer antigos e attachEvent

- -

Em versões do Internet Explorer anteriores ao IE9, você precisa usar attachEvent em vez do padrão addEventListener. Para dar suporte ao IE, o exemplo acima pode ser modificado para:

- -
if (el.addEventListener) {
-  el.addEventListener('click', modifyText, false);
-} else if (el.attachEvent)  {
-  el.attachEvent('onclick', modifyText);
-}
-
- -

Existe um porém com attachEvent: o valor de this será a referência ao objeto window em vez do elemento do qual foi disparado.

- -

Uma maneira ultrapassada de registrar esperas de evento

- -

addEventListener() foi introduzido com as especificações de Eventos DOM 2. Antes disso, esperas de evento eram registradas assim:

- -
// Passe uma função de referência — não adicione '()' depois dela, o que chamaria a função!
-el.onclick = modifyText;
-
-// Usando uma expressão de função
-element.onclick = function() {
-    // ... lógica da função ...
-};
-
- -

Esse método substitui as esperar de evento de click no elemento, se houve alguma. Igualmente para outros outros eventos e manipuladores de evento associados, como blur (onblur), keypress (onkeypress), e assim por diante.

- -

Porque era essencialmente uma parte do DOM 0, esse método era largamente suportado e não necessitava de códigos entre-navegadores especiais; logo é normalmente usado para registrar esperas de evento dinâmicamente, a menos que atributos extras do addEventListener() sejam necessários.

- -

Problemas de memória

- -
var i;
-var els = document.getElementsByTagName('*');
-
-// Caso 1
-for(i=0 ; i<els.length ; i++){
-  els[i].addEventListener("click", function(e){/*fazer algo*/}, false});
-}
-
-// Caso 2
-function processarEvento(e){
-  /*fazer algo*/
-}
-
-for(i=0 ; i<els.length ; i++){
-  els[i].addEventListener("click", processarEvento, false});
-}
-
-
- -

No primeiro caso, uma nova função (anônima) é criada em cada turno do loop. No segundo caso, a mesma função previamente declarada é usada como um manipulador de evento. Isso resulta em um consumo menor de memória. Além do mais, no primeiro caso, já que nenhuma referência à função anônima é mantida, não é possível chamar element.removeEventListener porque não há uma referência ao manipulador, enquanto no segundo caso é possível fazer myElement.removeEventListener("click", processEvent, false).

- -

Compatiblidade de navegadores

- -

{{ CompatibilityTable() }}

- -
- - - - - - - - - - - - - - - - - - - - - - - - - - - -
CaracterísticaChromeFirefox (Gecko)Internet ExplorerOperaSafari (WebKit)
Suporte básico1.0{{ CompatGeckoDesktop(1.0) }}9.071.0
useCapture é opcional1.06.09.011.60{{ CompatVersionUnknown() }}
-
- -
- - - - - - - - - - - - - - - - - - - -
CaracterísticaAndroidFirefox Mobile (Gecko)IE MobileOpera MobileSafari Mobile
Suporte básico1.0{{ CompatGeckoMobile(1.0) }}9.06.01.0
-
- -

Notas Gecko

- - - -

Notas Webkit

- - - -

Veja também

- - - -

Especificação

- - diff --git a/files/pt-br/web/api/element/blur_event/index.html b/files/pt-br/web/api/element/blur_event/index.html new file mode 100644 index 0000000000..7eb9263be2 --- /dev/null +++ b/files/pt-br/web/api/element/blur_event/index.html @@ -0,0 +1,154 @@ +--- +title: blur (evento) +slug: Web/Events/blur +translation_of: Web/API/Element/blur_event +--- +

O evento blur é acionado quando um elemento perde foco. A diferença principal entre este evento e focusout é que apenas o segundo 'borbulha'.

+ +

Informação geral

+ +
+
Especificação
+
DOM L3
+
Interface
+
{{domxref("FocusEvent")}}
+
Borbulha
+
Não
+
Cancelável
+
Não
+
Alvo
+
Elemento
+
Ação padrão
+
Nenhuma
+
+ +

{{NoteStart}}O valor de {{domxref("Document.activeElement")}} varia entre navegadores enquanto este evento é processado ({{bug(452307)}}): O IE10 define-o para o elemento para onde o foco moverá, enquanto Firefox e Chrome muitas vezes definem-o para o body do documento.{{NoteEnd}}

+ +

Propriedades

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
PropertyTypeDescription
target {{readonlyInline}}{{domxref("EventTarget")}}Event target (DOM element)
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.
relatedTarget {{readonlyInline}}{{domxref("EventTarget")}} (DOM element)null
+ +

Delegação do evento

+ +

Existem duas maneiras de implementar a delegação de eventos para este evento: usando o evento focusout nos navegadores que suportam-o, ou definindo o parâmetro "useCapture" do addEventListener para true:

+ +

Conteúdo HTML 

+ +
<form id="form">
+  <input type="text" placeholder="text input">
+  <input type="password" placeholder="password">
+</form>
+ +

Conteúdo JavaScript

+ +
var form = document.getElementById("form");
+form.addEventListener("focus", function( event ) {
+  event.target.style.background = "pink";
+}, true);
+form.addEventListener("blur", function( event ) {
+  event.target.style.background = "";
+}, true);
+ +

{{EmbedLiveSample('Event_delegation')}}

+ +

Compatibilidade entre navegadores

+ +
{{CompatibilityTable}}
+ +
+ + + + + + + + + + + + + + + + + + + + + +
FeatureChromeEdgeFirefox (Gecko)Internet ExplorerOperaSafari
Suporte básico5{{CompatVersionUnknown}}{{CompatVersionUnknown}}[1]612.15.1
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + +
FeatureAndroidChrome para AndroidEdgeFirefox Mobile (Gecko)IE MobileOpera MobileSafari Mobile
Suporte básico4.053{{CompatVersionUnknown}}{{CompatUnknown}}10.012.15.1
+
+ +

[1] Antes do Gecko 24 {{geckoRelease(24)}} a interface para este elemento era {{domxref("Event")}}, não {{domxref("FocusEvent")}}. Veja ({{bug(855741)}}).

+ +

Eventos relacionados

+ + diff --git a/files/pt-br/web/api/element/focus_event/index.html b/files/pt-br/web/api/element/focus_event/index.html new file mode 100644 index 0000000000..9f6dd7117d --- /dev/null +++ b/files/pt-br/web/api/element/focus_event/index.html @@ -0,0 +1,137 @@ +--- +title: focus +slug: Web/Events/focus +translation_of: Web/API/Element/focus_event +--- +

O evento focus é acionado assim que um elemento recebe um foco. O grande diferencial entre este evento e o evento focusin, é que esse segundo "borbulha".

+ +

Informações Gerais

+ +
+
Especificação
+
DOM L3
+
Interface
+
{{ domxref("FocusEvent") }}
+
Borbulha
+
Não
+
Cancelável
+
Não
+
Alvo
+
Element
+
Ação Padrão
+
Nenhuma.
+
+ +
Note: The interface was {{ domxref("Event") }} prior to Gecko 24 {{ geckoRelease(24) }}. ({{ bug(855741) }})
+ +

Propriedades

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
PropertyTypeDescription
target {{readonlyInline}}{{domxref("EventTarget")}}Event target (DOM element)
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.
relatedTarget {{readonlyInline}}{{domxref("EventTarget")}} (DOM element)null
+ +

Eventos Delegados

+ +

Existem 2 maneiras diferentes de implementações delegados a partir de um evento: por meio da utilização do evento  focusin que todos os browsers atuais suportam tão tecnologia (todos exceto o Firefox), ou por setando o parâmetro "useCapture" do elemento  addEventListener  como true:

+ +

{{ EmbedLiveSample('Event_delegation', '', '', '', 'Web/Events/blur') }}

+ +

(Exemplo de codigo do evento blur (event))

+ +

Compatibilidade de Browser

+ +
{{CompatibilityTable}}
+ +
+ + + + + + + + + + + + + + + + + + + + + +
FeatureChromeEdgeFirefox (Gecko)Internet ExplorerOperaSafari
Basic support{{CompatVersionUnknown()}}{{CompatVersionUnknown()}}{{CompatVersionUnknown()}}{{CompatVersionUnknown()}}{{CompatVersionUnknown()}}{{CompatVersionUnknown()}}
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + +
FeatureAndroidChrome for AndroidEdgeFirefox Mobile (Gecko)IE MobileOpera MobileSafari Mobile
Basic support{{CompatUnknown()}}{{CompatUnknown()}}{{CompatUnknown()}}{{CompatUnknown()}}{{CompatUnknown()}}{{CompatUnknown()}}{{CompatUnknown()}}
+
+ +

Eventos Relacionais

+ + diff --git a/files/pt-br/web/api/element/focusin_event/index.html b/files/pt-br/web/api/element/focusin_event/index.html new file mode 100644 index 0000000000..797424de54 --- /dev/null +++ b/files/pt-br/web/api/element/focusin_event/index.html @@ -0,0 +1,125 @@ +--- +title: focusin +slug: Web/Events/focusin +translation_of: Web/API/Element/focusin_event +--- +

O evento focusin é acionado no momento em que o elemento receba o foco. A grande diferença entre esse evento e o evento  focus, é que apenas o focusin delega o seu evento para o elemento pai (conhecido como bubbling ou deletegate).

+ +

Informações Gerais

+ +
+
Especificação
+
DOM L3
+
Interface
+
{{domxref("FocusEvent")}}
+
Borbulha
+
Sim
+
Cancelável
+
Não
+
Alvo
+
Element
+
Ação Padrão
+
Nenhuma.
+
+ +

Propriedades

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
PropertyTypeDescription
target {{readonlyInline}}{{domxref("EventTarget")}}Event target losing focus.
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.
relatedTarget {{readonlyInline}}{{domxref("EventTarget")}} (DOM element)Event target receiving focus.
+ +

Compatibilidade com Demais Navegadores

+ +

{{CompatibilityTable}}

+ +
+ + + + + + + + + + + + + + + + + + + + + +
FeatureChromeEdgeFirefox (Gecko)Internet ExplorerOperaSafari
Basic support{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatGeckoDesktop(52)}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}
+
+ +
+ + + + + + + + + + + + + + + + + + + + + +
FeatureAndroidEdgeFirefox Mobile (Gecko)IE MobileOpera MobileSafari Mobile
Basic support{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatGeckoMobile(52)}}{{CompatVersionUnknown}}{{CompatUnknown}}{{CompatVersionUnknown}}
+
+ +

Eventos Relacionais

+ + diff --git a/files/pt-br/web/api/element/focusout_event/index.html b/files/pt-br/web/api/element/focusout_event/index.html new file mode 100644 index 0000000000..8f72b211b2 --- /dev/null +++ b/files/pt-br/web/api/element/focusout_event/index.html @@ -0,0 +1,125 @@ +--- +title: focusout +slug: Web/Events/focusout +translation_of: Web/API/Element/focusout_event +--- +

O evento focusout é acionado assim que o elemento perde o foco. A principal diferença entre esse evento e o evento blur, é que esse ultimo não gera "borbulhas".

+ +

Informações Gerais

+ +
+
Especificação
+
DOM L3
+
Interface
+
{{domxref("FocusEvent")}}
+
Borbulha
+
Sim
+
Cancelável
+
Não
+
Alvo
+
Element
+
Ação Padrão
+
Nenhuma.
+
+ +

Propriedades

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
PropertyTypeDescription
target {{readonlyInline}}{{domxref("EventTarget")}}Event target losing focus.
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.
relatedTarget {{readonlyInline}}{{domxref("EventTarget")}} (DOM element)Event target receiving focus.
+ +

Compatibilidade dos Navegadores

+ +

{{CompatibilityTable}}

+ +
+ + + + + + + + + + + + + + + + + + + + + +
FeatureChromeEdgeFirefox (Gecko)Internet ExplorerOperaSafari
Basic support{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatGeckoDesktop(52)}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}
+
+ +
+ + + + + + + + + + + + + + + + + + + + + +
FeatureAndroidEdgeFirefox Mobile (Gecko)IE MobileOpera MobileSafari Mobile
Basic support{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatGeckoMobile(52)}}{{CompatVersionUnknown}}{{CompatUnknown}}{{CompatVersionUnknown}}
+
+ +

Eventos Relcionados

+ + diff --git a/files/pt-br/web/api/element/name/index.html b/files/pt-br/web/api/element/name/index.html deleted file mode 100644 index 93f5faee9a..0000000000 --- a/files/pt-br/web/api/element/name/index.html +++ /dev/null @@ -1,80 +0,0 @@ ---- -title: Element.name -slug: Web/API/Element/name -tags: - - API - - DOM - - Element - - NeedsBrowserCompatibility - - NeedsUpdate - - Property - - Reference - - Web -translation_of: Web/API -translation_of_original: Web/API/Element/name ---- -

{{ APIRef("DOM") }}

- -

Summary

- -

name recebe ou ajusta uma propriedade name de um objeto do DOM; ele se aplica somente aos seguintes elementos: {{ HTMLelement("a") }}, {{ HTMLelement("applet") }}, {{ HTMLelement("button") }}, {{ HTMLelement("form") }}, {{ HTMLelement("frame") }}, {{ HTMLelement("iframe") }}, {{ HTMLelement("img") }}, {{ HTMLelement("input") }}, {{ HTMLelement("map") }}, {{ HTMLelement("meta") }}, {{ HTMLelement("object") }}, {{ HTMLelement("param") }}, {{ HTMLelement("select") }} e {{ HTMLelement("textarea") }}.

- -
-

Nota: A propriedade name não existe para outros elementos; diferente de tagName e nodeName, ela não é uma propriedade das interfaces {{domxref("Node")}}, {{domxref("Element")}} ou {{domxref("HTMLElement")}}.

-
- -

name pode ser usada no método {{ domxref("document.getElementsByName()") }}, em um form ou com uma coleção de elementos de formulário. Ela pode retornar um único elemento ou uma coleção quando usada com um formulário ou elementos de coleção.

- -

Sintaxe

- -
HTMLElement.name = string;
-var elName = HTMLElement.name;
-
-var fControl = HTMLFormElement.elementName;
-var controlCollection = HTMLFormElement.elements.elementName;
-
- -

Exemplo

- -
<form action="" name="formA">
-  <input type="text" value="foo">
-</form>
-
-<script type="text/javascript">
-
-  // Recebe uma referência ao primeiro elemento no formulário
-  var formElement = document.forms['formA'].elements[0];
-
-  // Fornece um name a ele
-  formElement.name = 'inputA';
-
-  // Exibe o valor do input
-  alert(document.forms['formA'].elements['inputA'].value);
-
-</script>
-
- -

Notas

- -

No Internet Explorer (IE), não é possível ajustar ou modificar a propriedade name de objetos do DOM criados com {{ domxref("document.createElement()") }}.

- -

Especificação

- -

Especificação W3C DOM 2 HTML:

- - diff --git a/files/pt-br/web/api/event/comparativo_entre_event_targets/index.html b/files/pt-br/web/api/event/comparativo_entre_event_targets/index.html deleted file mode 100644 index e9b2004719..0000000000 --- a/files/pt-br/web/api/event/comparativo_entre_event_targets/index.html +++ /dev/null @@ -1,167 +0,0 @@ ---- -title: Comparativo entre Event Targets -slug: Web/API/Event/Comparativo_entre_Event_Targets -tags: - - DOM - - Event - - event target -translation_of: Web/API/Event/Comparison_of_Event_Targets ---- -
{{ ApiRef() }}
- -

Event targets

- -

É facil se confundir sobre o tipo de alvo (target) que deseja-se examinar ao criar um manipulador de eventos (event handler). Este artigo se propõe a esclarecer o uso da propriedade target.

- -

Há 5 tipos de targets a se considerar:

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
PropriedadeDefinido emObjetivo
event.targetDOM Event Interface -

O elemento do DOM à esquerda da chamada que disparou este evento, por exemplo:

- -
-element.dispatchEvent(event)
-
-
event.currentTargetDOM Event InterfaceO EventTarget do qual o EventListeners está sendo atualmente processado. Logo que a captura e a subida do evento ocorre a mudança deste valor.
event.relatedTargetDOM MouseEvent InterfaceIdentifica um alvo secundário para o evento.
event.explicitOriginalTarget{{ Source("/dom/public/idl/events/nsIDOMNSEvent.idl", "nsIDOMNSEvent.idl") }}{{ Non-standard_inline() }} Se o evento foi redirecionado por alguma outra razão senão o cruzamento de uma fronteira anônima, este evento será colocado no alvo antes que o redirecionamento ocorra. por exemplo, eventos do mouse são redirecionados à seus elementos pais quando acontecem sobre nós de texto ({{ Bug("185889") }}), e neste caso .target mostrará o nó pai e .explicitOriginalTarget mostrará o nó texto. Diferente de .originalTarget, .explicitOriginalTarget nunca irá conter um conteúdo anônimo.
event.originalTarget{{ Source("/dom/public/idl/events/nsIDOMNSEvent.idl", "nsIDOMNSEvent.idl") }}{{ Non-standard_inline() }} O alvo original do evento, antes de qualquer redirecionamento. Veja Anonymous Content#Event_Flow_and_Targeting para mais detalhes.
- -

Uso de explicitOriginalTarget e originalTarget

- -

TODO: Disponível apensas em navegadores Mozilla-based?

- -

TODO: Adequado apenas para desenvolvedores de extensões?

- -

Exemplos

- -
<!DOCTYPE html>
-<html>
-<head>
-    <meta charset="utf-8">
-    <meta http-equiv="X-UA-Compatible" content="IE=edge">
-    <title>Comparison of Event Targets</title>
-    <style>
-        table {
-            border-collapse: collapse;
-            height: 150px;
-            width: 100%;
-        }
-        td {
-            border: 1px solid #ccc;
-            font-weight: bold;
-            padding: 5px;
-            min-height: 30px;
-        }
-        .standard {
-            background-color: #99ff99;
-        }
-        .non-standard {
-            background-color: #902D37;
-        }
-    </style>
-</head>
-<body>
-    <table>
-    <thead>
-        <tr>
-            <td class="standard">Original target dispatching the event <small>event.target</small></td>
-            <td class="standard">Target who's event listener is being processed <small>event.currentTarget</small></td>
-            <td class="standard">Identify other element (if any) involved in the event <small>event.relatedTarget</small></td>
-            <td class="non-standard">If there was a retargetting of the event for some reason <small> event.explicitOriginalTarget</small> contains the target before retargetting (never contains anonymous targets)</td>
-            <td class="non-standard">If there was a retargetting of the event for some reason <small> event.originalTarget</small> contains the target before retargetting (may contain anonymous targets)</td>
-        </tr>
-    </thead>
-    <tr>
-        <td id="target"></td>
-        <td id="currentTarget"></td>
-        <td id="relatedTarget"></td>
-        <td id="explicitOriginalTarget"></td>
-        <td id="originalTarget"></td>
-    </tr>
-</table>
-<p>Clicking on the text will show the difference between explicitOriginalTarget, originalTarget and target</p>
-<script>
-    function handleClicks(e) {
-        document.getElementById('target').innerHTML = e.target;
-        document.getElementById('currentTarget').innerHTML = e.currentTarget;
-        document.getElementById('relatedTarget').innerHTML = e.relatedTarget;
-        document.getElementById('explicitOriginalTarget').innerHTML = e.explicitOriginalTarget;
-        document.getElementById('originalTarget').innerHTML = e.originalTarget;
-    }
-
-    function handleMouseover(e) {
-        document.getElementById('target').innerHTML = e.target;
-        document.getElementById('relatedTarget').innerHTML = e.relatedTarget;
-    }
-
-    document.addEventListener('click', handleClicks, false);
-    document.addEventListener('mouseover', handleMouseover, false);
-</script>
-</body>
-</html>
- -

Uso de target e relatedTarget

- -

A propriedade relatedTarget do evento de mouseover mantém o nó de onde o mouse estava sobre anteriormente. Para o evento de mouseout, mantém o nó para onde o mouse se moveu.

- - - - - - - - - - - - - - - - - - - -
Tipo de Eventoevent.targetevent.relatedTarget
mouseoverO EventTarget do qual o dispositivo apontador entrou.O EventTarget do qual o dispositivo apontador saiu.
mouseoutO EventTarget do qual o dispositivo apontador saiu.O EventTarget do qual o dispositivo apontador entrou.
- -

TODO: Necessário descrição complemento sobre eventos de dragenter e dragexit.

- -

Exemplo

- -
<hbox id="outer">
-  <hbox id="inner"
-        onmouseover="dump('mouseover ' + event.relatedTarget.id + ' > ' + event.target.id + '\n');"
-        onmouseout="dump('mouseout  ' + event.target.id + ' > ' + event.relatedTarget.id + '\n');"
-        style="margin: 100px; border: 10px solid black; width: 100px; height: 100px;" />
-</hbox>
-
diff --git a/files/pt-br/web/api/event/comparison_of_event_targets/index.html b/files/pt-br/web/api/event/comparison_of_event_targets/index.html new file mode 100644 index 0000000000..e9b2004719 --- /dev/null +++ b/files/pt-br/web/api/event/comparison_of_event_targets/index.html @@ -0,0 +1,167 @@ +--- +title: Comparativo entre Event Targets +slug: Web/API/Event/Comparativo_entre_Event_Targets +tags: + - DOM + - Event + - event target +translation_of: Web/API/Event/Comparison_of_Event_Targets +--- +
{{ ApiRef() }}
+ +

Event targets

+ +

É facil se confundir sobre o tipo de alvo (target) que deseja-se examinar ao criar um manipulador de eventos (event handler). Este artigo se propõe a esclarecer o uso da propriedade target.

+ +

Há 5 tipos de targets a se considerar:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
PropriedadeDefinido emObjetivo
event.targetDOM Event Interface +

O elemento do DOM à esquerda da chamada que disparou este evento, por exemplo:

+ +
+element.dispatchEvent(event)
+
+
event.currentTargetDOM Event InterfaceO EventTarget do qual o EventListeners está sendo atualmente processado. Logo que a captura e a subida do evento ocorre a mudança deste valor.
event.relatedTargetDOM MouseEvent InterfaceIdentifica um alvo secundário para o evento.
event.explicitOriginalTarget{{ Source("/dom/public/idl/events/nsIDOMNSEvent.idl", "nsIDOMNSEvent.idl") }}{{ Non-standard_inline() }} Se o evento foi redirecionado por alguma outra razão senão o cruzamento de uma fronteira anônima, este evento será colocado no alvo antes que o redirecionamento ocorra. por exemplo, eventos do mouse são redirecionados à seus elementos pais quando acontecem sobre nós de texto ({{ Bug("185889") }}), e neste caso .target mostrará o nó pai e .explicitOriginalTarget mostrará o nó texto. Diferente de .originalTarget, .explicitOriginalTarget nunca irá conter um conteúdo anônimo.
event.originalTarget{{ Source("/dom/public/idl/events/nsIDOMNSEvent.idl", "nsIDOMNSEvent.idl") }}{{ Non-standard_inline() }} O alvo original do evento, antes de qualquer redirecionamento. Veja Anonymous Content#Event_Flow_and_Targeting para mais detalhes.
+ +

Uso de explicitOriginalTarget e originalTarget

+ +

TODO: Disponível apensas em navegadores Mozilla-based?

+ +

TODO: Adequado apenas para desenvolvedores de extensões?

+ +

Exemplos

+ +
<!DOCTYPE html>
+<html>
+<head>
+    <meta charset="utf-8">
+    <meta http-equiv="X-UA-Compatible" content="IE=edge">
+    <title>Comparison of Event Targets</title>
+    <style>
+        table {
+            border-collapse: collapse;
+            height: 150px;
+            width: 100%;
+        }
+        td {
+            border: 1px solid #ccc;
+            font-weight: bold;
+            padding: 5px;
+            min-height: 30px;
+        }
+        .standard {
+            background-color: #99ff99;
+        }
+        .non-standard {
+            background-color: #902D37;
+        }
+    </style>
+</head>
+<body>
+    <table>
+    <thead>
+        <tr>
+            <td class="standard">Original target dispatching the event <small>event.target</small></td>
+            <td class="standard">Target who's event listener is being processed <small>event.currentTarget</small></td>
+            <td class="standard">Identify other element (if any) involved in the event <small>event.relatedTarget</small></td>
+            <td class="non-standard">If there was a retargetting of the event for some reason <small> event.explicitOriginalTarget</small> contains the target before retargetting (never contains anonymous targets)</td>
+            <td class="non-standard">If there was a retargetting of the event for some reason <small> event.originalTarget</small> contains the target before retargetting (may contain anonymous targets)</td>
+        </tr>
+    </thead>
+    <tr>
+        <td id="target"></td>
+        <td id="currentTarget"></td>
+        <td id="relatedTarget"></td>
+        <td id="explicitOriginalTarget"></td>
+        <td id="originalTarget"></td>
+    </tr>
+</table>
+<p>Clicking on the text will show the difference between explicitOriginalTarget, originalTarget and target</p>
+<script>
+    function handleClicks(e) {
+        document.getElementById('target').innerHTML = e.target;
+        document.getElementById('currentTarget').innerHTML = e.currentTarget;
+        document.getElementById('relatedTarget').innerHTML = e.relatedTarget;
+        document.getElementById('explicitOriginalTarget').innerHTML = e.explicitOriginalTarget;
+        document.getElementById('originalTarget').innerHTML = e.originalTarget;
+    }
+
+    function handleMouseover(e) {
+        document.getElementById('target').innerHTML = e.target;
+        document.getElementById('relatedTarget').innerHTML = e.relatedTarget;
+    }
+
+    document.addEventListener('click', handleClicks, false);
+    document.addEventListener('mouseover', handleMouseover, false);
+</script>
+</body>
+</html>
+ +

Uso de target e relatedTarget

+ +

A propriedade relatedTarget do evento de mouseover mantém o nó de onde o mouse estava sobre anteriormente. Para o evento de mouseout, mantém o nó para onde o mouse se moveu.

+ + + + + + + + + + + + + + + + + + + +
Tipo de Eventoevent.targetevent.relatedTarget
mouseoverO EventTarget do qual o dispositivo apontador entrou.O EventTarget do qual o dispositivo apontador saiu.
mouseoutO EventTarget do qual o dispositivo apontador saiu.O EventTarget do qual o dispositivo apontador entrou.
+ +

TODO: Necessário descrição complemento sobre eventos de dragenter e dragexit.

+ +

Exemplo

+ +
<hbox id="outer">
+  <hbox id="inner"
+        onmouseover="dump('mouseover ' + event.relatedTarget.id + ' > ' + event.target.id + '\n');"
+        onmouseout="dump('mouseout  ' + event.target.id + ' > ' + event.relatedTarget.id + '\n');"
+        style="margin: 100px; border: 10px solid black; width: 100px; height: 100px;" />
+</hbox>
+
diff --git a/files/pt-br/web/api/eventtarget/addeventlistener/index.html b/files/pt-br/web/api/eventtarget/addeventlistener/index.html new file mode 100644 index 0000000000..fea1e67e7b --- /dev/null +++ b/files/pt-br/web/api/eventtarget/addeventlistener/index.html @@ -0,0 +1,322 @@ +--- +title: Element.addEventListener() +slug: Web/API/Element/addEventListener +translation_of: Web/API/EventTarget/addEventListener +--- +

{{apiref("DOM Events")}}

+ +

addEventListener() registra uma única espera de evento em um único alvo. O alvo do evento pode ser um único elemento em um documento, o documento em si, uma janela, ou um XMLHttpRequest.

+ +

Para registrar mais de uma espera de evento como alvo, chame addEventListener() para o mesmo alvo mas com diferentes tipos de evento ou captura de parâmetros.

+ +

Sintaxe

+ +
alvo.addEventListener(type,listener[, options]);
+alvo.addEventListener(type,listener[, useCapture, wantUntrusted {{ Non-standard_inline() }}]); // Gecko/Mozilla only
+ +
+
type
+
Uma linha de texto que representa o tipo de evento a ser esperado.
+
listener
+
O objeto que recebe uma notificação quando um evento do tipo especificado ocorre. Esse objeto precisa implementar a interface do EventListener, ou simplesmente executar uma função JavaScript.
+
useCapture {{ optional_inline() }}
+
Se true, useCapture indica que o usuário deseja iniciar uma captura. Depois de iniciada a captura, todos os eventos do tipo especificado serão enviados à listener registrada antes de serem enviados à qualquer EventTarget abaixo dela na hierarquia de DOMs. Eventos que borbulharem para cima na hierarquia não acionarão a escuta designada  a usar a captura. Veja Eventos DOM Nível 3 para uma explicação detalhada. Perceba que esse parâmetro não é opcional em todos os navegadores. Se não for especificado, useCapture é false.
+
wantsUntrusted {{ Non-standard_inline() }}
+
Se true, o evento pode ser acionado por conteúdo não-confiável. Veja Interação entre páginas com e sem privilégios.
+
+ +
Nota: useCapture tornou-se opcional somente nas versões mais recentes dos principais navegadores; não era opcional antes do Firefox 6, por exemplo. Você deve especificar esse parâmetro para obter uma maior compatibilidade.
+ + +

Exemplo

+ +
<!DOCTYPE html>
+<html>
+<head>
+<title>Exemplo de Evento DOM</title>
+
+<style>
+#t { border: 1px solid red }
+#t1 { background-color: pink; }
+</style>
+
+<script>
+// Função para mudar o conteúdo de t2
+function modifyText() {
+  var t2 = document.getElementById("t2");
+  t2.firstChild.nodeValue = "three";
+}
+
+// Função para adicionar uma espera de evento em t
+function load() {
+  var el = document.getElementById("t");
+  el.addEventListener("click", modifyText, false);
+}
+
+document.addEventListener("DOMContentLoaded", load, false);
+</script>
+
+</head>
+<body>
+
+<table id="t">
+   <tr><td id="t1">one</td></tr>
+   <tr><td id="t2">two</td></tr>
+</table>
+
+</body>
+</html>
+
+ +

View on JSFiddle

+ +

No exemplo acima, modifyText() é uma escuta para eventos de click registrados usando addEventListener(). Um clique em qualquer lugar da tabela irá borbulhar para cima até o manipulador e executar modifyText().

+ +

Se você deseja passar parâmetros para a função de escuta, você deve usar uma função anônima.

+ +
<!DOCTYPE html>
+<html>
+<head>
+<title>Exemplo de Evento DOM</title>
+
+<style>
+#t { border: 1px solid red }
+#t1 { background-color: pink; }
+</style>
+
+<script>
+
+// Função para mudar o conteúdo de t2
+function modifyText(new_text) {
+  var t2 = document.getElementById("t2");
+  t2.firstChild.nodeValue = new_text;
+}
+
+// Função para adicionar uma espera de evento em t
+function load() {
+  var el = document.getElementById("t");
+  el.addEventListener("click", function(){modifyText("four")}, false);
+}
+</script>
+
+</head>
+<body onload="load();">
+
+<table id="t">
+  <tr><td id="t1">one</td></tr>
+  <tr><td id="t2">two</td></tr>
+</table>
+
+</body>
+</html>
+
+ +

Notas

+ +

Por que usar addEventListener?

+ +

addEventListener é a maneira de registrar uma espera de evento como especificada no W3C DOM. Seus benefícios são os seguintes:

+ + + +

Existe outra alternativa, uma maneira ultrapassada de registrar esperas de evento.

+ +

Adicionando uma espera de evento durante um disparo de evento

+ +

Se um EventListener for somado a um EventTarget enquanto está processando um evento, ele não será ativado pelas ações atuais, mas poderá ser ativado em um período posterior no fluxo de eventos, como na fase de borbulha.

+ +

Múltiplas esperas de evento idênticas

+ +

Se múltiplas esperas de evento idênticas forem registradas no mesmo EventTarget com os mesmos parâmetros, as versões duplicadas serão descartadas. Elas não fazem o EventListener ser disparado mais de uma vez, e, como as duplicatas são descartadas, elas não precisam ser removidas manualmente com o método removeEventListener.

+ +

O valor de this no manipulador

+ +

É preferível referenciar o elemento do qual a espera de evento foi disparada, como quando é usado um manipulador genérico para uma série de elementos similares. Quando anexar uma função usando addEventListener(), o valor de this é mudado — perceba que o valor de this é passado para uma função a partir do disparador.

+ +

Nos exemplos acima, o valor de this em modifyText(), quando disparado pelo evento de clique, é uma referência à tabela 't'. Isso é um contraste do comportamento que acontece se o manipulador é adicionado ao HTML fonte:

+ +
<table id="t" onclick="modifyText();">
+  . . .
+ +

O valor de this em modifyText(), quando disparado pelo evento de clique no HTML, será uma referência ao objeto global (no caso, a janela).

+ +
Nota: JavaScript 1.8.5 introduz o método Function.prototype.bind(), que permite especificar o valor que deve ser usado como this para todas as chamadas à uma determinada função. Isso evita problemas quando não é claro o que this será, dependendo do contexto do qual a sua função for chamada. Perceba, entretanto, que é preciso manter uma referência da escuta à mão, para que depois você possa removê-la.
+ +

Este é um exemplo com e sem bind:

+ +
var Algo = function(elemento)
+{
+  this.nome = 'Algo bom';
+  this.onclick1 = function(evento) {
+    console.log(this.nome); // indefinido, porque this é a função de escuta do clique
+  };
+  this.onclick2 = function(evento) {
+    console.log(this.nome); // 'Algo bom', porque this está como objeto Algo através do bind
+  };
+  elemento.addEventListener('click', this.onclick1, false);
+  elemento.addEventListener('click', this.onclick2.bind(this), false); // Truque de bind
+}
+
+ +

Outra solução é usar uma função especial chamada handleEvent para capturar quaisquer eventos:

+ +
var Algo = function(elemento)
+{
+  this.nome = 'Algo bom';
+  this.handleEvent = function(evento) {
+    console.log(this.nome); // 'Algo bom', porque this é o objeto Algo
+    switch(evento.type) {
+      case 'click':
+        // seu codigo aqui...
+        break;
+      case 'dblclick':
+        // seu codigo aqui...
+        break;
+    }
+  };
+  elemento.addEventListener('click', this, false); // Não this.handleEvent, só this
+  elemento.addEventListener('dblclick', this, false); // Não this.handleEvent, só this
+}
+
+ +

Internet Explorer antigos e attachEvent

+ +

Em versões do Internet Explorer anteriores ao IE9, você precisa usar attachEvent em vez do padrão addEventListener. Para dar suporte ao IE, o exemplo acima pode ser modificado para:

+ +
if (el.addEventListener) {
+  el.addEventListener('click', modifyText, false);
+} else if (el.attachEvent)  {
+  el.attachEvent('onclick', modifyText);
+}
+
+ +

Existe um porém com attachEvent: o valor de this será a referência ao objeto window em vez do elemento do qual foi disparado.

+ +

Uma maneira ultrapassada de registrar esperas de evento

+ +

addEventListener() foi introduzido com as especificações de Eventos DOM 2. Antes disso, esperas de evento eram registradas assim:

+ +
// Passe uma função de referência — não adicione '()' depois dela, o que chamaria a função!
+el.onclick = modifyText;
+
+// Usando uma expressão de função
+element.onclick = function() {
+    // ... lógica da função ...
+};
+
+ +

Esse método substitui as esperar de evento de click no elemento, se houve alguma. Igualmente para outros outros eventos e manipuladores de evento associados, como blur (onblur), keypress (onkeypress), e assim por diante.

+ +

Porque era essencialmente uma parte do DOM 0, esse método era largamente suportado e não necessitava de códigos entre-navegadores especiais; logo é normalmente usado para registrar esperas de evento dinâmicamente, a menos que atributos extras do addEventListener() sejam necessários.

+ +

Problemas de memória

+ +
var i;
+var els = document.getElementsByTagName('*');
+
+// Caso 1
+for(i=0 ; i<els.length ; i++){
+  els[i].addEventListener("click", function(e){/*fazer algo*/}, false});
+}
+
+// Caso 2
+function processarEvento(e){
+  /*fazer algo*/
+}
+
+for(i=0 ; i<els.length ; i++){
+  els[i].addEventListener("click", processarEvento, false});
+}
+
+
+ +

No primeiro caso, uma nova função (anônima) é criada em cada turno do loop. No segundo caso, a mesma função previamente declarada é usada como um manipulador de evento. Isso resulta em um consumo menor de memória. Além do mais, no primeiro caso, já que nenhuma referência à função anônima é mantida, não é possível chamar element.removeEventListener porque não há uma referência ao manipulador, enquanto no segundo caso é possível fazer myElement.removeEventListener("click", processEvent, false).

+ +

Compatiblidade de navegadores

+ +

{{ CompatibilityTable() }}

+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
CaracterísticaChromeFirefox (Gecko)Internet ExplorerOperaSafari (WebKit)
Suporte básico1.0{{ CompatGeckoDesktop(1.0) }}9.071.0
useCapture é opcional1.06.09.011.60{{ CompatVersionUnknown() }}
+
+ +
+ + + + + + + + + + + + + + + + + + + +
CaracterísticaAndroidFirefox Mobile (Gecko)IE MobileOpera MobileSafari Mobile
Suporte básico1.0{{ CompatGeckoMobile(1.0) }}9.06.01.0
+
+ +

Notas Gecko

+ + + +

Notas Webkit

+ + + +

Veja também

+ + + +

Especificação

+ + diff --git a/files/pt-br/web/api/fetch_api/cross-global_fetch_usage/index.html b/files/pt-br/web/api/fetch_api/cross-global_fetch_usage/index.html new file mode 100644 index 0000000000..c569966b5a --- /dev/null +++ b/files/pt-br/web/api/fetch_api/cross-global_fetch_usage/index.html @@ -0,0 +1,35 @@ +--- +title: Uso de busca Cross-global +slug: Web/API/Fetch_API/Uso_de_busca_Cross-global +translation_of: Web/API/Fetch_API/Cross-global_fetch_usage +--- +

 

+ +

Este artigo explica um "edge case" (um problema ou situação que ocorre apenas em um parâmetro operacional extremo) que ocorre ao utilizar fetch (e potencialmente outras APIs que exibem o mesmo tipo de comportamento de recuperação de recurso). Quando uma busca de cross-origin envolvendo uma URL relativa é iniciada a partir de um {{htmlelement ("iframe")}}, a URL relativa costumava ser resolvida na localização global atual, em vez da localização do iframe.

+ +

O "edge case"

+ +

Muitos sites nunca se deparam com este caso extremo. Para que isso aconteça:

+ + + +

O problema

+ +

No passado, resolveríamos o URL relativo contra o global atual, por exemplo:

+ +
let absolute = new URL(relative, window.location.href)
+ +

Isto não é um problema como tal. É que diferentes APIs que exibem esse tipo de comportamento estavam fazendo isso de maneira inconsistente com o comportamento definido na especificação, o que poderia levar a problemas mais adiante.

+ +

A solução

+ +

No Firefox 60 em diante, o Mozilla resolve a URL relativa contra o global que possui a função fetch() que está sendo usada (veja {{bug (1432272)}}). Portanto, no caso descrito acima, ele é resolvido em relação à localização do iframe:

+ +
let absolute = new URL(relative, frame.contentWindow.location.href)
+ +

Há muita discussão em andamento sobre a obtenção de novas especificações para se alinhar a essa mudança de comportamento, a fim de mitigar possíveis problemas no futuro.

diff --git a/files/pt-br/web/api/fetch_api/uso_de_busca_cross-global/index.html b/files/pt-br/web/api/fetch_api/uso_de_busca_cross-global/index.html deleted file mode 100644 index c569966b5a..0000000000 --- a/files/pt-br/web/api/fetch_api/uso_de_busca_cross-global/index.html +++ /dev/null @@ -1,35 +0,0 @@ ---- -title: Uso de busca Cross-global -slug: Web/API/Fetch_API/Uso_de_busca_Cross-global -translation_of: Web/API/Fetch_API/Cross-global_fetch_usage ---- -

 

- -

Este artigo explica um "edge case" (um problema ou situação que ocorre apenas em um parâmetro operacional extremo) que ocorre ao utilizar fetch (e potencialmente outras APIs que exibem o mesmo tipo de comportamento de recuperação de recurso). Quando uma busca de cross-origin envolvendo uma URL relativa é iniciada a partir de um {{htmlelement ("iframe")}}, a URL relativa costumava ser resolvida na localização global atual, em vez da localização do iframe.

- -

O "edge case"

- -

Muitos sites nunca se deparam com este caso extremo. Para que isso aconteça:

- - - -

O problema

- -

No passado, resolveríamos o URL relativo contra o global atual, por exemplo:

- -
let absolute = new URL(relative, window.location.href)
- -

Isto não é um problema como tal. É que diferentes APIs que exibem esse tipo de comportamento estavam fazendo isso de maneira inconsistente com o comportamento definido na especificação, o que poderia levar a problemas mais adiante.

- -

A solução

- -

No Firefox 60 em diante, o Mozilla resolve a URL relativa contra o global que possui a função fetch() que está sendo usada (veja {{bug (1432272)}}). Portanto, no caso descrito acima, ele é resolvido em relação à localização do iframe:

- -
let absolute = new URL(relative, frame.contentWindow.location.href)
- -

Há muita discussão em andamento sobre a obtenção de novas especificações para se alinhar a essa mudança de comportamento, a fim de mitigar possíveis problemas no futuro.

diff --git a/files/pt-br/web/api/geolocation_api/index.html b/files/pt-br/web/api/geolocation_api/index.html new file mode 100644 index 0000000000..b6799afa16 --- /dev/null +++ b/files/pt-br/web/api/geolocation_api/index.html @@ -0,0 +1,227 @@ +--- +title: Usando geolocation +slug: Using_geolocation +tags: + - Geolocation API + - Guia(2) +translation_of: Web/API/Geolocation_API +--- +

API geolocation permite que o usuário forneça sua localização a aplicativos web se ele desejar. Por questões de privacidade, o usuário é perguntado se permite fornecer informações de localização.

+ +

O objeto geolocation

+ +

O aplicativo de geolocalização é utilizado através de um objeto filho chamado geolocation localizado dentro do objeto navigator.  Se o objeto existe, os serviços de geolocalização estarão disponíveis. Você pode adicionalmente testar a presença da geolocalização:

+ +
if ("geolocation" in navigator) {
+  /* geolocation is available */
+} else {
+  alert("I'm sorry, but geolocation services are not supported by your browser.");
+}
+
+ +

{{ gecko_minversion_header("1.9.2") }}

+ +

Ao iniciar no Gecko 1.9.2 (Firefox 3.6), add-ons podem obter o objeto de geolocalização obtendo a referência para o serviço de geolocaliazação como se ve a seguir:

+ +
var geolocation = Components.classes["@mozilla.org/geolocation;1"]
+                            .getService(Components.interfaces.nsIDOMGeoGeolocation);
+
+ +

Obtendo a posição atual

+ +

Para obter a localização atual do usuário, você pode utiliza o método getCurrentPosition().  Isto inicia uma requisição assíncrona para identificar a posição do usuário, e consulta o hardware de localização para conseguir informações atualizadas. Quando a posição é determinada, uma rotina específica de retorno é executada. Você pode opcionalmente gerar uma segunda rotina de retorno se um erro ocorrer.  Um terceiro, e opcional, parâmetro é a interface "opções" onde você pode configurar o tempo máximo da posição recebida e o tempo a se esperar por uma solicitação.

+ +

Use getCurrentPosition() se você deseja uma única posição rapidamente, independente da precisão.  Dispositivos com GPS, por exemplo, podem levar um minuto ou mais para conseguir a localização, e portanto dados menos precisos (localização do IP location ou rede wifi) podem retornar do método getCurrentPosition().

+ +
navigator.geolocation.getCurrentPosition(function(position) {
+  do_something(position.coords.latitude, position.coords.longitude);
+});
+ +

O exemplo acima irá fazer a função the do_something() executar quando a localização for obtida.

+ +

Verificando a posição atual

+ +
Se os dados de posição mudam (sejam pelo movimento do dispositivo ou se uma informação mais precisa for recebida), se pode configurar um retorno que é feito com esta informação de posição atual. Isto é feito usando a função watchPosition(), a qual tem os mesmos parâmetros de entrada da função getCurrentPosition(). Seu retorno é chamada múltiplas vezes, permitindo que o navegador ou atualize sua posição enquanto você se move, ou forneça uma localização mais precisa enquanto diferentes técnicas são usadas para localizar sua posição. O erro do retorno, o qual é opcional assim como no getCurrentPosition(), é chamado uma única vez, se nenhum resultado válido retornar.
+ +

watchPosition() pode ser usado sem que não haja a chamada inicial de getCurrentPosition().

+ +
var watchID = navigator.geolocation.watchPosition(function(position) {
+  do_something(position.coords.latitude, position.coords.longitude);
+}
+);
+ +

O método watchPosition() retorna um número de ID que pode ser usado para identificar a posição solicitada; você pode usar esse valor em conjunto com o método clearWatch(), parando a localização do usuário.

+ +
navigator.geolocation.clearWatch(watchID);
+
+
+ +

watchPosition()retorna um callback sucesso e erro (como getCurrentPosition) e um objeto positionObjects, que pode ter três propriedades:

+ + + +

Segue uma chamada para watchPosition:

+ +
var wpid = navigator.geolocation.watchPosition(geo_success, geo_error, {enableHighAccuracy:true, maximumAge:30000, timeout:27000});
+ +

Exemplo de watchPosition em uso: thedotproduct.org/posts/a-simple-example-of-navigatorgeolocationwatchposition
+ 

+ +

Imprimindo uma posição

+ +

A localização do usuário é impressa usando o objeto Position, que tem os seguintes campos:

+ +
+
timestamp
+
Momento em que a leitura foi feita, como DOMTimeStamp.
+
coords
+
Objecto nsIDOMGeoPositionCoords indicando a localização.
+
address {{ gecko_minversion_inline("1.9.2") }} {{obsolete_inline("14.0")}}
+
{{ interface("nsIDOMGeoPositionAddress") }} objeto especificando o endereço correspondente, se disponível.
+
+ +


+ Manipulação de erros

+ +

Retornando o callback de erro, se fornecido, chamar getCurrentPosition() e watchPosition(), tem a seguinte assinatura:

+ +
function errorCallback(PositionError error);
+
+ +

PositionError tem a seguinte estrutura de campos:

+ +
+
code
+
Um código de erro numérico dos seguintes procedimentos:
+
UNKNOWN_ERROR (valor numérico 0)
+
O processo de aquisição de localização falhou devido a um erro de qualquer outro código nesta interface.
+
PERMISSION_DENIED (valor numérico 1)
+
O processo de aquisição da localização falhou porque a origem aplicativo não tem permissão para usar a API de Geolocalização.
+
POSITION_UNAVAILABLE (valor numérico 2)
+
A posição do dispositivo não pôde ser determinada. Um ou mais provedores de localização utilizados no processo de aquisição local gerou um erro interno que falou o processo completamente.
+
TIMEOUT (numeric value 3)
+
O comprimento máximo de tempo especificado.
+
message
+
Uma mensagem de erro legível para uso em registros e depuração, mas não para exibir para o usuário.
+
+ +

Compatibilidade do navegador

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NavegadorSuporte BásicoGeolocation Level 2
Internet ExplorerIE9 RC---
Firefox (Gecko)3.5 (1.9.1)---
Opera10.60---
Safari | Chrome | WebKit5 | 5 | 533---
+ +

Solicitando permissão

+ +

Qualquer add-on hospedado em addons.mozilla.org, que faz uso de dados de geolocalização, deve solicitar antes uma permissão. A função a seguir vai solicitar a permissão de um modo semelhante ao prompt. A resposta do usuário será salva no parâmetro pref. A função fornecida no parâmetro de callback será chamado com um valor booleano que indica a resposta do usuário. Se for true, o add-on poderá retornar dados de geolocalização.

+ +
function prompt(window, pref, message, callback) {
+    let branch = Components.classes["@mozilla.org/preferences-service;1"]
+                           .getService(Components.interfaces.nsIPrefBranch);
+
+    if (branch.getPrefType(pref) === branch.PREF_STRING) {
+        switch (branch.getCharPref(pref)) {
+        case "always":
+            return callback(true);
+        case "never":
+            return callback(false);
+        }
+    }
+
+    let done = false;
+
+    function remember(value, result) {
+        return function() {
+            done = true;
+            branch.setCharPref(pref, value);
+            callback(result);
+        }
+    }
+
+    let self = window.PopupNotifications.show(
+        window.gBrowser.selectedBrowser,
+        "geolocation",
+        message,
+        "geo-notification-icon",
+        {
+            label: "Share Location",
+            accessKey: "S",
+            callback: function(notification) {
+                done = true;
+                callback(true);
+            }
+        }, [
+            {
+                label: "Always Share",
+                accessKey: "A",
+                callback: remember("always", true)
+            },
+            {
+                label: "Never Share",
+                accessKey: "N",
+                callback: remember("never", false)
+            }
+        ], {
+            eventCallback: function(event) {
+                if (event === "dismissed") {
+                    if (!done) callback(false);
+                    done = true;
+                    window.PopupNotifications.remove(self);
+                }
+            },
+            persistWhileVisible: true
+        });
+}
+
+prompt(window,
+       "extensions.foo-addon.allowGeolocation",
+       "Foo Add-on wants to know your location.",
+       function callback(allowed) { alert(allowed); });
+
+ +

Veja também

+ + + +
{{ HTML5ArticleTOC() }}
diff --git a/files/pt-br/web/api/history_api/example/index.html b/files/pt-br/web/api/history_api/example/index.html new file mode 100644 index 0000000000..a4dfc4b68f --- /dev/null +++ b/files/pt-br/web/api/history_api/example/index.html @@ -0,0 +1,418 @@ +--- +title: Exemplo de navegação Ajax +slug: Web/API/History_API/Exemplo +tags: + - Exemplo navegação ajax +translation_of: Web/API/History_API/Example +--- +

Esse é um exemplo de um web site em AJAX web site composto por apenas três páginas (first_page.php, second_page.php e third_page.php). Para ver como funciona, crie os arquivos a seguir (ou git clone https://github.com/giabao/mdn-ajax-nav-example.git ):

+ +
Nota: Para integrar completamente os elementos {{HTMLElement("form")}} com esse mecanismo, porfavor dê uma olhada no parágrafo Enviando formulários e enviando arquivos.
+ +

first_page.php:

+ +
+
<?php
+    $page_title = "Primeira página";
+
+    $as_json = false;
+    if (isset($_GET["view_as"]) && $_GET["view_as"] == "json") {
+        $as_json = true;
+        ob_start();
+    } else {
+?>
+<!doctype html>
+<html>
+<head>
+<?php
+        include "include/header.php";
+        echo "<title>" . $page_title . "</title>";
+?>
+</head>
+
+<body>
+
+<?php include "include/before_content.php"; ?>
+
+<p>Esse parágrafo só é mostrado quando a navegação começa em <strong>first_page.php</strong>.</p>
+
+<div id="ajax-content">
+<?php } ?>
+
+    <p>Esse é o conteúdo de <strong>first_page.php</strong>.</p>
+
+<?php
+    if ($as_json) {
+        echo json_encode(array("page" => $page_title, "content" => ob_get_clean()));
+    } else {
+?>
+</div>
+
+<p>Esse parágrafo só é mostrado quando a navegação começa em <strong>first_page.php</strong>.</p>
+
+<?php
+        include "include/after_content.php";
+        echo "</body>\n</html>";
+    }
+?>
+
+
+ +

second_page.php:

+ +
+
<?php
+    $page_title = "Segunda página";
+
+    $as_json = false;
+    if (isset($_GET["view_as"]) && $_GET["view_as"] == "json") {
+        $as_json = true;
+        ob_start();
+    } else {
+?>
+<!doctype html>
+<html>
+<head>
+<?php
+        include "include/header.php";
+        echo "<title>" . $page_title . "</title>";
+?>
+</head>
+
+<body>
+
+<?php include "include/before_content.php"; ?>
+
+<p>Esse parágrafo só é mostrado quando a navegação começa em <strong>second_page.php</strong>.</p>
+
+<div id="ajax-content">
+<?php } ?>
+
+    <p>Esse é o conteúdo de <strong>second_page.php</strong>.</p>
+
+<?php
+    if ($as_json) {
+        echo json_encode(array("page" => $page_title, "content" => ob_get_clean()));
+    } else {
+?>
+</div>
+
+<p>Esse parágrafo só é mostrado quando a navegação começa em <strong>second_page.php</strong>.</p>
+
+<?php
+        include "include/after_content.php";
+        echo "</body>\n</html>";
+    }
+?>
+
+
+ +

third_page.php:

+ +
+
<?php
+    $page_title = "Terceira página";
+    $page_content = "<p>Esse é o conteúdo de <strong>third_page.php</strong>. This content is stored into a php variable.</p>";
+
+    if (isset($_GET["view_as"]) && $_GET["view_as"] == "json") {
+        echo json_encode(array("page" => $page_title, "content" => $page_content));
+    } else {
+?>
+<!doctype html>
+<html>
+<head>
+<?php
+        include "include/header.php";
+        echo "<title>" . $page_title . "</title>";
+?>
+</head>
+
+<body>
+
+<?php include "include/before_content.php"; ?>
+
+<p>Esse parágrafo só é mostrado quando a navegação começa em <strong>third_page.php</strong>.</p>
+
+<div id="ajax-content">
+<?php echo $page_content; ?>
+</div>
+
+<p>Esse parágrafo só é mostrado quando a navegação começa em <strong>third_page.php</strong>.</p>
+
+<?php
+        include "include/after_content.php";
+        echo "</body>\n</html>";
+    }
+?>
+
+
+ +

css/style.css:

+ +
#ajax-loader {
+    position: fixed;
+    display: table;
+    top: 0;
+    left: 0;
+    width: 100%;
+    height: 100%;
+}
+
+#ajax-loader > div {
+    display: table-cell;
+    width: 100%;
+    height: 100%;
+    vertical-align: middle;
+    text-align: center;
+    background-color: #000000;
+    opacity: 0.65;
+}
+
+ +

include/after_content.php:

+ +
<p>Esse é o rodapé. Ele é compartilhado entre todas as páginas ajax.</p>
+
+ +

include/before_content.php:

+ +
<p>
+[ <a class="ajax-nav" href="first_page.php">Primeiro exemplo</a>
+| <a class="ajax-nav" href="second_page.php">Segundo exemplo</a>
+| <a class="ajax-nav" href="third_page.php">Terceiro exemplo</a>
+| <a class="ajax-nav" href="unexisting.php">Página inexistente</a> ]
+</p>
+
+
+ +

include/header.php:

+ +
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<script type="text/javascript" src="js/ajax_nav.js"></script>
+<link rel="stylesheet" href="css/style.css" />
+
+ +

js/ajax_nav.js:

+ +

(antes de implementar em um ambiente de trabalho, porfavor leia a nota sobre a compatibilidade de declaração de const)

+ +
+
"use strict";
+
+const ajaxRequest = new (function () {
+
+    function closeReq () {
+        oLoadingBox.parentNode && document.body.removeChild(oLoadingBox);
+        bIsLoading = false;
+    }
+
+    function abortReq () {
+        if (!bIsLoading) { return; }
+        oReq.abort();
+        closeReq();
+    }
+
+    function ajaxError () {
+        alert("Unknown error.");
+    }
+
+    function ajaxLoad () {
+        var vMsg, nStatus = this.status;
+        switch (nStatus) {
+            case 200:
+                vMsg = JSON.parse(this.responseText);
+                document.title = oPageInfo.title = vMsg.page;
+                document.getElementById(sTargetId).innerHTML = vMsg.content;
+                if (bUpdateURL) {
+                    history.pushState(oPageInfo, oPageInfo.title, oPageInfo.url);
+                    bUpdateURL = false;
+                }
+                break;
+            default:
+                vMsg = nStatus + ": " + (oHTTPStatus[nStatus] || "Unknown");
+                switch (Math.floor(nStatus / 100)) {
+                    /*
+                    case 1:
+                        // Informational 1xx
+                        console.log("Information code " + vMsg);
+                        break;
+                    case 2:
+                        // Successful 2xx
+                        console.log("Successful code " + vMsg);
+                        break;
+                    case 3:
+                        // Redirection 3xx
+                        console.log("Redirection code " + vMsg);
+                        break;
+                    */
+                    case 4:
+                        /* Client Error 4xx */
+                        alert("Client Error #" + vMsg);
+                        break;
+                    case 5:
+                        /* Server Error 5xx */
+                        alert("Server Error #" + vMsg);
+                        break;
+                    default:
+                        /* Unknown status */
+                        ajaxError();
+                }
+        }
+        closeReq();
+    }
+
+    function filterURL (sURL, sViewMode) {
+        return sURL.replace(rSearch, "") + ("?" + sURL.replace(rHost, "&").replace(rView, sViewMode ? "&" + sViewKey + "=" + sViewMode : "").slice(1)).replace(rEndQstMark, "");
+    }
+
+    function getPage (sPage) {
+        if (bIsLoading) { return; }
+        oReq = new XMLHttpRequest();
+        bIsLoading = true;
+        oReq.onload = ajaxLoad;
+        oReq.onerror = ajaxError;
+        if (sPage) { oPageInfo.url = filterURL(sPage, null); }
+        oReq.open("get", filterURL(oPageInfo.url, "json"), true);
+        oReq.send();
+        oLoadingBox.parentNode || document.body.appendChild(oLoadingBox);
+    }
+
+    function requestPage (sURL) {
+        if (history.pushState) {
+            bUpdateURL = true;
+            getPage(sURL);
+        } else {
+            /* Ajax navigation is not supported */
+            location.assign(sURL);
+        }
+    }
+
+    function processLink () {
+        if (this.className === sAjaxClass) {
+            requestPage(this.href);
+            return false;
+        }
+        return true;
+    }
+
+    function init () {
+        oPageInfo.title = document.title;
+        history.replaceState(oPageInfo, oPageInfo.title, oPageInfo.url);
+        for (var oLink, nIdx = 0, nLen = document.links.length; nIdx < nLen; document.links[nIdx++].onclick = processLink);
+    }
+
+    const
+
+        /* customizable constants */
+        sTargetId = "ajax-content", sViewKey = "view_as", sAjaxClass = "ajax-nav",
+
+        /* not customizable constants */
+        rSearch = /\?.*$/, rHost = /^[^\?]*\?*&*/, rView = new RegExp("&" + sViewKey + "\\=[^&]*|&*$", "i"), rEndQstMark = /\?$/,
+        oLoadingBox = document.createElement("div"), oCover = document.createElement("div"), oLoadingImg = new Image(),
+        oPageInfo = {
+            title: null,
+            url: location.href
+        }, oHTTPStatus = /* http://www.iana.org/assignments/http-status-codes/http-status-codes.xml */ {
+            100: "Continue",
+            101: "Switching Protocols",
+            102: "Processing",
+            200: "OK",
+            201: "Created",
+            202: "Accepted",
+            203: "Non-Authoritative Information",
+            204: "No Content",
+            205: "Reset Content",
+            206: "Partial Content",
+            207: "Multi-Status",
+            208: "Already Reported",
+            226: "IM Used",
+            300: "Multiple Choices",
+            301: "Moved Permanently",
+            302: "Found",
+            303: "See Other",
+            304: "Not Modified",
+            305: "Use Proxy",
+            306: "Reserved",
+            307: "Temporary Redirect",
+            308: "Permanent Redirect",
+            400: "Bad Request",
+            401: "Unauthorized",
+            402: "Payment Required",
+            403: "Forbidden",
+            404: "Not Found",
+            405: "Method Not Allowed",
+            406: "Not Acceptable",
+            407: "Proxy Authentication Required",
+            408: "Request Timeout",
+            409: "Conflict",
+            410: "Gone",
+            411: "Length Required",
+            412: "Precondition Failed",
+            413: "Request Entity Too Large",
+            414: "Request-URI Too Long",
+            415: "Unsupported Media Type",
+            416: "Requested Range Not Satisfiable",
+            417: "Expectation Failed",
+            422: "Unprocessable Entity",
+            423: "Locked",
+            424: "Failed Dependency",
+            425: "Unassigned",
+            426: "Upgrade Required",
+            427: "Unassigned",
+            428: "Precondition Required",
+            429: "Too Many Requests",
+            430: "Unassigned",
+            431: "Request Header Fields Too Large",
+            500: "Internal Server Error",
+            501: "Not Implemented",
+            502: "Bad Gateway",
+            503: "Service Unavailable",
+            504: "Gateway Timeout",
+            505: "HTTP Version Not Supported",
+            506: "Variant Also Negotiates (Experimental)",
+            507: "Insufficient Storage",
+            508: "Loop Detected",
+            509: "Unassigned",
+            510: "Not Extended",
+            511: "Network Authentication Required"
+        };
+
+    var
+
+        oReq, bIsLoading = false, bUpdateURL = false;
+
+    oLoadingBox.id = "ajax-loader";
+    oCover.onclick = abortReq;
+    oLoadingImg.src = "data:image/gif;base64,R0lGODlhEAAQAPIAAP///wAAAMLCwkJCQgAAAGJiYoKCgpKSkiH/C05FVFNDQVBFMi4wAwEAAAAh/hpDcmVhdGVkIHdpdGggYWpheGxvYWQuaW5mbwAh+QQJCgAAACwAAAAAEAAQAAADMwi63P4wyklrE2MIOggZnAdOmGYJRbExwroUmcG2LmDEwnHQLVsYOd2mBzkYDAdKa+dIAAAh+QQJCgAAACwAAAAAEAAQAAADNAi63P5OjCEgG4QMu7DmikRxQlFUYDEZIGBMRVsaqHwctXXf7WEYB4Ag1xjihkMZsiUkKhIAIfkECQoAAAAsAAAAABAAEAAAAzYIujIjK8pByJDMlFYvBoVjHA70GU7xSUJhmKtwHPAKzLO9HMaoKwJZ7Rf8AYPDDzKpZBqfvwQAIfkECQoAAAAsAAAAABAAEAAAAzMIumIlK8oyhpHsnFZfhYumCYUhDAQxRIdhHBGqRoKw0R8DYlJd8z0fMDgsGo/IpHI5TAAAIfkECQoAAAAsAAAAABAAEAAAAzIIunInK0rnZBTwGPNMgQwmdsNgXGJUlIWEuR5oWUIpz8pAEAMe6TwfwyYsGo/IpFKSAAAh+QQJCgAAACwAAAAAEAAQAAADMwi6IMKQORfjdOe82p4wGccc4CEuQradylesojEMBgsUc2G7sDX3lQGBMLAJibufbSlKAAAh+QQJCgAAACwAAAAAEAAQAAADMgi63P7wCRHZnFVdmgHu2nFwlWCI3WGc3TSWhUFGxTAUkGCbtgENBMJAEJsxgMLWzpEAACH5BAkKAAAALAAAAAAQABAAAAMyCLrc/jDKSatlQtScKdceCAjDII7HcQ4EMTCpyrCuUBjCYRgHVtqlAiB1YhiCnlsRkAAAOwAAAAAAAAAAAA==";
+    oCover.appendChild(oLoadingImg);
+    oLoadingBox.appendChild(oCover);
+
+    onpopstate = function (oEvent) {
+        bUpdateURL = false;
+        oPageInfo.title = oEvent.state.title;
+        oPageInfo.url = oEvent.state.url;
+        getPage();
+    };
+
+    window.addEventListener ? addEventListener("load", init, false) : window.attachEvent ? attachEvent("onload", init) : (onload = init);
+
+    // Public methods
+
+    this.open = requestPage;
+    this.stop = abortReq;
+    this.rebuildLinks = init;
+
+})();
+
+
+ +
Nota: A atual implementação de const (declaração de constante) não é parte do ECMAScript 5. É suportada no Firefox e no Chrome (V8) e parcialmente suportada no Opera 9+ e no Safari. Ela  não é suportada nas versões do Internet Explorer 6 ao 9, ou na versão preview do Internet Explorer 10. const será definida no ECMAScript 6, mas com semânticas diferentes. Similarmente ao que acontece com variáveis definidas como let, constantes declaradas com const serão block-scoped, limitando seu escopo no bloco. Nós só usamos isso com propósito didático. Se você quer total compatibilidade com os navegadores, substitua todas as declarações const por declarações var.
+ +

Para mais informações, veja: Manipulando o histórico do navegador.

+ +

Veja também

+ + diff --git a/files/pt-br/web/api/history_api/exemplo/index.html b/files/pt-br/web/api/history_api/exemplo/index.html deleted file mode 100644 index a4dfc4b68f..0000000000 --- a/files/pt-br/web/api/history_api/exemplo/index.html +++ /dev/null @@ -1,418 +0,0 @@ ---- -title: Exemplo de navegação Ajax -slug: Web/API/History_API/Exemplo -tags: - - Exemplo navegação ajax -translation_of: Web/API/History_API/Example ---- -

Esse é um exemplo de um web site em AJAX web site composto por apenas três páginas (first_page.php, second_page.php e third_page.php). Para ver como funciona, crie os arquivos a seguir (ou git clone https://github.com/giabao/mdn-ajax-nav-example.git ):

- -
Nota: Para integrar completamente os elementos {{HTMLElement("form")}} com esse mecanismo, porfavor dê uma olhada no parágrafo Enviando formulários e enviando arquivos.
- -

first_page.php:

- -
-
<?php
-    $page_title = "Primeira página";
-
-    $as_json = false;
-    if (isset($_GET["view_as"]) && $_GET["view_as"] == "json") {
-        $as_json = true;
-        ob_start();
-    } else {
-?>
-<!doctype html>
-<html>
-<head>
-<?php
-        include "include/header.php";
-        echo "<title>" . $page_title . "</title>";
-?>
-</head>
-
-<body>
-
-<?php include "include/before_content.php"; ?>
-
-<p>Esse parágrafo só é mostrado quando a navegação começa em <strong>first_page.php</strong>.</p>
-
-<div id="ajax-content">
-<?php } ?>
-
-    <p>Esse é o conteúdo de <strong>first_page.php</strong>.</p>
-
-<?php
-    if ($as_json) {
-        echo json_encode(array("page" => $page_title, "content" => ob_get_clean()));
-    } else {
-?>
-</div>
-
-<p>Esse parágrafo só é mostrado quando a navegação começa em <strong>first_page.php</strong>.</p>
-
-<?php
-        include "include/after_content.php";
-        echo "</body>\n</html>";
-    }
-?>
-
-
- -

second_page.php:

- -
-
<?php
-    $page_title = "Segunda página";
-
-    $as_json = false;
-    if (isset($_GET["view_as"]) && $_GET["view_as"] == "json") {
-        $as_json = true;
-        ob_start();
-    } else {
-?>
-<!doctype html>
-<html>
-<head>
-<?php
-        include "include/header.php";
-        echo "<title>" . $page_title . "</title>";
-?>
-</head>
-
-<body>
-
-<?php include "include/before_content.php"; ?>
-
-<p>Esse parágrafo só é mostrado quando a navegação começa em <strong>second_page.php</strong>.</p>
-
-<div id="ajax-content">
-<?php } ?>
-
-    <p>Esse é o conteúdo de <strong>second_page.php</strong>.</p>
-
-<?php
-    if ($as_json) {
-        echo json_encode(array("page" => $page_title, "content" => ob_get_clean()));
-    } else {
-?>
-</div>
-
-<p>Esse parágrafo só é mostrado quando a navegação começa em <strong>second_page.php</strong>.</p>
-
-<?php
-        include "include/after_content.php";
-        echo "</body>\n</html>";
-    }
-?>
-
-
- -

third_page.php:

- -
-
<?php
-    $page_title = "Terceira página";
-    $page_content = "<p>Esse é o conteúdo de <strong>third_page.php</strong>. This content is stored into a php variable.</p>";
-
-    if (isset($_GET["view_as"]) && $_GET["view_as"] == "json") {
-        echo json_encode(array("page" => $page_title, "content" => $page_content));
-    } else {
-?>
-<!doctype html>
-<html>
-<head>
-<?php
-        include "include/header.php";
-        echo "<title>" . $page_title . "</title>";
-?>
-</head>
-
-<body>
-
-<?php include "include/before_content.php"; ?>
-
-<p>Esse parágrafo só é mostrado quando a navegação começa em <strong>third_page.php</strong>.</p>
-
-<div id="ajax-content">
-<?php echo $page_content; ?>
-</div>
-
-<p>Esse parágrafo só é mostrado quando a navegação começa em <strong>third_page.php</strong>.</p>
-
-<?php
-        include "include/after_content.php";
-        echo "</body>\n</html>";
-    }
-?>
-
-
- -

css/style.css:

- -
#ajax-loader {
-    position: fixed;
-    display: table;
-    top: 0;
-    left: 0;
-    width: 100%;
-    height: 100%;
-}
-
-#ajax-loader > div {
-    display: table-cell;
-    width: 100%;
-    height: 100%;
-    vertical-align: middle;
-    text-align: center;
-    background-color: #000000;
-    opacity: 0.65;
-}
-
- -

include/after_content.php:

- -
<p>Esse é o rodapé. Ele é compartilhado entre todas as páginas ajax.</p>
-
- -

include/before_content.php:

- -
<p>
-[ <a class="ajax-nav" href="first_page.php">Primeiro exemplo</a>
-| <a class="ajax-nav" href="second_page.php">Segundo exemplo</a>
-| <a class="ajax-nav" href="third_page.php">Terceiro exemplo</a>
-| <a class="ajax-nav" href="unexisting.php">Página inexistente</a> ]
-</p>
-
-
- -

include/header.php:

- -
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<script type="text/javascript" src="js/ajax_nav.js"></script>
-<link rel="stylesheet" href="css/style.css" />
-
- -

js/ajax_nav.js:

- -

(antes de implementar em um ambiente de trabalho, porfavor leia a nota sobre a compatibilidade de declaração de const)

- -
-
"use strict";
-
-const ajaxRequest = new (function () {
-
-    function closeReq () {
-        oLoadingBox.parentNode && document.body.removeChild(oLoadingBox);
-        bIsLoading = false;
-    }
-
-    function abortReq () {
-        if (!bIsLoading) { return; }
-        oReq.abort();
-        closeReq();
-    }
-
-    function ajaxError () {
-        alert("Unknown error.");
-    }
-
-    function ajaxLoad () {
-        var vMsg, nStatus = this.status;
-        switch (nStatus) {
-            case 200:
-                vMsg = JSON.parse(this.responseText);
-                document.title = oPageInfo.title = vMsg.page;
-                document.getElementById(sTargetId).innerHTML = vMsg.content;
-                if (bUpdateURL) {
-                    history.pushState(oPageInfo, oPageInfo.title, oPageInfo.url);
-                    bUpdateURL = false;
-                }
-                break;
-            default:
-                vMsg = nStatus + ": " + (oHTTPStatus[nStatus] || "Unknown");
-                switch (Math.floor(nStatus / 100)) {
-                    /*
-                    case 1:
-                        // Informational 1xx
-                        console.log("Information code " + vMsg);
-                        break;
-                    case 2:
-                        // Successful 2xx
-                        console.log("Successful code " + vMsg);
-                        break;
-                    case 3:
-                        // Redirection 3xx
-                        console.log("Redirection code " + vMsg);
-                        break;
-                    */
-                    case 4:
-                        /* Client Error 4xx */
-                        alert("Client Error #" + vMsg);
-                        break;
-                    case 5:
-                        /* Server Error 5xx */
-                        alert("Server Error #" + vMsg);
-                        break;
-                    default:
-                        /* Unknown status */
-                        ajaxError();
-                }
-        }
-        closeReq();
-    }
-
-    function filterURL (sURL, sViewMode) {
-        return sURL.replace(rSearch, "") + ("?" + sURL.replace(rHost, "&").replace(rView, sViewMode ? "&" + sViewKey + "=" + sViewMode : "").slice(1)).replace(rEndQstMark, "");
-    }
-
-    function getPage (sPage) {
-        if (bIsLoading) { return; }
-        oReq = new XMLHttpRequest();
-        bIsLoading = true;
-        oReq.onload = ajaxLoad;
-        oReq.onerror = ajaxError;
-        if (sPage) { oPageInfo.url = filterURL(sPage, null); }
-        oReq.open("get", filterURL(oPageInfo.url, "json"), true);
-        oReq.send();
-        oLoadingBox.parentNode || document.body.appendChild(oLoadingBox);
-    }
-
-    function requestPage (sURL) {
-        if (history.pushState) {
-            bUpdateURL = true;
-            getPage(sURL);
-        } else {
-            /* Ajax navigation is not supported */
-            location.assign(sURL);
-        }
-    }
-
-    function processLink () {
-        if (this.className === sAjaxClass) {
-            requestPage(this.href);
-            return false;
-        }
-        return true;
-    }
-
-    function init () {
-        oPageInfo.title = document.title;
-        history.replaceState(oPageInfo, oPageInfo.title, oPageInfo.url);
-        for (var oLink, nIdx = 0, nLen = document.links.length; nIdx < nLen; document.links[nIdx++].onclick = processLink);
-    }
-
-    const
-
-        /* customizable constants */
-        sTargetId = "ajax-content", sViewKey = "view_as", sAjaxClass = "ajax-nav",
-
-        /* not customizable constants */
-        rSearch = /\?.*$/, rHost = /^[^\?]*\?*&*/, rView = new RegExp("&" + sViewKey + "\\=[^&]*|&*$", "i"), rEndQstMark = /\?$/,
-        oLoadingBox = document.createElement("div"), oCover = document.createElement("div"), oLoadingImg = new Image(),
-        oPageInfo = {
-            title: null,
-            url: location.href
-        }, oHTTPStatus = /* http://www.iana.org/assignments/http-status-codes/http-status-codes.xml */ {
-            100: "Continue",
-            101: "Switching Protocols",
-            102: "Processing",
-            200: "OK",
-            201: "Created",
-            202: "Accepted",
-            203: "Non-Authoritative Information",
-            204: "No Content",
-            205: "Reset Content",
-            206: "Partial Content",
-            207: "Multi-Status",
-            208: "Already Reported",
-            226: "IM Used",
-            300: "Multiple Choices",
-            301: "Moved Permanently",
-            302: "Found",
-            303: "See Other",
-            304: "Not Modified",
-            305: "Use Proxy",
-            306: "Reserved",
-            307: "Temporary Redirect",
-            308: "Permanent Redirect",
-            400: "Bad Request",
-            401: "Unauthorized",
-            402: "Payment Required",
-            403: "Forbidden",
-            404: "Not Found",
-            405: "Method Not Allowed",
-            406: "Not Acceptable",
-            407: "Proxy Authentication Required",
-            408: "Request Timeout",
-            409: "Conflict",
-            410: "Gone",
-            411: "Length Required",
-            412: "Precondition Failed",
-            413: "Request Entity Too Large",
-            414: "Request-URI Too Long",
-            415: "Unsupported Media Type",
-            416: "Requested Range Not Satisfiable",
-            417: "Expectation Failed",
-            422: "Unprocessable Entity",
-            423: "Locked",
-            424: "Failed Dependency",
-            425: "Unassigned",
-            426: "Upgrade Required",
-            427: "Unassigned",
-            428: "Precondition Required",
-            429: "Too Many Requests",
-            430: "Unassigned",
-            431: "Request Header Fields Too Large",
-            500: "Internal Server Error",
-            501: "Not Implemented",
-            502: "Bad Gateway",
-            503: "Service Unavailable",
-            504: "Gateway Timeout",
-            505: "HTTP Version Not Supported",
-            506: "Variant Also Negotiates (Experimental)",
-            507: "Insufficient Storage",
-            508: "Loop Detected",
-            509: "Unassigned",
-            510: "Not Extended",
-            511: "Network Authentication Required"
-        };
-
-    var
-
-        oReq, bIsLoading = false, bUpdateURL = false;
-
-    oLoadingBox.id = "ajax-loader";
-    oCover.onclick = abortReq;
-    oLoadingImg.src = "data:image/gif;base64,R0lGODlhEAAQAPIAAP///wAAAMLCwkJCQgAAAGJiYoKCgpKSkiH/C05FVFNDQVBFMi4wAwEAAAAh/hpDcmVhdGVkIHdpdGggYWpheGxvYWQuaW5mbwAh+QQJCgAAACwAAAAAEAAQAAADMwi63P4wyklrE2MIOggZnAdOmGYJRbExwroUmcG2LmDEwnHQLVsYOd2mBzkYDAdKa+dIAAAh+QQJCgAAACwAAAAAEAAQAAADNAi63P5OjCEgG4QMu7DmikRxQlFUYDEZIGBMRVsaqHwctXXf7WEYB4Ag1xjihkMZsiUkKhIAIfkECQoAAAAsAAAAABAAEAAAAzYIujIjK8pByJDMlFYvBoVjHA70GU7xSUJhmKtwHPAKzLO9HMaoKwJZ7Rf8AYPDDzKpZBqfvwQAIfkECQoAAAAsAAAAABAAEAAAAzMIumIlK8oyhpHsnFZfhYumCYUhDAQxRIdhHBGqRoKw0R8DYlJd8z0fMDgsGo/IpHI5TAAAIfkECQoAAAAsAAAAABAAEAAAAzIIunInK0rnZBTwGPNMgQwmdsNgXGJUlIWEuR5oWUIpz8pAEAMe6TwfwyYsGo/IpFKSAAAh+QQJCgAAACwAAAAAEAAQAAADMwi6IMKQORfjdOe82p4wGccc4CEuQradylesojEMBgsUc2G7sDX3lQGBMLAJibufbSlKAAAh+QQJCgAAACwAAAAAEAAQAAADMgi63P7wCRHZnFVdmgHu2nFwlWCI3WGc3TSWhUFGxTAUkGCbtgENBMJAEJsxgMLWzpEAACH5BAkKAAAALAAAAAAQABAAAAMyCLrc/jDKSatlQtScKdceCAjDII7HcQ4EMTCpyrCuUBjCYRgHVtqlAiB1YhiCnlsRkAAAOwAAAAAAAAAAAA==";
-    oCover.appendChild(oLoadingImg);
-    oLoadingBox.appendChild(oCover);
-
-    onpopstate = function (oEvent) {
-        bUpdateURL = false;
-        oPageInfo.title = oEvent.state.title;
-        oPageInfo.url = oEvent.state.url;
-        getPage();
-    };
-
-    window.addEventListener ? addEventListener("load", init, false) : window.attachEvent ? attachEvent("onload", init) : (onload = init);
-
-    // Public methods
-
-    this.open = requestPage;
-    this.stop = abortReq;
-    this.rebuildLinks = init;
-
-})();
-
-
- -
Nota: A atual implementação de const (declaração de constante) não é parte do ECMAScript 5. É suportada no Firefox e no Chrome (V8) e parcialmente suportada no Opera 9+ e no Safari. Ela  não é suportada nas versões do Internet Explorer 6 ao 9, ou na versão preview do Internet Explorer 10. const será definida no ECMAScript 6, mas com semânticas diferentes. Similarmente ao que acontece com variáveis definidas como let, constantes declaradas com const serão block-scoped, limitando seu escopo no bloco. Nós só usamos isso com propósito didático. Se você quer total compatibilidade com os navegadores, substitua todas as declarações const por declarações var.
- -

Para mais informações, veja: Manipulando o histórico do navegador.

- -

Veja também

- - diff --git a/files/pt-br/web/api/html_drag_and_drop_api/file_drag_and_drop/index.html b/files/pt-br/web/api/html_drag_and_drop_api/file_drag_and_drop/index.html new file mode 100644 index 0000000000..13609ee260 --- /dev/null +++ b/files/pt-br/web/api/html_drag_and_drop_api/file_drag_and_drop/index.html @@ -0,0 +1,91 @@ +--- +title: Arrastar e soltar arquivos +slug: DragDrop/Drag_and_Drop/Arrastar_e_soltar_arquivos +translation_of: Web/API/HTML_Drag_and_Drop_API/File_drag_and_drop +--- +

{{DefaultAPISidebar("HTML Drag and Drop API")}}

+ +

As interfaces HTML Drag and Drop permitem que os aplicativos da Web arrastem e soltem arquivos em uma página da Web. Este documento descreve como um aplicativo pode aceitar um ou mais arquivos que são arrastados do gerenciador de arquivos da plataforma subjacente e soltado s em uma página da Web.

+ +

Os principais passos para o drag and drop é definir a drop zone (ou seja  definir um elemento para a queda dos arquivos) e definir  event handlers para os eventos {{event("drop")}} e {{event("dragover")}} . Essas etapas são descritas abaixo, incluindo exemplos de trechos de código. O codigo fonte esta disponivel em MDN's drag-and-drop repository (pull requests e/ou issues são bem-vindas).

+ +

Nota: {{domxref("HTML_Drag_and_Drop_API","HTML drag and drop")}}Define duas APIs diferentes para suportar arrastar e soltar arquivos. Uma API é a interface {{domxref("DataTransfer")}} e a segunda API é a interface {{domxref("DataTransferItem")}} e {{domxref("DataTransferItemList")}}. Este exemplo ilustra o uso de ambas as APIs (e não usa nehuma interface específica do Gecko).

+ +

Definindo a drop zone

+ +

O elemento de destino do evento {{event("drop")}} precisa de um event handler global  {{domxref("GlobalEventHandlers.ondrop","ondrop")}} O seguinte trecho de código mostra como isso é feito com um elemento: {{HTMLelement("div")}}

+ +
<div id="drop_zone" ondrop="dropHandler(event);">
+  <p>Drag one or more files to this Drop Zone ...</p>
+</div>
+ +

Normalmente, um aplicativo inclui um event handler {{event("dragover")}} no elemento de destino do drop e esse manipulador desativará o comportamento de arraste padrão do navegador. Para adicionar esse handler, você precisa incluir um event handler global {{domxref("GlobalEventHandlers.ondragover","ondragover")}}:

+ +
<div id="drop_zone" ondrop="dropHandler(event);" ondragover="dragOverHandler(event);">
+  <p>Drag one or more files to this Drop Zone ...</p>
+</div>
+
+ +

Por fim, um aplicativo pode querer estilizar o elemento da drop zone para indicar visualmente que o elemento é uma drop zone. Neste exemplo, o elemento da drop zone usa o seguinte estilo:

+ +
#drop_zone {
+  border: 5px solid blue;
+  width:  200px;
+  height: 100px;
+}
+
+ +
+

Nota: Observe que os eventos dragstart e dragend não são acionados ao arrastar um arquivo para o navegador do OS.

+
+ +

Processo de drop

+ +

O evento {{event("drop")}} é acionado quando o usuário solta o(s) arquivo(s)  no drop handler, se o navegador suportar a interface {{domxref("DataTransferItemList")}} o metodo {{domxref("DataTransferItem.getAsFile","getAsFile()")}} será usado para acessar cada arquivo; caso contrário, a interface {{domxref("DataTransfer")}} usara a propriedade {{domxref("DataTransfer.files","files")}} para acessar cada arquivo.

+ +

Este exemplo mostra como escrever o nome de cada arquivo arrastado,  no console. Em um aplicativo real, um aplicativo pode querer processar um arquivo usando o {{domxref("File","File API")}}.

+ +

Observe que neste exemplo, Qualquer item de arrasto que não seja um arquivo é ignorado.

+ +
function dropHandler(ev) {
+  console.log('File(s) dropped');
+
+  // Impedir o comportamento padrão (impedir que o arquivo seja aberto)
+  ev.preventDefault();
+
+  if (ev.dataTransfer.items) {
+    // Use a interface DataTransferItemList para acessar o (s) arquivo (s)
+    for (var i = 0; i < ev.dataTransfer.items.length; i++) {
+      // Se os itens soltos não forem arquivos, rejeite-os
+      if (ev.dataTransfer.items[i].kind === 'file') {
+        var file = ev.dataTransfer.items[i].getAsFile();
+        console.log('... file[' + i + '].name = ' + file.name);
+      }
+    }
+  } else {
+    // Use a interface DataTransfer para acessar o (s) arquivo (s)
+    for (var i = 0; i < ev.dataTransfer.files.length; i++) {
+      console.log('... file[' + i + '].name = ' + ev.dataTransfer.files[i].name);
+    }
+  }
+}
+ +

Impedir o evento de arrastar padrão do navegador

+ +

O seguinte event handler {{event("dragover")}} chama {{domxref("Event.preventDefault","preventDefault()")}} para desativar o manipulador padrão de arrastar e soltar do navegador.

+ +
function dragOverHandler(ev) {
+  console.log('File(s) in drop zone');
+
+  // Impedir o comportamento padrão (impedir que o arquivo seja aberto)
+  ev.preventDefault();
+}
+
+ +

Veja também

+ + diff --git a/files/pt-br/web/api/html_drag_and_drop_api/index.html b/files/pt-br/web/api/html_drag_and_drop_api/index.html new file mode 100644 index 0000000000..10e5592b91 --- /dev/null +++ b/files/pt-br/web/api/html_drag_and_drop_api/index.html @@ -0,0 +1,258 @@ +--- +title: Arrastar e soltar +slug: DragDrop/Drag_and_Drop +tags: + - Avançado + - Guia(2) + - HTML5 + - Visão Geral + - XUL + - arrastar e soltar + - eventos +translation_of: Web/API/HTML_Drag_and_Drop_API +--- +

{{DefaultAPISidebar("HTML Drag and Drop API")}}

+ +

As interfaces de Drag and Drop (arrastar e soltar) habilitam aplicações a usar funcionalidades de arrastar e soltar através do navegador. Por exemplo, com essas funcionalidades, o usuário pode selecionar elementos arrastáveis (draggable) com o mouse, arrastar elementos até um elemento soltável (droppable), e soltar o elemento ao soltar o botão do mouse. Uma representação translúcida de elementos arrastáveis (draggable) seguem o ponteiro do mouse durante a operação de arrastar (drag).

+ +

Para web sites, extensões e aplicações XUL, você pode customizar os tipos de elementos que podem se tornar arrastáveis (draggable) e o tipo de retorno que o elemento arrastável produz, assim como os elementos soltáveis (droppable).

+ +

NT: Para manter a tradução mais precisa e coesa, a partir daqui iremos manter os termos drag e drop e seus variantes conforme texto original. Sendo portanto mantidos também os termos draggable e droppable.

+ +

Este documento é uma visão geral do drag and drop no HTML. Ele inclui uma descrição de suas interfaces, funcionalidades básicas de como permitir a adesão de funcionalidades arrastar e soltar em uma aplicação e um sumário da interoperabilidade entre interfaces.

+ +

Eventos Drag

+ +

O drag and drop em HTML usa o {{domxref("Event","modelo de eventos DOM")}} e os {{domxref("DragEvent","eventos drag")}} são hereditários dos {{domxref("MouseEvent","eventos do mouse")}}. Uma operação típica de drag começa quando o usuário seleciona um elemento arrastável com o mouse, move o mouse até um elemento soltável (droppable) e solta o mouse. Durante as operações, diversos tipos de evento são acionados e alguns podem até ser acionados multiplas vezes (como por exemplo os tipos de evento {{event("drag")}} e {{event("dragover")}}.

+ +

Todos os tipos de evento drag são associados a um manipulador global de eventos. Cada tipo de evento drag e cada atributo drag global tem um documento de referência que o descreve. A tabela a seguir descreve brevemente os tipos de evento e um link de referência para seu documento.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
EventOn Event HandlerDescription
{{event('drag')}}{{domxref('GlobalEventHandlers.ondrag','ondrag')}}Acionado quando um elemento ou seleção de texto está sendo arrastado.
{{event('dragend')}}{{domxref('GlobalEventHandlers.ondragend','ondragend')}}Acionado quando uma operação de arrastar está terminando (por eexmplo, ao soltar o botão do mouse ou pressionar a tecla esc). (Veja Terminando um evento Drag.)
{{event('dragenter')}}{{domxref('GlobalEventHandlers.ondragenter','ondragenter')}}Acionado quando um elemento arrastável ou seleção de texto entra em um ponto de soltura (drop target). (Veja Determinando Drop Targets.)
{{event('dragexit')}}{{domxref('GlobalEventHandlers.ondragexit','ondragexit')}}Acionado quando um elemento não é mais o ponto de seleção imediata da operação drag.
{{event('dragleave')}}{{domxref('GlobalEventHandlers.ondragleave','ondragleave')}}Acionado quando um elemento arrastável ou seleção de texto abandona um ponto de soltura (drop target) válido.
{{event('dragover')}}{{domxref('GlobalEventHandlers.ondragover','ondragover')}}Acionado quando um elemento ou seleção de texto está sendo arrastado sobre um ponto de soltura válido (a cada aproximadamente 100 milisegundos).
{{event('dragstart')}}{{domxref('GlobalEventHandlers.ondragstart','ondragstart')}}Acionado quando o usuário começa a arrastar um elemento válido ou seleção de texto. (Veja Começando uma Operação Drag.)
{{event('drop')}}{{domxref('GlobalEventHandlers.ondrop','ondrop')}}Acionado quando um elemento ou seleção de texto é solta em um ponto d soltura (drop target) válido. (Veja Realizando um Drop.)
+ +

Note que eventos dragstart e dragend não são acionados ao arrastar um arquivo vindo do sistema operacional para o navegador.

+ +

Interfaces

+ +

A interface HTML drag and drop é composta pelos eventos {{domxref("DragEvent")}}, {{domxref("DataTransfer")}}, {{domxref("DataTransferItem")}} e {{domxref("DataTransferItemList")}}.

+ +

A interface {{domxref("DragEvent")}} consiste de um construtor e uma propriedade, a propriedade {{domxref("DragEvent.dataTransfer","dataTransfer")}} que é um objeto {{domxref("DataTransfer")}}. Os objetos {{domxref("DataTransfer")}} incluem estados do evento drag como o tipo de drag sendo feito (por exemplo copy ou move), os dados do do evento drag (um ou mais itens) e o tipo de cada item drag (um MIME type). Objetos {{domxref("DataTransfer")}} também contém métodos para adicionar itens aos dados do drag e remover um item. As interfaces {{domxref("DragEvent")}} e {{domxref("DataTransfer")}} devem as únicas necessárias para adicionar capacidades de drag and drop para uma aplicação. Entretanto, note que o Firefox provê suporte para apenas algumas {{anch("Gecko specific interfaces","Gecko-specific extensions")}} ao objeto {{domxref("DataTransfer")}}, apesar de entretanto essas extensões funcionarem apenas no Firefox.

+ +

Cada objeto {{domxref("DataTransfer")}} contém uma propriedade {{domxref("DataTransfer.items","items")}} que é uma {{domxref("DataTransferItemList","lista")}} dos objetos {{domxref("DataTransferItem")}}. Cada objeto {{domxref("DataTransferItem")}} representa um único drag item e cada item tem uma propriedade {{domxref("DataTransferItem.kind","kind (tipo)")}} que é o tipo(kind) de data (seja ela string ou file) e uma propriedade {{domxref("DataTransferItem.type","type (tipo)")}} que é o tipo de dado do item (ou seja, MIME type). O objeto {{domxref("DataTransferItem")}} também contém métodos para conseguir dados do item arrastável.

+ +

O objeto {{domxref("DataTransferItemList")}} é uma lista de objetos {{domxref("DataTransferItem")}}. A lista de objetos contém métodos para: adicionar um item para uma lista, remover um item de uma lista e limpar a lista com todos os itens.

+ +

A diferença chave entre das interfaces {{domxref("DataTransfer")}} e {{domxref("DataTransferItem")}} é que a primeira usa o método síncrono {{domxref("DataTransfer.getData","getData()")}} para acessar os dados de um item arrastável, e a segunda usa o método assíncrono {{domxref("DataTransferItem.getAsString","getAsString()")}} para acessá-lo.

+ +

Note: as interfaces {{domxref("DragEvent")}} e a {{domxref("DataTransfer")}} são vastamente interoperáveis com navegadores desktop. Entretanto, as interfaces {{domxref("DataTransferItem")}} e {{domxref("DataTransferItemList")}} tem suporte limitado entre navegadores. Veja {{anch("Interoperabildade")}} para mais informações.

+ +

Interfaces específicas para o Gecko

+ +

A Mozilla e o Firefox suportam algumas funcionalidades fora dos padrões do modelo drag and drop. Elas são cfunções convenientes para facilitar o arraste múltiplo de elementos e a manipulação de dados que não são strings (como arquivos). Para mais informações, veja Dragging and Dropping Multiple Items. Para mais informações, veja a página de referência {{domxref("DataTransfer")}} para todas as propriedades específicas para o Gecko e Métodos específicos para o Gecko.

+ +

O básico

+ +

Esta seção dispõe de um resumo das etapas básicas para adicionar a funcionalidade drag and drop à uma aplicação. Cada seção inclui uma descrição da etapa, um breve exemplo em código, e links para informações adicionais.

+ +

Identificando o que é arrastável (draggable)

+ +

Para fazer um elemento se tornar arrastável, é necessária a adição de um atributo {{htmlattrxref("draggable")}} além da adição do manipulador de eventos global {{domxref("GlobalEventHandlers.ondragstart","ondragstart")}}, conforme descrito no exemplo a seguir

+ +
function dragstart_handler(ev) {
+ console.log("dragStart");
+ // Adiciona o id do elemento em questão ao objeto de transferência de dados (dataTransfer)
+ ev.dataTransfer.setData("text/plain", ev.target.id);
+}
+
+<body>
+ <p id="p1" draggable="true" ondragstart="dragstart_handler(event);">Este elemento é arrastável.</p>
+</body>
+
+ +

Veja a referência do atributo draggable e o Guia de operações drag para mais informações.

+ +

Defina os dados do drag

+ +

A aplicação é livre para incluir qualquer quantidade de dados do item em uma operação drag. Cada dado de um item é uma {{domxref("DOMString","string")}} de um tipo particular, tipicamente um MIME type como por exemplo text/html.

+ +

Cada {{domxref("DragEvent","evento drag")}} tem uma propriedade {{domxref("DragEvent.dataTransfer","dataTransfer")}} que segura os dados do evento. Essa propridade (que é um objeto {{domxref("DataTransfer")}}) também tem um método para gerenciar os dados do arraste (drag). O método {{domxref("DataTransfer.setData","setData()")}} é usado para adicionar um item aos dados do arraste, como demonstrado no exemplo a seguir.

+ +
function dragstart_handler(ev) {
+  // Adiciona os dados do arraste (drag)
+  ev.dataTransfer.setData("text/plain", ev.target.id);
+  ev.dataTransfer.setData("text/html", "<p>Parágrafo de exemplo</p>");
+  ev.dataTransfer.setData("text/uri-list", "http://developer.mozilla.org");
+}
+
+ +

Para uma lista de tipos de dados mais comuns utilizados pelo drag and drop (como texto, HTML, links, e files), veja Tipos recomendados de Drag Types e para mais informações sobre os dados do arraste (drag data), veja Drag Data.

+ +

Defina uma imagem de arraste (drag image)

+ +

Por padrão, o navegador provê uma imagem que aparece por trás do ponteiro do mouse durante uma operação de arraste. Entretanto, uma aplicação pode definir uma imagem customizada utilizando o método {{domxref("DataTransfer.setDragImage","setDragImage()")}} como demonstrado no exemplo a seguir.

+ +
function dragstart_handler(ev) {
+  // Cria uma imagem e então a utiliza como a "drag image".
+  // NOTA: mude "example.gif" como uma imagem existente, caso contrário
+  // ela não será criada e a imagem padrão será utilizada como padrão.
+  var img = new Image();
+  img.src = 'example.gif';
+  ev.dataTransfer.setDragImage(img, 10, 10);
+}
+
+ +

Para aprender mais sobre arrastar imagens de retorno, veja Definindo a imagem de retorno do arraste (Drag).

+ +

Defina o efeito do arraste (Drag effect)

+ +

A propriedade {{domxref("DataTransfer.dropEffect","dropEffect")}} é usada para controlar o retorno (geralmente visual) que é dado ao usuário durante uma operação drag and drop. Ela afeta qual cursor o navegador irá mostrar enquanto o arraste é realizado. Por exemplo, quando o usuário passa sobre (famoso hover) o ponto de soltura (drop target), o cursor do navegador pode indicar o tipo de operação que irá acontecer.

+ +

Três efeitos podem ser definidos: 

+ +

copy indica que os dados sendo arrastados podem ser copiados da localização atual para a localização de destino (localização do drop). 

+ +

move indica que os dados sendo arrastados irá ser movido.

+ +

link indica que alguma forma de relação ou conexão será criada entre a localização de origem (source) e de destino (drop). 

+ +

Durante a operação de arraste, os efeitos do arraste (drag) podem ser modificados para determinar que certos efeitos são permitidos em determinadas localizações. Se permitido, uma soltura (drop) pode ocorrer naquela localização.

+ +

O exemplo a seguir mostra como utilizar essa propriedade.

+ +
function dragstart_handler(ev) {
+  // Determina o efeito de arraste para copy
+  ev.dataTransfer.dropEffect = "copy";
+}
+
+ +

Veja Efeitos do Arraste (Drag Effects) para mais detalhes.

+ +

Defina uma zona de soltura (drop zone)

+ +

Por padrão, o navegador previne tudo que possa acontecer ao soltar alguma coisa em um elemento HTML. Para mudar esse comportamento de forma que um elemento se torne uma zona de soltura (drop zone) ou que seja soltável (droppable), o elemento precisa ter ambos os atributos  {{domxref("GlobalEventHandlers.ondragover","ondragover")}} e {{domxref("GlobalEventHandlers.ondrop","ondrop")}}. O exemplo a seguir mostra como utilizar esses atributos e inclui manipuladores básicos de evento para cada um.

+ +
function dragover_handler(ev) {
+ ev.preventDefault();
+ // Define o dropEffect para ser do tipo move
+ ev.dataTransfer.dropEffect = "move"
+}
+function drop_handler(ev) {
+ ev.preventDefault();
+ // Pega o id do alvo e adiciona o elemento que foi movido para o DOM do alvo
+ var data = ev.dataTransfer.getData("text");
+ ev.target.appendChild(document.getElementById(data));
+}
+<body>
+ <div id="target" ondrop="drop_handler(event);" ondragover="dragover_handler(event);">Zona de Soltura (Drop Zone)</div>
+</body>
+
+ +

Note que cada manipulador chama {{domxref("Event.preventDefault","preventDefault()")}} para previnir o processamento adicional de eventos (como eventos touch ou eventos pointer).

+ +

Para mais informações, veja Especificando pontos de soltura (Drop Targets).

+ +

Manipulando o efeito de soltura (drop)

+ +

O manipulador do evento {{event("drop")}} é livre para processar os dados do arraste (drag) de maneira específica em uma aplicação. Tipicamente, uma aplicação usaria o método {{domxref("DataTransfer.getData","getData()")}} para reter os itens arrastados e processá-los de acordo. A semântica da aplicação pode ser diferente dependendo do valor do {{domxref("DataTransfer.dropEffect","dropEffect")}} e/ou o estado da chave que o modifica.

+ +

O exemplo a seguir mostra o manipulador de soltura (drop handler) pegando o id do elemento de origem atráves dos dados de drag (drag data) e então usando o id para mover o elemento de sua origem para o elemento de soltura (drop element).

+ +
function dragstart_handler(ev) {
+ // Adiciona o id do elemento alvo para o objeto de transferência de dados
+ ev.dataTransfer.setData("text/plain", ev.target.id);
+ ev.dropEffect = "move";
+}
+function dragover_handler(ev) {
+ ev.preventDefault();
+ // Define o dropEffect para ser do tipo move
+ ev.dataTransfer.dropEffect = "move"
+}
+function drop_handler(ev) {
+ ev.preventDefault();
+ // Pega o id do alvo e adiciona o elemento que foi movido para o DOM do alvo
+ var data = ev.dataTransfer.getData("text");
+ ev.target.appendChild(document.getElementById(data));
+}
+<body>
+ <p id="p1" draggable="true" ondragstart="dragstart_handler(event);">Este elemento é arrastável.</p>
+ <div id="target" ondrop="drop_handler(event);" ondragover="dragover_handler(event);">Zona de Soltura (Drop Zone)</div>
+</body>
+
+ +

Para mais informações, veja Realizando uma soltura (Drop).

+ +

Fim da soltura (Drag end)

+ +

No início da operação de arraste (drag), o evento {{event("dragend")}} é acionado no elemento de origem (source) - o elemento que foi o alvo do início do arraste (drag start). Este evento é acionado sempre quando o arraste é completado ou cancelado. O manipulador de eventos {{event("dragend")}} pode verificar o valor da propriedade {{domxref("DataTransfer.dropEffect","dropEffect")}} para determinar se a operação de arraste foi bem sucedida ou não.

+ +

Para mais informações sobre manipular o final de uma operação de arraste, veja Finalizando um arraste (Drag).

+ +

Interoperabilidade

+ +

Como podem ser visto no DataTransferItem interface's Browser Compatibility table, drag-and-drop a interoperabilidade é relativamente ampla emtre ps brpwsers desktop (exceto as interfaces {{domxref("DataTransferItem")}} e {{domxref("DataTransferItemList")}}  que tem o menor suport). Estes dados tambem indica que o suporte ao drag and drop entre browser mobile é muito menor.

+ +

Exemplos e demonstrações

+ + + +

Veja também

+ + diff --git a/files/pt-br/web/api/htmlcontentelement/select/index.html b/files/pt-br/web/api/htmlcontentelement/select/index.html new file mode 100644 index 0000000000..63fae05c69 --- /dev/null +++ b/files/pt-br/web/api/htmlcontentelement/select/index.html @@ -0,0 +1,98 @@ +--- +title: HTMLContentElement.select +slug: Web/API/HTMLContentElement/Seletor +tags: + - API + - HTMLContentElement + - HTMLContentElement.select + - Select +translation_of: Web/API/HTMLContentElement/select +--- +

{{ APIRef("Web Components") }}

+ +

A propriedade HTMLContentElement.select reflete o atributo selecionado. É um {{domxref("DOMString")}} contendo uma lista de spaço-separado de seletores CSS que seleciona o conteúdo para inserir em lugar do elemento <content>.

+ +

Sintaxe

+ +
object.select = "CSSselector CSSselector ...";
+
+ +

Exemplo

+ +
// Select <h1> elements and elements with class="error"
+myContentObject.select = "h1 .error";
+ +

Especificações

+ + + + + + + + + + + + + + +
EspecificaçõesStatusCommentário
{{SpecName('Shadow DOM', '#the-content-element', 'content')}}{{Spec2('Shadow DOM')}} 
+ +

Compatibilidade do browser

+ +

{{CompatibilityTable}}

+ +
+ + + + + + + + + + + + + + + + + + + +
ComponenteChromeFirefox (Gecko)Internet ExplorerOperaSafari (WebKit)
Suporte básico35{{CompatGeckoDesktop("28")}} [1]{{CompatNo}}26{{CompatNo}}
+
+ +
+ + + + + + + + + + + + + + + + + + + +
FeatureAndroidFirefox Mobile (Gecko)IE PhoneOpera MobileSafari Mobile
Suporte básico37{{CompatGeckoMobile("28")}} [1]{{CompatNo}}{{CompatUnknown}}{{CompatUnknown}}
+
+ +

[1] Se Shadow DOM não estiver habilitado no Firefox, os elementos <content> se comportarão como {{domxref("HTMLUnknownElement")}}. Shadow DOM foi o primeiro implementado no Firefox 28 e está atrás de uma preferência, dom.webcomponents.enabled, ao qual é desabilitado por padrão.

+ +

Veja também

+ + diff --git a/files/pt-br/web/api/htmlcontentelement/seletor/index.html b/files/pt-br/web/api/htmlcontentelement/seletor/index.html deleted file mode 100644 index 63fae05c69..0000000000 --- a/files/pt-br/web/api/htmlcontentelement/seletor/index.html +++ /dev/null @@ -1,98 +0,0 @@ ---- -title: HTMLContentElement.select -slug: Web/API/HTMLContentElement/Seletor -tags: - - API - - HTMLContentElement - - HTMLContentElement.select - - Select -translation_of: Web/API/HTMLContentElement/select ---- -

{{ APIRef("Web Components") }}

- -

A propriedade HTMLContentElement.select reflete o atributo selecionado. É um {{domxref("DOMString")}} contendo uma lista de spaço-separado de seletores CSS que seleciona o conteúdo para inserir em lugar do elemento <content>.

- -

Sintaxe

- -
object.select = "CSSselector CSSselector ...";
-
- -

Exemplo

- -
// Select <h1> elements and elements with class="error"
-myContentObject.select = "h1 .error";
- -

Especificações

- - - - - - - - - - - - - - -
EspecificaçõesStatusCommentário
{{SpecName('Shadow DOM', '#the-content-element', 'content')}}{{Spec2('Shadow DOM')}} 
- -

Compatibilidade do browser

- -

{{CompatibilityTable}}

- -
- - - - - - - - - - - - - - - - - - - -
ComponenteChromeFirefox (Gecko)Internet ExplorerOperaSafari (WebKit)
Suporte básico35{{CompatGeckoDesktop("28")}} [1]{{CompatNo}}26{{CompatNo}}
-
- -
- - - - - - - - - - - - - - - - - - - -
FeatureAndroidFirefox Mobile (Gecko)IE PhoneOpera MobileSafari Mobile
Suporte básico37{{CompatGeckoMobile("28")}} [1]{{CompatNo}}{{CompatUnknown}}{{CompatUnknown}}
-
- -

[1] Se Shadow DOM não estiver habilitado no Firefox, os elementos <content> se comportarão como {{domxref("HTMLUnknownElement")}}. Shadow DOM foi o primeiro implementado no Firefox 28 e está atrás de uma preferência, dom.webcomponents.enabled, ao qual é desabilitado por padrão.

- -

Veja também

- - diff --git a/files/pt-br/web/api/htmlelement/accesskey/index.html b/files/pt-br/web/api/htmlelement/accesskey/index.html new file mode 100644 index 0000000000..e0425e3645 --- /dev/null +++ b/files/pt-br/web/api/htmlelement/accesskey/index.html @@ -0,0 +1,19 @@ +--- +title: Element.accessKey +slug: Web/API/Element/accessKey +translation_of: Web/API/HTMLElement/accessKey +translation_of_original: Web/API/Element/accessKey +--- +
{{APIRef("DOM")}}
+ +
 
+ +

A propriedade Element.accessKey define a tecla pelo qual o usuário pode pressionar para saltar para este elemento.

+ +
+

Nota: A propriedade Element.accessKey é raramente usada por causa dos conflitos múltiplos com os atalhos pré-definidos nos navegadores. Para contornar isto, os navegadores implementam o comportamento da tecla de acesso se as teclas são pressionadas com outras teclas "qualificadas" (como Alt + tecla de acesso).

+
+ +

 

+ +

 

diff --git a/files/pt-br/web/api/htmlelement/blur/index.html b/files/pt-br/web/api/htmlelement/blur/index.html deleted file mode 100644 index 25a2273aec..0000000000 --- a/files/pt-br/web/api/htmlelement/blur/index.html +++ /dev/null @@ -1,89 +0,0 @@ ---- -title: HTMLElement.blur() -slug: Web/API/HTMLElement/blur -tags: - - API - - DOM HTML - - Foco - - HTMLElement - - Referencia - - metodo -translation_of: Web/API/HTMLOrForeignElement/blur ---- -
{{ APIRef("HTML DOM") }}
- -

O método HTMLElement.blur() remove o foco do teclado no elemento corrente.

- -

Sintaxe

- -
elemento.blur();
- -

Exemplos

- -

Removendo o foco de um input de texto

- -

HTML

- -
<input type="text" id="meuTexto" value="Texto Exemplo">
-<br><br>
-<button type="button" onclick="focusInput()">Clique para definir o foco</button>
-<button type="button" onclick="blurInput()">Clique para remover o foco</button>
- -

JavaScript

- -
function focusInput() {
-  document.getElementById('meuTexto').focus();
-}
-function blurInput() {
-  document.getElementById('meuTexto').blur();
-}
- -

Resultado

- -

{{ EmbedLiveSample('Remove_focus_from_a_text_input') }}

- -

Especificação

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
EspecificaçãoStatusComentário
{{SpecName('HTML WHATWG', 'editing.html#dom-blur', 'blur')}}{{Spec2('HTML WHATWG')}} 
{{SpecName('HTML5.1', 'editing.html#blur()-0', 'blur')}}{{Spec2('HTML5.1')}} 
{{SpecName('HTML5 W3C', 'editing.html#dom-blur', 'blur')}}{{Spec2('HTML5 W3C')}} 
{{SpecName('DOM2 HTML', 'html.html#ID-28216144', 'blur')}}{{Spec2('DOM2 HTML')}} 
- -

Compatibilidade com navegadores

- - - -

{{Compat("api.HTMLElement.blur")}}

- -

Veja também

- - diff --git a/files/pt-br/web/api/htmlelement/dataset/index.html b/files/pt-br/web/api/htmlelement/dataset/index.html deleted file mode 100644 index 2cb4ba63b0..0000000000 --- a/files/pt-br/web/api/htmlelement/dataset/index.html +++ /dev/null @@ -1,97 +0,0 @@ ---- -title: HTMLElement.dataset -slug: Web/API/HTMLElement/dataset -translation_of: Web/API/HTMLOrForeignElement/dataset ---- -

{{ APIRef }}

- -

A propriedade HTMLElement.dataset permite o acesso, em modo de leitura e escrita, a todos os atributos de dados personalizado (data-*) no elemento. Ele é um mapa de DOMString, com uma entrada para cada atributo de dados personalizado.

- -

O nome de um atributo de dados customizado inicia com data-. Ele deve conter somente letras, números e os seguintes caracteres: dash (-), dot (.), collon(:), underscore (_). Além disso, ele não deve conter letras ASCII captalizadas (A à Z).

- -

Um atributo de dados personalizado é transformado em uma chave para uma entrada no {{ domxref("DOMStringMap") }} de acordo com as seguintes regras

- - - -

A transformação oposta, que mapeia uma chave para um nome de atributo, usa as seguintes regras:

- - - -

A restrição nas regras acima garantem que as duas trasnformações são inversa uma da outra.

- -

Por exemplo, o atributo data-abc-def corresponde a chave abcDef.

- -

Sintaxe

- -
string = element.dataset.camelCasedName;
-element.dataset.camelCasedName = string;
- -

Exemplos

- -
<div id="user" data-id="1234567890" data-user="johndoe" data-date-of-birth>John Doe
-</div>
-
-var el = document.querySelector('#user');
-
-// el.id == 'user'
-// el.dataset.id === '1234567890'
-// el.dataset.user === 'johndoe'
-// el.dataset.dateOfBirth === ''
-
-el.dataset.dateOfBirth = '1960-10-03'; // set the DOB.
-
-// 'someDataAttr' in el.dataset === false
-
-el.dataset.someDataAttr = 'mydata';
-// 'someDataAttr' in el.dataset === true
-
- -

Especificações

- - - - - - - - - - - - - - - - - - - - - - - - -
EspeficicaçãoStatusComentário
{{SpecName('HTML WHATWG', "dom.html#dom-dataset", "HTMLElement.dataset")}}{{Spec2('HTML WHATWG')}}Sem mudanças desde o último  snapshot, {{SpecName('HTML5.1')}}
{{SpecName('HTML5.1', "dom.html#dom-dataset", "HTMLElement.dataset")}}{{Spec2('HTML5.1')}}Snapshot de {{SpecName('HTML WHATWG')}}, sem mudanças desde {{SpecName('HTML5 W3C')}}
{{SpecName('HTML5 W3C', "dom.html#dom-dataset", "HTMLElement.dataset")}}{{Spec2('HTML5 W3C')}}Snapshot de {{SpecName('HTML WHATWG')}}, definição inicial.
- -

Compatibilidade com Browsers

- - - -

{{Compat("api.HTMLElement.dataset")}}

- -

Veja também

- - diff --git a/files/pt-br/web/api/htmlelement/focus/index.html b/files/pt-br/web/api/htmlelement/focus/index.html deleted file mode 100644 index 8f798b3d86..0000000000 --- a/files/pt-br/web/api/htmlelement/focus/index.html +++ /dev/null @@ -1,62 +0,0 @@ ---- -title: HTMLElement.focus() -slug: Web/API/HTMLElement/focus -translation_of: Web/API/HTMLOrForeignElement/focus ---- -
{{ APIRef("HTML DOM") }}
- -

O método HTMLElement.focus()  seta o foco em um determinado elemento em especifico, caso esse elemento permita ter o foco neste elemento.

- -

Síntaxe

- -
element.focus()
- -

Especificação

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
EspecificaçãoStatusComentário
{{SpecName('HTML WHATWG', 'editing.html#dom-focus', 'focus')}}{{Spec2('HTML WHATWG')}} 
{{SpecName('HTML5.1', 'editing.html#focus()-0', 'focus')}}{{Spec2('HTML5.1')}} 
{{SpecName('HTML5 W3C', 'editing.html#dom-focus', 'focus')}}{{Spec2('HTML5 W3C')}} 
{{SpecName('DOM2 HTML', 'html.html#ID-32130014', 'focus')}}{{Spec2('DOM2 HTML')}} 
{{SpecName('DOM1', 'level-one-html.html#method-focus', 'focus')}}{{Spec2('DOM1')}} 
- -

Notas

- -

Caso você utilize o HTMLElement.focus() por meio da manipulação de um evento mousedown , você deve utilizar o evento event.preventDefault() a fim de o foco não sair do arquivo HTMLElement.

- -

Veja também

- - diff --git a/files/pt-br/web/api/htmlelement/innertext/index.html b/files/pt-br/web/api/htmlelement/innertext/index.html new file mode 100644 index 0000000000..1ab5e81027 --- /dev/null +++ b/files/pt-br/web/api/htmlelement/innertext/index.html @@ -0,0 +1,86 @@ +--- +title: Node.innerText +slug: Web/API/Node/innerText +translation_of: Web/API/HTMLElement/innerText +--- +
{{APIRef("DOM")}}
+ +

Resumo

+ +

Node.innerText é uma propriedade que representa o conteúdo textual "renderizado" de um nó e seus descendentes. Usada como getter, retorna de maneira aproximada o texto que o usuário obteria caso tivesse selecionado o conteúdo e copiado para a área de transferência. Este recurso fora introduzido originalmente pelo Internet Explorer, mas foi oficialmente especificado no padrão HTML apenas em 2016, sendo adotado por todos os principais navegadores a partir de então.

+ +

{{domxref("Node.textContent")}} é uma alternativa similar, embora existam diferenças significativas entre as duas.

+ +

Especificação

+ + + + + + + + + + + + + + +
EspecificaçãoStatusComentário
{{SpecName('HTML WHATWG', 'dom.html#the-innertext-idl-attribute', 'innerText')}}{{Spec2('HTML WHATWG')}}Introduzida, baseado no rascunho da especifição de innerText. Ver whatwg/html#465 e whatwg/compat#5 para histórico.
+ +

Compatibilidade de navegadores

+ +

{{ CompatibilityTable() }}

+ +
+ + + + + + + + + + + + + + + + + + + +
RecursoChromeFirefox (Gecko)Internet ExplorerOperaSafari (WebKit)
Suporte básico4{{ CompatGeckoDesktop(45) }}69.6 (provavelmente antes)3
+
+ +
+ + + + + + + + + + + + + + + + + + + +
RecursoAndroidFirefox Mobile (Gecko)IE MobileOpera MobileSafari Mobile
Suporte básico2.3 (provavelmente antes){{ CompatGeckoMobile(45) }}10 (provavelmente antes)124.1 (provavelmente antes)
+
+ +

Ver também

+ + diff --git a/files/pt-br/web/api/htmlelement/input_event/index.html b/files/pt-br/web/api/htmlelement/input_event/index.html new file mode 100644 index 0000000000..dd69baf988 --- /dev/null +++ b/files/pt-br/web/api/htmlelement/input_event/index.html @@ -0,0 +1,248 @@ +--- +title: input +slug: Web/Events/input +translation_of: Web/API/HTMLElement/input_event +--- +

O evento input do DOM é disparado sincronicamente quando o valor de um elemento {{HTMLElement("input")}}, {{HTMLElement("select")}}, ou {{HTMLElement("textarea")}} é alterado. (Para elementos input com type=checkbox ou type=radio, o evento input não é disparado quando o usuário clica no elemento, porque o valor do atributo não é alterado.) Além disso, o evento é disparado no contenteditable editors quando o seu conteúdo é alterado. Nesse caso, O alvo do evento é o elemento host da edição. Se houver dois ou mais elementos que tenha contenteditable como true, o "host de edição" é o elemento antepassado mais próximo cujo pai não é editável. Similarmente, ele também é disparado no element raiz do designMode editors.

+ +

Informações gerais

+ +
+
Specification
+
HTML5, DOM Level 3 Events
+
Interface
+
{{domxref("Event")}}, {{domxref("InputEvent")}}
+
Bubbles
+
Yes
+
Cancelable
+
No
+
Target
+
Element
+
Default Action
+
The value or the content is modified.
+
+ +

Propriedades

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
PropertyTypeDescription
target {{readonlyInline}}{{domxref("EventTarget")}}The event target (the topmost target in the DOM tree).
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.
+ +

Compatibilidade dos navegadores

+ +

{{CompatibilityTable}}

+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FeatureChromeEdgeFirefox (Gecko)Internet ExplorerOperaSafari
Basic support{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}[1]9[2]{{CompatVersionUnknown}}[3]{{CompatVersionUnknown}}
immediately after compositionupdate{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatGeckoDesktop("12")}}{{CompatVersionUnknown}}15{{CompatVersionUnknown}}
on contenteditable element{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatGeckoDesktop("14")}}{{CompatNo}}[4] +

 

+
15{{CompatVersionUnknown}}
when designMode is "on"{{CompatVersionUnknown}}{{CompatUnknown}}{{CompatGeckoDesktop("14")}}{{CompatNo}}15{{CompatVersionUnknown}}
data{{CompatUnknown}}{{CompatUnknown}}{{CompatNo}}{{CompatUnknown}}{{CompatUnknown}}{{CompatUnknown}}
isComposing{{CompatNo}}{{CompatUnknown}}{{CompatGeckoDesktop("31")}}{{CompatNo}}{{CompatNo}}{{CompatNo}}
<select>{{CompatVersionUnknown}}{{CompatNo}}{{CompatGeckoDesktop("49")}}{{CompatNo}}{{CompatUnknown}}{{CompatUnknown}}
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FeatureAndroidChrome for AndroidEdgeFirefox Mobile (Gecko)IE MobileOpera MobileSafari Mobile
Basic support{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatUnknown}}{{CompatUnknown}}{{CompatVersionUnknown}}
immediately after compositionupdate{{CompatUnknown}}{{CompatUnknown}}{{CompatVersionUnknown}}{{CompatGeckoMobile("12")}}{{CompatUnknown}}{{CompatUnknown}}{{CompatUnknown}}
on contenteditable element{{CompatUnknown}}{{CompatVersionUnknown}}{{CompatUnknown}}{{CompatGeckoMobile("14")}}{{CompatUnknown}}{{CompatUnknown}}{{CompatVersionUnknown}}
when designMode is "on"{{CompatUnknown}}{{CompatUnknown}}{{CompatUnknown}}{{CompatGeckoMobile("14")}}{{CompatUnknown}}{{CompatUnknown}}{{CompatUnknown}}
data{{CompatUnknown}}{{CompatUnknown}}{{CompatUnknown}}{{CompatNo}}{{CompatUnknown}}{{CompatUnknown}}{{CompatUnknown}}
isComposing{{CompatNo}}{{CompatNo}}{{CompatUnknown}}{{CompatGeckoMobile("31")}}{{CompatNo}}{{CompatNo}}{{CompatNo}}
<select>{{CompatUnknown}}{{CompatVersionUnknown}}{{CompatUnknown}}{{CompatNo}}{{CompatUnknown}}{{CompatUnknown}}{{CompatUnknown}}
+
+ +

[1] Prior to Gecko 12.0 {{geckoRelease("12.0")}}, Gecko didn't fire input events while composition was ongoing using IMEs or when dead keys were used on Mac OS X.

+ +

[2] IE 9 does not fire an input event when the user deletes characters from an input (e.g. by pressing Backspace or Delete, or using the "Cut" operation).

+ +

[3] Prior to Opera 15, Opera did not fire an input event after dropping text in an input field.

+ +

[4] The event target is the innermost element at the caret position.

+ +

Veja também

+ + + +

Also the change event is related. change fires less often than input – it only fires when the changes are committed by the user.

diff --git a/files/pt-br/web/api/htmlmediaelement/abort_event/index.html b/files/pt-br/web/api/htmlmediaelement/abort_event/index.html new file mode 100644 index 0000000000..62243a2762 --- /dev/null +++ b/files/pt-br/web/api/htmlmediaelement/abort_event/index.html @@ -0,0 +1,70 @@ +--- +title: abort +slug: Web/Events/abort +translation_of: Web/API/HTMLMediaElement/abort_event +translation_of_original: Web/Events/abort +--- +

O evento abort é disparado quando o carregamento de um recurso foi interrompido.

+ +

Informações Gerais

+ +
+
Especificação
+
DOM L3
+
Interface
+
{{domxref("UIEvent")}} se gerado a partir da interface do usuário, caso contrário será {{domxref("Event")}}.
+
Bubbles
+
Não
+
Cancelável
+
Não
+
Alvo
+
{{domxref("Element")}}
+
Ação Padrão
+
Nenhuma
+
+ +

Propriedades

+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
PropriedadeTipoDescrição
target {{readOnlyInline}}{{domxref("EventTarget")}}O evento alvo (O mais elevado da árvore DOM).
type {{readOnlyInline}}{{domxref("DOMString")}}O tipo de evento.
bubbles {{readOnlyInline}}{{domxref("Boolean")}}O evento é normalmente bubble?
cancelable {{readOnlyInline}}{{domxref("Boolean")}}É possível cancelar o evento?
view {{readOnlyInline}}{{domxref("WindowProxy")}}{{domxref("document.defaultView")}} (window do documento)
detail {{readOnlyInline}}long (float)0.
+
diff --git a/files/pt-br/web/api/htmlorforeignelement/blur/index.html b/files/pt-br/web/api/htmlorforeignelement/blur/index.html new file mode 100644 index 0000000000..25a2273aec --- /dev/null +++ b/files/pt-br/web/api/htmlorforeignelement/blur/index.html @@ -0,0 +1,89 @@ +--- +title: HTMLElement.blur() +slug: Web/API/HTMLElement/blur +tags: + - API + - DOM HTML + - Foco + - HTMLElement + - Referencia + - metodo +translation_of: Web/API/HTMLOrForeignElement/blur +--- +
{{ APIRef("HTML DOM") }}
+ +

O método HTMLElement.blur() remove o foco do teclado no elemento corrente.

+ +

Sintaxe

+ +
elemento.blur();
+ +

Exemplos

+ +

Removendo o foco de um input de texto

+ +

HTML

+ +
<input type="text" id="meuTexto" value="Texto Exemplo">
+<br><br>
+<button type="button" onclick="focusInput()">Clique para definir o foco</button>
+<button type="button" onclick="blurInput()">Clique para remover o foco</button>
+ +

JavaScript

+ +
function focusInput() {
+  document.getElementById('meuTexto').focus();
+}
+function blurInput() {
+  document.getElementById('meuTexto').blur();
+}
+ +

Resultado

+ +

{{ EmbedLiveSample('Remove_focus_from_a_text_input') }}

+ +

Especificação

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
EspecificaçãoStatusComentário
{{SpecName('HTML WHATWG', 'editing.html#dom-blur', 'blur')}}{{Spec2('HTML WHATWG')}} 
{{SpecName('HTML5.1', 'editing.html#blur()-0', 'blur')}}{{Spec2('HTML5.1')}} 
{{SpecName('HTML5 W3C', 'editing.html#dom-blur', 'blur')}}{{Spec2('HTML5 W3C')}} 
{{SpecName('DOM2 HTML', 'html.html#ID-28216144', 'blur')}}{{Spec2('DOM2 HTML')}} 
+ +

Compatibilidade com navegadores

+ + + +

{{Compat("api.HTMLElement.blur")}}

+ +

Veja também

+ + diff --git a/files/pt-br/web/api/htmlorforeignelement/dataset/index.html b/files/pt-br/web/api/htmlorforeignelement/dataset/index.html new file mode 100644 index 0000000000..2cb4ba63b0 --- /dev/null +++ b/files/pt-br/web/api/htmlorforeignelement/dataset/index.html @@ -0,0 +1,97 @@ +--- +title: HTMLElement.dataset +slug: Web/API/HTMLElement/dataset +translation_of: Web/API/HTMLOrForeignElement/dataset +--- +

{{ APIRef }}

+ +

A propriedade HTMLElement.dataset permite o acesso, em modo de leitura e escrita, a todos os atributos de dados personalizado (data-*) no elemento. Ele é um mapa de DOMString, com uma entrada para cada atributo de dados personalizado.

+ +

O nome de um atributo de dados customizado inicia com data-. Ele deve conter somente letras, números e os seguintes caracteres: dash (-), dot (.), collon(:), underscore (_). Além disso, ele não deve conter letras ASCII captalizadas (A à Z).

+ +

Um atributo de dados personalizado é transformado em uma chave para uma entrada no {{ domxref("DOMStringMap") }} de acordo com as seguintes regras

+ + + +

A transformação oposta, que mapeia uma chave para um nome de atributo, usa as seguintes regras:

+ + + +

A restrição nas regras acima garantem que as duas trasnformações são inversa uma da outra.

+ +

Por exemplo, o atributo data-abc-def corresponde a chave abcDef.

+ +

Sintaxe

+ +
string = element.dataset.camelCasedName;
+element.dataset.camelCasedName = string;
+ +

Exemplos

+ +
<div id="user" data-id="1234567890" data-user="johndoe" data-date-of-birth>John Doe
+</div>
+
+var el = document.querySelector('#user');
+
+// el.id == 'user'
+// el.dataset.id === '1234567890'
+// el.dataset.user === 'johndoe'
+// el.dataset.dateOfBirth === ''
+
+el.dataset.dateOfBirth = '1960-10-03'; // set the DOB.
+
+// 'someDataAttr' in el.dataset === false
+
+el.dataset.someDataAttr = 'mydata';
+// 'someDataAttr' in el.dataset === true
+
+ +

Especificações

+ + + + + + + + + + + + + + + + + + + + + + + + +
EspeficicaçãoStatusComentário
{{SpecName('HTML WHATWG', "dom.html#dom-dataset", "HTMLElement.dataset")}}{{Spec2('HTML WHATWG')}}Sem mudanças desde o último  snapshot, {{SpecName('HTML5.1')}}
{{SpecName('HTML5.1', "dom.html#dom-dataset", "HTMLElement.dataset")}}{{Spec2('HTML5.1')}}Snapshot de {{SpecName('HTML WHATWG')}}, sem mudanças desde {{SpecName('HTML5 W3C')}}
{{SpecName('HTML5 W3C', "dom.html#dom-dataset", "HTMLElement.dataset")}}{{Spec2('HTML5 W3C')}}Snapshot de {{SpecName('HTML WHATWG')}}, definição inicial.
+ +

Compatibilidade com Browsers

+ + + +

{{Compat("api.HTMLElement.dataset")}}

+ +

Veja também

+ + diff --git a/files/pt-br/web/api/htmlorforeignelement/focus/index.html b/files/pt-br/web/api/htmlorforeignelement/focus/index.html new file mode 100644 index 0000000000..8f798b3d86 --- /dev/null +++ b/files/pt-br/web/api/htmlorforeignelement/focus/index.html @@ -0,0 +1,62 @@ +--- +title: HTMLElement.focus() +slug: Web/API/HTMLElement/focus +translation_of: Web/API/HTMLOrForeignElement/focus +--- +
{{ APIRef("HTML DOM") }}
+ +

O método HTMLElement.focus()  seta o foco em um determinado elemento em especifico, caso esse elemento permita ter o foco neste elemento.

+ +

Síntaxe

+ +
element.focus()
+ +

Especificação

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
EspecificaçãoStatusComentário
{{SpecName('HTML WHATWG', 'editing.html#dom-focus', 'focus')}}{{Spec2('HTML WHATWG')}} 
{{SpecName('HTML5.1', 'editing.html#focus()-0', 'focus')}}{{Spec2('HTML5.1')}} 
{{SpecName('HTML5 W3C', 'editing.html#dom-focus', 'focus')}}{{Spec2('HTML5 W3C')}} 
{{SpecName('DOM2 HTML', 'html.html#ID-32130014', 'focus')}}{{Spec2('DOM2 HTML')}} 
{{SpecName('DOM1', 'level-one-html.html#method-focus', 'focus')}}{{Spec2('DOM1')}} 
+ +

Notas

+ +

Caso você utilize o HTMLElement.focus() por meio da manipulação de um evento mousedown , você deve utilizar o evento event.preventDefault() a fim de o foco não sair do arquivo HTMLElement.

+ +

Veja também

+ + diff --git a/files/pt-br/web/api/indexeddb_api/usando_indexeddb/index.html b/files/pt-br/web/api/indexeddb_api/usando_indexeddb/index.html deleted file mode 100644 index da14879b31..0000000000 --- a/files/pt-br/web/api/indexeddb_api/usando_indexeddb/index.html +++ /dev/null @@ -1,1281 +0,0 @@ ---- -title: Usando IndexedDB -slug: Web/API/IndexedDB_API/Usando_IndexedDB -tags: - - API IndexedDB Tutorial Avançado -translation_of: Web/API/IndexedDB_API/Using_IndexedDB ---- -
-

IndexedDB é uma forma de armazenar dados no navegador do usuário. Com ele você pode criar aplicações web com possibilidade de fazer query sem necessidade de conexão, suas aplicações podem funcionar tanto online quanto offline. 

-
- -

Sobre esse documento

- -

Esse tutorial utiliza a API assíncrona do IndexedDB. Se você não está familiarizado com IndexedDB, você pode ler Conceitos básicos sobre IndexedDB.

- -

Para a documentação de referência, veja o artigo sobre API IndexedDB, pois nele contém os tipos de objetos utilizados no IndexedDB,  como também métodos da API, tanto síncrona como assíncrona. 

- -

Padrão básico

- -

O IndexedDB encoraja o uso do seguinte padrão:

- -
    -
  1. Abrir um banco de dados.
  2. -
  3. Criar um ObjectStore ao atualizar o banco. 
  4. -
  5. Iniciar uma transação e e faz um request para fazer alguma operação no banco, como adicionar ou obter dados.
  6. -
  7. -
    Esperar a operação ser completada ouvindo algum evento DOM.
    -
  8. -
  9. -
    Fazer algo com o resultado da query (que pode ser obtida pelo objeto request).
    -
  10. -
- -

OK, então, agora com esses conceitos em mente, nós podemos fazer coisas mais concretas.

- -

Criando e estruturando o banco

- -

Pelo fato  da especificação ainda estar evoluindo, as implementações do IndexedDB tem prefixos de navegadores. Os navegadores podem ter implementações diferentes da API IndexedDB até a especificação ser consolidada. Mas uma vez que tudo chegar a um consenso, os navegadores tirarão seus prefixos. Atualmente, algumas implementações removeram o prefixo: Internet Explorer 10, Firefox 16, Chrome 24. Quando eles usam prefixo, navegadores baseados no Gecko usam o prefixo moz, enquanto os navegadores baseados no WebKit usam o prefixo webkit.

- -

Usando uma versão experimental do IndexedDB

- -

Se você quiser testar seu código em navegadores que usam prefixo, você pode usar o código abaixo:  

- -
// Na linha abaixo, você deve incluir os prefixos do navegador que você vai testar.
-window.indexedDB = window.indexedDB || window.mozIndexedDB || window.webkitIndexedDB || window.msIndexedDB;
-// Não use "var indexedDB = ..." se você não está numa function.
-// Posteriormente, você pode precisar de referências de algum objeto window.IDB*:
-window.IDBTransaction = window.IDBTransaction || window.webkitIDBTransaction || window.msIDBTransaction;
-window.IDBKeyRange = window.IDBKeyRange || window.webkitIDBKeyRange || window.msIDBKeyRange;
-// (Mozilla nunca usou prefixo nesses objetos, então não precisamos window.mozIDB*)
- -

Tome cuidado, implementações prefixadas podem estar com bugs ou implementando especificações antigas. Portanto, não é recomendado usar em produção. É preferível não usar IndexedDB em navegadores antigos:

- -
if (!window.indexedDB) {
-    window.alert("Seu navegador não suporta uma versão estável do IndexedDB. Alguns recursos não estarão disponíveis.");
-}
-
- -

Abrindo um banco

- -

Começamos todo o processo assim:

- -
// Abrindo o banco de dados
-var request = window.indexedDB.open("DBteste", 3);
-
- -

Abrir um banco é como qualquer outra operação — Você tem que "requerer (request)".

- -

A requisição de abertura não abre o banco ou inicia a transação. A chamada da função open() retorna um objeto IDBOpenDBRequest com o resultado (success) ou um erro que você terá que tratar. Muitas outras funções assíncronas no IndexedDB fazem a mesma coisa - retornam um objeto IDBRequest com o resultado ou erro. O resultado para a função open é uma instância de IDBDatabase.

- -

O segundo parâmetro para o método open é a versão do banco. A versão do banco determina seu schema — os registros no banco e sua estrutura. Se o banco não existe ainda, ele é criado pela operação open, então o evento onupgradeneeded é chamado e você cria o schema do banco nesse evento. Se o banco existe mas você está fornecendo um novo número de versão, o evento onupgradeneeded é chamado imediatamente, permitindo você tratar a atualização do schema. Para mais informações sobre isso veja Updating the version of the database.

- -
-

O número de versão é um unsigned long long, o que significa que ele pode ver um inteiro muito grande. Isso também significa que você não pode usar float, pois ele será convertido em um inteiro pequeno e a transação pode não acontecer, ou o evento upgradeneeded pode não ser chamado. Então se você usar 2.4 como versão:

- -
var request = indexedDB.open("DBteste", 2.4); // não faça isso, pois a versão será convertida para 2.
-
- -

Gerenciando handlers

- -

A primeira coisa que você vai querer fazer em quase todos os requests é tratar os casos de success e error:

- -
request.onerror = function(event) {
-  // Fazer algo com request.errorCode!
-};
-request.onsuccess = function(event) {
-  // Fazer algo com request.result!
-};
- -

Qual das duas funções, onsuccess() ou onerror(),  será chamada? Se tudo correr bem, o evento de sucesso (que é um evento DOM event com propriedade type setada "success") é chamado com request como seu target. Uma vez chamado, a função onsuccess() no request é chamada com o evento de sucesso em seu contexto. Por outro lado, se acontecer algum problema, um evento de erro (que é um evento DOM com a propriedade type setada para "error") é chamado no request. Então a função onerror()  com o evento erro em seu contexto.

- -

A API IndexedDB é feita para minimizar a necessidade de manipular erros, então você não fará muitos eventos de erro (ao menos, se você usar a API!) No  caso de abrir um banco, portanto, existe algumas condições comuns para eventos de erro. O problema mais comum é o usuário não dar permissão para criar o banco. Um dos principais objetivos do IndexedDB é permitir muitos dados serem armazenados para uso offline. (Para aprender mais sobre o quanto cada navegador pode armazenar, veja Storage limits).  

- -

Obviamente, navegadores não querem armazenar dados que poluem seu computador, então o navegador mostra uma mensagem ao usuário na primeira vez que um aplicativo tenta abrir o IndexedDB. O usuário pode escolher permitir ou negar acesso. O IndexedDB também é desabilitado no modo privado dos navegadores (ctrl+shift+N no Chrome e ctrl+shift+P no Firefox). Isso acontece porque o intuito do modo privado é não deixar rastros na navegação.

- -

Agora, assumindo que o usuário aprovou seu request para criar o banco, e você recebeu success; Qual é o próximo passo? O request foi gerado com a chamada de indexedDB.open(), e request.result é uma instância de IDBDatabase, e você definitivamente vai querer armazenar isso para usar depois. Veja abaixo:

- -
var db;
-var request = indexedDB.open("DBteste");
-request.onerror = function(event) {
-  alert("Você não habilitou minha web app para usar IndexedDB?!");
-};
-request.onsuccess = function(event) {
-  db = request.result;
-};
-
- -

Tratando Erros

- -

Como mencionado acima, o evento de erro é chamado quando o request dá erro. Se você quer evitar manipuladores de erro a cada request, você pode adicionar um único manipulador de erro no objeto db, como abaixo:

- -
db.onerror = function(event) {
-  // Função genérica para tratar os erros de todos os requests desse banco!
-  alert("Database error: " + event.target.errorCode);
-};
-
- -

Um dos erros mais comuns ao abrir o banco é VER_ERR. Ele indica que a versão do banco existente é maior que a versão que você quer abrir.

- -

Criando ou atualizando a versão do banco

- -

Quando você cria um novo banco ou aumenta sua versão, o evento onupgradeneeded será chamado. No manipulador deste evento, você deve criar o objectStore necessário para a versão do banco:

- -
// Este evento é implementado somente em navegadores mais recentes
-request.onupgradeneeded = function(event) {
-  var db = event.target.result;
-
-  // cria um objectStore para esse banco
-  var objectStore = db.createObjectStore("nome", { keyPath: "minhaChave" });
-};
- -

Neste caso, o banco já terá objectStores de suas versões anteriores, então você não terá que criar esses objectStores de novo. Você somente precisará criar um novo objectStore qualquer, ou deletar objectStores da versão anterior que não serão utilizados. Se você precisa mudar um objectStore existente (mudar o keyPath, por exemplo),  então você precisa deletar o objectStore antigo e criá-lo novamente com as novas opções. (Note que isso irá deletar a informação no objectStore! Se você precisa salvar a informação, você deve ler isso e salvá-lo em algum lugar antes de atualizar o banco.)

- -

Blink/Webkit suporta a versão atual da especificação, nas versões do Chrome 23+ e Opera 17+; IE10+ também suporta. Outros motores e versões antigas não implementam a versão atual da especificação e não suportam a assinatura indexedDB.open(name, version).onupgradeneeded ainda.  Para mais informação sobre como atualizar a versão do banco em Webkit/Blink, veja IDBDatabase reference article.

- -

Estruturando o banco

- -

Agora a estrutura do banco. IndexedDB usa "armazens de objetos" em vez de tabelas, e um único banco de dados pode conter qualquer número de "armazem de objetos". Sempre que um valor é armazenado num objectStore, ele é associado a uma chave. Existe várias maneiras diferentes de uma chave ser mostrada, dependendo do que o objectStore usa, um key path ou key generator.

- -

A tabela abaixo mostra as direfentes chaves suportadas:

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Key Path (keyPath)Key Generator (autoIncrement)Description
NãoNãoEste objectStore pode ter qualquer tipo de valor primitivo como número ou string. Você deve suprir uma chave separada sempre que adicionar um novo valor.
SimNãoEste objectStore pode simplesmente armazenar objetos JavaScript. O objeto deve ter uma propriedade com o mesmo nome do key path.
NãoSimEste objectStore pode possuir qualquer tipo de valor. A chave é gerada para você, automaticamente, ou você pode suprir uma chave separada, caso utilize uma chave específica.
SimSimEste objectStore suporta somente objetos JavaScript. Normalmente uma chave é gerada e o valor dela é armazenado no objeto em uma propriedade com o mesmo nome da key path. Portanto, se a propriedade já existe, o valor dela será usado como chave, em vez do valor gerado.
- -

Você também pode criar índices em qualquer objectStore. Um indice deixa você olhar os valores armazenados no objectStore usando o valor de uma propriedade do objectStore, em vez de sua chave.

- -

Adicionalmente, indices tem a habilidade de forçar restrições simples nos dados armazenados. Setando uma flag única quando criar o índice, reforça que dois objetos são armazenados contendo o mesmo valor para o key path do índice. Então, por exemplo, se você tem um objeto armazenado que tem um conjunto de pessoas, e você quer ter certeza que ninguém tera o mesmo e-mail, você pode usar um índice com flag única para forçar isso.

- -

Isso soa meio confuso, mas este exemplo pode iluminar o conceito. Primeiro, vamos definir alguns dados a serem usados no exemplo:

- -
// Isso é o que os dados de nossos clientes será.
-const DadosClientes = [
-  { ssn: "444-44-4444", nome: "Bill", idade: 35, email: "bill@company.com" },
-  { ssn: "555-55-5555", nome: "Donna", idade: 32, email: "donna@home.org" }
-];
-
- -

Agora  vamos ver  ccomo criar um IndexedDB para armazenar nossos dados:

- -
const dbName = "clientes";
-
-var request = indexedDB.open(dbName, 2);
-
-request.onerror = function(event) {
-  // Tratar erros.
-};
-request.onupgradeneeded = function(event) {
-  var db = event.target.result;
-
-  // Cria um objectStore para conter a informação sobre nossos clientes. Nós vamos
-  // usar "ssn" como key path porque sabemos que é único;
-  var objectStore = db.createObjectStore("clientes", { keyPath: "ssn" });
-
-  // Cria um índice para buscar clientes pelo nome. Podemos ter nomes
-  // duplicados, então não podemos usar como índice único.
-  objectStore.createIndex("nome", "nome", { unique: false });
-
-  // Cria um índice para buscar clientes por email. Queremos ter certeza
-  // que não teremos 2 clientes com o mesmo e-mail;
-  objectStore.createIndex("email", "email", { unique: true });
-
-  // Usando transação oncomplete para afirmar que a criação do objectStore
-  // é terminada antes de adicionar algum dado nele.
-  objectStore.transaction.oncomplete = function(event) {
-    // Armazenando valores no novo objectStore.
-    var clientesObjectStore = db.transaction("clientes", "readwrite").objectStore("clientes");
-    for (var i in DadosClientes) {
-      clientesObjectStore.add(DadosClientes[i]);
-    }
-  }
-};
-
- -

Como falamos antes, onupgradeneeded é o único lugar onde você pode alterar a estrutura do banco. Nele você pode criar e deletar objectStores e construir ou remover índices.

- -
Armazens de objetos são criados com uma única chamada de createObjectStore(). O método pega o nome do armazem e um objeto parâmetro. Mesmo que o objeto parâmetro seja opcional, ele é muito importante porque ele deixa você definir propriedades importantes e ajustar tipos de dados que você quer criar. No nosso caso, nós obtemos um objectStore chamado "clientes" e definimos um keyPath, que é a propriedade que faz um objeto individual ser único no banco. Essa propriedade, nesse exemplo, é "ssn", que simboliza o cpf (social security number), que é único. O "ssn" deve ser apresentado em cada objeto armazenado no objectStore
- -

Nós também criamos um índice chamado "nome" ligado à propriedade nome. Assim como o createObjectStore(), o createIndex() tem um parâmetro opcional options que cuida do tipo de índice que você quer criar. Adicionando objetos que não tem a propriedade nome terá sucesso, porém esses objetos não aparecerão no índice "nome".

- -

Nós podemos obter os objetos de clientes armazenados usando os ssn da objectStore diretamente, ou usando os nomes usados no índice. Para aprender como isso é feito, veja a seção usando um índice.

- -

Usando um key generator

- -

Setando uma flag autoIncrement ao criar o objectStore habilitará o key generator. Por padrão ele não é setado.

- -

Com o key generator, a chave será gerada automaticamente quando você adicionar algum valor no objectStore. O atual número do key generator é sempre setado 1 quando a primeira key generator do objectStore é criada. Basicamente a próxima chave recebe o incremento de 1. O número atual da key generator nunca decresce,  a não ser se alguma operação do banco for revertida, como numa transação abortada, por exemplo. No entanto, deletar um registro ou limpar todos os registros nunca afeta o key generator dos objectStores.

- -

Nós podemos criar outro objectStore com o key generator como abaixo:

- -
// Abrindo o indexedDB.
-var request = indexedDB.open(dbName, 3);
-
-request.onupgradeneeded = function (event) {
-
-    var db = event.target.result;
-
-    // Criando outro objeto chamado "names" com o autoIncrement setado.
-    var objStore = db.createObjectStore("names", { autoIncrement : true });
-
-    // Porque "names" tem o the key generator, a chave para o nome é gerada automaticamente.
-    // Os registros adicionados serão assim:
-    // key : 1 => value : "Bill"
-    // key : 2 => value : "Donna"
-    for (var i in DadosClientes) {
-        objStore.add(DadosClientes[i].nome);
-    }
-}
- -

Para mais detalhes veja "W3C Key Generators".

- -

Adicionando, obtendo e removendo dados

- -

Antes de fazer qualquer coisa em um novo banco, você precisa iniciar uma transação. Transações estão no objeto database, e você tem que especificar qual objectStore você quer na transaction. Uma vez que você está dentro da transação, você pode acessar os objectStores  com seus dados e fazer os requests. Depois, você precisa decidir se você vai fazer mudanças no banco ou se você simplesmente quer ler esses dados. Transações tem três modos disponíveis: readonly, readwrite, and versionchange.

- -

Para mudar o "schema" ou estrutura do banco — o que envolve criar ou deletar objectStores ou índices — a transação deve ser em modo versionchange. Esta transação é aberta chamando o método {{domxref("IDBFactory.open")}} especificando a  version. (Em navegadores com WebKit que não tem a ultima especificação implementada, o método {{domxref("IDBFactory.open")}} tem apenas um parâmetro, o nome do banco; então você deve chamar {{domxref("IDBVersionChangeRequest.setVersion")}} para estabelecer uma transação versionchange.)

- -

Para ler os registros de um objectStore existente, a transação pode ser tanto readonly quanto readwrite. Para fazer mudanças em um objectStore existente, a transação deve ser em modo readwrite. Você abre essas transações usando {{domxref("IDBDatabase.transaction")}}. O método aceita dois parâmetros: o storeNames (o escopo, definido como um array de objectStores que você quer acessar) e o modo (readonly or readwrite) da transação. O método retorna o objeto detransação contendo o método {{domxref("IDBIndex.objectStore")}}, que você pode usar para acessar seu objectStore. Por padrão, quando nenhum modo é especificado, a transação é aberta no modo readonly.

- -

Você pode deixar o acesso aos dados mais rápido usando o escopo correto e o modo correto de transação. Aqui vai algumas dicas:

- - - -

Adicionando dados no banco

- -

Se você acabou de criar o banco, então você provavelmente quer escrever algo nele. Veja abaixo:

- -
var transaction = db.transaction(["clientes"], "readwrite");
-// Nota: Implementações mais antigas usam uma versão IDBTransaction.READ_WRITE antiga em vez de "readwrite".
-// Então, para suportar versões antigas, escreva:
-// var transaction = db.transaction(["clientes"], IDBTransaction.READ_WRITE);
- -

A função transaction() tem dois argumentos (opcionais) e retorna um objeto de transação. O primeiro argumento é uma lista de objectStores que serão trabalhados na transação. Você pode passar um array vazio se você quer uma transação com todos os objectStores, mas não faça isso pois a especificação diz que um array vazio pode gerar um erro InvalidAccessError. Se você não especificar nada no segundo parâmetro, você tem uma transação read-only. Se você quer escrever no banco, use "readwrite".

- -

Agora que você tem uma transação, você precisa entender seu tempo de uso. Transações são amarradas a um evento. Se você faz uma transação fora de um evento, ela ficará inativa. A única maneira de manter uma transação ativa é fazer um request nela. Quando o request acabar você terá a oportunidade de extender a transação durante o callback. Se você tentar extender uma transação dentro de um evento, então ela tornará inativa. Se existir requests pendentes, a transação continua ativa. O tempo de vida de uma transação é realmente simples mas deve ser usada em um curto espaço de tempo. Outros exemplos poderão ajudá-lo. Se você começar a ver TRANSACTION_INACTIVE_ERR error então você está fazendo algo errado.

- -

Transações podem receber eventos DOM de três tipos diferentes: error, abort, e complete. Nós falamos sobre o error, ou seja, a transação recebe um error sempre que o request gerar erro. Um ponto mais sutil é que o comportamento padrão de um erro é abortar a transação na qual ele estava. A menos que você manipule o erro chamando preventDefault() e fazendo algo depois, a transaçaõ inteira será desfeita. Este design força você a pensar sobre manipulação de erros, mas você pode sempre adicionar um manipulador de todos os erros se a manipulação separada estiver complicada. Se você não tratar o erro ou chamar abort() na transação, então a transação é desfeita (roll back) e o evento abort é chamado. Por outro lado, depois de todo request completado, você tem um evento complete. Se você fazer várias operações no banco, então seguir as operações de transações pode ser um caminho a seguir.

- -

Agora que você tem uma transação, você precisará obter um objectStore dela. Transações somente deixam você obter um objectStore citado na transação. Então você pode adicionar os dados que precisa.

- -
// Faz algo após a inserção dos dados.
-transaction.oncomplete = function(event) {
-  alert("Pronto!");
-};
-
-transaction.onerror = function(event) {
-  // Não esquecer de tratar os erros!
-};
-
-var objectStore = transaction.objectStore("clientes");
-for (var i in DadosClientes) {
-  var request = objectStore.add(DadosClientes[i]);
-  request.onsuccess = function(event) {
-    // event.target.result == DadosClientes[i].ssn;
-  };
-}
- -

O result de um request gerado de uma chamada de add() é a chave do valor  que foi adicionado. Então neste caso, ele deve ser igual ao valor do ssn do objeto que foi adicionado, desde que o objeto use o ssn como key path. Note que a função add() não deixa nenhum objeto ser adicionado com a mesma chave. Se você está tentando modificar um registro existente, você deve usar o put(), como explica a seção  {{ anch("Updating an entry in the database") }}.

- -

Removendo dados do banco

- -

Para remoção o código é parecido:

- -
var request = db.transaction(["clientes"], "readwrite")
-                .objectStore("clientes")
-                .delete("444-44-4444");
-request.onsuccess = function(event) {
-  // Pronto!
-};
- -

Obtendo dados do banco

- -

Agora que o banco tem algumas informações nele, você pode obtê-las de diferentes maneiras. Primeiro, um get() simples. Você precisa informar a chave do valor a ser obtido:

- -
var transaction = db.transaction(["clientes"]);
-var objectStore = transaction.objectStore("clientes");
-var request = objectStore.get("444-44-4444");
-request.onerror = function(event) {
-  // Tratar erro!
-};
-request.onsuccess = function(event) {
-  // Fazer algo com request.result!
-  alert("O nome do SSN 444-44-4444 é " + request.result.name);
-};
- -

Veja agora de maneira resumida:

- -
db.transaction("clientes").objectStore("clientes").get("444-44-4444").onsuccess = function(event) {
-  alert("O nome do SSN 444-44-4444 é " + request.result.name);
-};
- -

Viu como funciona? Desde que exista um objectStore, você pode evitar passar uma lista de objectStores que precisa na transação e passar apenas o nome como string. Você também pode ler do banco, apenas, então não precisará de uma transação "readwrite". Chamando transaction() com nenhum modo especificado, você terá uma transação "readonly". Outra consideração é que você não necessita salvar o request em uma variável. Desde que o evento DOM tenha o target que você precisará para obter a propriedade result.

- -
-

Note: Você pode deixar o acesso aos dados mais rápido limitando o escopo e o modo de transação. Veja algumas dicas:

- - -
- -

Atualizando um registro no banco

- -

Agora que obtemos algum dado, atualizá-ls é inserí-los novamente no IndexedDB é bem simples. Vamos atualizar o exemplo anterior:

- -
var objectStore = db.transaction(["clientes"], "readwrite").objectStore("clientes");
-var request = objectStore.get("444-44-4444");
-request.onerror = function(event) {
-  // Tratar erro
-};
-request.onsuccess = function(event) {
-  // Obter os valores antigos
-  var data = request.result;
-
-  // atualizar algum dado
-  data.age = 42;
-
-  // Atulizar esse dado no banco
-  var requestUpdate = objectStore.put(data);
-   requestUpdate.onerror = function(event) {
-     // Tratar erro
-   };
-   requestUpdate.onsuccess = function(event) {
-     // Sucesso na atualização \o/
-   };
-};
- -

Criamos uma objectStore e obtemos um cliente dele, identificado pelo ssn (444-44-4444). Nós atualizamos o objeto, passando-o como parâmetro de um método put de outro request (requestUpdate) sobrescrevendo o valor antigo.

- -
-

Note que neste caso nós temos que especificar a transação readwrite porque nós queremos escrever no banco, não somente ler os dados dele.

-
- -

Usando um cursor

- -

Ao usar o método get() você precisa saber a chave do objeto que deseja obter. Se você quer passear entre todos os valores do seu objectStore, então você pode usar um cursor. Veja:

- -
var objectStore = db.transaction("cliente").objectStore("cliente");
-
-objectStore.openCursor().onsuccess = function(event) {
-  var cursor = event.target.result;
-  if (cursor) {
-    alert("O nome do SSN " + cursor.key + " é " + cursor.value.name);
-    cursor.continue();
-  }
-  else {
-    alert("Não existe mais registros!");
-  }
-};
- -

A função openCursor() tem vários argumentos. Primeiro, você pode limitar o número de itens obtidos usando uma chave que veremos logo abaixo. Segundo, você pode especificar a direção que deseja iterar. No exemplo acima, nós estamos iterando em todos os objetos em ordem ascendente. O callback de sucesso para cursor é um pouco especial. O objeto cursor já é o result do request (acima nós usamos event.target.result). Então a chave atual e o valor pode ser encontrado na propriedade key e value do objeto cursor. Se você quer manter adiante, então você usa o método continue(). Quando você chegar ao fim dos dados (ou se não existem registros encontrados no openCursor()) você ainda tem um callback de sucesso, mas a propriedade result fica undefined.

- -

Um padrão comum para cursores é obter todos os objetos em um objectStore e adicioná-los a um array como este:

- -
var clientes = [];
-
-objectStore.openCursor().onsuccess = function(event) {
-  var cursor = event.target.result;
-  if (cursor) {
-    clientes.push(cursor.value);
-    cursor.continue();
-  }
-  else {
-    alert("Todos os clientes: " + clientes);
-  }
-};
- -
-

Note: Mozilla também implementou o método getAll() para ser usado nesse caso (e getAllKeys(), que está atualmente dentro da preferência do dom.indexedDB.experimental em about:config). Estes métodos não são parte do padrão IndexedDB, então eles podem desaparecer no futuro. Nós adicionamos porque achamos útil. O código abaixo faz o mesmo que o código acima:

- -
objectStore.getAll().onsuccess = function(event) {
-  alert("Todos os clientes: " + event.target.result);
-};
- -

Existe um custo de performance associado com a propriedade value do cursor, porque o objeto é criado de forma lenta. Quando você usa getAll() por exemplo, Gecko deve criar todos os objetos de uma vez. Se você está somente interessado em cada chave, é muito melhor usar o cursor do que usar o getAll(). Se você está tentando obter um array de todos os objetos, então é melhor usar o getAll().

-
- -

Usando um índice

- -

Armazenar dados de um cliente usando o SSN como chave é lógico pois o SSN identifica o cliente de forma única. Se você precisa obter um cliente pelo seu nome, portanto, você precisará iterar todos os registros no banco e comparar os nomes até achar o que você procura. Buscar dessa maneira é algo lento, então criamos um índice.

- -
var index = objectStore.index("nome");
-index.get("John").onsuccess = function(event) {
-  alert("O SSN de John é " + event.target.result.ssn);
-};
- -

O cursor "nome" não é único, então pode existir mais de um registro com o nome igual a "John". Neste caso você sempre obtem o registro com a chave de menor valor.

- -

Se você precisa acessar todos os registros retornados, você pode usar um cursor. Você pode abrir dois tipos de cursores. Um cursor normal mapeia o índice ao objeto na objectStore. Uma cursor-chave mapeia o a propriedade índice à chave usada para armazenar o objeto. As diferenças são ilustradas abaixo:

- -
// Usando um cursor normal para obter todos os objetos
-index.openCursor().onsuccess = function(event) {
-  var cursor = event.target.result;
-  if (cursor) {
-    // cursor.key é um nome, como "Bill", e cursor.value é o objeto inteiro.
-    alert("Nome: " + cursor.key + ", SSN: " + cursor.value.ssn + ", email: " + cursor.value.email);
-    cursor.continue();
-  }
-};
-
-// Usando um cursor-chave para obter todos os objetos
-index.openKeyCursor().onsuccess = function(event) {
-  var cursor = event.target.result;
-  if (cursor) {
-    // cursor.key é o nome, como "Bill", e cursor.value é o SSN (chave).
-    // Não tem como obter o resto do objeto
-    alert("Nome: " + cursor.key + ", SSN: " + cursor.value);
-    cursor.continue();
-  }
-};
- -

Especificando o número e a direção dos cursores

- -

Se você gostaria de limitar o número de valores retornados pelo cursor, você pode usar um objeto IDBKeyRange e passar isso como o primeiro argumento ao openCursor() ou openKeyCursor(). Você pode fazer um key range que permite um único valor, ou valores acima ou abaixo do especificado. O limite pode ser fechado (o key range inclui os valores dados) ou aberto (o key range não inclue os valores dados). Veja como funciona:

- -
// Somente se for igual "Donna"
-var singleKeyRange = IDBKeyRange.only("Donna");
-
-// Combinações menores que "Bill", incluindo "Bill"
-var lowerBoundKeyRange = IDBKeyRange.lowerBound("Bill");
-
-// Combinações menores que "Bill", sem incluir "Bill"
-var lowerBoundOpenKeyRange = IDBKeyRange.lowerBound("Bill", true);
-
-// Combinações maiores que Donna, não incluindo "Donna"
-var upperBoundOpenKeyRange = IDBKeyRange.upperBound("Donna", true);
-
-// Combinações entre "Bill" e "Donna", sem incluir "Donna"
-var boundKeyRange = IDBKeyRange.bound("Bill", "Donna", false, true);
-
-// Para usar qualquer um desses key ranges, basta passar como primeiro parâmetro de openCursor()/openKeyCursor()
-index.openCursor(boundKeyRange).onsuccess = function(event) {
-  var cursor = event.target.result;
-  if (cursor) {
-    // Faz algo com o que encontrar
-    cursor.continue();
-  }
-};
- -

As vezes você pode querer iterar em ordem decrescente, em vez de crescente, alterando o segundo parâmetro de openCursor():

- -
objectStore.openCursor(boundKeyRange, "prev").onsuccess = function(event) {
-  var cursor = event.target.result;
-  if (cursor) {
-    // Prev indica ordem decrescente
-    cursor.continue();
-  }
-};
- -

Se você apenas quer especificar a ordem sem key range, é só passar null no primeiro parâmetro:

- -
objectStore.openCursor(null, "prev").onsuccess = function(event) {
-  var cursor = event.target.result;
-  if (cursor) {
-    // Faça algo com os resultados.
-    cursor.continue();
-  }
-};
- -

Uma vez que o índice "nome" não é único, pode existir várias entradas onde o nome é o mesmo. Isso não acontece com objectStores porque a chave deve ser sempre única. Se você deseja filtrar valores duplicados numa iteração do cursor, você pode passar nextunique (ou prevunique se quiser decrescer) como parâmetro de direção. Quando nextunique ou prevunique é usado, o registro com menor chave é retornado.

- -
index.openKeyCursor(null, "nextunique").onsuccess = function(event) {
-  var cursor = event.target.result;
-  if (cursor) {
-    // Faça algo com os registros.
-    cursor.continue();
-  }
-};
- -

Veja "IDBCursor Constants" para parâmetros válidos.

- -

Mudança de versão quando a web app está aberta em outra aba.

- -

Quando sua web app muda a versão você precisa considerar o que vai acontecer se o usuário está na versão antiga em uma aba, e carrega a versão nova na outra. Quando você chamar o open() com a versão mais nova, um evento onblocked  é chamado até que a aba da versão antiga seja fechada ou recarregada. Veja abaixo:

- -
var openReq = mozIndexedDB.open("DBteste", 2);
-
-openReq.onblocked = function(event) {
-  // Se existe outra aba com a versão antiga
-  alert("Existe uma versão antiga da web app aberta em outra aba, feche-a por favor!");
-};
-
-openReq.onupgradeneeded = function(event) {
-  // Se estiver tudo fechado, então faça as devidas alterações
-  db.createObjectStore(/* ... */);
-  useDatabase(db);
-}
-
-openReq.onsuccess = function(event) {
-  var db = event.target.result;
-  useDatabase(db);
-  return;
-}
-
-function useDatabase(db) {
-  // Esteja certo de que adicionou um evento para notificar se a página muda a versão
-  // Nós devemos fechar o banco. Isso permite à outra página ser atualizada
-  // Se você não fizer isso a atualização não acontecerá até fechar as abas.
-  db.onversionchange = function(event) {
-    db.close();
-    alert("Uma nova versão desta web app está pronta. Atualiza, por favor!");
-  };
-
-  // Fazer algo com os bancos
-}
-
- -

Segurança

- -

IndexedDB usa o princípio de mesma origem, o que significa que o banco só será acessado pelo site que o criou.

- -

É importante notar que o IndexedDB não funciona para conteúdo carregado em um frame de outro site (seja {{ HTMLElement("frame") }} ou {{ HTMLElement("iframe") }}. Esta é uma política de segurança e privacidade análoga ao bloqueio de cookies de terceiros. Para mais detalhes, veja {{ bug(595307) }}.

- -

Alerta sobre fechar o navegador

- -

Quando o navegador é fechado, qualquer transação pendente no IndexedDB será abortada (silenciosamente) — ele não vai completar, nem chamar o evento de erro.  Uma vez que o usuário pode sair do navegador, em qualquer momento, isto significa que você não pode confiar em qualquer transação específica para completar ou para saber que ela não foi concluída. Existem várias implicações nesse comportamento.

- -

Primeiro, você deve ter o cuidado de sempre deixar seu banco de dados em um estado consistente, no final de cada transação. Por exemplo, suponha que você está usando IndexedDB para armazenar uma lista de itens que permitem ao usuário editar. Você salvar a lista após a edição, limpando o armazenamento de objetos e, em seguida, escrever a nova lista. Se você limpar o armazenamento de objetos em uma transação e escrever a nova lista em outra transação, há um perigo de que o navegador irá fechar após a limpeza de dados e antes da gravação, deixando-o com um banco de dados vazio. Para evitar isso, você deve combinar tanto a limpeza quanto a gravação em uma única transação.

- -

Em segundo lugar, você nunca deve amarrar as operações de banco de dados ao evento unload. Se o evento unload é acionado pelo fechamento do navegador, todas as transações criadas no unload nunca serão concluídas. Uma abordagem intuitiva para manter algumas informações em sessões do navegador é lê-la a partir do banco de dados quando o navegador (ou uma determinada página) é aberta, atualizá-la assim que o usuário interagir com o navegador, e depois salvá-lo para o banco de dados quando o navegador (ou página) será fechada. No entanto, isso não vai funcionar. As transações de banco de dados será criado no unload, mas como elas são assíncronasserão abortadas antes que eles possam executar.

- -

De fato, não existe uma maneira de garantir que as transações no IndexedDBserão completadas, mesmo com o fechamento padrão do navegador. Ver {{ bug(870645) }}.

- -

Exemplo de IndexedDB

- -

HTML

- -
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
-
-    <h1>IndexedDB Demo: storing blobs, e-publication example</h1>
-    <div class="note">
-      <p>
-        Works and tested with:
-      </p>
-      <div id="compat">
-      </div>
-    </div>
-
-    <div id="msg">
-    </div>
-
-    <form id="register-form">
-      <table>
-        <tbody>
-          <tr>
-            <td>
-              <label for="pub-title" class="required">
-                Title:
-              </label>
-            </td>
-            <td>
-              <input type="text" id="pub-title" name="pub-title" />
-            </td>
-          </tr>
-          <tr>
-            <td>
-              <label for="pub-biblioid" class="required">
-                Bibliographic ID:<br/>
-                <span class="note">(ISBN, ISSN, etc.)</span>
-              </label>
-            </td>
-            <td>
-              <input type="text" id="pub-biblioid" name="pub-biblioid"/>
-            </td>
-          </tr>
-          <tr>
-            <td>
-              <label for="pub-year">
-                Year:
-              </label>
-            </td>
-            <td>
-              <input type="number" id="pub-year" name="pub-year" />
-            </td>
-          </tr>
-        </tbody>
-        <tbody>
-          <tr>
-            <td>
-              <label for="pub-file">
-                File image:
-              </label>
-            </td>
-            <td>
-              <input type="file" id="pub-file"/>
-            </td>
-          </tr>
-          <tr>
-            <td>
-              <label for="pub-file-url">
-                Online-file image URL:<br/>
-                <span class="note">(same origin URL)</span>
-              </label>
-            </td>
-            <td>
-              <input type="text" id="pub-file-url" name="pub-file-url"/>
-            </td>
-          </tr>
-        </tbody>
-      </table>
-
-      <div class="button-pane">
-        <input type="button" id="add-button" value="Add Publication" />
-        <input type="reset" id="register-form-reset"/>
-      </div>
-    </form>
-
-    <form id="delete-form">
-      <table>
-        <tbody>
-          <tr>
-            <td>
-              <label for="pub-biblioid-to-delete">
-                Bibliographic ID:<br/>
-                <span class="note">(ISBN, ISSN, etc.)</span>
-              </label>
-            </td>
-            <td>
-              <input type="text" id="pub-biblioid-to-delete"
-                     name="pub-biblioid-to-delete" />
-            </td>
-          </tr>
-          <tr>
-            <td>
-              <label for="key-to-delete">
-                Key:<br/>
-                <span class="note">(for example 1, 2, 3, etc.)</span>
-              </label>
-            </td>
-            <td>
-              <input type="text" id="key-to-delete"
-                     name="key-to-delete" />
-            </td>
-          </tr>
-        </tbody>
-      </table>
-      <div class="button-pane">
-        <input type="button" id="delete-button" value="Delete Publication" />
-        <input type="button" id="clear-store-button"
-               value="Clear the whole store" class="destructive" />
-      </div>
-    </form>
-
-    <form id="search-form">
-      <div class="button-pane">
-        <input type="button" id="search-list-button"
-               value="List database content" />
-      </div>
-    </form>
-
-    <div>
-      <div id="pub-msg">
-      </div>
-      <div id="pub-viewer">
-      </div>
-      <ul id="pub-list">
-      </ul>
-    </div>
-
- -

CSS Content

- -
body {
-  font-size: 0.8em;
-  font-family: Sans-Serif;
-}
-
-form {
-  background-color: #cccccc;
-  border-radius: 0.3em;
-  display: inline-block;
-  margin-bottom: 0.5em;
-  padding: 1em;
-}
-
-table {
-  border-collapse: collapse;
-}
-
-input {
-  padding: 0.3em;
-  border-color: #cccccc;
-  border-radius: 0.3em;
-}
-
-.required:after {
-  content: "*";
-  color: red;
-}
-
-.button-pane {
-  margin-top: 1em;
-}
-
-#pub-viewer {
-  float: right;
-  width: 48%;
-  height: 20em;
-  border: solid #d092ff 0.1em;
-}
-#pub-viewer iframe {
-  width: 100%;
-  height: 100%;
-}
-
-#pub-list {
-  width: 46%;
-  background-color: #eeeeee;
-  border-radius: 0.3em;
-}
-#pub-list li {
-  padding-top: 0.5em;
-  padding-bottom: 0.5em;
-  padding-right: 0.5em;
-}
-
-#msg {
-  margin-bottom: 1em;
-}
-
-.action-success {
-  padding: 0.5em;
-  color: #00d21e;
-  background-color: #eeeeee;
-  border-radius: 0.2em;
-}
-
-.action-failure {
-  padding: 0.5em;
-  color: #ff1408;
-  background-color: #eeeeee;
-  border-radius: 0.2em;
-}
-
-.note {
-  font-size: smaller;
-}
-
-.destructive {
-  background-color: orange;
-}
-.destructive:hover {
-  background-color: #ff8000;
-}
-.destructive:active {
-  background-color: red;
-}
-
- -

 

- -

JavaScript Content

- -
(function () {
-  var COMPAT_ENVS = [
-    ['Firefox', ">= 16.0"],
-    ['Google Chrome',
-     ">= 24.0 (you may need to get Google Chrome Canary), NO Blob storage support"]
-  ];
-  var compat = $('#compat');
-  compat.empty();
-  compat.append('<ul id="compat-list"></ul>');
-  COMPAT_ENVS.forEach(function(val, idx, array) {
-    $('#compat-list').append('<li>' + val[0] + ': ' + val[1] + '</li>');
-  });
-
-  const DB_NAME = 'mdn-demo-indexeddb-epublications';
-  const DB_VERSION = 1; // Use a long long for this value (don't use a float)
-  const DB_STORE_NAME = 'publications';
-
-  var db;
-
-  // Used to keep track of which view is displayed to avoid uselessly reloading it
-  var current_view_pub_key;
-
-  function openDb() {
-    console.log("openDb ...");
-    var req = indexedDB.open(DB_NAME, DB_VERSION);
-    req.onsuccess = function (evt) {
-      // Better use "this" than "req" to get the result to avoid problems with
-      // garbage collection.
-      // db = req.result;
-      db = this.result;
-      console.log("openDb DONE");
-    };
-    req.onerror = function (evt) {
-      console.error("openDb:", evt.target.errorCode);
-    };
-
-    req.onupgradeneeded = function (evt) {
-      console.log("openDb.onupgradeneeded");
-      var store = evt.currentTarget.result.createObjectStore(
-        DB_STORE_NAME, { keyPath: 'id', autoIncrement: true });
-
-      store.createIndex('biblioid', 'biblioid', { unique: true });
-      store.createIndex('title', 'title', { unique: false });
-      store.createIndex('year', 'year', { unique: false });
-    };
-  }
-
-  /**
-   * @param {string} store_name
-   * @param {string} mode either "readonly" or "readwrite"
-   */
-  function getObjectStore(store_name, mode) {
-    var tx = db.transaction(store_name, mode);
-    return tx.objectStore(store_name);
-  }
-
-  function clearObjectStore(store_name) {
-    var store = getObjectStore(DB_STORE_NAME, 'readwrite');
-    var req = store.clear();
-    req.onsuccess = function(evt) {
-      displayActionSuccess("Store cleared");
-      displayPubList(store);
-    };
-    req.onerror = function (evt) {
-      console.error("clearObjectStore:", evt.target.errorCode);
-      displayActionFailure(this.error);
-    };
-  }
-
-  function getBlob(key, store, success_callback) {
-    var req = store.get(key);
-    req.onsuccess = function(evt) {
-      var value = evt.target.result;
-      if (value)
-        success_callback(value.blob);
-    };
-  }
-
-  /**
-   * @param {IDBObjectStore=} store
-   */
-  function displayPubList(store) {
-    console.log("displayPubList");
-
-    if (typeof store == 'undefined')
-      store = getObjectStore(DB_STORE_NAME, 'readonly');
-
-    var pub_msg = $('#pub-msg');
-    pub_msg.empty();
-    var pub_list = $('#pub-list');
-    pub_list.empty();
-    // Resetting the iframe so that it doesn't display previous content
-    newViewerFrame();
-
-    var req;
-    req = store.count();
-    // Requests are executed in the order in which they were made against the
-    // transaction, and their results are returned in the same order.
-    // Thus the count text below will be displayed before the actual pub list
-    // (not that it is algorithmically important in this case).
-    req.onsuccess = function(evt) {
-      pub_msg.append('<p>There are <strong>' + evt.target.result +
-                     '</strong> record(s) in the object store.</p>');
-    };
-    req.onerror = function(evt) {
-      console.error("add error", this.error);
-      displayActionFailure(this.error);
-    };
-
-    var i = 0;
-    req = store.openCursor();
-    req.onsuccess = function(evt) {
-      var cursor = evt.target.result;
-
-      // If the cursor is pointing at something, ask for the data
-      if (cursor) {
-        console.log("displayPubList cursor:", cursor);
-        req = store.get(cursor.key);
-        req.onsuccess = function (evt) {
-          var value = evt.target.result;
-          var list_item = $('<li>' +
-                            '[' + cursor.key + '] ' +
-                            '(biblioid: ' + value.biblioid + ') ' +
-                            value.title +
-                            '</li>');
-          if (value.year != null)
-            list_item.append(' - ' + value.year);
-
-          if (value.hasOwnProperty('blob') &&
-              typeof value.blob != 'undefined') {
-            var link = $('<a href="' + cursor.key + '">File</a>');
-            link.on('click', function() { return false; });
-            link.on('mouseenter', function(evt) {
-                      setInViewer(evt.target.getAttribute('href')); });
-            list_item.append(' / ');
-            list_item.append(link);
-          } else {
-            list_item.append(" / No attached file");
-          }
-          pub_list.append(list_item);
-        };
-
-        // Move on to the next object in store
-        cursor.continue();
-
-        // This counter serves only to create distinct ids
-        i++;
-      } else {
-        console.log("No more entries");
-      }
-    };
-  }
-
-  function newViewerFrame() {
-    var viewer = $('#pub-viewer');
-    viewer.empty();
-    var iframe = $('<iframe />');
-    viewer.append(iframe);
-    return iframe;
-  }
-
-  function setInViewer(key) {
-    console.log("setInViewer:", arguments);
-    key = Number(key);
-    if (key == current_view_pub_key)
-      return;
-
-    current_view_pub_key = key;
-
-    var store = getObjectStore(DB_STORE_NAME, 'readonly');
-    getBlob(key, store, function(blob) {
-      console.log("setInViewer blob:", blob);
-      var iframe = newViewerFrame();
-
-      // It is not possible to set a direct link to the
-      // blob to provide a mean to directly download it.
-      if (blob.type == 'text/html') {
-        var reader = new FileReader();
-        reader.onload = (function(evt) {
-          var html = evt.target.result;
-          iframe.load(function() {
-            $(this).contents().find('html').html(html);
-          });
-        });
-        reader.readAsText(blob);
-      } else if (blob.type.indexOf('image/') == 0) {
-        iframe.load(function() {
-          var img_id = 'image-' + key;
-          var img = $('<img id="' + img_id + '"/>');
-          $(this).contents().find('body').html(img);
-          var obj_url = window.URL.createObjectURL(blob);
-          $(this).contents().find('#' + img_id).attr('src', obj_url);
-          window.URL.revokeObjectURL(obj_url);
-        });
-      } else if (blob.type == 'application/pdf') {
-        $('*').css('cursor', 'wait');
-        var obj_url = window.URL.createObjectURL(blob);
-        iframe.load(function() {
-          $('*').css('cursor', 'auto');
-        });
-        iframe.attr('src', obj_url);
-        window.URL.revokeObjectURL(obj_url);
-      } else {
-        iframe.load(function() {
-          $(this).contents().find('body').html("No view available");
-        });
-      }
-
-    });
-  }
-
-  /**
-   * @param {string} biblioid
-   * @param {string} title
-   * @param {number} year
-   * @param {string} url the URL of the image to download and store in the local
-   *   IndexedDB database. The resource behind this URL is subjected to the
-   *   "Same origin policy", thus for this method to work, the URL must come from
-   *   the same origin as the web site/app this code is deployed on.
-   */
-  function addPublicationFromUrl(biblioid, title, year, url) {
-    console.log("addPublicationFromUrl:", arguments);
-
-    var xhr = new XMLHttpRequest();
-    xhr.open('GET', url, true);
-    // Setting the wanted responseType to "blob"
-    // http://www.w3.org/TR/XMLHttpRequest2/#the-response-attribute
-    xhr.responseType = 'blob';
-    xhr.onload = function (evt) {
-                           if (xhr.status == 200) {
-                             console.log("Blob retrieved");
-                             var blob = xhr.response;
-                             console.log("Blob:", blob);
-                             addPublication(biblioid, title, year, blob);
-                           } else {
-                             console.error("addPublicationFromUrl error:",
-                                           xhr.responseText, xhr.status);
-                           }
-                         };
-    xhr.send();
-
-    // We can't use jQuery here because as of jQuery 1.8.3 the new "blob"
-    // responseType is not handled.
-    // http://bugs.jquery.com/ticket/11461
-    // http://bugs.jquery.com/ticket/7248
-    // $.ajax({
-    //   url: url,
-    //   type: 'GET',
-    //   xhrFields: { responseType: 'blob' },
-    //   success: function(data, textStatus, jqXHR) {
-    //     console.log("Blob retrieved");
-    //     console.log("Blob:", data);
-    //     // addPublication(biblioid, title, year, data);
-    //   },
-    //   error: function(jqXHR, textStatus, errorThrown) {
-    //     console.error(errorThrown);
-    //     displayActionFailure("Error during blob retrieval");
-    //   }
-    // });
-  }
-
-  /**
-   * @param {string} biblioid
-   * @param {string} title
-   * @param {number} year
-   * @param {Blob=} blob
-   */
-  function addPublication(biblioid, title, year, blob) {
-    console.log("addPublication arguments:", arguments);
-    var obj = { biblioid: biblioid, title: title, year: year };
-    if (typeof blob != 'undefined')
-      obj.blob = blob;
-
-    var store = getObjectStore(DB_STORE_NAME, 'readwrite');
-    var req;
-    try {
-      req = store.add(obj);
-    } catch (e) {
-      if (e.name == 'DataCloneError')
-        displayActionFailure("This engine doesn't know how to clone a Blob, " +
-                             "use Firefox");
-      throw e;
-    }
-    req.onsuccess = function (evt) {
-      console.log("Insertion in DB successful");
-      displayActionSuccess();
-      displayPubList(store);
-    };
-    req.onerror = function() {
-      console.error("addPublication error", this.error);
-      displayActionFailure(this.error);
-    };
-  }
-
-  /**
-   * @param {string} biblioid
-   */
-  function deletePublicationFromBib(biblioid) {
-    console.log("deletePublication:", arguments);
-    var store = getObjectStore(DB_STORE_NAME, 'readwrite');
-    var req = store.index('biblioid');
-    req.get(biblioid).onsuccess = function(evt) {
-      if (typeof evt.target.result == 'undefined') {
-        displayActionFailure("No matching record found");
-        return;
-      }
-      deletePublication(evt.target.result.id, store);
-    };
-    req.onerror = function (evt) {
-      console.error("deletePublicationFromBib:", evt.target.errorCode);
-    };
-  }
-
-  /**
-   * @param {number} key
-   * @param {IDBObjectStore=} store
-   */
-  function deletePublication(key, store) {
-    console.log("deletePublication:", arguments);
-
-    if (typeof store == 'undefined')
-      store = getObjectStore(DB_STORE_NAME, 'readwrite');
-
-    // As per spec http://www.w3.org/TR/IndexedDB/#object-store-deletion-operation
-    // the result of the Object Store Deletion Operation algorithm is
-    // undefined, so it's not possible to know if some records were actually
-    // deleted by looking at the request result.
-    var req = store.get(key);
-    req.onsuccess = function(evt) {
-      var record = evt.target.result;
-      console.log("record:", record);
-      if (typeof record == 'undefined') {
-        displayActionFailure("No matching record found");
-        return;
-      }
-      // Warning: The exact same key used for creation needs to be passed for
-      // the deletion. If the key was a Number for creation, then it needs to
-      // be a Number for deletion.
-      req = store.delete(key);
-      req.onsuccess = function(evt) {
-        console.log("evt:", evt);
-        console.log("evt.target:", evt.target);
-        console.log("evt.target.result:", evt.target.result);
-        console.log("delete successful");
-        displayActionSuccess("Deletion successful");
-        displayPubList(store);
-      };
-      req.onerror = function (evt) {
-        console.error("deletePublication:", evt.target.errorCode);
-      };
-    };
-    req.onerror = function (evt) {
-      console.error("deletePublication:", evt.target.errorCode);
-      };
-  }
-
-  function displayActionSuccess(msg) {
-    msg = typeof msg != 'undefined' ? "Success: " + msg : "Success";
-    $('#msg').html('<span class="action-success">' + msg + '</span>');
-  }
-  function displayActionFailure(msg) {
-    msg = typeof msg != 'undefined' ? "Failure: " + msg : "Failure";
-    $('#msg').html('<span class="action-failure">' + msg + '</span>');
-  }
-  function resetActionStatus() {
-    console.log("resetActionStatus ...");
-    $('#msg').empty();
-    console.log("resetActionStatus DONE");
-  }
-
-  function addEventListeners() {
-    console.log("addEventListeners");
-
-    $('#register-form-reset').click(function(evt) {
-      resetActionStatus();
-    });
-
-    $('#add-button').click(function(evt) {
-      console.log("add ...");
-      var title = $('#pub-title').val();
-      var biblioid = $('#pub-biblioid').val();
-      if (!title || !biblioid) {
-        displayActionFailure("Required field(s) missing");
-        return;
-      }
-      var year = $('#pub-year').val();
-      if (year != '') {
-        // Better use Number.isInteger if the engine has EcmaScript 6
-        if (isNaN(year))  {
-          displayActionFailure("Invalid year");
-          return;
-        }
-        year = Number(year);
-      } else {
-        year = null;
-      }
-
-      var file_input = $('#pub-file');
-      var selected_file = file_input.get(0).files[0];
-      console.log("selected_file:", selected_file);
-      // Keeping a reference on how to reset the file input in the UI once we
-      // have its value, but instead of doing that we rather use a "reset" type
-      // input in the HTML form.
-      //file_input.val(null);
-      var file_url = $('#pub-file-url').val();
-      if (selected_file) {
-        addPublication(biblioid, title, year, selected_file);
-      } else if (file_url) {
-        addPublicationFromUrl(biblioid, title, year, file_url);
-      } else {
-        addPublication(biblioid, title, year);
-      }
-
-    });
-
-    $('#delete-button').click(function(evt) {
-      console.log("delete ...");
-      var biblioid = $('#pub-biblioid-to-delete').val();
-      var key = $('#key-to-delete').val();
-
-      if (biblioid != '') {
-        deletePublicationFromBib(biblioid);
-      } else if (key != '') {
-        // Better use Number.isInteger if the engine has EcmaScript 6
-        if (key == '' || isNaN(key))  {
-          displayActionFailure("Invalid key");
-          return;
-        }
-        key = Number(key);
-        deletePublication(key);
-      }
-    });
-
-    $('#clear-store-button').click(function(evt) {
-      clearObjectStore();
-    });
-
-    var search_button = $('#search-list-button');
-    search_button.click(function(evt) {
-      displayPubList();
-    });
-
-  }
-
-  openDb();
-  addEventListeners();
-
-})(); // Immediately-Invoked Function Expression (IIFE)
-
- -

{{ LiveSampleLink('Full_IndexedDB_example', "Test the online live demo") }}

- -

Ver também

- -

Uma leitura adicional para você encontrar mais informações.

- -

Refências

- - - -

Guias e tutoriais

- - diff --git a/files/pt-br/web/api/indexeddb_api/using_indexeddb/index.html b/files/pt-br/web/api/indexeddb_api/using_indexeddb/index.html new file mode 100644 index 0000000000..da14879b31 --- /dev/null +++ b/files/pt-br/web/api/indexeddb_api/using_indexeddb/index.html @@ -0,0 +1,1281 @@ +--- +title: Usando IndexedDB +slug: Web/API/IndexedDB_API/Usando_IndexedDB +tags: + - API IndexedDB Tutorial Avançado +translation_of: Web/API/IndexedDB_API/Using_IndexedDB +--- +
+

IndexedDB é uma forma de armazenar dados no navegador do usuário. Com ele você pode criar aplicações web com possibilidade de fazer query sem necessidade de conexão, suas aplicações podem funcionar tanto online quanto offline. 

+
+ +

Sobre esse documento

+ +

Esse tutorial utiliza a API assíncrona do IndexedDB. Se você não está familiarizado com IndexedDB, você pode ler Conceitos básicos sobre IndexedDB.

+ +

Para a documentação de referência, veja o artigo sobre API IndexedDB, pois nele contém os tipos de objetos utilizados no IndexedDB,  como também métodos da API, tanto síncrona como assíncrona. 

+ +

Padrão básico

+ +

O IndexedDB encoraja o uso do seguinte padrão:

+ +
    +
  1. Abrir um banco de dados.
  2. +
  3. Criar um ObjectStore ao atualizar o banco. 
  4. +
  5. Iniciar uma transação e e faz um request para fazer alguma operação no banco, como adicionar ou obter dados.
  6. +
  7. +
    Esperar a operação ser completada ouvindo algum evento DOM.
    +
  8. +
  9. +
    Fazer algo com o resultado da query (que pode ser obtida pelo objeto request).
    +
  10. +
+ +

OK, então, agora com esses conceitos em mente, nós podemos fazer coisas mais concretas.

+ +

Criando e estruturando o banco

+ +

Pelo fato  da especificação ainda estar evoluindo, as implementações do IndexedDB tem prefixos de navegadores. Os navegadores podem ter implementações diferentes da API IndexedDB até a especificação ser consolidada. Mas uma vez que tudo chegar a um consenso, os navegadores tirarão seus prefixos. Atualmente, algumas implementações removeram o prefixo: Internet Explorer 10, Firefox 16, Chrome 24. Quando eles usam prefixo, navegadores baseados no Gecko usam o prefixo moz, enquanto os navegadores baseados no WebKit usam o prefixo webkit.

+ +

Usando uma versão experimental do IndexedDB

+ +

Se você quiser testar seu código em navegadores que usam prefixo, você pode usar o código abaixo:  

+ +
// Na linha abaixo, você deve incluir os prefixos do navegador que você vai testar.
+window.indexedDB = window.indexedDB || window.mozIndexedDB || window.webkitIndexedDB || window.msIndexedDB;
+// Não use "var indexedDB = ..." se você não está numa function.
+// Posteriormente, você pode precisar de referências de algum objeto window.IDB*:
+window.IDBTransaction = window.IDBTransaction || window.webkitIDBTransaction || window.msIDBTransaction;
+window.IDBKeyRange = window.IDBKeyRange || window.webkitIDBKeyRange || window.msIDBKeyRange;
+// (Mozilla nunca usou prefixo nesses objetos, então não precisamos window.mozIDB*)
+ +

Tome cuidado, implementações prefixadas podem estar com bugs ou implementando especificações antigas. Portanto, não é recomendado usar em produção. É preferível não usar IndexedDB em navegadores antigos:

+ +
if (!window.indexedDB) {
+    window.alert("Seu navegador não suporta uma versão estável do IndexedDB. Alguns recursos não estarão disponíveis.");
+}
+
+ +

Abrindo um banco

+ +

Começamos todo o processo assim:

+ +
// Abrindo o banco de dados
+var request = window.indexedDB.open("DBteste", 3);
+
+ +

Abrir um banco é como qualquer outra operação — Você tem que "requerer (request)".

+ +

A requisição de abertura não abre o banco ou inicia a transação. A chamada da função open() retorna um objeto IDBOpenDBRequest com o resultado (success) ou um erro que você terá que tratar. Muitas outras funções assíncronas no IndexedDB fazem a mesma coisa - retornam um objeto IDBRequest com o resultado ou erro. O resultado para a função open é uma instância de IDBDatabase.

+ +

O segundo parâmetro para o método open é a versão do banco. A versão do banco determina seu schema — os registros no banco e sua estrutura. Se o banco não existe ainda, ele é criado pela operação open, então o evento onupgradeneeded é chamado e você cria o schema do banco nesse evento. Se o banco existe mas você está fornecendo um novo número de versão, o evento onupgradeneeded é chamado imediatamente, permitindo você tratar a atualização do schema. Para mais informações sobre isso veja Updating the version of the database.

+ +
+

O número de versão é um unsigned long long, o que significa que ele pode ver um inteiro muito grande. Isso também significa que você não pode usar float, pois ele será convertido em um inteiro pequeno e a transação pode não acontecer, ou o evento upgradeneeded pode não ser chamado. Então se você usar 2.4 como versão:

+ +
var request = indexedDB.open("DBteste", 2.4); // não faça isso, pois a versão será convertida para 2.
+
+ +

Gerenciando handlers

+ +

A primeira coisa que você vai querer fazer em quase todos os requests é tratar os casos de success e error:

+ +
request.onerror = function(event) {
+  // Fazer algo com request.errorCode!
+};
+request.onsuccess = function(event) {
+  // Fazer algo com request.result!
+};
+ +

Qual das duas funções, onsuccess() ou onerror(),  será chamada? Se tudo correr bem, o evento de sucesso (que é um evento DOM event com propriedade type setada "success") é chamado com request como seu target. Uma vez chamado, a função onsuccess() no request é chamada com o evento de sucesso em seu contexto. Por outro lado, se acontecer algum problema, um evento de erro (que é um evento DOM com a propriedade type setada para "error") é chamado no request. Então a função onerror()  com o evento erro em seu contexto.

+ +

A API IndexedDB é feita para minimizar a necessidade de manipular erros, então você não fará muitos eventos de erro (ao menos, se você usar a API!) No  caso de abrir um banco, portanto, existe algumas condições comuns para eventos de erro. O problema mais comum é o usuário não dar permissão para criar o banco. Um dos principais objetivos do IndexedDB é permitir muitos dados serem armazenados para uso offline. (Para aprender mais sobre o quanto cada navegador pode armazenar, veja Storage limits).  

+ +

Obviamente, navegadores não querem armazenar dados que poluem seu computador, então o navegador mostra uma mensagem ao usuário na primeira vez que um aplicativo tenta abrir o IndexedDB. O usuário pode escolher permitir ou negar acesso. O IndexedDB também é desabilitado no modo privado dos navegadores (ctrl+shift+N no Chrome e ctrl+shift+P no Firefox). Isso acontece porque o intuito do modo privado é não deixar rastros na navegação.

+ +

Agora, assumindo que o usuário aprovou seu request para criar o banco, e você recebeu success; Qual é o próximo passo? O request foi gerado com a chamada de indexedDB.open(), e request.result é uma instância de IDBDatabase, e você definitivamente vai querer armazenar isso para usar depois. Veja abaixo:

+ +
var db;
+var request = indexedDB.open("DBteste");
+request.onerror = function(event) {
+  alert("Você não habilitou minha web app para usar IndexedDB?!");
+};
+request.onsuccess = function(event) {
+  db = request.result;
+};
+
+ +

Tratando Erros

+ +

Como mencionado acima, o evento de erro é chamado quando o request dá erro. Se você quer evitar manipuladores de erro a cada request, você pode adicionar um único manipulador de erro no objeto db, como abaixo:

+ +
db.onerror = function(event) {
+  // Função genérica para tratar os erros de todos os requests desse banco!
+  alert("Database error: " + event.target.errorCode);
+};
+
+ +

Um dos erros mais comuns ao abrir o banco é VER_ERR. Ele indica que a versão do banco existente é maior que a versão que você quer abrir.

+ +

Criando ou atualizando a versão do banco

+ +

Quando você cria um novo banco ou aumenta sua versão, o evento onupgradeneeded será chamado. No manipulador deste evento, você deve criar o objectStore necessário para a versão do banco:

+ +
// Este evento é implementado somente em navegadores mais recentes
+request.onupgradeneeded = function(event) {
+  var db = event.target.result;
+
+  // cria um objectStore para esse banco
+  var objectStore = db.createObjectStore("nome", { keyPath: "minhaChave" });
+};
+ +

Neste caso, o banco já terá objectStores de suas versões anteriores, então você não terá que criar esses objectStores de novo. Você somente precisará criar um novo objectStore qualquer, ou deletar objectStores da versão anterior que não serão utilizados. Se você precisa mudar um objectStore existente (mudar o keyPath, por exemplo),  então você precisa deletar o objectStore antigo e criá-lo novamente com as novas opções. (Note que isso irá deletar a informação no objectStore! Se você precisa salvar a informação, você deve ler isso e salvá-lo em algum lugar antes de atualizar o banco.)

+ +

Blink/Webkit suporta a versão atual da especificação, nas versões do Chrome 23+ e Opera 17+; IE10+ também suporta. Outros motores e versões antigas não implementam a versão atual da especificação e não suportam a assinatura indexedDB.open(name, version).onupgradeneeded ainda.  Para mais informação sobre como atualizar a versão do banco em Webkit/Blink, veja IDBDatabase reference article.

+ +

Estruturando o banco

+ +

Agora a estrutura do banco. IndexedDB usa "armazens de objetos" em vez de tabelas, e um único banco de dados pode conter qualquer número de "armazem de objetos". Sempre que um valor é armazenado num objectStore, ele é associado a uma chave. Existe várias maneiras diferentes de uma chave ser mostrada, dependendo do que o objectStore usa, um key path ou key generator.

+ +

A tabela abaixo mostra as direfentes chaves suportadas:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Key Path (keyPath)Key Generator (autoIncrement)Description
NãoNãoEste objectStore pode ter qualquer tipo de valor primitivo como número ou string. Você deve suprir uma chave separada sempre que adicionar um novo valor.
SimNãoEste objectStore pode simplesmente armazenar objetos JavaScript. O objeto deve ter uma propriedade com o mesmo nome do key path.
NãoSimEste objectStore pode possuir qualquer tipo de valor. A chave é gerada para você, automaticamente, ou você pode suprir uma chave separada, caso utilize uma chave específica.
SimSimEste objectStore suporta somente objetos JavaScript. Normalmente uma chave é gerada e o valor dela é armazenado no objeto em uma propriedade com o mesmo nome da key path. Portanto, se a propriedade já existe, o valor dela será usado como chave, em vez do valor gerado.
+ +

Você também pode criar índices em qualquer objectStore. Um indice deixa você olhar os valores armazenados no objectStore usando o valor de uma propriedade do objectStore, em vez de sua chave.

+ +

Adicionalmente, indices tem a habilidade de forçar restrições simples nos dados armazenados. Setando uma flag única quando criar o índice, reforça que dois objetos são armazenados contendo o mesmo valor para o key path do índice. Então, por exemplo, se você tem um objeto armazenado que tem um conjunto de pessoas, e você quer ter certeza que ninguém tera o mesmo e-mail, você pode usar um índice com flag única para forçar isso.

+ +

Isso soa meio confuso, mas este exemplo pode iluminar o conceito. Primeiro, vamos definir alguns dados a serem usados no exemplo:

+ +
// Isso é o que os dados de nossos clientes será.
+const DadosClientes = [
+  { ssn: "444-44-4444", nome: "Bill", idade: 35, email: "bill@company.com" },
+  { ssn: "555-55-5555", nome: "Donna", idade: 32, email: "donna@home.org" }
+];
+
+ +

Agora  vamos ver  ccomo criar um IndexedDB para armazenar nossos dados:

+ +
const dbName = "clientes";
+
+var request = indexedDB.open(dbName, 2);
+
+request.onerror = function(event) {
+  // Tratar erros.
+};
+request.onupgradeneeded = function(event) {
+  var db = event.target.result;
+
+  // Cria um objectStore para conter a informação sobre nossos clientes. Nós vamos
+  // usar "ssn" como key path porque sabemos que é único;
+  var objectStore = db.createObjectStore("clientes", { keyPath: "ssn" });
+
+  // Cria um índice para buscar clientes pelo nome. Podemos ter nomes
+  // duplicados, então não podemos usar como índice único.
+  objectStore.createIndex("nome", "nome", { unique: false });
+
+  // Cria um índice para buscar clientes por email. Queremos ter certeza
+  // que não teremos 2 clientes com o mesmo e-mail;
+  objectStore.createIndex("email", "email", { unique: true });
+
+  // Usando transação oncomplete para afirmar que a criação do objectStore
+  // é terminada antes de adicionar algum dado nele.
+  objectStore.transaction.oncomplete = function(event) {
+    // Armazenando valores no novo objectStore.
+    var clientesObjectStore = db.transaction("clientes", "readwrite").objectStore("clientes");
+    for (var i in DadosClientes) {
+      clientesObjectStore.add(DadosClientes[i]);
+    }
+  }
+};
+
+ +

Como falamos antes, onupgradeneeded é o único lugar onde você pode alterar a estrutura do banco. Nele você pode criar e deletar objectStores e construir ou remover índices.

+ +
Armazens de objetos são criados com uma única chamada de createObjectStore(). O método pega o nome do armazem e um objeto parâmetro. Mesmo que o objeto parâmetro seja opcional, ele é muito importante porque ele deixa você definir propriedades importantes e ajustar tipos de dados que você quer criar. No nosso caso, nós obtemos um objectStore chamado "clientes" e definimos um keyPath, que é a propriedade que faz um objeto individual ser único no banco. Essa propriedade, nesse exemplo, é "ssn", que simboliza o cpf (social security number), que é único. O "ssn" deve ser apresentado em cada objeto armazenado no objectStore
+ +

Nós também criamos um índice chamado "nome" ligado à propriedade nome. Assim como o createObjectStore(), o createIndex() tem um parâmetro opcional options que cuida do tipo de índice que você quer criar. Adicionando objetos que não tem a propriedade nome terá sucesso, porém esses objetos não aparecerão no índice "nome".

+ +

Nós podemos obter os objetos de clientes armazenados usando os ssn da objectStore diretamente, ou usando os nomes usados no índice. Para aprender como isso é feito, veja a seção usando um índice.

+ +

Usando um key generator

+ +

Setando uma flag autoIncrement ao criar o objectStore habilitará o key generator. Por padrão ele não é setado.

+ +

Com o key generator, a chave será gerada automaticamente quando você adicionar algum valor no objectStore. O atual número do key generator é sempre setado 1 quando a primeira key generator do objectStore é criada. Basicamente a próxima chave recebe o incremento de 1. O número atual da key generator nunca decresce,  a não ser se alguma operação do banco for revertida, como numa transação abortada, por exemplo. No entanto, deletar um registro ou limpar todos os registros nunca afeta o key generator dos objectStores.

+ +

Nós podemos criar outro objectStore com o key generator como abaixo:

+ +
// Abrindo o indexedDB.
+var request = indexedDB.open(dbName, 3);
+
+request.onupgradeneeded = function (event) {
+
+    var db = event.target.result;
+
+    // Criando outro objeto chamado "names" com o autoIncrement setado.
+    var objStore = db.createObjectStore("names", { autoIncrement : true });
+
+    // Porque "names" tem o the key generator, a chave para o nome é gerada automaticamente.
+    // Os registros adicionados serão assim:
+    // key : 1 => value : "Bill"
+    // key : 2 => value : "Donna"
+    for (var i in DadosClientes) {
+        objStore.add(DadosClientes[i].nome);
+    }
+}
+ +

Para mais detalhes veja "W3C Key Generators".

+ +

Adicionando, obtendo e removendo dados

+ +

Antes de fazer qualquer coisa em um novo banco, você precisa iniciar uma transação. Transações estão no objeto database, e você tem que especificar qual objectStore você quer na transaction. Uma vez que você está dentro da transação, você pode acessar os objectStores  com seus dados e fazer os requests. Depois, você precisa decidir se você vai fazer mudanças no banco ou se você simplesmente quer ler esses dados. Transações tem três modos disponíveis: readonly, readwrite, and versionchange.

+ +

Para mudar o "schema" ou estrutura do banco — o que envolve criar ou deletar objectStores ou índices — a transação deve ser em modo versionchange. Esta transação é aberta chamando o método {{domxref("IDBFactory.open")}} especificando a  version. (Em navegadores com WebKit que não tem a ultima especificação implementada, o método {{domxref("IDBFactory.open")}} tem apenas um parâmetro, o nome do banco; então você deve chamar {{domxref("IDBVersionChangeRequest.setVersion")}} para estabelecer uma transação versionchange.)

+ +

Para ler os registros de um objectStore existente, a transação pode ser tanto readonly quanto readwrite. Para fazer mudanças em um objectStore existente, a transação deve ser em modo readwrite. Você abre essas transações usando {{domxref("IDBDatabase.transaction")}}. O método aceita dois parâmetros: o storeNames (o escopo, definido como um array de objectStores que você quer acessar) e o modo (readonly or readwrite) da transação. O método retorna o objeto detransação contendo o método {{domxref("IDBIndex.objectStore")}}, que você pode usar para acessar seu objectStore. Por padrão, quando nenhum modo é especificado, a transação é aberta no modo readonly.

+ +

Você pode deixar o acesso aos dados mais rápido usando o escopo correto e o modo correto de transação. Aqui vai algumas dicas:

+ + + +

Adicionando dados no banco

+ +

Se você acabou de criar o banco, então você provavelmente quer escrever algo nele. Veja abaixo:

+ +
var transaction = db.transaction(["clientes"], "readwrite");
+// Nota: Implementações mais antigas usam uma versão IDBTransaction.READ_WRITE antiga em vez de "readwrite".
+// Então, para suportar versões antigas, escreva:
+// var transaction = db.transaction(["clientes"], IDBTransaction.READ_WRITE);
+ +

A função transaction() tem dois argumentos (opcionais) e retorna um objeto de transação. O primeiro argumento é uma lista de objectStores que serão trabalhados na transação. Você pode passar um array vazio se você quer uma transação com todos os objectStores, mas não faça isso pois a especificação diz que um array vazio pode gerar um erro InvalidAccessError. Se você não especificar nada no segundo parâmetro, você tem uma transação read-only. Se você quer escrever no banco, use "readwrite".

+ +

Agora que você tem uma transação, você precisa entender seu tempo de uso. Transações são amarradas a um evento. Se você faz uma transação fora de um evento, ela ficará inativa. A única maneira de manter uma transação ativa é fazer um request nela. Quando o request acabar você terá a oportunidade de extender a transação durante o callback. Se você tentar extender uma transação dentro de um evento, então ela tornará inativa. Se existir requests pendentes, a transação continua ativa. O tempo de vida de uma transação é realmente simples mas deve ser usada em um curto espaço de tempo. Outros exemplos poderão ajudá-lo. Se você começar a ver TRANSACTION_INACTIVE_ERR error então você está fazendo algo errado.

+ +

Transações podem receber eventos DOM de três tipos diferentes: error, abort, e complete. Nós falamos sobre o error, ou seja, a transação recebe um error sempre que o request gerar erro. Um ponto mais sutil é que o comportamento padrão de um erro é abortar a transação na qual ele estava. A menos que você manipule o erro chamando preventDefault() e fazendo algo depois, a transaçaõ inteira será desfeita. Este design força você a pensar sobre manipulação de erros, mas você pode sempre adicionar um manipulador de todos os erros se a manipulação separada estiver complicada. Se você não tratar o erro ou chamar abort() na transação, então a transação é desfeita (roll back) e o evento abort é chamado. Por outro lado, depois de todo request completado, você tem um evento complete. Se você fazer várias operações no banco, então seguir as operações de transações pode ser um caminho a seguir.

+ +

Agora que você tem uma transação, você precisará obter um objectStore dela. Transações somente deixam você obter um objectStore citado na transação. Então você pode adicionar os dados que precisa.

+ +
// Faz algo após a inserção dos dados.
+transaction.oncomplete = function(event) {
+  alert("Pronto!");
+};
+
+transaction.onerror = function(event) {
+  // Não esquecer de tratar os erros!
+};
+
+var objectStore = transaction.objectStore("clientes");
+for (var i in DadosClientes) {
+  var request = objectStore.add(DadosClientes[i]);
+  request.onsuccess = function(event) {
+    // event.target.result == DadosClientes[i].ssn;
+  };
+}
+ +

O result de um request gerado de uma chamada de add() é a chave do valor  que foi adicionado. Então neste caso, ele deve ser igual ao valor do ssn do objeto que foi adicionado, desde que o objeto use o ssn como key path. Note que a função add() não deixa nenhum objeto ser adicionado com a mesma chave. Se você está tentando modificar um registro existente, você deve usar o put(), como explica a seção  {{ anch("Updating an entry in the database") }}.

+ +

Removendo dados do banco

+ +

Para remoção o código é parecido:

+ +
var request = db.transaction(["clientes"], "readwrite")
+                .objectStore("clientes")
+                .delete("444-44-4444");
+request.onsuccess = function(event) {
+  // Pronto!
+};
+ +

Obtendo dados do banco

+ +

Agora que o banco tem algumas informações nele, você pode obtê-las de diferentes maneiras. Primeiro, um get() simples. Você precisa informar a chave do valor a ser obtido:

+ +
var transaction = db.transaction(["clientes"]);
+var objectStore = transaction.objectStore("clientes");
+var request = objectStore.get("444-44-4444");
+request.onerror = function(event) {
+  // Tratar erro!
+};
+request.onsuccess = function(event) {
+  // Fazer algo com request.result!
+  alert("O nome do SSN 444-44-4444 é " + request.result.name);
+};
+ +

Veja agora de maneira resumida:

+ +
db.transaction("clientes").objectStore("clientes").get("444-44-4444").onsuccess = function(event) {
+  alert("O nome do SSN 444-44-4444 é " + request.result.name);
+};
+ +

Viu como funciona? Desde que exista um objectStore, você pode evitar passar uma lista de objectStores que precisa na transação e passar apenas o nome como string. Você também pode ler do banco, apenas, então não precisará de uma transação "readwrite". Chamando transaction() com nenhum modo especificado, você terá uma transação "readonly". Outra consideração é que você não necessita salvar o request em uma variável. Desde que o evento DOM tenha o target que você precisará para obter a propriedade result.

+ +
+

Note: Você pode deixar o acesso aos dados mais rápido limitando o escopo e o modo de transação. Veja algumas dicas:

+ + +
+ +

Atualizando um registro no banco

+ +

Agora que obtemos algum dado, atualizá-ls é inserí-los novamente no IndexedDB é bem simples. Vamos atualizar o exemplo anterior:

+ +
var objectStore = db.transaction(["clientes"], "readwrite").objectStore("clientes");
+var request = objectStore.get("444-44-4444");
+request.onerror = function(event) {
+  // Tratar erro
+};
+request.onsuccess = function(event) {
+  // Obter os valores antigos
+  var data = request.result;
+
+  // atualizar algum dado
+  data.age = 42;
+
+  // Atulizar esse dado no banco
+  var requestUpdate = objectStore.put(data);
+   requestUpdate.onerror = function(event) {
+     // Tratar erro
+   };
+   requestUpdate.onsuccess = function(event) {
+     // Sucesso na atualização \o/
+   };
+};
+ +

Criamos uma objectStore e obtemos um cliente dele, identificado pelo ssn (444-44-4444). Nós atualizamos o objeto, passando-o como parâmetro de um método put de outro request (requestUpdate) sobrescrevendo o valor antigo.

+ +
+

Note que neste caso nós temos que especificar a transação readwrite porque nós queremos escrever no banco, não somente ler os dados dele.

+
+ +

Usando um cursor

+ +

Ao usar o método get() você precisa saber a chave do objeto que deseja obter. Se você quer passear entre todos os valores do seu objectStore, então você pode usar um cursor. Veja:

+ +
var objectStore = db.transaction("cliente").objectStore("cliente");
+
+objectStore.openCursor().onsuccess = function(event) {
+  var cursor = event.target.result;
+  if (cursor) {
+    alert("O nome do SSN " + cursor.key + " é " + cursor.value.name);
+    cursor.continue();
+  }
+  else {
+    alert("Não existe mais registros!");
+  }
+};
+ +

A função openCursor() tem vários argumentos. Primeiro, você pode limitar o número de itens obtidos usando uma chave que veremos logo abaixo. Segundo, você pode especificar a direção que deseja iterar. No exemplo acima, nós estamos iterando em todos os objetos em ordem ascendente. O callback de sucesso para cursor é um pouco especial. O objeto cursor já é o result do request (acima nós usamos event.target.result). Então a chave atual e o valor pode ser encontrado na propriedade key e value do objeto cursor. Se você quer manter adiante, então você usa o método continue(). Quando você chegar ao fim dos dados (ou se não existem registros encontrados no openCursor()) você ainda tem um callback de sucesso, mas a propriedade result fica undefined.

+ +

Um padrão comum para cursores é obter todos os objetos em um objectStore e adicioná-los a um array como este:

+ +
var clientes = [];
+
+objectStore.openCursor().onsuccess = function(event) {
+  var cursor = event.target.result;
+  if (cursor) {
+    clientes.push(cursor.value);
+    cursor.continue();
+  }
+  else {
+    alert("Todos os clientes: " + clientes);
+  }
+};
+ +
+

Note: Mozilla também implementou o método getAll() para ser usado nesse caso (e getAllKeys(), que está atualmente dentro da preferência do dom.indexedDB.experimental em about:config). Estes métodos não são parte do padrão IndexedDB, então eles podem desaparecer no futuro. Nós adicionamos porque achamos útil. O código abaixo faz o mesmo que o código acima:

+ +
objectStore.getAll().onsuccess = function(event) {
+  alert("Todos os clientes: " + event.target.result);
+};
+ +

Existe um custo de performance associado com a propriedade value do cursor, porque o objeto é criado de forma lenta. Quando você usa getAll() por exemplo, Gecko deve criar todos os objetos de uma vez. Se você está somente interessado em cada chave, é muito melhor usar o cursor do que usar o getAll(). Se você está tentando obter um array de todos os objetos, então é melhor usar o getAll().

+
+ +

Usando um índice

+ +

Armazenar dados de um cliente usando o SSN como chave é lógico pois o SSN identifica o cliente de forma única. Se você precisa obter um cliente pelo seu nome, portanto, você precisará iterar todos os registros no banco e comparar os nomes até achar o que você procura. Buscar dessa maneira é algo lento, então criamos um índice.

+ +
var index = objectStore.index("nome");
+index.get("John").onsuccess = function(event) {
+  alert("O SSN de John é " + event.target.result.ssn);
+};
+ +

O cursor "nome" não é único, então pode existir mais de um registro com o nome igual a "John". Neste caso você sempre obtem o registro com a chave de menor valor.

+ +

Se você precisa acessar todos os registros retornados, você pode usar um cursor. Você pode abrir dois tipos de cursores. Um cursor normal mapeia o índice ao objeto na objectStore. Uma cursor-chave mapeia o a propriedade índice à chave usada para armazenar o objeto. As diferenças são ilustradas abaixo:

+ +
// Usando um cursor normal para obter todos os objetos
+index.openCursor().onsuccess = function(event) {
+  var cursor = event.target.result;
+  if (cursor) {
+    // cursor.key é um nome, como "Bill", e cursor.value é o objeto inteiro.
+    alert("Nome: " + cursor.key + ", SSN: " + cursor.value.ssn + ", email: " + cursor.value.email);
+    cursor.continue();
+  }
+};
+
+// Usando um cursor-chave para obter todos os objetos
+index.openKeyCursor().onsuccess = function(event) {
+  var cursor = event.target.result;
+  if (cursor) {
+    // cursor.key é o nome, como "Bill", e cursor.value é o SSN (chave).
+    // Não tem como obter o resto do objeto
+    alert("Nome: " + cursor.key + ", SSN: " + cursor.value);
+    cursor.continue();
+  }
+};
+ +

Especificando o número e a direção dos cursores

+ +

Se você gostaria de limitar o número de valores retornados pelo cursor, você pode usar um objeto IDBKeyRange e passar isso como o primeiro argumento ao openCursor() ou openKeyCursor(). Você pode fazer um key range que permite um único valor, ou valores acima ou abaixo do especificado. O limite pode ser fechado (o key range inclui os valores dados) ou aberto (o key range não inclue os valores dados). Veja como funciona:

+ +
// Somente se for igual "Donna"
+var singleKeyRange = IDBKeyRange.only("Donna");
+
+// Combinações menores que "Bill", incluindo "Bill"
+var lowerBoundKeyRange = IDBKeyRange.lowerBound("Bill");
+
+// Combinações menores que "Bill", sem incluir "Bill"
+var lowerBoundOpenKeyRange = IDBKeyRange.lowerBound("Bill", true);
+
+// Combinações maiores que Donna, não incluindo "Donna"
+var upperBoundOpenKeyRange = IDBKeyRange.upperBound("Donna", true);
+
+// Combinações entre "Bill" e "Donna", sem incluir "Donna"
+var boundKeyRange = IDBKeyRange.bound("Bill", "Donna", false, true);
+
+// Para usar qualquer um desses key ranges, basta passar como primeiro parâmetro de openCursor()/openKeyCursor()
+index.openCursor(boundKeyRange).onsuccess = function(event) {
+  var cursor = event.target.result;
+  if (cursor) {
+    // Faz algo com o que encontrar
+    cursor.continue();
+  }
+};
+ +

As vezes você pode querer iterar em ordem decrescente, em vez de crescente, alterando o segundo parâmetro de openCursor():

+ +
objectStore.openCursor(boundKeyRange, "prev").onsuccess = function(event) {
+  var cursor = event.target.result;
+  if (cursor) {
+    // Prev indica ordem decrescente
+    cursor.continue();
+  }
+};
+ +

Se você apenas quer especificar a ordem sem key range, é só passar null no primeiro parâmetro:

+ +
objectStore.openCursor(null, "prev").onsuccess = function(event) {
+  var cursor = event.target.result;
+  if (cursor) {
+    // Faça algo com os resultados.
+    cursor.continue();
+  }
+};
+ +

Uma vez que o índice "nome" não é único, pode existir várias entradas onde o nome é o mesmo. Isso não acontece com objectStores porque a chave deve ser sempre única. Se você deseja filtrar valores duplicados numa iteração do cursor, você pode passar nextunique (ou prevunique se quiser decrescer) como parâmetro de direção. Quando nextunique ou prevunique é usado, o registro com menor chave é retornado.

+ +
index.openKeyCursor(null, "nextunique").onsuccess = function(event) {
+  var cursor = event.target.result;
+  if (cursor) {
+    // Faça algo com os registros.
+    cursor.continue();
+  }
+};
+ +

Veja "IDBCursor Constants" para parâmetros válidos.

+ +

Mudança de versão quando a web app está aberta em outra aba.

+ +

Quando sua web app muda a versão você precisa considerar o que vai acontecer se o usuário está na versão antiga em uma aba, e carrega a versão nova na outra. Quando você chamar o open() com a versão mais nova, um evento onblocked  é chamado até que a aba da versão antiga seja fechada ou recarregada. Veja abaixo:

+ +
var openReq = mozIndexedDB.open("DBteste", 2);
+
+openReq.onblocked = function(event) {
+  // Se existe outra aba com a versão antiga
+  alert("Existe uma versão antiga da web app aberta em outra aba, feche-a por favor!");
+};
+
+openReq.onupgradeneeded = function(event) {
+  // Se estiver tudo fechado, então faça as devidas alterações
+  db.createObjectStore(/* ... */);
+  useDatabase(db);
+}
+
+openReq.onsuccess = function(event) {
+  var db = event.target.result;
+  useDatabase(db);
+  return;
+}
+
+function useDatabase(db) {
+  // Esteja certo de que adicionou um evento para notificar se a página muda a versão
+  // Nós devemos fechar o banco. Isso permite à outra página ser atualizada
+  // Se você não fizer isso a atualização não acontecerá até fechar as abas.
+  db.onversionchange = function(event) {
+    db.close();
+    alert("Uma nova versão desta web app está pronta. Atualiza, por favor!");
+  };
+
+  // Fazer algo com os bancos
+}
+
+ +

Segurança

+ +

IndexedDB usa o princípio de mesma origem, o que significa que o banco só será acessado pelo site que o criou.

+ +

É importante notar que o IndexedDB não funciona para conteúdo carregado em um frame de outro site (seja {{ HTMLElement("frame") }} ou {{ HTMLElement("iframe") }}. Esta é uma política de segurança e privacidade análoga ao bloqueio de cookies de terceiros. Para mais detalhes, veja {{ bug(595307) }}.

+ +

Alerta sobre fechar o navegador

+ +

Quando o navegador é fechado, qualquer transação pendente no IndexedDB será abortada (silenciosamente) — ele não vai completar, nem chamar o evento de erro.  Uma vez que o usuário pode sair do navegador, em qualquer momento, isto significa que você não pode confiar em qualquer transação específica para completar ou para saber que ela não foi concluída. Existem várias implicações nesse comportamento.

+ +

Primeiro, você deve ter o cuidado de sempre deixar seu banco de dados em um estado consistente, no final de cada transação. Por exemplo, suponha que você está usando IndexedDB para armazenar uma lista de itens que permitem ao usuário editar. Você salvar a lista após a edição, limpando o armazenamento de objetos e, em seguida, escrever a nova lista. Se você limpar o armazenamento de objetos em uma transação e escrever a nova lista em outra transação, há um perigo de que o navegador irá fechar após a limpeza de dados e antes da gravação, deixando-o com um banco de dados vazio. Para evitar isso, você deve combinar tanto a limpeza quanto a gravação em uma única transação.

+ +

Em segundo lugar, você nunca deve amarrar as operações de banco de dados ao evento unload. Se o evento unload é acionado pelo fechamento do navegador, todas as transações criadas no unload nunca serão concluídas. Uma abordagem intuitiva para manter algumas informações em sessões do navegador é lê-la a partir do banco de dados quando o navegador (ou uma determinada página) é aberta, atualizá-la assim que o usuário interagir com o navegador, e depois salvá-lo para o banco de dados quando o navegador (ou página) será fechada. No entanto, isso não vai funcionar. As transações de banco de dados será criado no unload, mas como elas são assíncronasserão abortadas antes que eles possam executar.

+ +

De fato, não existe uma maneira de garantir que as transações no IndexedDBserão completadas, mesmo com o fechamento padrão do navegador. Ver {{ bug(870645) }}.

+ +

Exemplo de IndexedDB

+ +

HTML

+ +
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
+
+    <h1>IndexedDB Demo: storing blobs, e-publication example</h1>
+    <div class="note">
+      <p>
+        Works and tested with:
+      </p>
+      <div id="compat">
+      </div>
+    </div>
+
+    <div id="msg">
+    </div>
+
+    <form id="register-form">
+      <table>
+        <tbody>
+          <tr>
+            <td>
+              <label for="pub-title" class="required">
+                Title:
+              </label>
+            </td>
+            <td>
+              <input type="text" id="pub-title" name="pub-title" />
+            </td>
+          </tr>
+          <tr>
+            <td>
+              <label for="pub-biblioid" class="required">
+                Bibliographic ID:<br/>
+                <span class="note">(ISBN, ISSN, etc.)</span>
+              </label>
+            </td>
+            <td>
+              <input type="text" id="pub-biblioid" name="pub-biblioid"/>
+            </td>
+          </tr>
+          <tr>
+            <td>
+              <label for="pub-year">
+                Year:
+              </label>
+            </td>
+            <td>
+              <input type="number" id="pub-year" name="pub-year" />
+            </td>
+          </tr>
+        </tbody>
+        <tbody>
+          <tr>
+            <td>
+              <label for="pub-file">
+                File image:
+              </label>
+            </td>
+            <td>
+              <input type="file" id="pub-file"/>
+            </td>
+          </tr>
+          <tr>
+            <td>
+              <label for="pub-file-url">
+                Online-file image URL:<br/>
+                <span class="note">(same origin URL)</span>
+              </label>
+            </td>
+            <td>
+              <input type="text" id="pub-file-url" name="pub-file-url"/>
+            </td>
+          </tr>
+        </tbody>
+      </table>
+
+      <div class="button-pane">
+        <input type="button" id="add-button" value="Add Publication" />
+        <input type="reset" id="register-form-reset"/>
+      </div>
+    </form>
+
+    <form id="delete-form">
+      <table>
+        <tbody>
+          <tr>
+            <td>
+              <label for="pub-biblioid-to-delete">
+                Bibliographic ID:<br/>
+                <span class="note">(ISBN, ISSN, etc.)</span>
+              </label>
+            </td>
+            <td>
+              <input type="text" id="pub-biblioid-to-delete"
+                     name="pub-biblioid-to-delete" />
+            </td>
+          </tr>
+          <tr>
+            <td>
+              <label for="key-to-delete">
+                Key:<br/>
+                <span class="note">(for example 1, 2, 3, etc.)</span>
+              </label>
+            </td>
+            <td>
+              <input type="text" id="key-to-delete"
+                     name="key-to-delete" />
+            </td>
+          </tr>
+        </tbody>
+      </table>
+      <div class="button-pane">
+        <input type="button" id="delete-button" value="Delete Publication" />
+        <input type="button" id="clear-store-button"
+               value="Clear the whole store" class="destructive" />
+      </div>
+    </form>
+
+    <form id="search-form">
+      <div class="button-pane">
+        <input type="button" id="search-list-button"
+               value="List database content" />
+      </div>
+    </form>
+
+    <div>
+      <div id="pub-msg">
+      </div>
+      <div id="pub-viewer">
+      </div>
+      <ul id="pub-list">
+      </ul>
+    </div>
+
+ +

CSS Content

+ +
body {
+  font-size: 0.8em;
+  font-family: Sans-Serif;
+}
+
+form {
+  background-color: #cccccc;
+  border-radius: 0.3em;
+  display: inline-block;
+  margin-bottom: 0.5em;
+  padding: 1em;
+}
+
+table {
+  border-collapse: collapse;
+}
+
+input {
+  padding: 0.3em;
+  border-color: #cccccc;
+  border-radius: 0.3em;
+}
+
+.required:after {
+  content: "*";
+  color: red;
+}
+
+.button-pane {
+  margin-top: 1em;
+}
+
+#pub-viewer {
+  float: right;
+  width: 48%;
+  height: 20em;
+  border: solid #d092ff 0.1em;
+}
+#pub-viewer iframe {
+  width: 100%;
+  height: 100%;
+}
+
+#pub-list {
+  width: 46%;
+  background-color: #eeeeee;
+  border-radius: 0.3em;
+}
+#pub-list li {
+  padding-top: 0.5em;
+  padding-bottom: 0.5em;
+  padding-right: 0.5em;
+}
+
+#msg {
+  margin-bottom: 1em;
+}
+
+.action-success {
+  padding: 0.5em;
+  color: #00d21e;
+  background-color: #eeeeee;
+  border-radius: 0.2em;
+}
+
+.action-failure {
+  padding: 0.5em;
+  color: #ff1408;
+  background-color: #eeeeee;
+  border-radius: 0.2em;
+}
+
+.note {
+  font-size: smaller;
+}
+
+.destructive {
+  background-color: orange;
+}
+.destructive:hover {
+  background-color: #ff8000;
+}
+.destructive:active {
+  background-color: red;
+}
+
+ +

 

+ +

JavaScript Content

+ +
(function () {
+  var COMPAT_ENVS = [
+    ['Firefox', ">= 16.0"],
+    ['Google Chrome',
+     ">= 24.0 (you may need to get Google Chrome Canary), NO Blob storage support"]
+  ];
+  var compat = $('#compat');
+  compat.empty();
+  compat.append('<ul id="compat-list"></ul>');
+  COMPAT_ENVS.forEach(function(val, idx, array) {
+    $('#compat-list').append('<li>' + val[0] + ': ' + val[1] + '</li>');
+  });
+
+  const DB_NAME = 'mdn-demo-indexeddb-epublications';
+  const DB_VERSION = 1; // Use a long long for this value (don't use a float)
+  const DB_STORE_NAME = 'publications';
+
+  var db;
+
+  // Used to keep track of which view is displayed to avoid uselessly reloading it
+  var current_view_pub_key;
+
+  function openDb() {
+    console.log("openDb ...");
+    var req = indexedDB.open(DB_NAME, DB_VERSION);
+    req.onsuccess = function (evt) {
+      // Better use "this" than "req" to get the result to avoid problems with
+      // garbage collection.
+      // db = req.result;
+      db = this.result;
+      console.log("openDb DONE");
+    };
+    req.onerror = function (evt) {
+      console.error("openDb:", evt.target.errorCode);
+    };
+
+    req.onupgradeneeded = function (evt) {
+      console.log("openDb.onupgradeneeded");
+      var store = evt.currentTarget.result.createObjectStore(
+        DB_STORE_NAME, { keyPath: 'id', autoIncrement: true });
+
+      store.createIndex('biblioid', 'biblioid', { unique: true });
+      store.createIndex('title', 'title', { unique: false });
+      store.createIndex('year', 'year', { unique: false });
+    };
+  }
+
+  /**
+   * @param {string} store_name
+   * @param {string} mode either "readonly" or "readwrite"
+   */
+  function getObjectStore(store_name, mode) {
+    var tx = db.transaction(store_name, mode);
+    return tx.objectStore(store_name);
+  }
+
+  function clearObjectStore(store_name) {
+    var store = getObjectStore(DB_STORE_NAME, 'readwrite');
+    var req = store.clear();
+    req.onsuccess = function(evt) {
+      displayActionSuccess("Store cleared");
+      displayPubList(store);
+    };
+    req.onerror = function (evt) {
+      console.error("clearObjectStore:", evt.target.errorCode);
+      displayActionFailure(this.error);
+    };
+  }
+
+  function getBlob(key, store, success_callback) {
+    var req = store.get(key);
+    req.onsuccess = function(evt) {
+      var value = evt.target.result;
+      if (value)
+        success_callback(value.blob);
+    };
+  }
+
+  /**
+   * @param {IDBObjectStore=} store
+   */
+  function displayPubList(store) {
+    console.log("displayPubList");
+
+    if (typeof store == 'undefined')
+      store = getObjectStore(DB_STORE_NAME, 'readonly');
+
+    var pub_msg = $('#pub-msg');
+    pub_msg.empty();
+    var pub_list = $('#pub-list');
+    pub_list.empty();
+    // Resetting the iframe so that it doesn't display previous content
+    newViewerFrame();
+
+    var req;
+    req = store.count();
+    // Requests are executed in the order in which they were made against the
+    // transaction, and their results are returned in the same order.
+    // Thus the count text below will be displayed before the actual pub list
+    // (not that it is algorithmically important in this case).
+    req.onsuccess = function(evt) {
+      pub_msg.append('<p>There are <strong>' + evt.target.result +
+                     '</strong> record(s) in the object store.</p>');
+    };
+    req.onerror = function(evt) {
+      console.error("add error", this.error);
+      displayActionFailure(this.error);
+    };
+
+    var i = 0;
+    req = store.openCursor();
+    req.onsuccess = function(evt) {
+      var cursor = evt.target.result;
+
+      // If the cursor is pointing at something, ask for the data
+      if (cursor) {
+        console.log("displayPubList cursor:", cursor);
+        req = store.get(cursor.key);
+        req.onsuccess = function (evt) {
+          var value = evt.target.result;
+          var list_item = $('<li>' +
+                            '[' + cursor.key + '] ' +
+                            '(biblioid: ' + value.biblioid + ') ' +
+                            value.title +
+                            '</li>');
+          if (value.year != null)
+            list_item.append(' - ' + value.year);
+
+          if (value.hasOwnProperty('blob') &&
+              typeof value.blob != 'undefined') {
+            var link = $('<a href="' + cursor.key + '">File</a>');
+            link.on('click', function() { return false; });
+            link.on('mouseenter', function(evt) {
+                      setInViewer(evt.target.getAttribute('href')); });
+            list_item.append(' / ');
+            list_item.append(link);
+          } else {
+            list_item.append(" / No attached file");
+          }
+          pub_list.append(list_item);
+        };
+
+        // Move on to the next object in store
+        cursor.continue();
+
+        // This counter serves only to create distinct ids
+        i++;
+      } else {
+        console.log("No more entries");
+      }
+    };
+  }
+
+  function newViewerFrame() {
+    var viewer = $('#pub-viewer');
+    viewer.empty();
+    var iframe = $('<iframe />');
+    viewer.append(iframe);
+    return iframe;
+  }
+
+  function setInViewer(key) {
+    console.log("setInViewer:", arguments);
+    key = Number(key);
+    if (key == current_view_pub_key)
+      return;
+
+    current_view_pub_key = key;
+
+    var store = getObjectStore(DB_STORE_NAME, 'readonly');
+    getBlob(key, store, function(blob) {
+      console.log("setInViewer blob:", blob);
+      var iframe = newViewerFrame();
+
+      // It is not possible to set a direct link to the
+      // blob to provide a mean to directly download it.
+      if (blob.type == 'text/html') {
+        var reader = new FileReader();
+        reader.onload = (function(evt) {
+          var html = evt.target.result;
+          iframe.load(function() {
+            $(this).contents().find('html').html(html);
+          });
+        });
+        reader.readAsText(blob);
+      } else if (blob.type.indexOf('image/') == 0) {
+        iframe.load(function() {
+          var img_id = 'image-' + key;
+          var img = $('<img id="' + img_id + '"/>');
+          $(this).contents().find('body').html(img);
+          var obj_url = window.URL.createObjectURL(blob);
+          $(this).contents().find('#' + img_id).attr('src', obj_url);
+          window.URL.revokeObjectURL(obj_url);
+        });
+      } else if (blob.type == 'application/pdf') {
+        $('*').css('cursor', 'wait');
+        var obj_url = window.URL.createObjectURL(blob);
+        iframe.load(function() {
+          $('*').css('cursor', 'auto');
+        });
+        iframe.attr('src', obj_url);
+        window.URL.revokeObjectURL(obj_url);
+      } else {
+        iframe.load(function() {
+          $(this).contents().find('body').html("No view available");
+        });
+      }
+
+    });
+  }
+
+  /**
+   * @param {string} biblioid
+   * @param {string} title
+   * @param {number} year
+   * @param {string} url the URL of the image to download and store in the local
+   *   IndexedDB database. The resource behind this URL is subjected to the
+   *   "Same origin policy", thus for this method to work, the URL must come from
+   *   the same origin as the web site/app this code is deployed on.
+   */
+  function addPublicationFromUrl(biblioid, title, year, url) {
+    console.log("addPublicationFromUrl:", arguments);
+
+    var xhr = new XMLHttpRequest();
+    xhr.open('GET', url, true);
+    // Setting the wanted responseType to "blob"
+    // http://www.w3.org/TR/XMLHttpRequest2/#the-response-attribute
+    xhr.responseType = 'blob';
+    xhr.onload = function (evt) {
+                           if (xhr.status == 200) {
+                             console.log("Blob retrieved");
+                             var blob = xhr.response;
+                             console.log("Blob:", blob);
+                             addPublication(biblioid, title, year, blob);
+                           } else {
+                             console.error("addPublicationFromUrl error:",
+                                           xhr.responseText, xhr.status);
+                           }
+                         };
+    xhr.send();
+
+    // We can't use jQuery here because as of jQuery 1.8.3 the new "blob"
+    // responseType is not handled.
+    // http://bugs.jquery.com/ticket/11461
+    // http://bugs.jquery.com/ticket/7248
+    // $.ajax({
+    //   url: url,
+    //   type: 'GET',
+    //   xhrFields: { responseType: 'blob' },
+    //   success: function(data, textStatus, jqXHR) {
+    //     console.log("Blob retrieved");
+    //     console.log("Blob:", data);
+    //     // addPublication(biblioid, title, year, data);
+    //   },
+    //   error: function(jqXHR, textStatus, errorThrown) {
+    //     console.error(errorThrown);
+    //     displayActionFailure("Error during blob retrieval");
+    //   }
+    // });
+  }
+
+  /**
+   * @param {string} biblioid
+   * @param {string} title
+   * @param {number} year
+   * @param {Blob=} blob
+   */
+  function addPublication(biblioid, title, year, blob) {
+    console.log("addPublication arguments:", arguments);
+    var obj = { biblioid: biblioid, title: title, year: year };
+    if (typeof blob != 'undefined')
+      obj.blob = blob;
+
+    var store = getObjectStore(DB_STORE_NAME, 'readwrite');
+    var req;
+    try {
+      req = store.add(obj);
+    } catch (e) {
+      if (e.name == 'DataCloneError')
+        displayActionFailure("This engine doesn't know how to clone a Blob, " +
+                             "use Firefox");
+      throw e;
+    }
+    req.onsuccess = function (evt) {
+      console.log("Insertion in DB successful");
+      displayActionSuccess();
+      displayPubList(store);
+    };
+    req.onerror = function() {
+      console.error("addPublication error", this.error);
+      displayActionFailure(this.error);
+    };
+  }
+
+  /**
+   * @param {string} biblioid
+   */
+  function deletePublicationFromBib(biblioid) {
+    console.log("deletePublication:", arguments);
+    var store = getObjectStore(DB_STORE_NAME, 'readwrite');
+    var req = store.index('biblioid');
+    req.get(biblioid).onsuccess = function(evt) {
+      if (typeof evt.target.result == 'undefined') {
+        displayActionFailure("No matching record found");
+        return;
+      }
+      deletePublication(evt.target.result.id, store);
+    };
+    req.onerror = function (evt) {
+      console.error("deletePublicationFromBib:", evt.target.errorCode);
+    };
+  }
+
+  /**
+   * @param {number} key
+   * @param {IDBObjectStore=} store
+   */
+  function deletePublication(key, store) {
+    console.log("deletePublication:", arguments);
+
+    if (typeof store == 'undefined')
+      store = getObjectStore(DB_STORE_NAME, 'readwrite');
+
+    // As per spec http://www.w3.org/TR/IndexedDB/#object-store-deletion-operation
+    // the result of the Object Store Deletion Operation algorithm is
+    // undefined, so it's not possible to know if some records were actually
+    // deleted by looking at the request result.
+    var req = store.get(key);
+    req.onsuccess = function(evt) {
+      var record = evt.target.result;
+      console.log("record:", record);
+      if (typeof record == 'undefined') {
+        displayActionFailure("No matching record found");
+        return;
+      }
+      // Warning: The exact same key used for creation needs to be passed for
+      // the deletion. If the key was a Number for creation, then it needs to
+      // be a Number for deletion.
+      req = store.delete(key);
+      req.onsuccess = function(evt) {
+        console.log("evt:", evt);
+        console.log("evt.target:", evt.target);
+        console.log("evt.target.result:", evt.target.result);
+        console.log("delete successful");
+        displayActionSuccess("Deletion successful");
+        displayPubList(store);
+      };
+      req.onerror = function (evt) {
+        console.error("deletePublication:", evt.target.errorCode);
+      };
+    };
+    req.onerror = function (evt) {
+      console.error("deletePublication:", evt.target.errorCode);
+      };
+  }
+
+  function displayActionSuccess(msg) {
+    msg = typeof msg != 'undefined' ? "Success: " + msg : "Success";
+    $('#msg').html('<span class="action-success">' + msg + '</span>');
+  }
+  function displayActionFailure(msg) {
+    msg = typeof msg != 'undefined' ? "Failure: " + msg : "Failure";
+    $('#msg').html('<span class="action-failure">' + msg + '</span>');
+  }
+  function resetActionStatus() {
+    console.log("resetActionStatus ...");
+    $('#msg').empty();
+    console.log("resetActionStatus DONE");
+  }
+
+  function addEventListeners() {
+    console.log("addEventListeners");
+
+    $('#register-form-reset').click(function(evt) {
+      resetActionStatus();
+    });
+
+    $('#add-button').click(function(evt) {
+      console.log("add ...");
+      var title = $('#pub-title').val();
+      var biblioid = $('#pub-biblioid').val();
+      if (!title || !biblioid) {
+        displayActionFailure("Required field(s) missing");
+        return;
+      }
+      var year = $('#pub-year').val();
+      if (year != '') {
+        // Better use Number.isInteger if the engine has EcmaScript 6
+        if (isNaN(year))  {
+          displayActionFailure("Invalid year");
+          return;
+        }
+        year = Number(year);
+      } else {
+        year = null;
+      }
+
+      var file_input = $('#pub-file');
+      var selected_file = file_input.get(0).files[0];
+      console.log("selected_file:", selected_file);
+      // Keeping a reference on how to reset the file input in the UI once we
+      // have its value, but instead of doing that we rather use a "reset" type
+      // input in the HTML form.
+      //file_input.val(null);
+      var file_url = $('#pub-file-url').val();
+      if (selected_file) {
+        addPublication(biblioid, title, year, selected_file);
+      } else if (file_url) {
+        addPublicationFromUrl(biblioid, title, year, file_url);
+      } else {
+        addPublication(biblioid, title, year);
+      }
+
+    });
+
+    $('#delete-button').click(function(evt) {
+      console.log("delete ...");
+      var biblioid = $('#pub-biblioid-to-delete').val();
+      var key = $('#key-to-delete').val();
+
+      if (biblioid != '') {
+        deletePublicationFromBib(biblioid);
+      } else if (key != '') {
+        // Better use Number.isInteger if the engine has EcmaScript 6
+        if (key == '' || isNaN(key))  {
+          displayActionFailure("Invalid key");
+          return;
+        }
+        key = Number(key);
+        deletePublication(key);
+      }
+    });
+
+    $('#clear-store-button').click(function(evt) {
+      clearObjectStore();
+    });
+
+    var search_button = $('#search-list-button');
+    search_button.click(function(evt) {
+      displayPubList();
+    });
+
+  }
+
+  openDb();
+  addEventListeners();
+
+})(); // Immediately-Invoked Function Expression (IIFE)
+
+ +

{{ LiveSampleLink('Full_IndexedDB_example', "Test the online live demo") }}

+ +

Ver também

+ +

Uma leitura adicional para você encontrar mais informações.

+ +

Refências

+ + + +

Guias e tutoriais

+ + diff --git a/files/pt-br/web/api/network_information_api/index.html b/files/pt-br/web/api/network_information_api/index.html new file mode 100644 index 0000000000..032fc54169 --- /dev/null +++ b/files/pt-br/web/api/network_information_api/index.html @@ -0,0 +1,56 @@ +--- +title: Network Information API +slug: WebAPI/Network_Information +translation_of: Web/API/Network_Information_API +--- +

{{ SeeCompatTable() }}

+ +

A API de Informações de Rede fornece informação sobre a conexão do sistema, assim como a banda atual do dispositivo do usuário ou qualquer conexão que seja medida. Essa pode também ser usada para selecionar conteúdo de alta ou baixa definição baseado na conexão do usuário. Toda a API consiste na adição da interface domxref("Connection") e uma única propriedade a interface {{domxref("Navigator")}}: {{domxref("Navigator.connection")}}.

+ +

Detectando mudanças de conexão

+ +

Este é um exemplo vê mudança na conexão do usuário. Essa é similar a como uma app pode alertar quando o usuário move de uma conexão de alto para baixo custo por exemplo, a fim de reduzir a demanda da banda para previnir que o usuário seja submetido a cargos substanciais.

+ +
var connection = navigator.connection || navigator.mozConnection || navigator.webkitConnection;
+
+function updateConnectionStatus() {
+  alert("Connection bandwidth: " + connection.bandwidth + " MB/s");
+  if (connection.metered) {
+    alert("The connection is metered!");
+  }
+}
+
+connection.addEventListener("change", updateConnectionStatus);
+updateConnectionStatus();
+
+ +

Especificações

+ + + + + + + + + + + + + + + + +
SpecificationStatusComment
{{ SpecName('Network Information', '', 'Network Information API') }}{{ Spec2('Network Information') }}Initial specification
+ +

Compatibilidade com Navegadores

+ +

{{Page('/en-US/docs/Web/API/window.navigator.connection','Browser compatibility')}}

+ +

Veja também

+ + diff --git "a/files/pt-br/web/api/node/entendendo_o_uso_do_m\303\251todo_appendchild-javascript/index.html" "b/files/pt-br/web/api/node/entendendo_o_uso_do_m\303\251todo_appendchild-javascript/index.html" deleted file mode 100644 index a05abeae88..0000000000 --- "a/files/pt-br/web/api/node/entendendo_o_uso_do_m\303\251todo_appendchild-javascript/index.html" +++ /dev/null @@ -1,55 +0,0 @@ ---- -title: Entendendo o uso do método appendChild em javascript -slug: Web/API/Node/Entendendo_o_uso_do_método_AppendChild-javascript ---- -
{{ApiRef("DOM")}}
- -

Resumo

- -

Adiciona um nó ao final da lista de filhos de um nó pai especificado. Se o nó já existir no documento, ele é removido de seu nó pai atual antes de ser adicionado ao novo pai.

- -

Sintaxe

- -
var filho = elemento.appendChild(filho);
- - - -

Descrição

- -

O método appendChild devolve uma referência ao nó adicionado.

- -

Exemplo

- -
// Cria um novo elemento de parágrafo e adiciona-o ao final do documento
-var p = document.createElement("p");
-document.body.appendChild(p);
- -

Notas

- -

Se filho é uma referência a um nó existente no documento, appendChild vai movê-lo de sua posição atual para a nova posição (i.e, não é necessário remover o nó de seu pai atual antes de adicioná-lo a outro nó).

- -

Isso também significa que um nó não pode estar em dois lugares do documento ao mesmo tempo. Assim, se o nó já tem um pai, ele é primeiro removido para, só então, ser adicionado na nova posição.

- -

Você pode usar o método {{domxref("Node.cloneNode")}} para criar uma cópia do nó antes de adicioná-lo ao novo pai. (Note que cópias feitas com o método cloneNode não serão mantidas sincronizadas automaticamente)

- -

Este método não permite mover nós entre documentos diferentes. Se você quiser adicionar um nó de um documento diferente (por exemplo para mostrar o resultado de uma requisição AJAX), você precisa primeiro usar o método {{domxref("document.importNode")}}.

- -

appendChild() é um dos métodos fundamentais da programação para a web usando o DOM. O método appendChild() insere um novo nó na estrutura do DOM de um documento, e é a segunda parte do processo criar-e-adicionar tão importante na construção de páginas web programaticamente.

- -

Especificação

- - - -

Ver também

- - diff --git a/files/pt-br/web/api/node/innertext/index.html b/files/pt-br/web/api/node/innertext/index.html deleted file mode 100644 index 1ab5e81027..0000000000 --- a/files/pt-br/web/api/node/innertext/index.html +++ /dev/null @@ -1,86 +0,0 @@ ---- -title: Node.innerText -slug: Web/API/Node/innerText -translation_of: Web/API/HTMLElement/innerText ---- -
{{APIRef("DOM")}}
- -

Resumo

- -

Node.innerText é uma propriedade que representa o conteúdo textual "renderizado" de um nó e seus descendentes. Usada como getter, retorna de maneira aproximada o texto que o usuário obteria caso tivesse selecionado o conteúdo e copiado para a área de transferência. Este recurso fora introduzido originalmente pelo Internet Explorer, mas foi oficialmente especificado no padrão HTML apenas em 2016, sendo adotado por todos os principais navegadores a partir de então.

- -

{{domxref("Node.textContent")}} é uma alternativa similar, embora existam diferenças significativas entre as duas.

- -

Especificação

- - - - - - - - - - - - - - -
EspecificaçãoStatusComentário
{{SpecName('HTML WHATWG', 'dom.html#the-innertext-idl-attribute', 'innerText')}}{{Spec2('HTML WHATWG')}}Introduzida, baseado no rascunho da especifição de innerText. Ver whatwg/html#465 e whatwg/compat#5 para histórico.
- -

Compatibilidade de navegadores

- -

{{ CompatibilityTable() }}

- -
- - - - - - - - - - - - - - - - - - - -
RecursoChromeFirefox (Gecko)Internet ExplorerOperaSafari (WebKit)
Suporte básico4{{ CompatGeckoDesktop(45) }}69.6 (provavelmente antes)3
-
- -
- - - - - - - - - - - - - - - - - - - -
RecursoAndroidFirefox Mobile (Gecko)IE MobileOpera MobileSafari Mobile
Suporte básico2.3 (provavelmente antes){{ CompatGeckoMobile(45) }}10 (provavelmente antes)124.1 (provavelmente antes)
-
- -

Ver também

- - diff --git a/files/pt-br/web/api/notificacoes/index.html b/files/pt-br/web/api/notificacoes/index.html deleted file mode 100644 index 9103aac190..0000000000 --- a/files/pt-br/web/api/notificacoes/index.html +++ /dev/null @@ -1,217 +0,0 @@ ---- -title: Notificações -slug: Web/API/notificacoes -tags: - - API - - Interface - - Notificações -translation_of: Web/API/Notification ---- -

{{APIRef("Web Notifications")}}{{AvailableInWorkers}}{{securecontext_header}}

- -

A interface da API de Notificações é usada para configurar e exibir notificações  na área de trabalho do usuário. A aparência e algumas funcionalidades específicas das notificações variam entre as plataformas mas geralmente eles fornecem uma forma assíncrona de prover informações para o usuário.

- - -

Construtor

- -
-
{{domxref("Notification.Notification", "Notification()")}}
-
Cria uma nova instancia do objeto {{domxref('Notification')}}.
-
- -

Propriedades

- -

Propriedades estáticas

- -

Estas propriedades estão disponíveis apenas no próprio objeto  Notification.

- -
-
{{domxref("Notification.permission")}} {{readonlyinline}}
-
-
-
-
- -
-
Uma sequência de caracteres que representa a permissão atual para exibir notificações. Valor possíveis são: "denied" (o usuário se recusa a ter notificações exibidas), "granted" (o usuário aceita ter notificações exibidas) ou "default" (a escolha do usuário é desconhecido e, portanto, o navegador irá agir como se o valor foram negados).
-
-
-
- -

Propriedades da instância

- -

Estas propriedades estão disponíveis apenas em instâncias do objeto Notification.

- -
-
{{domxref("Notification.title")}} {{readonlyinline}}
-
Retorna o título da notificação conforme foi definido no parâmetro opções do construtor.
-
{{domxref("Notification.dir")}} {{readonlyinline}}
-
A direção do texto da notificação, conforme especificado no parâmetro opções do construtor.
-
{{domxref("Notification.lang")}} {{readonlyinline}}
-
-
-
O código de idioma da notificação, conforme especificado no parâmetro opções do construtor.
-
-
-
{{domxref("Notification.body")}} {{readonlyinline}}
-
O corpo(mensagem) da notificação, conforme especificado no parâmetro opções do construtor.
-
{{domxref("Notification.tag")}} {{readonlyinline}}
-
O ID da notificação (se houver), conforme especificado no parâmetro opções do construtor.
-
{{domxref("Notification.icon")}} {{readonlyinline}}
-
A URL da imagem usada como um ícone da notificação, conforme especificado no parâmetro opções do construtor.
-
{{domxref("Notification.data")}} {{readonlyinline}}
-
Retorna um clone estruturado de dados da notificação.
-
{{domxref("Notification.silent")}} {{readonlyinline}}
-
-
-
Especifica se a notificação deve ser silenciosa, ou seja, sons ou vibrações não devem ser emitidos, independentemente das configurações do dispositivo.
-
-
-
- -

Propriedades não suportadas

- -

As propriedades a seguir estão listados na especificação mais up-to-date, mas não são suportadas em quaisquer navegadores ainda. É aconselhável manter a verificação de volta regularmente para ver se o status destes actualiza, e deixe-nos saber se você encontrar qualquer informações desatualizadas.

- -
-
{{domxref("Notification.noscreen")}} {{readonlyinline}}
-
-
-
Especifica se o disparo notificação deve permitir que a tela do dispositivo ou não.
-
-
-
{{domxref("Notification.renotify")}} {{readonlyinline}}
-
-
-
Especifica se o usuário deve ser notificado após uma nova notificação substitui um antigo.
-
-
-
{{domxref("Notification.sound")}} {{readonlyinline}}
-
Especifica um recurso de som para reproduzir durante o disparo da notificação, em vez do som de notificação do sistema padrão.
-
{{domxref("Notification.sticky")}} {{readonlyinline}}
-
Especifica se a notificação deve ser "fixa", ou seja, não facilmente eliminável pelo usuário.
-
{{domxref("Notification.vibrate")}} {{readonlyinline}}
-
Especifica um padrão de vibração para dispositivos com hardware de vibração.
-
- -

Manipuladores de Eventos

- -
-
{{domxref("Notification.onclick")}}
-
O manipulador para o evento {{event("click")}} é acionado cada vez que o usuário clica sobre a notificação.
-
{{domxref("Notification.onerror")}}
-
O manipulador para o evento {{event("error")}} é acionado quando a notificação encontra um erro.
-
- -

Manipuladores Obsoletos

- -

Os seguintes manipuladores de eventos ainda são suportados, conforme listado na seção {{anch("browser compatibility")}}. Estes serão listados abaixo, mas não são listados na especificação atual. Saiba que eles são obsoletos, e pode parar de funcionar em versões futuras do navegador.

- -
-
{{domxref("Notification.onclose")}}
-
Manipulador do evento {{event("close")}} é acionado quando a notificação é fechada.
-
{{domxref("Notification.onshow")}}
-
Manipulador do evento {{event("show")}}. é acionado quando a notificação é exibida.
-
- -

Métodos

- -

Métodos Estáticos

- -

Estes métodos estão disponíveis apenas no próprio objeto Notification.

- -
-
{{domxref("Notification.requestPermission()")}}
-
-
-
Solicita a permissão do usuário para exibir notificações.
-
-
-
- -

Métodos de instância

- -

Estas propriedades estão disponíveis apenas no objeto Notification ou através do seu prototype. O objeto de notificação também herda a interface {{domxref("EventTarget")}}.

- -
-
{{domxref("Notification.close()")}}
-
Programaticamente fecha uma notificação.
-
- -

Exemplos

- -

Leve em conta este HTML básico:

- -
<button onclick="notifyMe()">Notifique me!</button>
- -

É possível enviar uma notificação da seguinte forma - aqui nós apresentamos um conjunto bastante detalhado e completo de código que você pode usar se você quiser verificar primeiro se as notificações são suportados, em seguida, verifique se a permissão foi concedida para a origem atual para enviar notificações, em seguida, solicitar permissão, se necessário, antes, em seguida, enviar uma notificação.

- -
function notifyMe() {
-  // Verifica se o browser suporta notificações
-  if (!("Notification" in window)) {
-    alert("Este browser não suporta notificações de Desktop");
-  }
-
-  // Let's check whether notification permissions have already been granted
-  else if (Notification.permission === "granted") {
-    // If it's okay let's create a notification
-    var notification = new Notification("Hi there!");
-  }
-
-  // Otherwise, we need to ask the user for permission
-  else if (Notification.permission !== 'denied') {
-    Notification.requestPermission(function (permission) {
-      // If the user accepts, let's create a notification
-      if (permission === "granted") {
-        var notification = new Notification("Hi there!");
-      }
-    });
-  }
-
-  // At last, if the user has denied notifications, and you
-  // want to be respectful there is no need to bother them any more.
-}
- -

{{EmbedLiveSample('Exemplo', '100%', 30)}}

- -

Em muitos casos, você não precisa estar presente detalhado. Por exemplo, na nosso Emogotchi demo (veja o código fonte), basta simlesmente executar {{domxref("Notification.requestPermission")}} independentemente de se certificar de que pode obter permissão para enviar notificações:

- -
Notification.requestPermission();
- -

Em seguida executar um simples spawnNotification() quando queremos disparar uma notificação — este é passado argumentos para especificar o, ícone corpo e título que queremos, então ele cria as opções necessárias objeto e dispara a notificação usando o construtor {{domxref("Notification.Notification","Notification()")}}.

- -
function spawnNotification(corpo,icone,titulo) {
-  var opcoes = {
-      body: corpo,
-      icon: icone
-  }
-  var n = new Notification(titulo,opcoes);
-}
- -

Especificações

- - - - - - - - - - - - - - -
EspecificaçãoEstadoComentário
{{SpecName('Web Notifications')}}{{Spec2('Web Notifications')}}Living standard
- -

Compatibilidade dos Navegadores

- - - -

{{Compat("api.Notification")}}

-

Veja também

- - diff --git a/files/pt-br/web/api/notification/index.html b/files/pt-br/web/api/notification/index.html new file mode 100644 index 0000000000..9103aac190 --- /dev/null +++ b/files/pt-br/web/api/notification/index.html @@ -0,0 +1,217 @@ +--- +title: Notificações +slug: Web/API/notificacoes +tags: + - API + - Interface + - Notificações +translation_of: Web/API/Notification +--- +

{{APIRef("Web Notifications")}}{{AvailableInWorkers}}{{securecontext_header}}

+ +

A interface da API de Notificações é usada para configurar e exibir notificações  na área de trabalho do usuário. A aparência e algumas funcionalidades específicas das notificações variam entre as plataformas mas geralmente eles fornecem uma forma assíncrona de prover informações para o usuário.

+ + +

Construtor

+ +
+
{{domxref("Notification.Notification", "Notification()")}}
+
Cria uma nova instancia do objeto {{domxref('Notification')}}.
+
+ +

Propriedades

+ +

Propriedades estáticas

+ +

Estas propriedades estão disponíveis apenas no próprio objeto  Notification.

+ +
+
{{domxref("Notification.permission")}} {{readonlyinline}}
+
+
+
+
+ +
+
Uma sequência de caracteres que representa a permissão atual para exibir notificações. Valor possíveis são: "denied" (o usuário se recusa a ter notificações exibidas), "granted" (o usuário aceita ter notificações exibidas) ou "default" (a escolha do usuário é desconhecido e, portanto, o navegador irá agir como se o valor foram negados).
+
+
+
+ +

Propriedades da instância

+ +

Estas propriedades estão disponíveis apenas em instâncias do objeto Notification.

+ +
+
{{domxref("Notification.title")}} {{readonlyinline}}
+
Retorna o título da notificação conforme foi definido no parâmetro opções do construtor.
+
{{domxref("Notification.dir")}} {{readonlyinline}}
+
A direção do texto da notificação, conforme especificado no parâmetro opções do construtor.
+
{{domxref("Notification.lang")}} {{readonlyinline}}
+
+
+
O código de idioma da notificação, conforme especificado no parâmetro opções do construtor.
+
+
+
{{domxref("Notification.body")}} {{readonlyinline}}
+
O corpo(mensagem) da notificação, conforme especificado no parâmetro opções do construtor.
+
{{domxref("Notification.tag")}} {{readonlyinline}}
+
O ID da notificação (se houver), conforme especificado no parâmetro opções do construtor.
+
{{domxref("Notification.icon")}} {{readonlyinline}}
+
A URL da imagem usada como um ícone da notificação, conforme especificado no parâmetro opções do construtor.
+
{{domxref("Notification.data")}} {{readonlyinline}}
+
Retorna um clone estruturado de dados da notificação.
+
{{domxref("Notification.silent")}} {{readonlyinline}}
+
+
+
Especifica se a notificação deve ser silenciosa, ou seja, sons ou vibrações não devem ser emitidos, independentemente das configurações do dispositivo.
+
+
+
+ +

Propriedades não suportadas

+ +

As propriedades a seguir estão listados na especificação mais up-to-date, mas não são suportadas em quaisquer navegadores ainda. É aconselhável manter a verificação de volta regularmente para ver se o status destes actualiza, e deixe-nos saber se você encontrar qualquer informações desatualizadas.

+ +
+
{{domxref("Notification.noscreen")}} {{readonlyinline}}
+
+
+
Especifica se o disparo notificação deve permitir que a tela do dispositivo ou não.
+
+
+
{{domxref("Notification.renotify")}} {{readonlyinline}}
+
+
+
Especifica se o usuário deve ser notificado após uma nova notificação substitui um antigo.
+
+
+
{{domxref("Notification.sound")}} {{readonlyinline}}
+
Especifica um recurso de som para reproduzir durante o disparo da notificação, em vez do som de notificação do sistema padrão.
+
{{domxref("Notification.sticky")}} {{readonlyinline}}
+
Especifica se a notificação deve ser "fixa", ou seja, não facilmente eliminável pelo usuário.
+
{{domxref("Notification.vibrate")}} {{readonlyinline}}
+
Especifica um padrão de vibração para dispositivos com hardware de vibração.
+
+ +

Manipuladores de Eventos

+ +
+
{{domxref("Notification.onclick")}}
+
O manipulador para o evento {{event("click")}} é acionado cada vez que o usuário clica sobre a notificação.
+
{{domxref("Notification.onerror")}}
+
O manipulador para o evento {{event("error")}} é acionado quando a notificação encontra um erro.
+
+ +

Manipuladores Obsoletos

+ +

Os seguintes manipuladores de eventos ainda são suportados, conforme listado na seção {{anch("browser compatibility")}}. Estes serão listados abaixo, mas não são listados na especificação atual. Saiba que eles são obsoletos, e pode parar de funcionar em versões futuras do navegador.

+ +
+
{{domxref("Notification.onclose")}}
+
Manipulador do evento {{event("close")}} é acionado quando a notificação é fechada.
+
{{domxref("Notification.onshow")}}
+
Manipulador do evento {{event("show")}}. é acionado quando a notificação é exibida.
+
+ +

Métodos

+ +

Métodos Estáticos

+ +

Estes métodos estão disponíveis apenas no próprio objeto Notification.

+ +
+
{{domxref("Notification.requestPermission()")}}
+
+
+
Solicita a permissão do usuário para exibir notificações.
+
+
+
+ +

Métodos de instância

+ +

Estas propriedades estão disponíveis apenas no objeto Notification ou através do seu prototype. O objeto de notificação também herda a interface {{domxref("EventTarget")}}.

+ +
+
{{domxref("Notification.close()")}}
+
Programaticamente fecha uma notificação.
+
+ +

Exemplos

+ +

Leve em conta este HTML básico:

+ +
<button onclick="notifyMe()">Notifique me!</button>
+ +

É possível enviar uma notificação da seguinte forma - aqui nós apresentamos um conjunto bastante detalhado e completo de código que você pode usar se você quiser verificar primeiro se as notificações são suportados, em seguida, verifique se a permissão foi concedida para a origem atual para enviar notificações, em seguida, solicitar permissão, se necessário, antes, em seguida, enviar uma notificação.

+ +
function notifyMe() {
+  // Verifica se o browser suporta notificações
+  if (!("Notification" in window)) {
+    alert("Este browser não suporta notificações de Desktop");
+  }
+
+  // Let's check whether notification permissions have already been granted
+  else if (Notification.permission === "granted") {
+    // If it's okay let's create a notification
+    var notification = new Notification("Hi there!");
+  }
+
+  // Otherwise, we need to ask the user for permission
+  else if (Notification.permission !== 'denied') {
+    Notification.requestPermission(function (permission) {
+      // If the user accepts, let's create a notification
+      if (permission === "granted") {
+        var notification = new Notification("Hi there!");
+      }
+    });
+  }
+
+  // At last, if the user has denied notifications, and you
+  // want to be respectful there is no need to bother them any more.
+}
+ +

{{EmbedLiveSample('Exemplo', '100%', 30)}}

+ +

Em muitos casos, você não precisa estar presente detalhado. Por exemplo, na nosso Emogotchi demo (veja o código fonte), basta simlesmente executar {{domxref("Notification.requestPermission")}} independentemente de se certificar de que pode obter permissão para enviar notificações:

+ +
Notification.requestPermission();
+ +

Em seguida executar um simples spawnNotification() quando queremos disparar uma notificação — este é passado argumentos para especificar o, ícone corpo e título que queremos, então ele cria as opções necessárias objeto e dispara a notificação usando o construtor {{domxref("Notification.Notification","Notification()")}}.

+ +
function spawnNotification(corpo,icone,titulo) {
+  var opcoes = {
+      body: corpo,
+      icon: icone
+  }
+  var n = new Notification(titulo,opcoes);
+}
+ +

Especificações

+ + + + + + + + + + + + + + +
EspecificaçãoEstadoComentário
{{SpecName('Web Notifications')}}{{Spec2('Web Notifications')}}Living standard
+ +

Compatibilidade dos Navegadores

+ + + +

{{Compat("api.Notification")}}

+

Veja também

+ + diff --git a/files/pt-br/web/api/performance_api/index.html b/files/pt-br/web/api/performance_api/index.html new file mode 100644 index 0000000000..1b6997e293 --- /dev/null +++ b/files/pt-br/web/api/performance_api/index.html @@ -0,0 +1,138 @@ +--- +title: API de Desempenho +slug: Web/API/API_de_Desempenho +translation_of: Web/API/Performance_API +--- +
{{DefaultAPISidebar("High Resolution Time")}}
+ +

The High Resolution Time standard defines a {{domxref("Performance")}} interface that supports client-side latency measurements within applications. The {{domxref("Performance")}} interfaces are considered high resolution because they are accurate to a thousandth of a millisecond (subject to hardware or software constraints). The interfaces support a number of use cases including calculating frame-rates (potentially important in animations) and benchmarking (such as the time to load a resource).

+ +

Since a platform's system clock is subject to various skews (such as NTP adjustments), the interfaces support a monotonic clock i.e. a clock that is always increasing. As such, the Performance API defines a {{domxref("DOMHighResTimeStamp")}} type rather than using the {{jsxref("Date.now","Date.now()")}} interface.

+ +

DOMHighResTimeStamp

+ +

The {{domxref("DOMHighResTimeStamp")}} type, as its name implies, represents a high resolution point in time. This type is a double and is used by the performance interfaces. The value could be a discrete point in time or the difference in time between two discrete points in time.

+ +

The unit of DOMHighResTimeStamp is milliseconds and should be accurate to 5 µs (microseconds). However, If the browser is unable to provide a time value accurate to 5 microseconds (because, for example, due to hardware or software constraints), the browser can represent the value as a time in milliseconds accurate to a millisecond.

+ +

Methods

+ +

The {{domxref("Performance")}} interface has two methods. The {{domxref("Performance.now","now()")}} method returns a {{domxref("DOMHighResTimeStamp")}} whose value that depends on the {{domxref("PerformanceTiming.navigationStart","navigation start")}} and scope. If the scope is a window, the value is the time the browser context was created and if the scope is a {{domxref("Worker","worker")}}, the value is the time the worker was created.

+ +

The {{domxref("Performance.toJSON","toJSON()")}} method returns a serialization of the {{domxref("Performance")}} object, for those attributes that can be serialized.

+ +

Properties

+ +

The {{domxref("Performance")}} interface has two properties. The {{domxref("Performance.timing","timing")}} property returns a {{domxref("PerformanceTiming")}} object containing latency-related performance information such as the start of navigation time, start and end times for redirects, start and end times for responses, etc.

+ +

The {{domxref("Performance.navigation","navigation")}} property returns a {{domxref("PerformanceNavigation")}} object representing the type of navigation that occurs in the given browsing context, such as the page was navigated to from history, the page was navigated to by following a link, etc.

+ +

Interfaces

+ +
+
{{domxref('Performance')}}
+
Provides methods and properties containing timing-related performance information for the given page.
+
{{domxref('PerformanceEntry')}}
+
Provides methods and properties the encapsulate a single performance metric that is part of the performance timeline.
+
{{domxref('PerformanceFrameTiming')}}
+
Provides methods and properties containing frame timing data about the browser's event loop.
+
{{domxref('PerformanceMark')}}
+
An abstract interface for performance entries with an entry type of "mark". Entries of this type are created by calling performance.mark() to add a named DOMHighResTimeStamp (the mark) to the browser's performance timeline.
+
{{domxref('PerformanceMeasure')}}
+
An abstract interface for performance entries with an entry type of "measure". Entries of this type are created by calling performance.measure() to add a namedDOMHighResTimeStamp (the measure) between two marks to the browser's performance timeline.
+
{{domxref('PerformanceNavigationTiming')}}
+
Provides methods and properties to store and retrieve high resolution timestamps or metrics regarding the browser's document navigation events.
+
{{domxref('PerformanceObserver')}}
+
Provides methods and properties used to observe performance measurement events and be notified of new performance entries as they are recorded in the browser's performance timeline.
+
{{domxref('PerformanceResourceTiming')}}
+
Provides methods and properties for retrieving and analyzing detailed network timing data regarding the loading of an application's resources.
+
+ +

Specifications

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SpecificationStatusComment
{{SpecName('Highres Time')}}{{Spec2('Highres Time')}}Initial definition.
{{SpecName('Highres Time Level 2')}}{{Spec2('Highres Time Level 2')}}Adds performance attribute on Window and WorkerGlobalScope.
{{SpecName('Highres Time Level 3')}}{{Spec2('Highres Time Level 3')}}Add timeOrigin property to Performance interface.
{{SpecName('Frame Timing')}}{{Spec2('Frame Timing')}}Adds PerformanceFrameTiming interface.
{{SpecName('Navigation Timing')}}{{Spec2('Navigation Timing')}}Adds the PerformanceTiming and PerformanceNavigation interfaces. Adds timing and navigation properties to the Performance interface.
{{SpecName('Navigation Timing Level 2')}}{{Spec2('Navigation Timing Level 2')}}Adds the PerformanceNavigationTiming interface. Obsolete's the the PerformanceTiming interface, the PerformanceNavigation interface, as well as the timing and navigation properties to the Performance interface.
{{SpecName('Performance Timeline')}}{{Spec2('Performance Timeline')}}Adds the PerformanceEntry interface, the PerformanceEntryList type, as well as the getEntries(), getEntriesByType(), and getEntriesByName() methods on the Performance interface.
{{SpecName('Performance Timeline Level 2')}}{{Spec2('Performance Timeline Level 2')}}Adds serializer to the PerformanceEntry interface as well as adding the PerformanceObserver interface and callback
{{SpecName('Resource Timing')}}{{Spec2('Resource Timing')}}Adds the PerformanceResourceTiming interface. Adds the clearResourceTimings() method, the setResourceTimingBufferSize() method, and the onresourcetimingbufferfull event handler to the Performance interface. Also adds the Timing-Allow-Origin response header.
{{SpecName('Resource Timing 2')}}{{Spec2('Resource Timing 2')}}Adds the nextHopProtocol, workerStart, transferSize, encodedBodySize, and decodedBodySize properties to the PerformanceResourceTiming interface.
{{SpecName('Resource Timing 3')}}{{Spec2('Resource Timing 3')}}
{{SpecName('User Timing')}}{{Spec2('User Timing')}}Adds mark(), clearMarks(), measure() and clearMeasures() methods to the Performance interface. Adds the PerformanceMark and PeformanceMeasure interfaces.
{{SpecName('User Timing Level 2')}}{{Spec2('User Timing Level 2')}}
+ +

Implementation status

+ +

As shown in the {{domxref("Performance")}} interface's Browser Compatibility table, most of these interfaces are broadly implemented by desktop browsers.

+ +

To test your browser's support for the {{domxref("Performance")}} interface, run the perf-api-support application.

+ +

See Also

+ + diff --git a/files/pt-br/web/api/push_api/best_practices/index.html b/files/pt-br/web/api/push_api/best_practices/index.html new file mode 100644 index 0000000000..9b0fafd2b7 --- /dev/null +++ b/files/pt-br/web/api/push_api/best_practices/index.html @@ -0,0 +1,73 @@ +--- +title: Melhores práticas +slug: Web/API/API_Push/Best_Practices +tags: + - Apps + - Iniciante + - Melhores Práticas + - Notificações + - Push API + - Usabilidade +translation_of: Web/API/Push_API/Best_Practices +--- +

{{draft}}

+ +

Este artigo proporciona um compilado das melhores práticas a serem usadas enquanto estiver desenvolvendo websites e aplicações que usem Notificações push para engajamento de usuários.

+ +
+

“Se feito de uma maneira correta, as notificações ajudam os usuarios, se não, so irritam.” — Conversa entre dois desenvolvedores a respeito da etica das notificações push.

+
+ +

Visão Geral do web push notifications

+ +

Notificações Web Push (criadas usando uma combinação das APIs de Notificações, Push e Service Worker) são parte de um movimento crescente em que desenvolvedores e comerciantes estão usando para conseguir atenção para seus sites. Uma procura rápida pelo termo "web push notifications", irá resultar em vários artigos, em que especialistas em marketing que acreditam que deve-se usar a API de Push para recapturar a atenção de pessoas que saíram de seu site para que possam terminar o que estavam fazendo, por exemplo, uma compra, ou então enviar as últimas notícias e até recomendação de produtos

+ +

O Lado obscuro

+ +

Essa novidade oferece uma oportunidade nova e inexplorada para sites empresariais chegarem aos seus consumidores finais. Seu usuário trocou de aba para responder um email? Consiga-os de volta com uma oferta que expira em um tempo limitado ou oferecendo frete grátis, o qual ele não vai poder ignorar

+ +

Mas sério, qual o melhor uso das notificações push? Ou é apenas uma nova interação dos bons e velhos pop-ups?

+ +
+

O envio de notificações push não corre o risco de acabar na pasta de spam. Nem pode ser bloqueado por bloqueadores de anúncios. Ele aparece na sua área de trabalho, mesmo quando o site está fechado. No celular, ele aparece na barra de notificações, assim como as notificações por push do aplicativo, mesmo quando o navegador não está em execução.” — um site de marketing anonimo

+
+ +

Bons usos das notificações

+ +

Mas há também um lado bom no que se diz respeito as notificações por push. Digamos que você e sua equipe usem normalmente um programa de bate-papo para se comunicar, mas hoje você está feliz e saltitante trabalhando e surge um problema. Digamos que seu gerente tenha encontrado um problema nas aprovações e queira receber seu feedback sobre algo antes que ela prossiga.

+ +

Neste documento, falaremos sobre o uso correto das notificações por push da web. Às vezes, eles podem eliminar a frustração e o aborrecimento e, às vezes, causá-los. Cabe a você, como desenvolvedor, fazer recomendações (e decisões) sábias sobre o uso de notificações por push.

+ +

O que se espera alcançar com as notificações push?

+ +

Como tudo, com grande poder vem uma grande responsabilidade. Toda notificação push devem ser úteis e sensíveis ao tempo, o usuário sempre deve fornecer a permissão antes de recebe-la primeiro e deve-se oferecer uma maneira fácil de optar por não receber mais no futuro.

+ +

Temos que responder algumas perguntas basicas para verificar se as notificações são necessarias:

+ + + +

Além da questão de saber se uma notificação por push é necessária, existem muitas variedades de notificações por push, variando de casual e efêmera a persistente e exigente.

+ +

Aconselhamos que você use as notificações que exigem uma interação de forma conciente e com moderação, pois estas podem irritar seu usuario e afasta-lo. Suas notificações devem ser acolhedoras, não hostis.

+ +

Gerando confiança

+ +

Alguns estudos mostraram que até 60% das notificações por push não chegam ao usuário final. Permitir que seu usuario receba notificações por push em tempo real exige confiança, por parte do aplicativo. Você pode criar confiança ao ter um site bem projetado que forneça um bom conteúdo e que mostre respeito pelo usuário alem de um valor claro para que o usuario aceite as notificações push.

+ +

Mitigações dos navegadores

+ +

Por causa dos abusos da utilização das notificações por push no passado, os desenvolvedores de navegadores começaram a implementar estratégias para ajudar a mitigar esse problema. Por exemplo, o Safari 12.1 agora exige - e outros navegadores já o fazem ou estão planejando[1] fazer—que o usuário interaja com a página de alguma forma antes que ela possa solicitar permissão para executar notificações por push, assim como já acontece com os popups. Isso pelo menos impede que o usuário receba espontaneamente essa pergunta em páginas da Web que apenas olharam de uma só vez, raramente ou nunca mais.

+ +

[1] No caso do Firefox, veja {{bug(1524619)}}, podemos observar que Firefox 68 implementa isso, desabilitado por padrão, usando a preferência dom.webnotifications.requireuserinteraction.

+ +

Veja também

+ + diff --git a/files/pt-br/web/api/push_api/index.html b/files/pt-br/web/api/push_api/index.html new file mode 100644 index 0000000000..563b711cd8 --- /dev/null +++ b/files/pt-br/web/api/push_api/index.html @@ -0,0 +1,172 @@ +--- +title: API Push +slug: Web/API/API_Push +tags: + - API + - Experimental + - Notificações + - Push + - Referencia + - Service Workers +translation_of: Web/API/Push_API +--- +
{{DefaultAPISidebar("Push API")}}{{SeeCompatTable}}
+ +

A API Push torna possível que aplicações web recebam mensagens enviadas a elas de um servidor, indepententemente de aplicação estar ou não em primeiro plano, ou até mesmo carregada, em um agente de usuário. Isso permite que desenvolvedores entreguem notificações e atualizações assíncronas a usuários que optarem por elas, resultando num melhor engajamento com conteúdo novo oportuno.

+ +
+

Nota: Esta documentação cobre a especificação W3C da API Push; se você procura pela documentação do sistema de notificação proprietária do mecanismo push, veja Simple Push.

+
+ +

Conceitos e uso de Push

+ +

Para uma aplicação receber mensagens push, ela precisa ter um service worker ativo. Quando o service worker está ativo, ele pode se inscrever para utilizar notificações push {{domxref("PushManager.subscribe()")}}.

+ +

O resultado de {{domxref("PushSubscription")}} inclui toda informação que a aplicação precisa para receber uma mensagem push: um endpoint e a chave encriptada necessária para o envio de dados.

+ +

O service worker será iniciado conforme o necessário para lidar com as mensagens recebidas, que são entregues ao manipulador de evento {{domxref("ServiceWorkerGlobalScope.onpush")}} . Isto permite que a aplicação reaja a cada mensagem recebida, por exemplo para exibir a notificação ao usuário (usando {{domxref("ServiceWorkerRegistration.showNotification()")}}.)

+ +

Cada assinatura é única para um service worker.  O endpoint para a assinatura é uma capability URL única: o conhecimento do endpoint é tudo que é necessário para enviar uma mensagem para sua aplicação. A URL do endpoint precisa ser mantida em segredo, ou outras aplicações estranhas poderão enviar mensagens push para a sua aplicação.

+ +

A ativação de um service worker para entregar mensagens push pode resultar em um aumento de uso de recursos, particularmente de bateria. Diferentes navegadores tem diferentes formas para lidar com isso — atualmente não existe uma forma padrão. Firefox permite um número limitado (cota) de mensagens push para serem enviadas para uma aplicação, embora as mensagens Push que gerem notificações são isentas deste limite.  O limite é atualizado a cada site visitado. Numa comparação, Chrome não aplica nenhum limite, mas requer que cada mensagem push exiba uma notificação.

+ +
+

Nota: A partir do Gecko 44, a cota permitida de mensagens push por aplicação não é incrementada quando uma nova notificação é disparada quando outra está visível, por um período de três segundos. Isso lida com casos em que várias notificações são recebidas ao mesmo tempo, mas nem todas estão visíveis.

+
+ +
+

Nota: Chrome atualmente requer que você crie um projeto no Google Cloud Messaging para enviar mensagens push e use um número do projeto e chave da API para o envio de notificações push. Isto também requer um app manifest com alguns parâmetros especiais para usar o serviço. Essa restrição deverá ser removida no futuro.

+
+ +

Interfaces

+ +
+
{{domxref("PushEvent")}}
+
Representa uma ação push enviada para o global scope de um {{domxref("ServiceWorker")}}. Ele contém informações enviadas de uma aplicação para um {{domxref("PushSubscription")}}.
+
{{domxref("PushManager")}}
+
Fornece uma forma de receber notificações de servidor third-party bem como solicitar URL para notificações push. Essa interface substitui a funcionalidade oferecida que está obsoleta {{domxref("PushRegistrationManager")}} interface.
+
{{domxref("PushMessageData")}}
+
Fornece acesso aos dados push enviados por um servidor, e inclui métodos para manipular os dados recebidos.
+
{{domxref("PushSubscription")}}
+
Fornece a URL de assinatura do endpoint e permite o cancelamento da assinatura de um serviço push.
+
+ +

Service worker additions

+ +

As seguintes informações adicionais para a Service Worker API foram especificadas na Push API spec, para fornecer um ponto de entrada para usar mensagens Push, e para monitorar e responder os eventos de envio e assinatura.

+ +
+
{{domxref("ServiceWorkerRegistration.pushManager")}} {{readonlyinline}}
+
Retorna uma referência para a interface {{domxref("PushManager")}} para administrar assinaturas push incluindo subscrever, obter uma assinatura ativa e acessar o status de permissão de envio. Este é o ponto de entrada para usar mensagens Push.
+
{{domxref("ServiceWorkerGlobalScope.onpush")}}
+
Um manipulador de eventos disparado sempre que um evento  {{Event("push")}} ocorre; isto é, sempre que uma mensagem do servidor de envio for recebida.
+
{{domxref("ServiceWorkerGlobalScope.onpushsubscriptionchange")}}
+
Um manipulador de eventos disparado sempre que um evento  {{Event("pushsubscriptionchange")}} ocorre; por exemplo, quando uma assinatura push está inválida, ou está prestes a ser invalidada (ex. quando um serviço push service define um tempo de expiração.)
+
+ +

Especificações

+ + + + + + + + + + + + + + +
EspecificaçãoStatusComentário
{{SpecName("Push API")}}{{Spec2("Push API")}}Definição Inicial
+ +

Compatibilidade em Browsers

+ +
{{CompatibilityTable}}
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
FuncionalidadeChromeFirefox (Gecko)Internet ExplorerOperaSafari (WebKit)
Suporte básico{{CompatChrome(42.0)}}{{CompatGeckoDesktop(44.0)}}[1]{{CompatNo}}[2]{{CompatUnknown}}{{CompatUnknown}}
{{domxref("PushEvent.data")}},
+ {{domxref("PushMessageData")}}
{{CompatNo}}{{CompatGeckoDesktop(44.0)}}{{CompatNo}}{{CompatNo}}{{CompatNo}}
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FuncionalidadeAndroidAndroid WebviewFirefox Mobile (Gecko)Firefox OSIE MobileOpera MobileSafari MobileChrome for Android
Suporte básico{{CompatNo}}{{CompatNo}}{{CompatNo}}{{CompatNo}}{{CompatUnknown}}[2]{{CompatUnknown}}{{CompatUnknown}}{{CompatChrome(42.0)}}
{{domxref("PushEvent.data")}},
+ {{domxref("PushMessageData")}}
{{CompatNo}}{{CompatNo}}{{CompatNo}}{{CompatNo}}{{CompatNo}}{{CompatNo}}{{CompatNo}}{{CompatNo}}
+
+ +

[1] Atualmente disponível apenas nas versões desktop do Firefox; ainda, mensagens push são encaminhadas apenas quando o Firefox está em execução.

+ +

[2] Ainda não implementado. Veja Microsoft Edge status information.

+ +

Veja também

+ + diff --git a/files/pt-br/web/api/randomsource/getrandomvalues/index.html b/files/pt-br/web/api/randomsource/getrandomvalues/index.html deleted file mode 100644 index 7e54e933ed..0000000000 --- a/files/pt-br/web/api/randomsource/getrandomvalues/index.html +++ /dev/null @@ -1,116 +0,0 @@ ---- -title: RandomSource.getRandomValues() -slug: Web/API/RandomSource/getRandomValues -translation_of: Web/API/Crypto/getRandomValues ---- -

{{APIRef("Web Crypto API")}}

- -

O método RandomSource.getRandomValues() permite que você obtenha valores criptográficos randômicos. O array passado como parametro é preenchido com números randômicos (randômicos no sentido criptográfico).

- -

Para garantir performance suficiente, as implementações não estão usando um gerador de número randômico de verdade, mas estão usando um gerador de número pseudo-randômico alimentado com um valor com {{Glossary("entropia")}} suficiente. Os PRNG (pseudo-random number generator - gerador de número pseudo-randômico) usados diferem de uma implementação para a outra, mas são adequadas para usos criptográficos. As implementações precisam ter um valor de alimentação com entropia suficiente, como uma fonte de entropia a nível de sistema.

- -

Sintaxe

- -
cryptoObj.getRandomValues(typedArray);
- -

Parâmetros

- -
-
typedArray
-
É uma {{jsxref("TypedArray")}} de números inteiros, que pode ser {{jsxref("Int8Array")}}, {{jsxref("Uint8Array")}}, {{jsxref("Uint16Array")}}, {{jsxref("Int32Array")}}, ou {{jsxref("Uint32Array")}}. Todos os elementos no array serão sobrescristos com números randômicos.
-
- -

Exceções

- - - -

Exemplo

- -
/* assumindo que window.crypto.getRandomValues está disponível */
-
-var array = new Uint32Array(10);
-window.crypto.getRandomValues(array);
-
-console.log("Seus números da sorte são:");
-for (var i = 0; i < array.length; i++) {
-    console.log(array[i]);
-}
-
- -

Especificação

- - - - - - - - - - - - - - -
EspecificaçãoEstadoComentário
{{SpecName('Web Crypto API', '#RandomSource-method-getRandomValues')}}{{Spec2('Web Crypto API')}}Definição inicial
- - - -

{{ CompatibilityTable() }}

- -
- - - - - - - - - - - - - - - - - - - -
FeatureChromeFirefox (Gecko)Internet ExplorerOperaSafari
Basic support11.0 {{ webkitbug("22049") }}21.011.015.03.1
-
- -
- - - - - - - - - - - - - - - - - - - - - -
FeatureAndroidChrome for AndroidFirefox Mobile (Gecko)IE MobileOpera MobileSafari Mobile
Basic support{{ CompatNo() }}23.021.011.0{{ CompatNo() }}6
-
- -

Veja também

- - diff --git a/files/pt-br/web/api/randomsource/index.html b/files/pt-br/web/api/randomsource/index.html deleted file mode 100644 index e0dbd0a970..0000000000 --- a/files/pt-br/web/api/randomsource/index.html +++ /dev/null @@ -1,109 +0,0 @@ ---- -title: RandomSource -slug: Web/API/RandomSource -tags: - - API - - Interface - - RandomSource - - Referencia - - Web Crypto API -translation_of: Web/API/Crypto/getRandomValues -translation_of_original: Web/API/RandomSource ---- -

{{APIRef("Web Crypto API")}}

- -

RandomSource representa uma fonte criptografada segura de números aleatórios. É disponível via objeto {{domxref("Crypto")}} do objeto global: {{domxref("Window.crypto")}} em páginas Web, {{domxref("WorkerGlobalScope.crypto")}} em trabalhadores.

- -

RandomSource não é uma interface e nenhum objeto deste tipo pode ser criado.

- -

Propriedades

- -

RandomSource não define ou herda nenhuma propriedade.

- -
-
- -

Métodos

- -
-
{{ domxref("RandomSource.getRandomValues()") }}
-
Completa o {{ domxref("ArrayBufferView") }} com valores aleatoriamente criptografados.
-
- -

Especificação

- - - - - - - - - - - - - - -
EspecificaçãoStatusComentário
{{SpecName('Web Crypto API', '#dfn-RandomSource')}}{{Spec2('Web Crypto API')}}Definição inicial.
- -

Compatibilidade de Browser

- -

{{ CompatibilityTable() }}

- -
- - - - - - - - - - - - - - - - - - - -
CaracterísticaChromeFirefox (Gecko)Internet ExplorerOperaSafari
Suporte básico11.0 {{ webkitbug("22049") }}{{CompatGeckoDesktop(21)}} [1]11.015.03.1
-
- -
- - - - - - - - - - - - - - - - - - - - - -
CaracterísticaAndroidChrome for AndroidFirefox Mobile (Gecko)IE MobileOpera MobileSafari Mobile
Suporte básico{{ CompatNo() }}23{{CompatGeckoMobile(21)}}{{ CompatNo() }}{{ CompatNo() }}6
-
- -

[1] Apesar da RandomSource estar disponível apenas a partir da versão Firefox 26, ela já estava implementada na versão Firefox 21.

- -

Veja também

- - diff --git a/files/pt-br/web/api/selection/index.html b/files/pt-br/web/api/selection/index.html new file mode 100644 index 0000000000..9cac677942 --- /dev/null +++ b/files/pt-br/web/api/selection/index.html @@ -0,0 +1,206 @@ +--- +title: Seleção +slug: Web/API/Seleção +tags: + - API + - Experimental + - Interface + - Referencia + - Seleção +translation_of: Web/API/Selection +--- +
{{ ApiRef("DOM") }}{{SeeCompatTable}}
+ +

Um objeto Selection representa um intervalo do texto selecionado pelo usuário ou a posição atual do cursor. Para obter o objeto Selection para inspecionar ou modificar, use {{DOMxRef("Window.getSelection()")}}.

+ +

O usuário pode fazer a seleção da esquerda para a direita (na orientação do documento) ou da direita para a esquerta (orientação inversa do documento). O atributo anchor (âncora) é onde o usuário iniciou a seleção e o atributo focus (foco) é onde o usuário terminou a seleção. Se você fizer a seleção utilizando um mouse no desktop, o anchor é definido onde você pressionou o botão do mouse e o focus é definido onde você soltou o botão do mouse. Anchor e focus não devem ser confundidos com a posição inicial e final da seleção, pois o anchor pode ser definido antes do focus ou vice versa, dependendo da direção em que você fez sua seleção.

+ +

Propriedades

+ +
+
{{DOMxRef("Selection.anchorNode")}}{{ReadOnlyInline}}
+
Retorna o {{DOMxRef("Node")}} onde a seleção começou.
+
{{DOMxRef("Selection.anchorOffset")}}{{ReadOnlyInline}}
+
Retorna um número representando o deslocamento do anchor dentro do elemento Se o elemento for do tipo text node, o número retornado será o número de caracteres no elemento que precedem o anchor (clique inicial da seleção). Se o elemento for do tipo element (qualquer tag html que não seja text node), o número retornado será o número de nós filhos do elemento que precedem o anchor.
+
{{DOMxRef("Selection.focusNode")}}{{ReadOnlyInline}}
+
Retorna o {{DOMxRef("Node")}} onde a seleção termina.
+
{{DOMxRef("Selection.focusOffset")}}{{ReadOnlyInline}}
+
Retorna um número representando o deslocamento do focus dentro do elemento Se o elemento for do tipo text node, o número retornado será o número de caracteres no elemento que precedem o focus (posição onde o mouse foi solto). Se o elemento for do tipo element (qualquer tag html que não seja text node), o número retornado será o número de nós filhos do elemento que precedem o focus.
+
{{DOMxRef("Selection.isCollapsed")}}{{ReadOnlyInline}}
+
Retorna um valor booleano indicando se o início e o final da seleção são a mesma posição, ou seja, começou e terminou no mesmo lugar.
+
{{DOMxRef("Selection.rangeCount")}}{{ReadOnlyInline}}
+
Retorna no número de intervalos da seleção.
+
{{DOMxRef("Selection.type")}}{{ReadOnlyInline}}
+
Retorna um {{DOMxRef("DOMString")}} descrevento o tipo da seleção atual.
+
+ +

Métodos

+ +
+
{{DOMxRef("Selection.addRange()")}}
+
Um objeto {{DOMxRef("Range")}} que será adicionado na seleção.
+
{{DOMxRef("Selection.collapse()")}}
+
Colapsa a seleção atual em um único ponto.
+
{{DOMxRef("Selection.collapseToEnd()")}}
+
Colapsa a seleção para o final do último intervalo na seleção.
+
{{DOMxRef("Selection.collapseToStart()")}}
+
Colapsa a seleção para o início do primeiro intervalo na seleção.
+
{{DOMxRef("Selection.containsNode()")}}
+
Indica se um certo nó é parte da seleção.
+
{{DOMxRef("Selection.deleteFromDocument()")}}
+
Apaga o conteúdo da seleção do documento.
+
{{DOMxRef("Selection.empty()")}}
+
Remove todos os intervalos da seleção. Este é um apelido para removeAllRanges() — Veja {{DOMxRef("Selection.removeAllRanges()")}} para mais detalhes.
+
{{DOMxRef("Selection.extend()")}}
+
Move o focus (final da seleção) para um ponto específico.
+
{{DOMxRef("Selection.getRangeAt()")}}
+
Retorna um objeto {{DOMxRef("Range")}} represetando um dos intervalos atualmente selecionados.
+
{{DOMxRef("Selection.modify()")}}{{Non-standard_Inline}}
+
Altera a seleção atual.
+
{{DOMxRef("Selection.removeRange()")}}
+
Remove um intervalo da seleção.
+
{{DOMxRef("Selection.removeAllRanges()")}}
+
Remove todos os intervalos da seleção.
+
{{DOMxRef("Selection.selectAllChildren()")}}
+
Adiciona todos os filhos do nó especificado para a seleção.
+
{{DOMxRef("Selection.setBaseAndExtent()")}}
+
Define que a seleção será um intervalo incluindo todos ou partes dos dois nós DOM especificados, e qualquer conteúdo entre esses nós.
+
{{DOMxRef("Selection.setPosition()")}}
+
Colapsa a seleção atual para um único ponto. Este é um apelido para collapse() — Veja {{DOMxRef("Selection.collapse()")}} para mais detalhes.
+
{{DOMxRef("Selection.toString()")}}
+
Retorna uma string atualmente representada pelo objeto selection, i.e. o texto atualmente selecionado.
+
+ +

Notas

+ +

Representação da seleção em formato de String

+ +

Chamando a função {{DOMxRef("Selection.toString()")}} retorna o texto selecionado, e.g.:

+ +
var selObj = window.getSelection();
+window.alert(selObj);
+
+ +

Perceba que usando um objeto selection como argumento de window.alert executará o metodo toString automaticamente.

+ +

Multiplos intervalos em uma seleção

+ +

Um objeto selection representa os {{DOMxRef("range","intervalos")}} que o usuário selecionou.
+ Normalmente é apenas um intervalo, acessado da seguinte forma:

+ +
+
var selObj = window.getSelection();
+var range  = selObj.getRangeAt(0);
+
+ + + +

Como consta nas Especificações da API de seleção, a API foi inicialmente criada pela Netscape e usados multiplos intervalos, por instância, para permitir ao usuário selecionar uma coluna de uma {{HTMLElement("table")}}. Outros navegadores como Gecko não implementaram multiplos intervalos, e a especificação exige que a seleção sempre tenha um único intervalo.

+ +

Seleção e foco de input

+ +

Seleção e foco de input (indicado por {{DOMxRef("Document.activeElement")}}) tem uma relação complexa, que depende do navegador. Para um código compatível com vários navegadores, o melhor é manter os códigos separados.

+ +

O Safari e o Chrome (ao contrário do Firefox) historicamente foca no elemento contendo a seleção quando a seleção é modificada programaticamente, mas isto pode mudar no futuro (veja W3C bug 14383 e {{WebKitBug("38696")}}).

+ +

Comportamento da API de Seleção em termos de edição e alterações de foco do host

+ +

A API de Seleção tem um comportamento comum (i.e. compartilhado entre navegadores) que define como o comportamento do foco muda para elemento editável, após alguns desses métodos serem executados.

+ +

Os comportamentos são que um elemento editado recebe o foco se anteriormente a seleção estiver fora dele, então um método da API de seleção é executado e causa uma nova seleção que será feita em um único intervalo dentro do elemento sendo editado. O foco então é movido para o final do elemento.

+ +
+

Nota: Os métodos da API de seleção, move o foco apenas para o elemento sendo editado, não para outro elemento que pode receber o foco (e.g. {{HTMLElement("a")}}).

+
+ +

O comportamento acima é aplicado para as seleções feitas usando os seguintes métodos:

+ + + +

e quando o intervalo é modificado usando os seguintes métodos:

+ + + +

Glossário

+ +

Outras palavras chaves usadas nesta seção.

+ +
+
anchor
+
O anchor de uma seleção é o ponto inicial da seleção. Quando a seleção é feita com um mouse, é onde o botão do mouse é inicialmente pressionado. Quando o usuário altera a seleção usando o mouse ou teclado, o anchor não move.
+
Elemento editável
+
Um elemento editável — i.e. um elemento HTML com o atributo {{htmlattrxref("contenteditable")}} definido, ou o HTML filho de um documento estiver com o {{DOMxRef("Document.designMode", "designMode")}} habilitado.
+
foco de uma seleção
+
O foco da seleção é o ponto final da seleção. Quando feita a seleção com um mouse, o focus é onde o botão do mouse foi solto. Quando o usuário muda a seleção usando o mouse ou teclado, o focus é o final da seleção que move. Nota: Não é o mesmo que o elemento selecionado do documento, como retornado em {{DOMxRef("document.activeElement")}}.
+
intervalo
+
Um intervalo é uma parte contínua do documento. Um intervalo pode conter nós inteiros ou partes de nós, como uma parte de um text node. Um usuário normalmente irá selecionar um único intervalo por vez, mas é possível que o usuário selecione multiplos intervalos (e.g. usando a tecla Control). Um intervalo pode ser obtido de uma seleção como um objeto {{DOMxRef("range")}}. Um objeto de intervalo pode ser criado no DOM e programaticamente adicionada ou removida de uma seleção.
+
+ +

Especificações

+ + + + + + + + + + + + + + + + + + + +
SpecificationStatusComment
{{SpecName("Selection API", "#selection-interface", "Seleção")}}{{Spec2("Selection API")}}A especificação da API de Seleção é baseada na especificação da API de edição HTML e focada na funcionalidade relacionada à seleção.
{{SpecName("HTML Editing", "#selection", "Seleção")}}{{Spec2("HTML Editing")}}Definição incial (antiga).
+ +

Compatibilidade de navegadores

+ + + +

{{Compat("api.Selection")}}

+ +

Veja também

+ + + +

Notas da Gecko

+ + + +
+
diff --git "a/files/pt-br/web/api/sele\303\247\303\243o/index.html" "b/files/pt-br/web/api/sele\303\247\303\243o/index.html" deleted file mode 100644 index 9cac677942..0000000000 --- "a/files/pt-br/web/api/sele\303\247\303\243o/index.html" +++ /dev/null @@ -1,206 +0,0 @@ ---- -title: Seleção -slug: Web/API/Seleção -tags: - - API - - Experimental - - Interface - - Referencia - - Seleção -translation_of: Web/API/Selection ---- -
{{ ApiRef("DOM") }}{{SeeCompatTable}}
- -

Um objeto Selection representa um intervalo do texto selecionado pelo usuário ou a posição atual do cursor. Para obter o objeto Selection para inspecionar ou modificar, use {{DOMxRef("Window.getSelection()")}}.

- -

O usuário pode fazer a seleção da esquerda para a direita (na orientação do documento) ou da direita para a esquerta (orientação inversa do documento). O atributo anchor (âncora) é onde o usuário iniciou a seleção e o atributo focus (foco) é onde o usuário terminou a seleção. Se você fizer a seleção utilizando um mouse no desktop, o anchor é definido onde você pressionou o botão do mouse e o focus é definido onde você soltou o botão do mouse. Anchor e focus não devem ser confundidos com a posição inicial e final da seleção, pois o anchor pode ser definido antes do focus ou vice versa, dependendo da direção em que você fez sua seleção.

- -

Propriedades

- -
-
{{DOMxRef("Selection.anchorNode")}}{{ReadOnlyInline}}
-
Retorna o {{DOMxRef("Node")}} onde a seleção começou.
-
{{DOMxRef("Selection.anchorOffset")}}{{ReadOnlyInline}}
-
Retorna um número representando o deslocamento do anchor dentro do elemento Se o elemento for do tipo text node, o número retornado será o número de caracteres no elemento que precedem o anchor (clique inicial da seleção). Se o elemento for do tipo element (qualquer tag html que não seja text node), o número retornado será o número de nós filhos do elemento que precedem o anchor.
-
{{DOMxRef("Selection.focusNode")}}{{ReadOnlyInline}}
-
Retorna o {{DOMxRef("Node")}} onde a seleção termina.
-
{{DOMxRef("Selection.focusOffset")}}{{ReadOnlyInline}}
-
Retorna um número representando o deslocamento do focus dentro do elemento Se o elemento for do tipo text node, o número retornado será o número de caracteres no elemento que precedem o focus (posição onde o mouse foi solto). Se o elemento for do tipo element (qualquer tag html que não seja text node), o número retornado será o número de nós filhos do elemento que precedem o focus.
-
{{DOMxRef("Selection.isCollapsed")}}{{ReadOnlyInline}}
-
Retorna um valor booleano indicando se o início e o final da seleção são a mesma posição, ou seja, começou e terminou no mesmo lugar.
-
{{DOMxRef("Selection.rangeCount")}}{{ReadOnlyInline}}
-
Retorna no número de intervalos da seleção.
-
{{DOMxRef("Selection.type")}}{{ReadOnlyInline}}
-
Retorna um {{DOMxRef("DOMString")}} descrevento o tipo da seleção atual.
-
- -

Métodos

- -
-
{{DOMxRef("Selection.addRange()")}}
-
Um objeto {{DOMxRef("Range")}} que será adicionado na seleção.
-
{{DOMxRef("Selection.collapse()")}}
-
Colapsa a seleção atual em um único ponto.
-
{{DOMxRef("Selection.collapseToEnd()")}}
-
Colapsa a seleção para o final do último intervalo na seleção.
-
{{DOMxRef("Selection.collapseToStart()")}}
-
Colapsa a seleção para o início do primeiro intervalo na seleção.
-
{{DOMxRef("Selection.containsNode()")}}
-
Indica se um certo nó é parte da seleção.
-
{{DOMxRef("Selection.deleteFromDocument()")}}
-
Apaga o conteúdo da seleção do documento.
-
{{DOMxRef("Selection.empty()")}}
-
Remove todos os intervalos da seleção. Este é um apelido para removeAllRanges() — Veja {{DOMxRef("Selection.removeAllRanges()")}} para mais detalhes.
-
{{DOMxRef("Selection.extend()")}}
-
Move o focus (final da seleção) para um ponto específico.
-
{{DOMxRef("Selection.getRangeAt()")}}
-
Retorna um objeto {{DOMxRef("Range")}} represetando um dos intervalos atualmente selecionados.
-
{{DOMxRef("Selection.modify()")}}{{Non-standard_Inline}}
-
Altera a seleção atual.
-
{{DOMxRef("Selection.removeRange()")}}
-
Remove um intervalo da seleção.
-
{{DOMxRef("Selection.removeAllRanges()")}}
-
Remove todos os intervalos da seleção.
-
{{DOMxRef("Selection.selectAllChildren()")}}
-
Adiciona todos os filhos do nó especificado para a seleção.
-
{{DOMxRef("Selection.setBaseAndExtent()")}}
-
Define que a seleção será um intervalo incluindo todos ou partes dos dois nós DOM especificados, e qualquer conteúdo entre esses nós.
-
{{DOMxRef("Selection.setPosition()")}}
-
Colapsa a seleção atual para um único ponto. Este é um apelido para collapse() — Veja {{DOMxRef("Selection.collapse()")}} para mais detalhes.
-
{{DOMxRef("Selection.toString()")}}
-
Retorna uma string atualmente representada pelo objeto selection, i.e. o texto atualmente selecionado.
-
- -

Notas

- -

Representação da seleção em formato de String

- -

Chamando a função {{DOMxRef("Selection.toString()")}} retorna o texto selecionado, e.g.:

- -
var selObj = window.getSelection();
-window.alert(selObj);
-
- -

Perceba que usando um objeto selection como argumento de window.alert executará o metodo toString automaticamente.

- -

Multiplos intervalos em uma seleção

- -

Um objeto selection representa os {{DOMxRef("range","intervalos")}} que o usuário selecionou.
- Normalmente é apenas um intervalo, acessado da seguinte forma:

- -
-
var selObj = window.getSelection();
-var range  = selObj.getRangeAt(0);
-
- - - -

Como consta nas Especificações da API de seleção, a API foi inicialmente criada pela Netscape e usados multiplos intervalos, por instância, para permitir ao usuário selecionar uma coluna de uma {{HTMLElement("table")}}. Outros navegadores como Gecko não implementaram multiplos intervalos, e a especificação exige que a seleção sempre tenha um único intervalo.

- -

Seleção e foco de input

- -

Seleção e foco de input (indicado por {{DOMxRef("Document.activeElement")}}) tem uma relação complexa, que depende do navegador. Para um código compatível com vários navegadores, o melhor é manter os códigos separados.

- -

O Safari e o Chrome (ao contrário do Firefox) historicamente foca no elemento contendo a seleção quando a seleção é modificada programaticamente, mas isto pode mudar no futuro (veja W3C bug 14383 e {{WebKitBug("38696")}}).

- -

Comportamento da API de Seleção em termos de edição e alterações de foco do host

- -

A API de Seleção tem um comportamento comum (i.e. compartilhado entre navegadores) que define como o comportamento do foco muda para elemento editável, após alguns desses métodos serem executados.

- -

Os comportamentos são que um elemento editado recebe o foco se anteriormente a seleção estiver fora dele, então um método da API de seleção é executado e causa uma nova seleção que será feita em um único intervalo dentro do elemento sendo editado. O foco então é movido para o final do elemento.

- -
-

Nota: Os métodos da API de seleção, move o foco apenas para o elemento sendo editado, não para outro elemento que pode receber o foco (e.g. {{HTMLElement("a")}}).

-
- -

O comportamento acima é aplicado para as seleções feitas usando os seguintes métodos:

- - - -

e quando o intervalo é modificado usando os seguintes métodos:

- - - -

Glossário

- -

Outras palavras chaves usadas nesta seção.

- -
-
anchor
-
O anchor de uma seleção é o ponto inicial da seleção. Quando a seleção é feita com um mouse, é onde o botão do mouse é inicialmente pressionado. Quando o usuário altera a seleção usando o mouse ou teclado, o anchor não move.
-
Elemento editável
-
Um elemento editável — i.e. um elemento HTML com o atributo {{htmlattrxref("contenteditable")}} definido, ou o HTML filho de um documento estiver com o {{DOMxRef("Document.designMode", "designMode")}} habilitado.
-
foco de uma seleção
-
O foco da seleção é o ponto final da seleção. Quando feita a seleção com um mouse, o focus é onde o botão do mouse foi solto. Quando o usuário muda a seleção usando o mouse ou teclado, o focus é o final da seleção que move. Nota: Não é o mesmo que o elemento selecionado do documento, como retornado em {{DOMxRef("document.activeElement")}}.
-
intervalo
-
Um intervalo é uma parte contínua do documento. Um intervalo pode conter nós inteiros ou partes de nós, como uma parte de um text node. Um usuário normalmente irá selecionar um único intervalo por vez, mas é possível que o usuário selecione multiplos intervalos (e.g. usando a tecla Control). Um intervalo pode ser obtido de uma seleção como um objeto {{DOMxRef("range")}}. Um objeto de intervalo pode ser criado no DOM e programaticamente adicionada ou removida de uma seleção.
-
- -

Especificações

- - - - - - - - - - - - - - - - - - - -
SpecificationStatusComment
{{SpecName("Selection API", "#selection-interface", "Seleção")}}{{Spec2("Selection API")}}A especificação da API de Seleção é baseada na especificação da API de edição HTML e focada na funcionalidade relacionada à seleção.
{{SpecName("HTML Editing", "#selection", "Seleção")}}{{Spec2("HTML Editing")}}Definição incial (antiga).
- -

Compatibilidade de navegadores

- - - -

{{Compat("api.Selection")}}

- -

Veja também

- - - -

Notas da Gecko

- - - -
-
diff --git a/files/pt-br/web/api/svgaelement/svgalement.target/index.html b/files/pt-br/web/api/svgaelement/svgalement.target/index.html deleted file mode 100644 index e197ee81e5..0000000000 --- a/files/pt-br/web/api/svgaelement/svgalement.target/index.html +++ /dev/null @@ -1,106 +0,0 @@ ---- -title: SVGAElement.target -slug: Web/API/SVGAElement/SVGAlement.target -tags: - - Imagem vetorial - - Vetores -translation_of: Web/API/SVGAElement/target -translation_of_original: Web/API/SVGAElement/SVGAlement.target ---- -

{{APIRef("SVGAElement")}}

- -

SVGAElement.target propriedade somente ler de {{domxref("SVGAElement")}} retorna um objeto {{domxref("SVGAnimatedString")}} que especifica a porção de um alvo sendo ele "window", "frame" ou "pane" no qual um documento será aberto quando o link for acionado.

- -

Esta propriedade é usada quando existem dois ou mais possiveis alvos(destinos) para o documento, por exemplo, quando o documento pai é um arquivo .html ou .xhtml com varias telas (multi-frame).

- -

Sintaxe

- -
myLink.target = 'value';
- -

Valor

- -

Um {{domxref("SVGAnimatedString")}} indica o destino final do recurso que abre o documento assim que o link é acionado.

- -

Valores para {{domxref("target")}} você pode ver aqui.

- -

Exemplo

- -

O código é foi retirado de "SVGAElement example code"

- -
...
-var linkRef = document.querySelector('a');
-linkRef.target ='_blank';
-...
- -

Especificações

- - - - - - - - - - - - - - -
SpecificationStatusComment
{{SpecName('SVG1.1', 'text.html#InterfaceSVGAElement', 'target')}}{{Spec2('SVG1.1')}} 
- -

Compatibilidade com o navegador

- -

{{ CompatibilityTable() }}

- -
- - - - - - - - - - - - - - - - - - - -
FeatureChromeFirefox (Gecko)Internet ExplorerOperaSafari (WebKit)
Basic support{{ CompatVersionUnknown() }}{{ CompatVersionUnknown() }}9.0{{ CompatVersionUnknown() }}{{ CompatVersionUnknown() }}
-
- -
- - - - - - - - - - - - - - - - - - - -
FeatureAndroidFirefox Mobile (Gecko)IE MobileOpera MobileSafari Mobile
Basic support{{ CompatUnknown() }}{{ CompatVersionUnknown() }}{{ CompatUnknown() }}{{ CompatVersionUnknown() }}{{ CompatVersionUnknown() }}
-
- -

Veja também

- - diff --git a/files/pt-br/web/api/svgaelement/target/index.html b/files/pt-br/web/api/svgaelement/target/index.html new file mode 100644 index 0000000000..e197ee81e5 --- /dev/null +++ b/files/pt-br/web/api/svgaelement/target/index.html @@ -0,0 +1,106 @@ +--- +title: SVGAElement.target +slug: Web/API/SVGAElement/SVGAlement.target +tags: + - Imagem vetorial + - Vetores +translation_of: Web/API/SVGAElement/target +translation_of_original: Web/API/SVGAElement/SVGAlement.target +--- +

{{APIRef("SVGAElement")}}

+ +

SVGAElement.target propriedade somente ler de {{domxref("SVGAElement")}} retorna um objeto {{domxref("SVGAnimatedString")}} que especifica a porção de um alvo sendo ele "window", "frame" ou "pane" no qual um documento será aberto quando o link for acionado.

+ +

Esta propriedade é usada quando existem dois ou mais possiveis alvos(destinos) para o documento, por exemplo, quando o documento pai é um arquivo .html ou .xhtml com varias telas (multi-frame).

+ +

Sintaxe

+ +
myLink.target = 'value';
+ +

Valor

+ +

Um {{domxref("SVGAnimatedString")}} indica o destino final do recurso que abre o documento assim que o link é acionado.

+ +

Valores para {{domxref("target")}} você pode ver aqui.

+ +

Exemplo

+ +

O código é foi retirado de "SVGAElement example code"

+ +
...
+var linkRef = document.querySelector('a');
+linkRef.target ='_blank';
+...
+ +

Especificações

+ + + + + + + + + + + + + + +
SpecificationStatusComment
{{SpecName('SVG1.1', 'text.html#InterfaceSVGAElement', 'target')}}{{Spec2('SVG1.1')}} 
+ +

Compatibilidade com o navegador

+ +

{{ CompatibilityTable() }}

+ +
+ + + + + + + + + + + + + + + + + + + +
FeatureChromeFirefox (Gecko)Internet ExplorerOperaSafari (WebKit)
Basic support{{ CompatVersionUnknown() }}{{ CompatVersionUnknown() }}9.0{{ CompatVersionUnknown() }}{{ CompatVersionUnknown() }}
+
+ +
+ + + + + + + + + + + + + + + + + + + +
FeatureAndroidFirefox Mobile (Gecko)IE MobileOpera MobileSafari Mobile
Basic support{{ CompatUnknown() }}{{ CompatVersionUnknown() }}{{ CompatUnknown() }}{{ CompatVersionUnknown() }}{{ CompatVersionUnknown() }}
+
+ +

Veja também

+ + diff --git a/files/pt-br/web/api/touch_events/index.html b/files/pt-br/web/api/touch_events/index.html new file mode 100644 index 0000000000..df21cdf335 --- /dev/null +++ b/files/pt-br/web/api/touch_events/index.html @@ -0,0 +1,353 @@ +--- +title: Eventos do Toque +slug: Web/Guide/Events/Touch_events +tags: + - Avançado + - DOM + - Evento + - Guía + - Mobile + - Visualização +translation_of: Web/API/Touch_events +--- +

Com a finalidade de fornecer suporte de qualidade para interfaces baseadas em toque (touch), os eventos de touch oferecem a capacidade de interpretar a atividade em telas sensíveis ao toque ou trackpads.

+ +

Definições

+ +
+
Surface
+
A superfície sensível ao toque. Pode ser uma tela ou trackpad.
+
+ +
+
Touch point
+
Um ponto de contato com a superfície. Pode ser um dedo (ou cotovelo, orelha, nariz, o que seja, mas provavelmente, um dedo) ou uma caneta.
+
+ +

Interfaces

+ +
+
{{ domxref("TouchEvent") }}
+
Representa um evento quando ocorre o estado de toque na superfície.
+
{{ domxref("Touch") }}
+
Representa um único ponto de contato entre o usuário e a superfície sensível a toque.
+
{{ domxref("TouchList") }}
+
Representa um grupo de toques, isto é usado quando usuário tem por exemplo, vários dedos ao mesmo tempo sobre a superfície.
+
{{ domxref("DocumentTouch") }}
+
Contém métodos de conveniência para criar {{ domxref("Touch") }} e objetos {{ domxref("TouchList") }} .
+
+ +

Exemplo

+ +

Este exemplo acompanha múltiplos pontos de contato de cada vez, permitindo o usuário desenhe em um {{ HTMLElement("canvas") }} com mais de um dedo por vez. Ele só funcionará em um browser que tenha suporte a eventos de toque.

+ +
Nota: O texto a seguir utiliza o termo "finger" quando descreve o contato com a superfície, mas poderia, é claro, ser também uma caneta ou outro método de contato.
+ +

Crie um canvas

+ +
<canvas id="canvas" width="600" height="600" style="border:solid black 1px;">
+  Seu browser não tem suporte ao elemento canvas.
+</canvas>
+<br>
+<button onclick="startup()">Initialize</button>
+<br>
+Log: <pre id="log" style="border: 1px solid #ccc;"></pre>
+
+ +

Configurado os eventos

+ +

Quando uma página é carregada, a função startup() mostrada abaixo deve ser chamada pelo nosso elemento {{ HTMLElement("body") }} através do atributo onload (Mas no exemplo usamos um botão para adicioná-lo, devido as limitações do MDN live example system).

+ +
function startup() {
+  var el = document.getElementsByTagName("canvas")[0];
+  el.addEventListener("touchstart", handleStart, false);
+  el.addEventListener("touchend", handleEnd, false);
+  el.addEventListener("touchcancel", handleCancel, false);
+  el.addEventListener("touchleave", handleEnd, false);
+  el.addEventListener("touchmove", handleMove, false);
+  log("initialized.");
+}
+
+ +

Define simplesmento todos os ouvintes dos eventos do nosso elemento {{ HTMLElement("canvas") }} para que possamos trabalhar com os eventos de toque quando eles ocorrerem.

+ +

Rastreando novos toques

+ +

Vamos acompanhar os toques em seu progresso.

+ +
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. 

+ +
function handleStart(evt) {
+  evt.preventDefault();
+  log("touchstart.");
+  var el = document.getElementsByTagName("canvas")[0];
+  var ctx = el.getContext("2d");
+  var touches = evt.changedTouches;
+
+  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.fillStyle = color;
+    ctx.fill();
+    log("touchstart:"+i+".");
+  }
+}
+
+ +

A chamada {{ domxref("event.preventDefault()") }} mantem o browser a processa o evento de toque ( isso também previne que um mouse event seja despachado). Então, temos o contexto e puxamos a lista de pontos de contato disparados noa propriedade do evento {{ domxref("TouchEvent.changedTouches") }}.

+ +

Depois disso, nós iteramos sobre todos os objetos {{ domxref("Touch") }} da lista e os adicionamos em um array de pontos de contatos ativos e definimos o ponto inicial para desenhar um pequeno circulo; estamos usando um raio de 4 pixels, então um círculo de 4 pixels irá aparecer em nosso canvas.

+ +

Desenhando movimento do toque

+ +

Cada vez que um ou mais dedos se movem, um evento de TouchMove é disparado, assim chamando nossa função handleMove(). A sua responsabilidade neste exemplo é atualizar as informações armazenadas e desenhar uma linha a partir da posição anterior para a atual de cada toque.

+ +
function handleMove(evt) {
+  evt.preventDefault();
+  var el = document.getElementsByTagName("canvas")[0];
+  var ctx = el.getContext("2d");
+  var touches = evt.changedTouches;
+
+  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);
+      ctx.beginPath();
+      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+");");
+      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
+      log(".");
+    } else {
+      log("can't figure out which touch to continue");
+    }
+  }
+}
+
+ +

Esta interação sobre os toques também muda, mas parece em cache as  informações em um array para cada toque anterior, a fim de determinar um pont de partida e o destino para o desenho do trajeto. Isto é feito para olhar cada touch da propriedade {{ domxref("Touch.identifier") }}. Esta propriedade é um número inteiro único para cada toque, e mantém-se consistente para cada evento durante o tempo de contato de cada dedo como a superfície.

+ +

Isto permite obter as coordenadas da posição anterior de cada contato e usar os métodos de contexto apropriado para desenhar uma linha que une as duas posições.

+ +

Depois de desenhar a linha, nós chamamos Array.splice() para substituir as informações previas sobre o ponto de toque com a informação atual no array ongoingTouches.

+ +

Gerenciando o final do evento de toque 

+ +

Quando o usuário retira o dedo da superfície , um evento touchend é disparado.  Da mesma forma, se o dedo deslisa para fora do canvas, nós teremos um evento touchleave disparado. Nós tratamos da mesma forma em ambos os casos:  chamamos  a função handleEnd(). A sua missão é desenhar uma linha para o final do ponto de toque e remover o ponto de toque da lista ongoing.

+ +
function handleEnd(evt) {
+  evt.preventDefault();
+  log("touchend/touchleave.");
+  var el = document.getElementsByTagName("canvas")[0];
+  var ctx = el.getContext("2d");
+  var touches = evt.changedTouches;
+
+  for (var i=0; i < touches.length; i++) {
+    var color = colorForTouch(touches[i]);
+    var idx = ongoingTouchIndexById(touches[i].identifier);
+
+    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
+    } else {
+      log("can't figure out which touch to end");
+    }
+  }
+}
+
+ +

Isto é muito semelhante a função anterior, as únicas diferenças reais são o desenho de um pequeno quadrado para marcar o fim e quando chamamos Array.splice(), nós simplesmente removemos a antiga entrada da lista de toque do ongoing, sem adição das informações atualizadas. O resultado é que paramos o tracking do ponto de contato.

+ +

Tratando toques cancelados

+ +

Se o dedo do usuário deslisa em uma UI de um navegador, ou o toque de outra forma precisa ser cancelado, o evento touchcancel é disparado e nos chamamaos a função handleCancel().

+ +
function handleCancel(evt) {
+  evt.preventDefault();
+  log("touchcancel.");
+  var touches = evt.changedTouches;
+
+  for (var i=0; i < touches.length; i++) {
+    ongoingTouches.splice(i, 1);  // remove it; we're done
+  }
+}
+
+ +

Uma vez que a idéia dé cancelar imediatamento o toque, nós simplesmente removemos da lista de ongoing sem desenhar uma linha final.

+ +

Funções de conveniência

+ +

Este exemplo usa duas funções de conveniência que deve ser olhado rapidamente para ajudar a fazer o resto do código mais claro

+ +

Selecionando a cor para cada toque

+ +

A fim de fazer cada toque desenhar com uma cor diferente, a função  colorForTouch()  é usada para escolher uma cor com base em um identificador único do toque, Este identificador é um número opaco, mas pelo menos podemos conta com ele diferindo entre os toques ativos no momento.

+ +
function colorForTouch(touch) {
+  var r = touch.identifier % 16;
+  var g = Math.floor(touch.identifier / 3) % 16;
+  var b = Math.floor(touch.identifier / 7) % 16;
+  r = r.toString(16); // make it a hex digit
+  g = g.toString(16); // make it a hex digit
+  b = b.toString(16); // make it a hex digit
+  var color = "#" + r + g + b;
+  log("color for touch with identifier " + touch.identifier + " = " + color);
+  return color;
+}
+
+ +

O resultado desta função é uma string que pode ser usada ao chamar as funções {{ HTMLElement("canvas") }} para setar a cor do desenho. Por exemplo, para um valor  {{ domxref("Touch.identifier") }} de 10, o resultado será a string "#aaa".

+ +

Copiando touch objects

+ +

Alguns browsers (mobile Safari, por exemplo) re-usa touch objects entre os eventos, por isso é melhor ter cuidado para copiar os bits, em vez de fazer referência a todo objeto.

+ +
function copyTouch(touch) {
+  return { identifier: touch.identifier, pageX: touch.pageX, pageY: touch.pageY };
+}
+ +

Encontrando um toque ongoing

+ +

A função ongoingTouchIndexById() abaixo verifica através do array ongoingTouches para encontrar o toque correspondente ao indentificador passado, então ele retorna o índice do touch no array.

+ +
function ongoingTouchIndexById(idToFind) {
+  for (var i=0; i < ongoingTouches.length; i++) {
+    var id = ongoingTouches[i].identifier;
+
+    if (id == idToFind) {
+      return i;
+    }
+  }
+  return -1;    // não econtrado
+}
+
+ +

Mostrando o que está acontecendo

+ +
function log(msg) {
+  var p = document.getElementById('log');
+  p.innerHTML = msg + "\n" + p.innerHTML;
+}
+ +

If your browser supports it, you can {{ LiveSampleLink('Example', 'see it live') }}.

+ +

jsFiddle example

+ +

Additional tips

+ +

This section provides additional tips on how to handle touch events in your web application.

+ +

Handling clicks

+ +

Since calling preventDefault() on a touchstart or the first touchmove event of a series prevents the corresponding mouse events from firing, it's common to call preventDefault() on touchmove rather than touchstart. That way, mouse events can still fire and things like links will continue to work. Alternatively, some frameworks have taken to refiring touch events as mouse events for this same purpose. (This example is oversimplified and may result in strange behavior. It is only intended as a guide.)

+ +
function onTouch(evt) {
+  evt.preventDefault();
+  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;
+  }
+  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);
+}
+
+ +

Calling preventDefault() only on a second touch

+ +

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.

+ +
+
+ +

Browser compatibility

+ +

{{ CompatibilityTable() }}

+ +
+ + + + + + + + + + + + + + + + + + + +
FeatureChromeFirefox (Gecko)Internet ExplorerOperaSafari
Basic support{{ CompatChrome("22.0") }}{{ CompatGeckoDesktop("18.0") }}
+ Disabled with 24 ({{ bug(888304) }})
{{ CompatNo() }}{{ CompatNo() }}{{ CompatNo() }}
+
+ +
+ + + + + + + + + + + + + + + + + + + + + +
FeatureAndroidChrome for AndroidFirefox Mobile (Gecko)IE MobileOpera MobileSafari Mobile
Basic support{{ CompatVersionUnknown() }}(Yes){{ CompatGeckoMobile("6.0") }}{{ CompatUnknown() }}{{ CompatUnknown() }}{{ CompatVersionUnknown() }}
+
+ +

Gecko notes

+ +

The dom.w3c_touch_events.enabled tri-state preference can be used to disable (0), enable (1), and auto-detect(2) support for standard touch events; by default, they're on auto-detect(2). After changing the preference, you must restart the browser for the changes to take effect.

+ +
+

Prior to {{Gecko("12.0")}}, Gecko did not support multi-touch; only one touch at a time was reported.

+
+ +
+

Note: As of {{Gecko("24.0")}}, the touch events support introduced with {{Gecko("18.0")}} has been disabled on the desktop version of Firefox, as some popular sites including Google and Twitter are not working properly. Once the bug is fixed, the API will be enabled again. To enable it anyway, open about:config and set the dom.w3c_touch_events.enabled pref to 2. The mobile versions including Firefox for Android and Firefox OS are not affected by this change. Also, the API has been enabled on the Metro-style version of Firefox for Windows 8.

+
+ +
Note: Prior to {{Gecko("6.0") }}, Gecko offered a proprietary touch event API. That API is now deprecated; you should switch to this one.
diff --git a/files/pt-br/web/api/web_animations_api/usando_a_web_animations_api/index.html b/files/pt-br/web/api/web_animations_api/usando_a_web_animations_api/index.html deleted file mode 100644 index 2743f68d65..0000000000 --- a/files/pt-br/web/api/web_animations_api/usando_a_web_animations_api/index.html +++ /dev/null @@ -1,358 +0,0 @@ ---- -title: Usando a Web Animations API -slug: Web/API/Web_Animations_API/Usando_a_Web_Animations_API -tags: - - Alice - - Animação - - CSS - - Guía - - Iniciante - - JavaScript - - Timing - - Tutorial - - animar - - duration - - keyframes - - pausar - - pause - - play - - quadro-chave - - reverse - - web animations api -translation_of: Web/API/Web_Animations_API/Using_the_Web_Animations_API ---- -

{{DefaultAPISidebar("Web Animations")}}

- -

A Web Animations API nos possibilita criar animações e controlar sua reprodução pelo JavaScript. Esse artigo vai te demonstrar esses conceitos com demonstrações e tutoriais com o temática de Alice no País das Maravilhas.

- -

Conhecendo a Web Animations API

- -

A Web Animations API abre a engine de animação do browser para os desenvolvedores manipularem via JavaScript. Esta API foi construída para se basear nas implementações das Animações CSS e Transições CSS, e deixam a porta aberta para futuros efeitos de animação. É um dos métodos mais performáticos para se animar na Web, permitindo que o browser faça internamente suas próprias otimizações, sem precisar depender de hacks, coerções ou {{domxref("Window.requestAnimationFrame()")}}.

- -

Com a Web Animations API, podemos transferir as animações interativas das folhas de estilo para o JavaScript, separando comportamento de apresentação. Não vamos precisar mais depender de técnicas muito dependentes do DOM como propriedades do CSS e escopo de classes para controlar a direção da reprodução. E diferente de CSS puro e declarativo, JavaScript também te possibilita definir dinâmicamente valores: de propriedades à duração. Para criar bibilotecas de animação à criar animações interativas, a Web Animations API pode ser a ferramenta perfeita para o trabalho. Vamos ver o que ela pode fazer!

- -

Suporte de Navegadores

- -

O suporte básico para as funcionalidades da Web Animations API discutidas neste artigo estão disponíveis no Firefox 48+, Chrome 36+ e Safari 13.1+. Também existe um polyfill prático que verifica o suporte e adiciona as funcionalidades onde for necessário.

- -

Escrevendo Animações CSS com a Web Animations API

- -

Uma das maneiras mais familiares de abordar a Web Animations API é começar com algo que boa parte dos desenvolvedores web já utilizaram antes: Animações CSS. Animações CSS tem uma sintaxe familiar que funciona bem para nossa demonstração.

- -

A versão CSS

- -

Aqui temos uma animação escrita com CSS mostrando Alice caindo no buraco de coelho que leva ao País das Maravilhas (veja o código completo no Codepen):

- -

Alice Tumbling down the rabbit's hole.

- -

Perceba que o fundo se mexe, a Alice gira e sua cor muda em sincronia com o giro. Nós vamos focar somente na Alice para este tutorial. Segue a versão simplificada do CSS que controla a animação da Alice:

- -
#alice {
-  animation: aliceTumbling infinite 3s linear;
-}
-
-@keyframes aliceTumbling {
-  0% {
-    color: #000;
-    transform: rotate(0) translate3D(-50%, -50%, 0);
-  }
-  30% {
-    color: #431236;
-  }
-  100% {
-    color: #000;
-    transform: rotate(360deg) translate3D(-50%, -50%, 0);
-  }
-}
- -

Isso muda a cor da Alice e a rotação do `transform` por 3 segundos em um ritmo constante (linear) e se repete infinitamente. No bloco do @keyframes podemos ver que em 30% de cada repetição (por volta dos 900ms), a cor da Alice muda de preto para um vinho, e volta para o preto no final do loop.

- -

Mudando para o JavaScript

- -

Agora vamos tentar criar a mesma animação usando a Web Animations API.

- -

Representando keyframes

- -

A primeira coisa que precisamos fazer é criar um Objeto Keyframe correspondente ao nosso bloco @keyframes do CSS:

- -
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' }
-];
- -

Aqui estávamos utilizando uma array contendo múltiplos objetos. Cada objeto representa uma chave do CSS original. Contudo, diferente do CSS, a Web Animations API não precisa informar explicitamente as porcentagens temporais para cada chave, o JS automaticamente divide a animação em partes iguais baseado no número de chaves que você forneceu. Isso significa que um objeto Keyframe com três chaves vai reproduzir a chave do meio em 50% do tempo de cada loop, exceto se for definido o contrário.

- -

Quando queremos explicitamente definir um timing diferente para essas outras chaves, podemos especificar um offset diretamente no objeto, separado do resto da declaração por uma vírgula. No exemplo acima, para definir que a cor da Alice muda em 30% do tempo (e não 50%), nós definiremos como offset: 0.3.

- -

Atualmente, devem ser definidos pelo menos dois keyframes (representando o início e fim de estado das sequências de animação). Se a sua lista de keyframes somente tem uma entrada, {{domxref("Element.animate()")}} pode disparar uma exceção NotSupportedErro em alguns browsers até eles serem atualizados.

- -

Então recapitulando: as chaves são espaçadas igualmente por padrão, exceto se você definir um offset para uma chave. Útil, não?

- -

Representando propriedades temporais

- -

Nós precisamos criar também um objeto de propriedades temporais (um objeto {{domxref("AnimationEffectTimingProperties")}}) correspondente aos valores da animação da Alice:

- -
var aliceTiming = {
-  duration: 3000,
-  iterations: Infinity
-}
- -

Você pode notar algumas diferenças aqui comparando com os valores equivalentes representados no CSS:

- - - -
-

Existem algumas pequenas diferenças de terminologia entre o CSS Animations e o Web Animations. Por exemplo, Web Animations não usa a string "infinite", e sim a keyword JavaScript Infinity. E no lugar de timing-function, usamos easing. Não estamos citando um valor de easing aqui pois, diferente das Animações CSS onde o valor padrão do animation-timing-function é ease, na Web Animations API o padrão é linear — o que nós já queremos para a animação da Alice.

-
- -

Juntando as peças

- -

Agora vamos juntar o que já fizemos com o método {{domxref("Element.animate()")}}:

- -
document.getElementById("alice").animate(
-  aliceTumbling,
-  aliceTiming
-)
- -

E pronto: a animação começa a tocar (veja a versão final no Codepen).

- -

O método animate() pode ser chamado em qualquer elemento do DOM que pode ser animado com CSS. E pode ser escrito de algumas maneiras. Ao invés de criar objetos para os keyframes e propriedades temporais, podemos passar seus valores diretamentes, tipo:

- -
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' }
-  ], {
-    duration: 3000,
-    iterations: Infinity
-  }
-);
- -

E se nós precisarmos somente especificar a duração da animação e não suas iterações (por padrão, a animação roda uma ), podemos passar só os milisegundos após o array:

- -
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);
- -

Controlando a reprodução com play(), pause(), reverse() e updatePlaybackRate()

- -

Por mais que possamos escrever Animações CSS utilizando a Web Animations API, a API realmente mostra seu potencial quando precisamos manipular a reprodução da animação. A Web Animations API fornece vários métodos úteis para controlar a reprodução. Vamos dar uma olhada em como pausar e tocar animações no jogo da Alice Crescendo/Encolhendo (confira o código completo no Codepen):

- -

Playing the growing and shrinking game with Alice.

- -

Nesse jogo, Alice tem uma animação que a encolhe ou aumenta seu tamanho, que controlamos por uma garrafa e um cupcake. Cada um tem sua própria animação.

- -

Pausando e tocando animações

- -

Vamos falar sobre a animação da Alice depois, mas por enquanto, vamos dissecar esta animação do cupcake.

- -
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:

- -
nommingCake.pause();
- -

Agora nós podemos usar o método {{domxref("Animation.play()")}} para rodar assim que for o momento:

- -
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:

- -
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:

- -
cake.addEventListener("mousedown", growAlice, false);
-cake.addEventListener("touchstart", growAlice, false);
- -

Outros métodos úteis

- - - -

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:

- -
var shrinkAlice = function() {
-  aliceChange.playbackRate = -1;
-  aliceChange.play();
-}
-
-bottle.addEventListener("mousedown", shrinkAlice, false);
-bottle.addEventListener("touchstart", shrinkAlice, false);
- -

Em Alice Através do Espelho, Alice viaja para um mundo onde ela deve correr para se manter no lugar — e correr com o dobro de velocidade para avançar! No exemplo da Corrida da Rainha Vermelha, Alice e a Rainha Vermelha estão correndo para se manter no lugar (veja o código completo no Codepen):

- -

Alice and the Red Queen race to get to the next square in this game.

- -

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:

- -
setInterval( function() {
-
-  // Make sure the playback rate never falls below .4
-  if (redQueen_alice.playbackRate > .4) {
-    redQueen_alice.updatePlaybackRate(redQueen_alice.playbackRate * .9);
-  }
-
-}, 3000);
- -

Mas impulsioná-las clicando ou tocando na tela aumenta a velocidade delas por multiplicar o playbackRate:

- -
var goFaster = function() {
-  redQueen_alice.updatePlaybackRate(redQueen_alice.playbackRate * 1.1);
-}
-
-document.addEventListener("click", goFaster);
-document.addEventListener("touchstart", goFaster);
- -

Os elementos do fundo também tem playbackRates que também são afetados pelo clique ou toque na tela. O que acontece quando você faz Alice e a Rainha Vermelha correrem com o dobro da velocidade? O que acontece quando você as deixa desacelerar?

- -

Extraindo informação das animações

- -

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:

- -
document.getAnimations().forEach(
-  function (animation) {
-    animation.updatePlaybackRate(animation.playbackRate * .5);
-  }
-);
- -

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:

- -
duration: aliceChange.effect.getComputedTiming().duration / 2
- -

Para entender o que está acontecendo, vamos dar uma olhada na animação da Alice:

- -
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:

- -
aliceChange.pause();
- -

Se pausassemos no início da animação, ela começaria com metade de seu tamanho original, como se já tivesse bebido a garrafa toda! Então nós precisamos definir o estado inicial da animação no meio. Podemos fazer isso definindo o {{domxref("Animation.currentTime")}} para 4 segundos, como no exemplo abaixo:

- -
aliceChange.currentTime = 4000;
- -

Mas enquanto trabalhamos nessa animação, vamos mudar bastante a duração da Alice. Não seria melhor definir essa currentTime dinamicamente? Assim não precisariamos fazer duas atualizações de uma vez só. Podemos fazer isso referenciando a propriedade {{domxref("Animation.effect")}}, que retorna um objeto que contém todos os detalhes sobre o(s) efeito(s) ativos na Alice:

- -
aliceChange.currentTime = aliceChange.effect.getComputedTiming().duration / 2;
- -

O effect nos permite acessar os keyframes e propriedades temporais da animação — aliceChange.effect.getComputedTiming() aponta para o objeto timing da Alice (cujo tipo é {{domxref("ComputedEffectTiming")}}) — que contem o {{domxref("ComputedEffectTiming.duration")}} dela. Podemos dividir sua duração pela metade para definir a metade da animação para a linha do tempo da animação da Alice, assim ela começaria com o tamanho normal. Então nós podemos reverter e tocar a animação dela em qualquer direção para encolher ou aumentar seu tamanho!

- -

E nós podemos fazer a mesma coisa quando definimos as durações da garrafa e do bolinho:

- -
var drinking = document.getElementById('liquid').animate(
-[
-  { height: '100%' },
-  { height: '0' }
-], {
-  fill: 'forwards',
-  duration: aliceChange.effect.getComputedTiming().duration / 2
-});
-drinking.pause();
- -

Agora todas as três animações estão ligadas por apenas um duration, que pode ser modificado facilmente em um só lugar do código.

- -

Nós também podemos utilizar a Web Animations API para descobrir o quanto da linha do tempo já foi percorrido. O jogo acaba quando o seu bolinho acaba ou você esvazia a garrafa. A vinheta que é apresentada aos jogadores depende do quão longe a Alice estava em sua animação, seja ficando grande demais pra caber na portinha ou pequena demais pra não conseguir mais alcançar a chave para abrir a porta. Podemos descobrir se ela está nesses extremos pegando o currentTime da sua animação e dividir pelo activeDuration:

- -
var endGame = function() {
-
-  // get Alice's timeline's playhead location
-  var alicePlayhead = aliceChange.currentTime;
-  var aliceTimeline = aliceChange.effect.getComputedTiming().activeDuration;
-
-  // stops Alice's and other animations
-  stopPlayingAlice();
-
-  // depending on which third it falls into
-  var aliceHeight = alicePlayhead / aliceTimeline;
-
-  if (aliceHeight <= .333){
-    // Alice got smaller!
-    ...
-
-  } else if (aliceHeight >= .666) {
-    // Alice got bigger!
-    ...
-
-  } else {
-    // Alice didn't change significantly
-    ...
-
-  }
-}
-
- -
-

Nota: getAnimations() e effect não estão disponíveis em todos os browsers no momento em que este artigo foi escrito, mas o polyfill possibilita utilizá-los agora.

-
- -

Callbacks e promises

- -

Animações e Transições CSS tem seus event listeners próprios, que também são possíveis com a Web Animations API:

- - - -

Aqui nós definimos os callbacks para o bolinho, a garrafa e para Alice para disparar a função endGame:

- -
// When the cake or bottle runs out...
-nommingCake.onfinish = endGame;
-drinking.onfinish = endGame;
-
-// ...or Alice reaches the end of her animation
-aliceChange.onfinish = endGame;
-
-
- -

Ainda melhor, a Web Animations API também fornece uma promise finished que será resolvida quando a animação é completada, e rejeitada se for cancelada.

- -

Conclusão

- -

Essas são as funcionalidades básicas da Web Animations API, a maioria delas já estão sendo suportadas pelas últimas versões do Chrome, Firefox e Safari. Agora você está pronto pra "cair na toca do coelho" de animar utilizando o browser e pronto pra escrever e experimentar com sua própria animação! Se você está utilizando a API e deseja compartilha, tente usar a hashtag #WAAPI. Nós estaremos de olho e vamos escrever mais tutoriais para cobrir funcionalidades futuras assim que o suporte aumentar!

- -

Veja também

- - diff --git a/files/pt-br/web/api/web_animations_api/using_the_web_animations_api/index.html b/files/pt-br/web/api/web_animations_api/using_the_web_animations_api/index.html new file mode 100644 index 0000000000..2743f68d65 --- /dev/null +++ b/files/pt-br/web/api/web_animations_api/using_the_web_animations_api/index.html @@ -0,0 +1,358 @@ +--- +title: Usando a Web Animations API +slug: Web/API/Web_Animations_API/Usando_a_Web_Animations_API +tags: + - Alice + - Animação + - CSS + - Guía + - Iniciante + - JavaScript + - Timing + - Tutorial + - animar + - duration + - keyframes + - pausar + - pause + - play + - quadro-chave + - reverse + - web animations api +translation_of: Web/API/Web_Animations_API/Using_the_Web_Animations_API +--- +

{{DefaultAPISidebar("Web Animations")}}

+ +

A Web Animations API nos possibilita criar animações e controlar sua reprodução pelo JavaScript. Esse artigo vai te demonstrar esses conceitos com demonstrações e tutoriais com o temática de Alice no País das Maravilhas.

+ +

Conhecendo a Web Animations API

+ +

A Web Animations API abre a engine de animação do browser para os desenvolvedores manipularem via JavaScript. Esta API foi construída para se basear nas implementações das Animações CSS e Transições CSS, e deixam a porta aberta para futuros efeitos de animação. É um dos métodos mais performáticos para se animar na Web, permitindo que o browser faça internamente suas próprias otimizações, sem precisar depender de hacks, coerções ou {{domxref("Window.requestAnimationFrame()")}}.

+ +

Com a Web Animations API, podemos transferir as animações interativas das folhas de estilo para o JavaScript, separando comportamento de apresentação. Não vamos precisar mais depender de técnicas muito dependentes do DOM como propriedades do CSS e escopo de classes para controlar a direção da reprodução. E diferente de CSS puro e declarativo, JavaScript também te possibilita definir dinâmicamente valores: de propriedades à duração. Para criar bibilotecas de animação à criar animações interativas, a Web Animations API pode ser a ferramenta perfeita para o trabalho. Vamos ver o que ela pode fazer!

+ +

Suporte de Navegadores

+ +

O suporte básico para as funcionalidades da Web Animations API discutidas neste artigo estão disponíveis no Firefox 48+, Chrome 36+ e Safari 13.1+. Também existe um polyfill prático que verifica o suporte e adiciona as funcionalidades onde for necessário.

+ +

Escrevendo Animações CSS com a Web Animations API

+ +

Uma das maneiras mais familiares de abordar a Web Animations API é começar com algo que boa parte dos desenvolvedores web já utilizaram antes: Animações CSS. Animações CSS tem uma sintaxe familiar que funciona bem para nossa demonstração.

+ +

A versão CSS

+ +

Aqui temos uma animação escrita com CSS mostrando Alice caindo no buraco de coelho que leva ao País das Maravilhas (veja o código completo no Codepen):

+ +

Alice Tumbling down the rabbit's hole.

+ +

Perceba que o fundo se mexe, a Alice gira e sua cor muda em sincronia com o giro. Nós vamos focar somente na Alice para este tutorial. Segue a versão simplificada do CSS que controla a animação da Alice:

+ +
#alice {
+  animation: aliceTumbling infinite 3s linear;
+}
+
+@keyframes aliceTumbling {
+  0% {
+    color: #000;
+    transform: rotate(0) translate3D(-50%, -50%, 0);
+  }
+  30% {
+    color: #431236;
+  }
+  100% {
+    color: #000;
+    transform: rotate(360deg) translate3D(-50%, -50%, 0);
+  }
+}
+ +

Isso muda a cor da Alice e a rotação do `transform` por 3 segundos em um ritmo constante (linear) e se repete infinitamente. No bloco do @keyframes podemos ver que em 30% de cada repetição (por volta dos 900ms), a cor da Alice muda de preto para um vinho, e volta para o preto no final do loop.

+ +

Mudando para o JavaScript

+ +

Agora vamos tentar criar a mesma animação usando a Web Animations API.

+ +

Representando keyframes

+ +

A primeira coisa que precisamos fazer é criar um Objeto Keyframe correspondente ao nosso bloco @keyframes do CSS:

+ +
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' }
+];
+ +

Aqui estávamos utilizando uma array contendo múltiplos objetos. Cada objeto representa uma chave do CSS original. Contudo, diferente do CSS, a Web Animations API não precisa informar explicitamente as porcentagens temporais para cada chave, o JS automaticamente divide a animação em partes iguais baseado no número de chaves que você forneceu. Isso significa que um objeto Keyframe com três chaves vai reproduzir a chave do meio em 50% do tempo de cada loop, exceto se for definido o contrário.

+ +

Quando queremos explicitamente definir um timing diferente para essas outras chaves, podemos especificar um offset diretamente no objeto, separado do resto da declaração por uma vírgula. No exemplo acima, para definir que a cor da Alice muda em 30% do tempo (e não 50%), nós definiremos como offset: 0.3.

+ +

Atualmente, devem ser definidos pelo menos dois keyframes (representando o início e fim de estado das sequências de animação). Se a sua lista de keyframes somente tem uma entrada, {{domxref("Element.animate()")}} pode disparar uma exceção NotSupportedErro em alguns browsers até eles serem atualizados.

+ +

Então recapitulando: as chaves são espaçadas igualmente por padrão, exceto se você definir um offset para uma chave. Útil, não?

+ +

Representando propriedades temporais

+ +

Nós precisamos criar também um objeto de propriedades temporais (um objeto {{domxref("AnimationEffectTimingProperties")}}) correspondente aos valores da animação da Alice:

+ +
var aliceTiming = {
+  duration: 3000,
+  iterations: Infinity
+}
+ +

Você pode notar algumas diferenças aqui comparando com os valores equivalentes representados no CSS:

+ + + +
+

Existem algumas pequenas diferenças de terminologia entre o CSS Animations e o Web Animations. Por exemplo, Web Animations não usa a string "infinite", e sim a keyword JavaScript Infinity. E no lugar de timing-function, usamos easing. Não estamos citando um valor de easing aqui pois, diferente das Animações CSS onde o valor padrão do animation-timing-function é ease, na Web Animations API o padrão é linear — o que nós já queremos para a animação da Alice.

+
+ +

Juntando as peças

+ +

Agora vamos juntar o que já fizemos com o método {{domxref("Element.animate()")}}:

+ +
document.getElementById("alice").animate(
+  aliceTumbling,
+  aliceTiming
+)
+ +

E pronto: a animação começa a tocar (veja a versão final no Codepen).

+ +

O método animate() pode ser chamado em qualquer elemento do DOM que pode ser animado com CSS. E pode ser escrito de algumas maneiras. Ao invés de criar objetos para os keyframes e propriedades temporais, podemos passar seus valores diretamentes, tipo:

+ +
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' }
+  ], {
+    duration: 3000,
+    iterations: Infinity
+  }
+);
+ +

E se nós precisarmos somente especificar a duração da animação e não suas iterações (por padrão, a animação roda uma ), podemos passar só os milisegundos após o array:

+ +
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);
+ +

Controlando a reprodução com play(), pause(), reverse() e updatePlaybackRate()

+ +

Por mais que possamos escrever Animações CSS utilizando a Web Animations API, a API realmente mostra seu potencial quando precisamos manipular a reprodução da animação. A Web Animations API fornece vários métodos úteis para controlar a reprodução. Vamos dar uma olhada em como pausar e tocar animações no jogo da Alice Crescendo/Encolhendo (confira o código completo no Codepen):

+ +

Playing the growing and shrinking game with Alice.

+ +

Nesse jogo, Alice tem uma animação que a encolhe ou aumenta seu tamanho, que controlamos por uma garrafa e um cupcake. Cada um tem sua própria animação.

+ +

Pausando e tocando animações

+ +

Vamos falar sobre a animação da Alice depois, mas por enquanto, vamos dissecar esta animação do cupcake.

+ +
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:

+ +
nommingCake.pause();
+ +

Agora nós podemos usar o método {{domxref("Animation.play()")}} para rodar assim que for o momento:

+ +
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:

+ +
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:

+ +
cake.addEventListener("mousedown", growAlice, false);
+cake.addEventListener("touchstart", growAlice, false);
+ +

Outros métodos úteis

+ + + +

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:

+ +
var shrinkAlice = function() {
+  aliceChange.playbackRate = -1;
+  aliceChange.play();
+}
+
+bottle.addEventListener("mousedown", shrinkAlice, false);
+bottle.addEventListener("touchstart", shrinkAlice, false);
+ +

Em Alice Através do Espelho, Alice viaja para um mundo onde ela deve correr para se manter no lugar — e correr com o dobro de velocidade para avançar! No exemplo da Corrida da Rainha Vermelha, Alice e a Rainha Vermelha estão correndo para se manter no lugar (veja o código completo no Codepen):

+ +

Alice and the Red Queen race to get to the next square in this game.

+ +

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:

+ +
setInterval( function() {
+
+  // Make sure the playback rate never falls below .4
+  if (redQueen_alice.playbackRate > .4) {
+    redQueen_alice.updatePlaybackRate(redQueen_alice.playbackRate * .9);
+  }
+
+}, 3000);
+ +

Mas impulsioná-las clicando ou tocando na tela aumenta a velocidade delas por multiplicar o playbackRate:

+ +
var goFaster = function() {
+  redQueen_alice.updatePlaybackRate(redQueen_alice.playbackRate * 1.1);
+}
+
+document.addEventListener("click", goFaster);
+document.addEventListener("touchstart", goFaster);
+ +

Os elementos do fundo também tem playbackRates que também são afetados pelo clique ou toque na tela. O que acontece quando você faz Alice e a Rainha Vermelha correrem com o dobro da velocidade? O que acontece quando você as deixa desacelerar?

+ +

Extraindo informação das animações

+ +

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:

+ +
document.getAnimations().forEach(
+  function (animation) {
+    animation.updatePlaybackRate(animation.playbackRate * .5);
+  }
+);
+ +

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:

+ +
duration: aliceChange.effect.getComputedTiming().duration / 2
+ +

Para entender o que está acontecendo, vamos dar uma olhada na animação da Alice:

+ +
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:

+ +
aliceChange.pause();
+ +

Se pausassemos no início da animação, ela começaria com metade de seu tamanho original, como se já tivesse bebido a garrafa toda! Então nós precisamos definir o estado inicial da animação no meio. Podemos fazer isso definindo o {{domxref("Animation.currentTime")}} para 4 segundos, como no exemplo abaixo:

+ +
aliceChange.currentTime = 4000;
+ +

Mas enquanto trabalhamos nessa animação, vamos mudar bastante a duração da Alice. Não seria melhor definir essa currentTime dinamicamente? Assim não precisariamos fazer duas atualizações de uma vez só. Podemos fazer isso referenciando a propriedade {{domxref("Animation.effect")}}, que retorna um objeto que contém todos os detalhes sobre o(s) efeito(s) ativos na Alice:

+ +
aliceChange.currentTime = aliceChange.effect.getComputedTiming().duration / 2;
+ +

O effect nos permite acessar os keyframes e propriedades temporais da animação — aliceChange.effect.getComputedTiming() aponta para o objeto timing da Alice (cujo tipo é {{domxref("ComputedEffectTiming")}}) — que contem o {{domxref("ComputedEffectTiming.duration")}} dela. Podemos dividir sua duração pela metade para definir a metade da animação para a linha do tempo da animação da Alice, assim ela começaria com o tamanho normal. Então nós podemos reverter e tocar a animação dela em qualquer direção para encolher ou aumentar seu tamanho!

+ +

E nós podemos fazer a mesma coisa quando definimos as durações da garrafa e do bolinho:

+ +
var drinking = document.getElementById('liquid').animate(
+[
+  { height: '100%' },
+  { height: '0' }
+], {
+  fill: 'forwards',
+  duration: aliceChange.effect.getComputedTiming().duration / 2
+});
+drinking.pause();
+ +

Agora todas as três animações estão ligadas por apenas um duration, que pode ser modificado facilmente em um só lugar do código.

+ +

Nós também podemos utilizar a Web Animations API para descobrir o quanto da linha do tempo já foi percorrido. O jogo acaba quando o seu bolinho acaba ou você esvazia a garrafa. A vinheta que é apresentada aos jogadores depende do quão longe a Alice estava em sua animação, seja ficando grande demais pra caber na portinha ou pequena demais pra não conseguir mais alcançar a chave para abrir a porta. Podemos descobrir se ela está nesses extremos pegando o currentTime da sua animação e dividir pelo activeDuration:

+ +
var endGame = function() {
+
+  // get Alice's timeline's playhead location
+  var alicePlayhead = aliceChange.currentTime;
+  var aliceTimeline = aliceChange.effect.getComputedTiming().activeDuration;
+
+  // stops Alice's and other animations
+  stopPlayingAlice();
+
+  // depending on which third it falls into
+  var aliceHeight = alicePlayhead / aliceTimeline;
+
+  if (aliceHeight <= .333){
+    // Alice got smaller!
+    ...
+
+  } else if (aliceHeight >= .666) {
+    // Alice got bigger!
+    ...
+
+  } else {
+    // Alice didn't change significantly
+    ...
+
+  }
+}
+
+ +
+

Nota: getAnimations() e effect não estão disponíveis em todos os browsers no momento em que este artigo foi escrito, mas o polyfill possibilita utilizá-los agora.

+
+ +

Callbacks e promises

+ +

Animações e Transições CSS tem seus event listeners próprios, que também são possíveis com a Web Animations API:

+ + + +

Aqui nós definimos os callbacks para o bolinho, a garrafa e para Alice para disparar a função endGame:

+ +
// When the cake or bottle runs out...
+nommingCake.onfinish = endGame;
+drinking.onfinish = endGame;
+
+// ...or Alice reaches the end of her animation
+aliceChange.onfinish = endGame;
+
+
+ +

Ainda melhor, a Web Animations API também fornece uma promise finished que será resolvida quando a animação é completada, e rejeitada se for cancelada.

+ +

Conclusão

+ +

Essas são as funcionalidades básicas da Web Animations API, a maioria delas já estão sendo suportadas pelas últimas versões do Chrome, Firefox e Safari. Agora você está pronto pra "cair na toca do coelho" de animar utilizando o browser e pronto pra escrever e experimentar com sua própria animação! Se você está utilizando a API e deseja compartilha, tente usar a hashtag #WAAPI. Nós estaremos de olho e vamos escrever mais tutoriais para cobrir funcionalidades futuras assim que o suporte aumentar!

+ +

Veja também

+ + diff --git a/files/pt-br/web/api/web_audio_api/index.html b/files/pt-br/web/api/web_audio_api/index.html new file mode 100644 index 0000000000..8f582eb524 --- /dev/null +++ b/files/pt-br/web/api/web_audio_api/index.html @@ -0,0 +1,480 @@ +--- +title: API Web Áudio +slug: Web/API/API_Web_Audio +tags: + - Web Audio API + - api de áudio + - áudio api + - áudio web +translation_of: Web/API/Web_Audio_API +--- +
+

A API de áudio da web disponibiliza um poderoso e versátil sistema de controle de áudio para a Web, permitindo aos desenvolvedores escolher arquivos de áudio, adicionar efeitos a estes arquivos, criar reprodutores de áudio, aplicar spatial effects (como panning) e muito mais.

+
+ +

Web audio: conceitos e uso

+ +

A API de Web audio envolve manipulação de operações com áudio dentro de um contexto de áudio, e foi desenvolvida para permitir o roteamento modular. Operações básicas de áudio são feitas com audio nodes (nós de áudio), que são ligados para formar gráficos de roteamento de áudio. Várias fontes - com diferentes tipos de layout de canal - são suportados mesmo em um único contexto. Este design modular permite flexibilidade para criar funções de áudio complexas com efeitos dinâmicos.

+ +

Audio nodes são ligados pelas suas entradas e saídas, formando uma cadeia que começa com uma ou mais fontes, passa por um ou mais nodes e então acaba em um destino (embora você não tenha que fornecer um destino, por exemplo, se você quiser apenas visualizar alguns dados de áudio). Um fluxo de trabalho simples, com Web áudio, seria algo parecido com isso:

+ +
    +
  1. Crie um contexto de áudio
  2. +
  3. Dentro do contexto, crie fontes de áudio — como <audio>, oscilador, stream
  4. +
  5. Crie efeitos de áudio, como reverb, biquad filter, panner, compressor
  6. +
  7. Escolha o destino final de áudio, por exemplo os auto-falantes de seu sistema
  8. +
  9. Conecte as fontes de áudio com os efeitos, e os efeitos com o destino.
  10. +
+ +

A simple box diagram with an outer box labeled Audio context, and three inner boxes labeled Sources, Effects and Destination. The three inner boxes have arrow between them pointing from left to right, indicating the flow of audio information.

+ +

O sincronismo é controlado com alta precisão e baixa latência, permitindo aos desenvolvedores escrever códigos que respondam com precisão a eventos e capazes de gerar exemplos específicos, mesmo com uma alta taxa de amostragem. Dessa forma, aplicações como baterias eletrônicas e seqüenciadores estarão facilmente ao alcance dos desenvolvedores.

+ +

A API de Web Audio também permite o controle de como o áudio será ordenado. Usando um sistema baseado em um modelo de source-listener, a API permite controlar os painéis de modelo para serem usados e tratados com atenuação de distância induzida ou doppler shift induzido por uma fonte em movimento (ou um ouvinte em movimento).

+ +
+

Nota: Você pode ver mais detalhes sobre a teoria da API de Web Audio em nosso artigo Basic concepts behind Web Audio API.

+
+ +

Web Audio: Interfaces da API

+ +

A API de Web Audio possui um total de 28 interfaces e eventos associados, que nós dividimos e categorizamos em 9 funcionalidades.

+ +

Definições gerais de grafos de áudio (audio graph)

+ +

Definições gerais que moldam os grafos de áudio no uso da API de Web Audio.

+ +
+
{{domxref("AudioContext")}}
+
A interface AudioContext representa um grafo de processamento de áudio construído a partir de módulos de áudio ligados entre si, cada um representado por um {{domxref("AudioNode")}}. Um contexto de áudio (audio context) controla a criação dosnós que ele contém e a execução do processamento de áudio, ou a decodificação. Como tudo acontece dentro de um contexto, você deve criar um AudioContext antes de fazer qualquer outra coisa.
+
{{domxref("AudioNode")}}
+
A interface AudioNode representa um módulo de processamento de áudio como uma fonte de áudio (por exemplo, um HTML {{HTMLElement("áudio")}} ou um elemento {{HTMLElement("vídeo")}}), destino de áudio, módulo de processamento intermediário (por exemplo, um filtro como {{domxref("BiquadFilterNode")}}, ou controle de volume, como {{domxref("GainNode")}}).
+
{{domxref("AudioParam")}}
+
A interface AudioParam representa um parâmetro relacionado ao áudio, como um parâmetro de um {{domxref("AudioNode")}}. Ele pode ser configurado com um valor específico ou uma mudança de valor, e pode ser programado para "acontecer" em um momento específico e seguindo um padrão específico.
+
{{event("ended_(Web_Audio)", "ended")}} (event)
+
O evento ended é disparado quando a reprodução parou porque o fim da mídia foi atingido.
+
+ +

Definindo fontes de áudio

+ +

Interfaces que definem fontes de áudio para uso na API de Web Audio.

+ +
+
{{domxref("OscillatorNode")}}
+
A interface OscillatorNode representa uma onda senoidal. Esta interface é um módulo de processamento de áudio que gera uma onda senoidal com determinada frequência.
+
{{domxref("AudioBuffer")}}
+
A interface AudioBuffer representa uma pequena porção de áudio armazenada na memória, criada a partir de um arquivo de áudio usando o método {{ domxref("AudioContext.decodeAudioData()") }}, ou criado com os dados brutos usando o método {{ domxref("AudioContext.createBuffer()") }}. Uma vez decodificado neste formato o áudio pode ser colocada em um {{ domxref("AudioBufferSourceNode") }}.
+
{{domxref("AudioBufferSourceNode")}}
+
A interface AudioBufferSourceNode representa uma fonte de áudio que consiste em dados de áudio na memória, armazenados em um {{domxref ("AudioBuffer")}}. É um {{domxref ("AudioNode")}} que atua como uma fonte de áudio.
+
{{domxref("MediaElementAudioSourceNode")}}
+
A interface MediaElementAudioSourceNode  representa uma fonte de audio consiste de um HTML5 {{ htmlelement("audio") }} ou {{ htmlelement("video") }} elemento. É uma {{domxref("AudioNode")}} que atua como uma fonte de áudio.
+
{{domxref("MediaStreamAudioSourceNode")}}
+
The MediaStreamAudioSourceNode interface represents an audio source consisting of a WebRTC {{domxref("MediaStream")}} (such as a webcam or microphone.) It is an {{domxref("AudioNode")}} that acts as an audio source.
+
+ +

Definindo filtros de efeitos de áudio

+ +

Interfaces para definição de efeitos que você deseja aplicar em suas fontes de áudio.

+ +
+
{{domxref("BiquadFilterNode")}}
+
The BiquadFilterNode interface represents a simple low-order filter. It is an {{domxref("AudioNode")}} that can represent different kinds of filters, tone control devices or graphic equalizers. A BiquadFilterNode always has exactly one input and one output.
+
{{domxref("ConvolverNode")}}
+
The ConvolverNode interface is an {{domxref("AudioNode")}} that performs a Linear Convolution on a given AudioBuffer, often used to achieve a reverb effect.
+
{{domxref("DelayNode")}}
+
The DelayNode interface represents a delay-line; an {{domxref("AudioNode")}} audio-processing module that causes a delay between the arrival of an input data and its propagation to the output.
+
{{domxref("DynamicsCompressorNode")}}
+
The DynamicsCompressorNode interface provides a compression effect, which lowers the volume of the loudest parts of the signal in order to help prevent clipping and distortion that can occur when multiple sounds are played and multiplexed together at once.
+
{{domxref("GainNode")}}
+
The GainNode interface represents a change in volume. It is an {{domxref("AudioNode")}} audio-processing module that causes a given gain to be applied to the input data before its propagation to the output.
+
{{domxref("WaveShaperNode")}}
+
The WaveShaperNode interface represents a non-linear distorter. It is an {{domxref("AudioNode")}} that use a curve to apply a waveshaping distortion to the signal. Beside obvious distortion effects, it is often used to add a warm feeling to the signal.
+
{{domxref("PeriodicWave")}}
+
Used to define a periodic waveform that can be used to shape the output of an {{ domxref("OscillatorNode") }}.
+
+ +

Definindo destinos de áudio

+ +

Uma vez que você tenha feito o processamento do seu áudio, estas interfaces definirão aonde será a saída do áudio.

+ +
+
{{domxref("AudioDestinationNode")}}
+
The AudioDestinationNode interface represents the end destination of an audio source in a given context — usually the speakers of your device.
+
{{domxref("MediaStreamAudioDestinationNode")}}
+
The MediaElementAudioSourceNode interface represents an audio destination consisting of a WebRTC {{domxref("MediaStream")}} with a single AudioMediaStreamTrack, which can be used in a similar way to a MediaStream obtained from {{ domxref("Navigator.getUserMedia") }}. It is an {{domxref("AudioNode")}} that acts as an audio destination.
+
+ +

Análise dos dados e visualização

+ +

Se você deseja extrair tempo, frequencia e outras informações do seu áudio, o AnalyserNode é o que você necessita.

+ +
+
{{domxref("AnalyserNode")}}
+
The AnalyserNode interface represents a node able to provide real-time frequency and time-domain analysis information, for the purposes of data analysis and visualization.
+
+ +

Dividindo e mesclando canais de áudio

+ +

Para dividir e mesclar canais de áudio, você utilizará essas interfaces.

+ +
+
{{domxref("ChannelSplitterNode")}}
+
The ChannelSplitterNode interface separates the different channels of an audio source out into a set of mono outputs.
+
{{domxref("ChannelMergerNode")}}
+
The ChannelMergerNode interface reunites different mono inputs into a single outputs. Each input will be used to fill a channel of the output.
+
+ +

Audio spatialization

+ +

These interfaces allow you to add audio spatialization panning effects to your audio sources.

+ +
+
{{domxref("AudioListener")}}
+
The AudioListener interface represents the position and orientation of the unique person listening to the audio scene used in audio spatialization.
+
{{domxref("PannerNode")}}
+
The PannerNode interface represents the behavior of a signal in space. It is an {{domxref("AudioNode")}} audio-processing module describing its position with right-hand Cartesian coordinates, its movement using a velocity vector and its directionality using a directionality cone.
+
+ +

Processamento de áudio por JavaScript

+ +

Se você quiser usar um script externo para processar sua fonte de áudio, Node e eventos abaixo tornarão isto possível.

+ +
+
{{domxref("ScriptProcessorNode")}}
+
The ScriptProcessorNode interface allows the generation, processing, or analyzing of audio using JavaScript. It is an {{domxref("AudioNode")}} audio-processing module that is linked to two buffers, one containing the current input, one containing the output. An event, implementing the {{domxref("AudioProcessingEvent")}} interface, is sent to the object each time the input buffer contains new data, and the event handler terminates when it has filled the output buffer with data.
+
{{event("audioprocess")}} (event)
+
The audioprocess event is fired when an input buffer of a Web Audio API {{domxref("ScriptProcessorNode")}} is ready to be processed.
+
{{domxref("AudioProcessingEvent")}}
+
The Web Audio API AudioProcessingEvent represents events that occur when a {{domxref("ScriptProcessorNode")}} input buffer is ready to be processed.
+
+ +

Áudio offline

+ +

Manipular áudio offline é possível com estas interfaces.

+ +
+
{{domxref("OfflineAudioContext")}}
+
The OfflineAudioContext interface is an {{domxref("AudioContext")}} interface representing an audio-processing graph built from linked together {{domxref("AudioNode")}}s. In contrast with a standard AudioContext, an OfflineAudioContext doesn't really render the audio but rather generates it, as fast as it can, in a buffer.
+
{{event("complete")}} (event)
+
The complete event is fired when the rendering of an {{domxref("OfflineAudioContext")}} is terminated.
+
{{domxref("OfflineAudioCompletionEvent")}}
+
The OfflineAudioCompletionEvent represents events that occur when the processing of an {{domxref("OfflineAudioContext")}} is terminated. The {{event("complete")}} event implements this interface.
+
+ +

Interfaces obsoletas

+ +

As interfaces a seguir foram definidas em versões antigas das especificações da API de Web Audio, mas agora elas estão obsoletas e serão substituidas por outras interfaces.

+ +
+
{{domxref("JavaScriptNode")}}
+
Used for direct audio processing via JavaScript. This interface is obsolete, and has been replaced by {{domxref("ScriptProcessorNode")}}.
+
{{domxref("WaveTableNode")}}
+
Used to define a periodic waveform. This interface is obsolete, and has been replaced by {{domxref("PeriodicWave")}}.
+
+ +

Exemplo

+ +

Este exemplo mostra uma grande variedade de funções da API de Web Audio que podem ser utilizadas. Você pode ver este código em ação na demo Voice-change-o-matic (também verificar o código-fonte completo no Github) - esta é uma demonstração de um modificador de voz de brinquedo experimental; aconselhamos manter seus alto-falantes baixo ao utilizá-lo, pelo menos para começar!

+ +

As linhas API de Web Audio estão destacadas; se você quiser encontrar mais informações sobre os diferentes métodos, faça uma busca através das páginas de referência.

+ +
var audioCtx = new (window.AudioContext || window.webkitAudioContext)(); // define audio context
+// Webkit/blink browsers need prefix, Safari won't work without window.
+
+var voiceSelect = document.getElementById("voice"); // select box for selecting voice effect options
+var visualSelect = document.getElementById("visual"); // select box for selecting audio visualization options
+var mute = document.querySelector('.mute'); // mute button
+var drawVisual; // requestAnimationFrame
+
+var analyser = audioCtx.createAnalyser();
+var distortion = audioCtx.createWaveShaper();
+var gainNode = audioCtx.createGain();
+var biquadFilter = audioCtx.createBiquadFilter();
+
+function makeDistortionCurve(amount) { // function to make curve shape for distortion/wave shaper node to use
+  var k = typeof amount === 'number' ? amount : 50,
+    n_samples = 44100,
+    curve = new Float32Array(n_samples),
+    deg = Math.PI / 180,
+    i = 0,
+    x;
+  for ( ; i < n_samples; ++i ) {
+    x = i * 2 / n_samples - 1;
+    curve[i] = ( 3 + k ) * x * 20 * deg / ( Math.PI + k * Math.abs(x) );
+  }
+  return curve;
+};
+
+navigator.getUserMedia (
+  // constraints - only audio needed for this app
+  {
+    audio: true
+  },
+
+  // Success callback
+  function(stream) {
+    source = audioCtx.createMediaStreamSource(stream);
+    source.connect(analyser);
+    analyser.connect(distortion);
+    distortion.connect(biquadFilter);
+    biquadFilter.connect(gainNode);
+    gainNode.connect(audioCtx.destination); // connecting the different audio graph nodes together
+
+    visualize(stream);
+    voiceChange();
+
+  },
+
+  // Error callback
+  function(err) {
+    console.log('The following gUM error occured: ' + err);
+  }
+);
+
+function visualize(stream) {
+  WIDTH = canvas.width;
+  HEIGHT = canvas.height;
+
+  var visualSetting = visualSelect.value;
+  console.log(visualSetting);
+
+  if(visualSetting == "sinewave") {
+    analyser.fftSize = 2048;
+    var bufferLength = analyser.frequencyBinCount; // half the FFT value
+    var dataArray = new Uint8Array(bufferLength); // create an array to store the data
+
+    canvasCtx.clearRect(0, 0, WIDTH, HEIGHT);
+
+    function draw() {
+
+      drawVisual = requestAnimationFrame(draw);
+
+      analyser.getByteTimeDomainData(dataArray); // get waveform data and put it into the array created above
+
+      canvasCtx.fillStyle = 'rgb(200, 200, 200)'; // draw wave with canvas
+      canvasCtx.fillRect(0, 0, WIDTH, HEIGHT);
+
+      canvasCtx.lineWidth = 2;
+      canvasCtx.strokeStyle = 'rgb(0, 0, 0)';
+
+      canvasCtx.beginPath();
+
+      var sliceWidth = WIDTH * 1.0 / bufferLength;
+      var x = 0;
+
+      for(var i = 0; i < bufferLength; i++) {
+
+        var v = dataArray[i] / 128.0;
+        var y = v * HEIGHT/2;
+
+        if(i === 0) {
+          canvasCtx.moveTo(x, y);
+        } else {
+          canvasCtx.lineTo(x, y);
+        }
+
+        x += sliceWidth;
+      }
+
+      canvasCtx.lineTo(canvas.width, canvas.height/2);
+      canvasCtx.stroke();
+    };
+
+    draw();
+
+  } else if(visualSetting == "off") {
+    canvasCtx.clearRect(0, 0, WIDTH, HEIGHT);
+    canvasCtx.fillStyle = "red";
+    canvasCtx.fillRect(0, 0, WIDTH, HEIGHT);
+  }
+
+}
+
+function voiceChange() {
+  distortion.curve = new Float32Array;
+  biquadFilter.gain.value = 0; // reset the effects each time the voiceChange function is run
+
+  var voiceSetting = voiceSelect.value;
+  console.log(voiceSetting);
+
+  if(voiceSetting == "distortion") {
+    distortion.curve = makeDistortionCurve(400); // apply distortion to sound using waveshaper node
+  } else if(voiceSetting == "biquad") {
+    biquadFilter.type = "lowshelf";
+    biquadFilter.frequency.value = 1000;
+    biquadFilter.gain.value = 25; // apply lowshelf filter to sounds using biquad
+  } else if(voiceSetting == "off") {
+    console.log("Voice settings turned off"); // do nothing, as off option was chosen
+  }
+
+}
+
+// event listeners to change visualize and voice settings
+
+visualSelect.onchange = function() {
+  window.cancelAnimationFrame(drawVisual);
+  visualize(stream);
+}
+
+voiceSelect.onchange = function() {
+  voiceChange();
+}
+
+mute.onclick = voiceMute;
+
+function voiceMute() { // toggle to mute and unmute sound
+  if(mute.id == "") {
+    gainNode.gain.value = 0; // gain set to 0 to mute sound
+    mute.id = "activated";
+    mute.innerHTML = "Unmute";
+  } else {
+    gainNode.gain.value = 1; // gain set to 1 to unmute sound
+    mute.id = "";
+    mute.innerHTML = "Mute";
+  }
+}
+
+ +

Especificações

+ + + + + + + + + + + + + + +
EspecificaçãoStatusComentário
{{SpecName('Web Audio API')}}{{Spec2('Web Audio API')}} 
+ +

Compatibilidade de navegadores

+ +
{{CompatibilityTable}}
+ +
+ + + + + + + + + + + + + + + + + + + +
FeatureChromeFirefox (Gecko)Internet ExplorerOperaSafari (WebKit)
Basic support14 {{property_prefix("webkit")}}23{{CompatNo}}15 {{property_prefix("webkit")}}
+ 22 (unprefixed)
6 {{property_prefix("webkit")}}
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + +
FeatureAndroidChromeFirefox Mobile (Gecko)Firefox OSIE PhoneOpera MobileSafari Mobile
Basic support{{CompatNo}}28 {{property_prefix("webkit")}}251.2{{CompatNo}}{{CompatNo}}6 {{property_prefix("webkit")}}
+
+ +

 

+ +

Veja também

+ + + + diff --git a/files/pt-br/web/api/web_audio_api/simple_synth/index.html b/files/pt-br/web/api/web_audio_api/simple_synth/index.html new file mode 100644 index 0000000000..b0fdf2a0c4 --- /dev/null +++ b/files/pt-br/web/api/web_audio_api/simple_synth/index.html @@ -0,0 +1,579 @@ +--- +title: 'Tutorial e exemplo: Teclado de Sintetizador Simples' +slug: Web/API/API_Web_Audio/Sintetizador_simples +tags: + - Audio + - Exemplo + - Guía + - Media + - Oscilador + - Piano + - Sintetizador + - Tutorial + - Web Audio API +translation_of: Web/API/Web_Audio_API/Simple_synth +--- +
{{DefaultAPISidebar("Web Audio API")}}
+ +

Este artigo apresenta o código e uma demonstração funcional de um teclado que você pode tocar usando seu mouse. O teclado lhe permite alternar entre formas de onda padrões e customizadas. Esse exemplo utiliza das seguintes interfaces de Web API: {{domxref("AudioContext")}}, {{domxref("OscillatorNode")}}, {{domxref("PeriodicWave")}}, e {{domxref("GainNode")}}.

+ +

Já que {{domxref("OscillatorNode")}} é baseado no {{domxref("AudioScheduledSourceNode")}}, isso até certo ponto também é um exemplo pra isto.

+ +

O Teclado Visual

+ +

HTML

+ +

Existem três componentes primários para o display do nosso teclado virtual. O primeito do qual é o teclado musical em si. Nós extraimos em um par de elementos {{HTMLElement("div")}} aninhados para permitir a rolagem horizontal caso as teclas não encaixem na tela.

+ +

O Teclado

+ +

Primeiro, criamos o espaço no qual construiremos o teclado. Estaremos construindo o teclado programaticamente, considerando que ao fazer desse jeito teremos a flexibilidade de configurar cada tecla conforme determinamos as informações apropriadas para tecla correspondente. No nosso caso, pegamos a frequência de cada tecla através de uma tabela, mas poderia ser calculado de forma algoritmica também.

+ +
<div class="container">
+  <div class="keyboard"></div>
+</div>
+
+ +

O {{HTMLElement("div")}} nomeado de "container" é a barra de rolagem que permite o teclado ser rolado horizontalmente se for largo demais para o espaço disponivel. As teclas em si serão inseridas no bloco de classe "keyboard".

+ +

A barra de opções

+ +

Abaixo do teclado, colocaremos alguns controles para configurar o camada. Por enquanto, teremos dois controles: Um para controlar o volume e outro para selecionar a forma de onda periodica usada ao gerar as notas.

+ +
O controle de volume
+ +

Primeiro criamos o <div> para conter a barra de opções, para ser personalizado conforme preciso. Então estabelecemos uma caixa que será apresentada no lado esquerdo da barra e colocar um rotulo e um elemento {{HTMLElement("input")}} do tipo "range". O elemento range será tipicamente apresentado como o controle da barra de rolagem ; configuramos ele para permitir qualquer valor entre 0.0 e 1.0 em cada posição.

+ +
<div class="settingsBar">
+  <div class="left">
+    <span>Volume: </span>
+    <input type="range" min="0.0" max="1.0" step="0.01"
+        value="0.5" list="volumes" name="volume">
+    <datalist id="volumes">
+      <option value="0.0" label="Mute">
+      <option value="1.0" label="100%">
+    </datalist>
+  </div>
+
+ +

Especificamos um valor padrão de 0.5, e provemos um elemento {{HTMLElement("datalist")}} no qual é conectado ao range usando o atributo {{htmlattrxref("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%").

+ +
A seleção de forma de onda
+ +

E no lado da barra de configurações, colocamos um rótulo e um elemento {{HTMLElement("select")}} nomeado de "waveform" cujas opções correspondem as formas de onda disponiveis.

+ +
  <div class="right">
+    <span>Current waveform: </span>
+    <select name="waveform">
+      <option value="sine">Sine</option>
+      <option value="square" selected>Square</option>
+      <option value="sawtooth">Sawtooth</option>
+      <option value="triangle">Triangle</option>
+      <option value="custom">Custom</option>
+    </select>
+  </div>
+</div>
+ + + +

JavaScript

+ +

O código em JavaScript começa inicializando algumas váriaveis.

+ +
let audioContext = new (window.AudioContext || window.webkitAudioContext)();
+let oscList = [];
+let masterGainNode = null;
+
+ +
    +
  1. audioContext é colocado para referenciar o objeto global {{domxref("AudioContext")}} (ou webkitAudioContext se  necessário).
  2. +
  3. oscillators está colocado para conter uma lista de todos os osciladores atualmente tocando. Ele começa nulo, afinal não há nenhum oscilador tocando ainda.
  4. +
  5. masterGainNode é colocado como nulo; durante o processo de setup, ele será configurado para contar um {{domxref("GainNode")}} no quall todos os osciladores irão se conectar para permitir o volume geral a ser controlado por apenas uma barra de rolagem.
  6. +
+ +
let keyboard = document.querySelector(".keyboard");
+let wavePicker = document.querySelector("select[name='waveform']");
+let volumeControl = document.querySelector("input[name='volume']");
+
+ +

Referencias aos elementos que precisaremos acessar são obtidas através dp:

+ + + +
let noteFreq = null;
+let customWaveform = null;
+let sineTerms = null;
+let cosineTerms = null;
+
+ +

Enfim, variaveis globais que serão usadas quando as formas de onda são criadas:

+ + + +

Criando a tabela de notas

+ +

A função createNoteTable() constrói a matriz noteFreq para conter uma matriz de objetos representando cada oitava. Cada oitava, possui uma propriedade para cada nota nessa oitava; O nome dessa propriedade é o nome da nota (utilizando da notação em inglês, como "C" para representar "dó"), e o valor é a frequência, em Hertz, daquela nota.

+ +
function createNoteTable() {
+  let noteFreq = [];
+  for (let i=0; i< 9; i++) {
+    noteFreq[i] = [];
+  }
+
+  noteFreq[0]["A"] = 27.500000000000000;
+  noteFreq[0]["A#"] = 29.135235094880619;
+  noteFreq[0]["B"] = 30.867706328507756;
+
+  noteFreq[1]["C"] = 32.703195662574829;
+  noteFreq[1]["C#"] = 34.647828872109012;
+  noteFreq[1]["D"] = 36.708095989675945;
+  noteFreq[1]["D#"] = 38.890872965260113;
+  noteFreq[1]["E"] = 41.203444614108741;
+  noteFreq[1]["F"] = 43.653528929125485;
+  noteFreq[1]["F#"] = 46.249302838954299;
+  noteFreq[1]["G"] = 48.999429497718661;
+  noteFreq[1]["G#"] = 51.913087197493142;
+  noteFreq[1]["A"] = 55.000000000000000;
+  noteFreq[1]["A#"] = 58.270470189761239;
+  noteFreq[1]["B"] = 61.735412657015513;
+
+ +

... várias oitavas não mostradas para manter breve ...

+ + + +
  noteFreq[7]["C"] = 2093.004522404789077;
+  noteFreq[7]["C#"] = 2217.461047814976769;
+  noteFreq[7]["D"] = 2349.318143339260482;
+  noteFreq[7]["D#"] = 2489.015869776647285;
+  noteFreq[7]["E"] = 2637.020455302959437;
+  noteFreq[7]["F"] = 2793.825851464031075;
+  noteFreq[7]["F#"] = 2959.955381693075191;
+  noteFreq[7]["G"] = 3135.963487853994352;
+  noteFreq[7]["G#"] = 3322.437580639561108;
+  noteFreq[7]["A"] = 3520.000000000000000;
+  noteFreq[7]["A#"] = 3729.310092144719331;
+  noteFreq[7]["B"] = 3951.066410048992894;
+
+  noteFreq[8]["C"] = 4186.009044809578154;
+  return noteFreq;
+}
+
+ +

O resultado é uma matriz, noteFreq, com um objeto para cada oitava. Cada objeto de oitava tem propriedades nomeadas nela onde a propriedade é o nome da nota com a notação em inglês (Como "C" para representar "dó") e o valor da propriedade é a frequência da nota em Hertz.. o objeto resultando se parece com isso:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
OctaveNotes
0"A" ⇒ 27.5"A#" ⇒ 29.14"B" ⇒ 30.87
1"C" ⇒ 32.70"C#" ⇒ 34.65"D" ⇒ 36.71"D#" ⇒ 38.89"E" ⇒ 41.20"F" ⇒ 43.65"F#" ⇒ 46.25"G" ⇒ 49"G#" ⇒ 51.9"A" ⇒ 55"A#" ⇒ 58.27"B" ⇒ 61.74
2. . .
+ +

Com esta tabela no lugar, podemos descobrir a frequência para uma dada nota em uma oitava particular relativamente fácil. Se queremos a frequência pra nota G# na primeira oitava, nós simplesmente usamos  noteFreq[1]["G#"] e conseguimos o valor 51.9 como resultado.

+ +
+

Os valores na tabela de exemplo acima foram arredondados para duas casas decimais.

+
+ + + +

Construindo o teclado

+ +

A função setup() é responsavel por construir o teclado e preparar a aplicação para tocar a música.

+ +
function setup() {
+  noteFreq = createNoteTable();
+
+  volumeControl.addEventListener("change", changeVolume, false);
+
+  masterGainNode = audioContext.createGain();
+  masterGainNode.connect(audioContext.destination);
+  masterGainNode.gain.value = volumeControl.value;
+
+  // Create the keys; skip any that are sharp or flat; for
+  // our purposes we don't need them. Each octave is inserted
+  // into a <div> of class "octave".
+
+  noteFreq.forEach(function(keys, idx) {
+    let keyList = Object.entries(keys);
+    let octaveElem = document.createElement("div");
+    octaveElem.className = "octave";
+
+    keyList.forEach(function(key) {
+      if (key[0].length == 1) {
+        octaveElem.appendChild(createKey(key[0], idx, key[1]));
+      }
+    });
+
+    keyboard.appendChild(octaveElem);
+  });
+
+  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] = {};
+  }
+}
+
+setup();
+ +
    +
  1. A tabela que mapeia o nome e oitavas das notas para suas respectivas frequências é criado ao chamar createNoteTable().
  2. +
  3. Um manipulador de eventos é estabelecido ao chamar nosso velho amigo {{domxref("EventTarget.addEventListener", "addEventListener()")}} para cuidar dos eventos do {{event("change")}} no controle de ganho geral. Isso vai simplesmente atualizar o módulo de ganho de volume para o novo valor.
  4. +
  5. Em seguida, nós replicamos cada oitava na tabela de frequências das notas. Para cada oitava, usamos {{jsxref("Object.entries()")}} para conseguir uma lista de notas daquela oitava.
  6. +
  7. Criar um {{HTMLElement("div")}} para contar as notas daquela oitava (para ter um pouco de espaço entre as oitavas), e mudar o nome de classe para "octave".
  8. +
  9. Para cada tecla na oitava, checamos para ver se o nome daquela nota há mais de um caractere. Nós pulamos essas, pois estamos deixando notas sustenidas de fora deste exemplo. Do contrário, chamamos createKey(), especificando uma string, oitava, e frequência. O elemento retornado é anexado na elemento da oitava criada no passo 4.
  10. +
  11. Quando o elemento da oitava é construido, é então anexada ao teclado.
  12. +
  13. Uma vez que o teclado foi construido, nós rolamos para nota "B" na quinta oitava; isso tem o efeito de garantir que o C médio é visivel junto das notas ao redor.
  14. +
  15. Então uma forma de onda customizada é construida usando {{domxref("AudioContext.createPeriodicWave()")}}. Essa forma de onda será usada toda vez que o usuário selecionar "Custom" da seleção de formas de onda.
  16. +
  17. Enfim, a lista de osciladores é iniciada para garantir que está pronta para receber informação identificando quais osciladores estão associados com que teclas.
  18. +
+ +

Criando uma tecla

+ +

A função createKey()  é chamada toda vez que queremos que uma tecla seja apresentada no nosso teclado virtual. Ela cria elementos da tecla e seu rótulo, adiciona informação dos atributos ao elemento para uso posterior, e coloca modificadores de eventos para os eventos que nos importam.

+ +
function createKey(note, octave, freq) {
+  let keyElement = document.createElement("div");
+  let labelElement = document.createElement("div");
+
+  keyElement.className = "key";
+  keyElement.dataset["octave"] = octave;
+  keyElement.dataset["note"] = note;
+  keyElement.dataset["frequency"] = freq;
+
+  labelElement.innerHTML = note + "<sub>" + octave + "</sub>";
+  keyElement.appendChild(labelElement);
+
+  keyElement.addEventListener("mousedown", notePressed, false);
+  keyElement.addEventListener("mouseup", noteReleased, false);
+  keyElement.addEventListener("mouseover", notePressed, false);
+  keyElement.addEventListener("mouseleave", noteReleased, false);
+
+  return keyElement;
+}
+
+ +

Após criar  os elementos representando as teclas e seus rótulos, nós configuramos o elemento das teclas ao configurar sua classe para "key" (Que estabelece a aparência). Então adicionamos atributos {{htmlattrxref("data-*")}}  que contém a string da oitava da nota (attribute data-octave), representando a nota a ser tocada (attribute data-note), e frequência (attribute data-frequency) em Hertz. Isso irá nos permitir facilmente pegar informação conforme necessário ao cuidar de eventos.

+ +

Fazendo música

+ +

Tocando um tom

+ +

O trabalho da função playTone() é tocar um tom em uma dada frequência. Isso será usado pelo modificador para eventos acionados nas teclas do teclado, para que toquem as notas apropriadas.

+ +
function playTone(freq) {
+  let osc = audioContext.createOscillator();
+  osc.connect(masterGainNode);
+
+  let type = wavePicker.options[wavePicker.selectedIndex].value;
+
+  if (type == "custom") {
+    osc.setPeriodicWave(customWaveform);
+  } else {
+    osc.type = type;
+  }
+
+  osc.frequency.value = freq;
+  osc.start();
+
+  return osc;
+}
+
+ +

playTone() começa criando um novo {{domxref("OscillatorNode")}} ao chamar o método {{domxref("AudioContext.createOscillator()")}}. Então conectamos ele para o módulo de ganha geral ao chamar o novo método de osciladores {{domxref("OscillatorNode.connect()")}} method;, Que determina ao oscilador onde ele irá mandar seu output. Ao fazer isso, mudar o valor do ganho do módulo de ganho geral irá mudar o volume de todos os toms gerados.

+ +

Então conseguimos o tipo de forma de onda para usar ao checar o valor do controle de seleção de formas de onda na barra de opções. Se o usuário estiver colocado como "custom", chamamos {{domxref("OscillatorNode.setPeriodicWave()")}} para configurar os osciladores para usar nossa forma de onda customizada. Fazer isso automáticamente coloca o {{domxref("OscillatorNode.type", "type")}} do oscilador como custom. Se qualquer outro tipo de forma de onda é selecionado na seleção de formas de ondas, nós simplesmente colocamos os tipos de osciladores no valor da seleção, esse valor será um entre sine, square, triangle, e sawtooth.

+ +

A frequência do oscilador é colocada no valor especificado no paramêtro freq ao colocar o valor dos objetos {{domxref("Oscillator.frequency")}} {{domxref("AudioParam")}} . Então, enfim, o oscilador é iniciado e começa a produzir sons ao chamar o método {{domxref("AudioScheduledSourceNode.start()")}} .

+ +

Tocando um tom

+ +

Quando o evento {{event("mousedown")}} ou {{domxref("mouseover")}} ocorre em uma tecla, queremos que toque a nota correspondente. A função notePressed() é usada como o modificador de eventos para esses eventos.

+ +
function notePressed(event) {
+  if (event.buttons & 1) {
+    let dataset = event.target.dataset;
+
+    if (!dataset["pressed"]) {
+      let octave = +dataset["octave"];
+      oscList[octave][dataset["note"]] = playTone(dataset["frequency"]);
+      dataset["pressed"] = "yes";
+    }
+  }
+}
+
+ +

Começamos checando se o botão esquerdo do mouse é pressionado, por dois motivos. Primeiro, queremos que apenas o botão esquerdo acione as notas. Segundo, e mais importante, estamos usando isso para cuidar do {{event("mouseover")}} para casos onde o usuário arrasta de tecla a tecla, e só queremos tocar uma nota se o mouse estiver pressionado quando entrar no elemento.

+ +

Se o botão do mouse estiver de fato sendo pressionado, recebemos o atributo de tecla pressionada {{htmlattrxref("dataset")}} ; isso torna fácil o acesso das informações de atributo customizadas no elemento. Procuramos por um atributo data-pressed ; caso não haja um(o que indica que a nota não está tocando ainda), chamamos playTone() para começar a tocar a nota, passando no valor dos elementos do atributo data-frequency. O valor retornado do oscilador é guardado no oscList para refêrencia futura, e data-pressed é colocado como yes para indicar que a nota está tocando para que não iniciemos novamente na próxima vez que isso for chamado.

+ +

Parando um tom

+ +

A função noteReleased() é o modificador de eventos chamado quando o usuário solta o botão do mouse ou move o mouse para fora da tecla que ele está tocando.

+ +
function noteReleased(event) {
+  let dataset = event.target.dataset;
+
+  if (dataset && dataset["pressed"]) {
+    let octave = +dataset["octave"];
+    oscList[octave][dataset["note"]].stop();
+    delete oscList[octave][dataset["note"]];
+    delete dataset["pressed"];
+  }
+}
+
+ +

noteReleased() usa os atributos customizados data-octave and data-note  para procurar os osciladores das teclas, e então chama o método de oscilador {{domxref("AudioScheduledSourceNode.stop", "stop()")}} para parar de tocar a nota. Finalmente, a entrada oscList para nota é limpa e o atributo data-pressed é removido do elemento da tecla (como identificado pelo {{domxref("event.target")}}), para indicar que a nota não está tocando no momento.

+ +

Mudando o volume geral

+ +

A barra de rolagem do volume na barra de opções dá uma simples interface para mudar o valor do ganho no módulo de ganho geral, então mudando o volume de todas as notas sendo tocadas. O metódo changeVolume() é o modificador do evento {{event("change")}} na barra de rolagem.

+ +
function changeVolume(event) {
+  masterGainNode.gain.value = volumeControl.value
+}
+
+ +

Isso simplesmente coloca o valor do módulo de ganho geral gain {{domxref("AudioParam")}} para o novo valor na barra de rolagem.

+ +

Resultado

+ +

Coloque tudo junto, o resultado é um simples e funcional teclado virtual que funciona com o clique:

+ +

{{ EmbedLiveSample('The_video_keyboard', 680, 200) }}

+ +

Veja também

+ + diff --git a/files/pt-br/web/api/web_storage_api/index.html b/files/pt-br/web/api/web_storage_api/index.html new file mode 100644 index 0000000000..f4e16bd9e7 --- /dev/null +++ b/files/pt-br/web/api/web_storage_api/index.html @@ -0,0 +1,139 @@ +--- +title: API de Armazenamento na Web +slug: Web/API/Web_Storage_API_pt_br +translation_of: Web/API/Web_Storage_API +--- +

{{DefaultAPISidebar("Web Storage API")}}

+ +

A  API de armazenamento na web (Web Storage) fornece mecanismos para que os navegadores possam armazenar dados através de chave/valor de uma forma mais eficiente que os cookies.

+ +

Armazenamento na Web conceitos e formas de uso

+ +

A API de Web Storage fornece duas maneiras de armazenar dados:

+ + + +

Esses mecanismos estão disponíveis a partir das seguintes propriedades {{domxref("Window.sessionStorage")}} e {{domxref("Window.localStorage")}} (para um maior suporte, o objeto Window implementa os objetos  Window.LocalStorageWindow.SessionStorage) — ao invocar uma dessas propriedades, é criada uma instância do objeto {{domxref("Storage")}}, que fornece métodos para inserir, recuperar e remover os dados. Sempre será utilizado um objeto diferente para cada origem de sessionStorage e localStorage, dessa forma o controle de ambos é realizado de forma separada.

+ +
+

Nota: O acesso a API de Web storage a partir de IFrames de terceiros é negado se o usuário desabilitou cookies de terceiros (Firefox implementa esse comportamento a partir da versão 43 em diante).

+
+ +
+

Nota: Web Storage não é o mesmo que mozStorage (interface XPCOM da Mozilla para o SQLite) ou Session store API (uma forma de armazenamento XPCOM para uso de extensões).

+
+ +

Interfaces de Armazenamento na Web

+ +
+
{{domxref("Storage")}}
+
Permite que você insira, recupere e remova dados de um domínio no storage(session ou local).
+
{{domxref("Window")}}
+
A API de Web Storage estende o objeto {{domxref("Window")}} com duas novas propriedades — {{domxref("Window.sessionStorage")}} e {{domxref("Window.localStorage")}} —  fornecendo acesso à sessão do domínio atual e local para o objeto {{domxref("Storage")}} respectivamente.
+
{{domxref("StorageEvent")}}
+
+

Um evento de storage é chamado em um objeto window do documento quando ocorre uma mudança no storage.

+
+
+ +

Exemplos

+ +

Para desmonstrar o uso de web storage, nós criamos um exemplo simples, chamado Web Storage Demo. A página da demo landing page oferece funcionalidades que permitem alterar a cor, fonte e imagem que é exibida na página. Quando você escolhe uma opção diferente, a página será atualizada imediatamente. Além disso, sua escolha foi armazenada em localStorage,  para que quando você feche o navegador e abra novamente para acessar a página, suas escolhas sejam lembradas.

+ +

Nós também fornecemos um event output page —  para quando você abrir a página em outra aba,  as informações sejam atualizadas através da chamada de um {{event("StorageEvent")}}.

+ +

Especificações

+ + + + + + + + + + + + + + +
EspecificaçãoStatusComentário
{{SpecName('Web Storage')}}{{Spec2('Web Storage')}}
+ +

Compatibilidade com os Navegadores

+ +

{{ CompatibilityTable() }}

+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
PropriedadeChromeFirefox (Gecko)Internet ExplorerOperaSafari (WebKit)
localStorage43.5810.504
sessionStorage52810.504
+
+ +
+ + + + + + + + + + + + + + + + + + + +
FeatureAndroidFirefox Mobile (Gecko)IE PhoneOpera MobileSafari Mobile
Suporte básico2.1{{ CompatUnknown }}811iOS 3.2
+
+ +

Todos os navegadores têm espaços de armazenamento diferentes tanto para localStorage quanto para sessionStorage. Veja um resumo detalhado da capacidade de armazenamento de vários navegadores.

+ +
+

Nota: Desde iOS 5.1, o Safari armazena dados móveis de LocalStorage na pasta cache, que está sujeito a limpeza pelo OS, além disso o espaço de armazenamento é curto.

+
+ + + +

Boa parte dos navegadores atuais suportam a opção de privacidade chamada modo de "Navegação privada ou anônima", que basicamente torna a sessão de navegação privada e não deixa rastros depois que o navegador é fechado. Este modo é incompatível com armazenamento na Web por razões óbvias. Os fabricantes de navegadores estão experimentando com diferentes cenários como lidar com essa incompatibilidade.

+ +

A maioria dos navegadores optaram por uma estratégia onde as APIs de armazenamento ainda estão disponíveis e, aparentemente, funcional, com a grande diferença de que todos os dados armazenados é apagado depois que o navegador é fechado. Para estes navegadores ainda existem diferentes interpretações sobre o que deve ser feito com os dados existentes armazenados (a partir de uma sessão de navegação regular). E quanto   a leitura dos dados se o navegador estiver no modo privado? Há alguns navegadores, principalmente Safari, que optaram por uma solução em que o armazenamento está disponível, mas está vazio e tem uma quota de 0 bytes atribuídos, tornando impossível o armazenamento de dados.

+ +

Os desenvolvedores devem estar cientes e considerar as diferentes formas de implementações ao desenvolverem sites dependendo das APIs Web Storage. Para mais informações, leia neste post escrito no blog do WHATWG que lida especificamente com este tópico.

+ +

Veja também

+ +

Usando a API Web Storage

diff --git a/files/pt-br/web/api/web_storage_api/using_the_web_storage_api/index.html b/files/pt-br/web/api/web_storage_api/using_the_web_storage_api/index.html new file mode 100644 index 0000000000..eb9807f0ef --- /dev/null +++ b/files/pt-br/web/api/web_storage_api/using_the_web_storage_api/index.html @@ -0,0 +1,267 @@ +--- +title: Usando a API Web Storage +slug: Web/API/Web_Storage_API_pt_br/Using_the_Web_Storage_API +tags: + - API + - Guía + - Storage + - Web Storage API + - localStorage + - sessionStorage +translation_of: Web/API/Web_Storage_API/Using_the_Web_Storage_API +--- +
{{DefaultAPISidebar("Web Storage API")}}
+ +
+

A API Web Storage fornece mecanismos pelos quais os navegadores podem armazenar pares de chaves/valores de uma maneira muito mais segura e intuitiva do que usar cookies. Este artigo fornece um passo a passo sobre como usar essa tecnologia.

+
+ +

Conceitos básicos

+ +

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:

+ +
localStorage.corDefinida = '#a4509b';
+localStorage['corDefinida'] = '#a4509b';
+localStorage.setItem('corDefinida', '#a4509b');
+ +
+

Nota: Recomendamos que você utilize a API Web Storage (setItemgetItemremoveItemkeylength) para evitar as armadilhas associadas ao uso de objetos literais como mapas de chave-valor.

+
+ +

Os dois mecanismos presentes na Web Storage são os seguintes:

+ + + +

Esses mecanismos estão disponíveis através das propriedades {{domxref("Window.sessionStorage")}} e {{domxref("Window.localStorage")}} (de forma mais específica, em navegadores compatíveis, o objeto Window implementa os objetos WindowLocalStorageWindowSessionStorage, aos quais as propriedades localStorage and sessionStorage pertencem, respectivamente) — invocar uma dessas propriedades irá criar uma instância do objeto {{domxref("Storage")}}, através do qual itens de dados podem ser definidos, acessados e removidos. Cada origem recebe objetos Storage diferentes para sessionStorage and localStorage — eles operam e são controlados separadamente.

+ +

Por exemplo, chamar localStorage pela primeira vez em um documento retornará um objeto {{domxref("Storage")}}; chamar sessionStorage em um documento retornará um outro objeto {{domxref("Storage")}}. Ambos podem ser manipulados da mesma maneira, mas de forma isolada.

+ +

Detectando a disponibilidade do localStorage

+ +

Para poder usarmos o localStorage, devemos antes verificar se ele é compatível e está disponível na sessão atual de navegação.

+ +

Testando a disponibilidade

+ +

Navegadores compatíveis com localStorage terão uma propriedade no objeto window chamada localStorage. Contudo, por várias razões, apenas verificar se essa propriedade existe pode gerar erros. Se ela existir, ainda não haverá garantias de que o localStorage está de fato disponível para uso, já que vários navegadores fornecem opções que desativam o localStorage. Dessa forma, um navegador pode ser compatível com o localStorage, mas também pode não torná-lo disponível para os scripts usarem. One example of that is Safari, which in Private Browsing mode gives us an empty localStorage object with a quota of zero, effectively making it unusable. However, we might still get a legitimate QuotaExceededError, which only means that we've used up all available storage space, but storage is actually available. Our feature detect should take these scenarios into account.

+ +

Here is a function that detects whether localStorage is both supported and available:

+ +
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;
+    }
+}
+ +

And here is how you would use it:

+ +
if (storageAvailable('localStorage')) {
+  // Yippee! We can use localStorage awesomeness
+}
+else {
+  // Too bad, no localStorage for us
+}
+ +

You can test for sessionStorage instead by calling storageAvailable('sessionStorage').

+ +

See here for a brief history of feature-detecting localStorage.

+ +

Example

+ +

To illustrate some typical web storage usage, we have created a simple example, imaginatively called Web Storage Demo. The landing page provides controls that can be used to customize the color, font, and decorative image:

+ +

When you choose different options, the page is instantly updated; in addition, your choices are stored in localStorage, so that when you leave the page and load it again, later on, your choices are remembered.

+ +

We have also provided an event output page — if you load this page in another tab, then make changes to your choices in the landing page, you'll see the updated storage information outputted as a {{domxref("StorageEvent")}} is fired.

+ +

+ +
+

Note: As well as viewing the example pages live using the above links, you can also check out the source code.

+
+ +

Testing whether your storage has been populated

+ +

To start with on main.js, we will test whether the storage object has already been populated (i.e., the page was previously accessed):

+ +
if(!localStorage.getItem('bgcolor')) {
+  populateStorage();
+} else {
+  setStyles();
+}
+ +

The {{domxref("Storage.getItem()")}} method is used to get a data item from storage; in this case, we are testing to see whether the bgcolor item exists; if not, we run populateStorage() to add the existing customization values to the storage. If there are already values there, we run setStyles() to update the page styling with the stored values.

+ +

Note: You could also use {{domxref("Storage.length")}} to test whether the storage object is empty or not.

+ +

Getting values from storage

+ +

As noted above, values can be retrieved from storage using {{domxref("Storage.getItem()")}}. This takes the key of the data item as an argument, and returns the data value. For example:

+ +
function setStyles() {
+  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;
+
+  htmlElem.style.backgroundColor = '#' + currentColor;
+  pElem.style.fontFamily = currentFont;
+  imgElem.setAttribute('src', currentImage);
+}
+ +

Here, the first three lines grab the values from local storage. Next, we set the values displayed in the form elements to those values, so that they keep in sync when you reload the page. Finally, we update the styles/decorative image on the page, so your customization options come up again on reload.

+ +

Setting values in storage

+ +

{{domxref("Storage.setItem()")}} is used both to create new data items, and (if the data item already exists) update existing values. This takes two arguments — the key of the data item to create/modify, and the value to store in it.

+ +
function populateStorage() {
+  localStorage.setItem('bgcolor', document.getElementById('bgcolor').value);
+  localStorage.setItem('font', document.getElementById('font').value);
+  localStorage.setItem('image', document.getElementById('image').value);
+
+  setStyles();
+}
+ +

The populateStorage() function sets three items in local storage — the background color, font, and image path. It then runs the setStyles() function to update the page styles, etc.

+ +

We've also included an onchange handler on each form element so that the data and styling are updated whenever a form value is changed:

+ +
bgcolorForm.onchange = populateStorage;
+fontForm.onchange = populateStorage;
+imageForm.onchange = populateStorage;
+ +

Responding to storage changes with the StorageEvent

+ +

The {{domxref("StorageEvent")}} is fired whenever a change is made to the {{domxref("Storage")}} object (note that this event is not fired for sessionStorage changes). This won't work on the same page that is making the changes — it is really a way for other pages on the domain using the storage to sync any changes that are made. Pages on other domains can't access the same storage objects.

+ +

On the events page (see events.js) the only JavaScript is as follows:

+ +
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;
+});
+ +

Here we add an event listener to the window object that fires when the {{domxref("Storage")}} object associated with the current origin is changed. As you can see above, the event object associated with this event has a number of properties containing useful information — the key of the data that changed, the old value before the change, the new value after that change, the URL of the document that changed the storage, and the storage object itself.

+ +

Deleting data records

+ +

Web Storage also provides a couple of simple methods to remove data. We don't use these in our demo, but they are very simple to add to your project:

+ + + +

Specifications

+ + + + + + + + + + + + + + +
SpecificationStatusComment
{{SpecName('HTML WHATWG', 'webstorage.html#webstorage')}}{{Spec2('HTML WHATWG')}} 
+ +

Browser compatibility

+ +

{{ CompatibilityTable() }}

+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
FeatureChromeFirefox (Gecko)Internet ExplorerOperaSafari (WebKit)
localStorage43.5810.504
sessionStorage52810.504
+
+ +
+ + + + + + + + + + + + + + + + + + + +
FeatureAndroidFirefox Mobile (Gecko)IE PhoneOpera MobileSafari Mobile
Basic support2.1{{ CompatUnknown }}811iOS 3.2
+
+ +

All browsers have varying capacity levels for both localStorage and sessionStorage. Here is a detailed rundown of all the storage capacities for various browsers.

+ +
+

Note: since iOS 5.1, Safari Mobile stores localStorage data in the cache folder, which is subject to occasional cleanup, at the behest of the OS, typically if space is short.

+
+ +

See also

+ + diff --git a/files/pt-br/web/api/web_storage_api_pt_br/index.html b/files/pt-br/web/api/web_storage_api_pt_br/index.html deleted file mode 100644 index f4e16bd9e7..0000000000 --- a/files/pt-br/web/api/web_storage_api_pt_br/index.html +++ /dev/null @@ -1,139 +0,0 @@ ---- -title: API de Armazenamento na Web -slug: Web/API/Web_Storage_API_pt_br -translation_of: Web/API/Web_Storage_API ---- -

{{DefaultAPISidebar("Web Storage API")}}

- -

A  API de armazenamento na web (Web Storage) fornece mecanismos para que os navegadores possam armazenar dados através de chave/valor de uma forma mais eficiente que os cookies.

- -

Armazenamento na Web conceitos e formas de uso

- -

A API de Web Storage fornece duas maneiras de armazenar dados:

- - - -

Esses mecanismos estão disponíveis a partir das seguintes propriedades {{domxref("Window.sessionStorage")}} e {{domxref("Window.localStorage")}} (para um maior suporte, o objeto Window implementa os objetos  Window.LocalStorageWindow.SessionStorage) — ao invocar uma dessas propriedades, é criada uma instância do objeto {{domxref("Storage")}}, que fornece métodos para inserir, recuperar e remover os dados. Sempre será utilizado um objeto diferente para cada origem de sessionStorage e localStorage, dessa forma o controle de ambos é realizado de forma separada.

- -
-

Nota: O acesso a API de Web storage a partir de IFrames de terceiros é negado se o usuário desabilitou cookies de terceiros (Firefox implementa esse comportamento a partir da versão 43 em diante).

-
- -
-

Nota: Web Storage não é o mesmo que mozStorage (interface XPCOM da Mozilla para o SQLite) ou Session store API (uma forma de armazenamento XPCOM para uso de extensões).

-
- -

Interfaces de Armazenamento na Web

- -
-
{{domxref("Storage")}}
-
Permite que você insira, recupere e remova dados de um domínio no storage(session ou local).
-
{{domxref("Window")}}
-
A API de Web Storage estende o objeto {{domxref("Window")}} com duas novas propriedades — {{domxref("Window.sessionStorage")}} e {{domxref("Window.localStorage")}} —  fornecendo acesso à sessão do domínio atual e local para o objeto {{domxref("Storage")}} respectivamente.
-
{{domxref("StorageEvent")}}
-
-

Um evento de storage é chamado em um objeto window do documento quando ocorre uma mudança no storage.

-
-
- -

Exemplos

- -

Para desmonstrar o uso de web storage, nós criamos um exemplo simples, chamado Web Storage Demo. A página da demo landing page oferece funcionalidades que permitem alterar a cor, fonte e imagem que é exibida na página. Quando você escolhe uma opção diferente, a página será atualizada imediatamente. Além disso, sua escolha foi armazenada em localStorage,  para que quando você feche o navegador e abra novamente para acessar a página, suas escolhas sejam lembradas.

- -

Nós também fornecemos um event output page —  para quando você abrir a página em outra aba,  as informações sejam atualizadas através da chamada de um {{event("StorageEvent")}}.

- -

Especificações

- - - - - - - - - - - - - - -
EspecificaçãoStatusComentário
{{SpecName('Web Storage')}}{{Spec2('Web Storage')}}
- -

Compatibilidade com os Navegadores

- -

{{ CompatibilityTable() }}

- -
- - - - - - - - - - - - - - - - - - - - - - - - - - - -
PropriedadeChromeFirefox (Gecko)Internet ExplorerOperaSafari (WebKit)
localStorage43.5810.504
sessionStorage52810.504
-
- -
- - - - - - - - - - - - - - - - - - - -
FeatureAndroidFirefox Mobile (Gecko)IE PhoneOpera MobileSafari Mobile
Suporte básico2.1{{ CompatUnknown }}811iOS 3.2
-
- -

Todos os navegadores têm espaços de armazenamento diferentes tanto para localStorage quanto para sessionStorage. Veja um resumo detalhado da capacidade de armazenamento de vários navegadores.

- -
-

Nota: Desde iOS 5.1, o Safari armazena dados móveis de LocalStorage na pasta cache, que está sujeito a limpeza pelo OS, além disso o espaço de armazenamento é curto.

-
- - - -

Boa parte dos navegadores atuais suportam a opção de privacidade chamada modo de "Navegação privada ou anônima", que basicamente torna a sessão de navegação privada e não deixa rastros depois que o navegador é fechado. Este modo é incompatível com armazenamento na Web por razões óbvias. Os fabricantes de navegadores estão experimentando com diferentes cenários como lidar com essa incompatibilidade.

- -

A maioria dos navegadores optaram por uma estratégia onde as APIs de armazenamento ainda estão disponíveis e, aparentemente, funcional, com a grande diferença de que todos os dados armazenados é apagado depois que o navegador é fechado. Para estes navegadores ainda existem diferentes interpretações sobre o que deve ser feito com os dados existentes armazenados (a partir de uma sessão de navegação regular). E quanto   a leitura dos dados se o navegador estiver no modo privado? Há alguns navegadores, principalmente Safari, que optaram por uma solução em que o armazenamento está disponível, mas está vazio e tem uma quota de 0 bytes atribuídos, tornando impossível o armazenamento de dados.

- -

Os desenvolvedores devem estar cientes e considerar as diferentes formas de implementações ao desenvolverem sites dependendo das APIs Web Storage. Para mais informações, leia neste post escrito no blog do WHATWG que lida especificamente com este tópico.

- -

Veja também

- -

Usando a API Web Storage

diff --git a/files/pt-br/web/api/web_storage_api_pt_br/using_the_web_storage_api/index.html b/files/pt-br/web/api/web_storage_api_pt_br/using_the_web_storage_api/index.html deleted file mode 100644 index eb9807f0ef..0000000000 --- a/files/pt-br/web/api/web_storage_api_pt_br/using_the_web_storage_api/index.html +++ /dev/null @@ -1,267 +0,0 @@ ---- -title: Usando a API Web Storage -slug: Web/API/Web_Storage_API_pt_br/Using_the_Web_Storage_API -tags: - - API - - Guía - - Storage - - Web Storage API - - localStorage - - sessionStorage -translation_of: Web/API/Web_Storage_API/Using_the_Web_Storage_API ---- -
{{DefaultAPISidebar("Web Storage API")}}
- -
-

A API Web Storage fornece mecanismos pelos quais os navegadores podem armazenar pares de chaves/valores de uma maneira muito mais segura e intuitiva do que usar cookies. Este artigo fornece um passo a passo sobre como usar essa tecnologia.

-
- -

Conceitos básicos

- -

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:

- -
localStorage.corDefinida = '#a4509b';
-localStorage['corDefinida'] = '#a4509b';
-localStorage.setItem('corDefinida', '#a4509b');
- -
-

Nota: Recomendamos que você utilize a API Web Storage (setItemgetItemremoveItemkeylength) para evitar as armadilhas associadas ao uso de objetos literais como mapas de chave-valor.

-
- -

Os dois mecanismos presentes na Web Storage são os seguintes:

- - - -

Esses mecanismos estão disponíveis através das propriedades {{domxref("Window.sessionStorage")}} e {{domxref("Window.localStorage")}} (de forma mais específica, em navegadores compatíveis, o objeto Window implementa os objetos WindowLocalStorageWindowSessionStorage, aos quais as propriedades localStorage and sessionStorage pertencem, respectivamente) — invocar uma dessas propriedades irá criar uma instância do objeto {{domxref("Storage")}}, através do qual itens de dados podem ser definidos, acessados e removidos. Cada origem recebe objetos Storage diferentes para sessionStorage and localStorage — eles operam e são controlados separadamente.

- -

Por exemplo, chamar localStorage pela primeira vez em um documento retornará um objeto {{domxref("Storage")}}; chamar sessionStorage em um documento retornará um outro objeto {{domxref("Storage")}}. Ambos podem ser manipulados da mesma maneira, mas de forma isolada.

- -

Detectando a disponibilidade do localStorage

- -

Para poder usarmos o localStorage, devemos antes verificar se ele é compatível e está disponível na sessão atual de navegação.

- -

Testando a disponibilidade

- -

Navegadores compatíveis com localStorage terão uma propriedade no objeto window chamada localStorage. Contudo, por várias razões, apenas verificar se essa propriedade existe pode gerar erros. Se ela existir, ainda não haverá garantias de que o localStorage está de fato disponível para uso, já que vários navegadores fornecem opções que desativam o localStorage. Dessa forma, um navegador pode ser compatível com o localStorage, mas também pode não torná-lo disponível para os scripts usarem. One example of that is Safari, which in Private Browsing mode gives us an empty localStorage object with a quota of zero, effectively making it unusable. However, we might still get a legitimate QuotaExceededError, which only means that we've used up all available storage space, but storage is actually available. Our feature detect should take these scenarios into account.

- -

Here is a function that detects whether localStorage is both supported and available:

- -
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;
-    }
-}
- -

And here is how you would use it:

- -
if (storageAvailable('localStorage')) {
-  // Yippee! We can use localStorage awesomeness
-}
-else {
-  // Too bad, no localStorage for us
-}
- -

You can test for sessionStorage instead by calling storageAvailable('sessionStorage').

- -

See here for a brief history of feature-detecting localStorage.

- -

Example

- -

To illustrate some typical web storage usage, we have created a simple example, imaginatively called Web Storage Demo. The landing page provides controls that can be used to customize the color, font, and decorative image:

- -

When you choose different options, the page is instantly updated; in addition, your choices are stored in localStorage, so that when you leave the page and load it again, later on, your choices are remembered.

- -

We have also provided an event output page — if you load this page in another tab, then make changes to your choices in the landing page, you'll see the updated storage information outputted as a {{domxref("StorageEvent")}} is fired.

- -

- -
-

Note: As well as viewing the example pages live using the above links, you can also check out the source code.

-
- -

Testing whether your storage has been populated

- -

To start with on main.js, we will test whether the storage object has already been populated (i.e., the page was previously accessed):

- -
if(!localStorage.getItem('bgcolor')) {
-  populateStorage();
-} else {
-  setStyles();
-}
- -

The {{domxref("Storage.getItem()")}} method is used to get a data item from storage; in this case, we are testing to see whether the bgcolor item exists; if not, we run populateStorage() to add the existing customization values to the storage. If there are already values there, we run setStyles() to update the page styling with the stored values.

- -

Note: You could also use {{domxref("Storage.length")}} to test whether the storage object is empty or not.

- -

Getting values from storage

- -

As noted above, values can be retrieved from storage using {{domxref("Storage.getItem()")}}. This takes the key of the data item as an argument, and returns the data value. For example:

- -
function setStyles() {
-  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;
-
-  htmlElem.style.backgroundColor = '#' + currentColor;
-  pElem.style.fontFamily = currentFont;
-  imgElem.setAttribute('src', currentImage);
-}
- -

Here, the first three lines grab the values from local storage. Next, we set the values displayed in the form elements to those values, so that they keep in sync when you reload the page. Finally, we update the styles/decorative image on the page, so your customization options come up again on reload.

- -

Setting values in storage

- -

{{domxref("Storage.setItem()")}} is used both to create new data items, and (if the data item already exists) update existing values. This takes two arguments — the key of the data item to create/modify, and the value to store in it.

- -
function populateStorage() {
-  localStorage.setItem('bgcolor', document.getElementById('bgcolor').value);
-  localStorage.setItem('font', document.getElementById('font').value);
-  localStorage.setItem('image', document.getElementById('image').value);
-
-  setStyles();
-}
- -

The populateStorage() function sets three items in local storage — the background color, font, and image path. It then runs the setStyles() function to update the page styles, etc.

- -

We've also included an onchange handler on each form element so that the data and styling are updated whenever a form value is changed:

- -
bgcolorForm.onchange = populateStorage;
-fontForm.onchange = populateStorage;
-imageForm.onchange = populateStorage;
- -

Responding to storage changes with the StorageEvent

- -

The {{domxref("StorageEvent")}} is fired whenever a change is made to the {{domxref("Storage")}} object (note that this event is not fired for sessionStorage changes). This won't work on the same page that is making the changes — it is really a way for other pages on the domain using the storage to sync any changes that are made. Pages on other domains can't access the same storage objects.

- -

On the events page (see events.js) the only JavaScript is as follows:

- -
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;
-});
- -

Here we add an event listener to the window object that fires when the {{domxref("Storage")}} object associated with the current origin is changed. As you can see above, the event object associated with this event has a number of properties containing useful information — the key of the data that changed, the old value before the change, the new value after that change, the URL of the document that changed the storage, and the storage object itself.

- -

Deleting data records

- -

Web Storage also provides a couple of simple methods to remove data. We don't use these in our demo, but they are very simple to add to your project:

- - - -

Specifications

- - - - - - - - - - - - - - -
SpecificationStatusComment
{{SpecName('HTML WHATWG', 'webstorage.html#webstorage')}}{{Spec2('HTML WHATWG')}} 
- -

Browser compatibility

- -

{{ CompatibilityTable() }}

- -
- - - - - - - - - - - - - - - - - - - - - - - - - - - -
FeatureChromeFirefox (Gecko)Internet ExplorerOperaSafari (WebKit)
localStorage43.5810.504
sessionStorage52810.504
-
- -
- - - - - - - - - - - - - - - - - - - -
FeatureAndroidFirefox Mobile (Gecko)IE PhoneOpera MobileSafari Mobile
Basic support2.1{{ CompatUnknown }}811iOS 3.2
-
- -

All browsers have varying capacity levels for both localStorage and sessionStorage. Here is a detailed rundown of all the storage capacities for various browsers.

- -
-

Note: since iOS 5.1, Safari Mobile stores localStorage data in the cache folder, which is subject to occasional cleanup, at the behest of the OS, typically if space is short.

-
- -

See also

- - diff --git a/files/pt-br/web/api/webgl_api/tutorial/adding_2d_content_to_a_webgl_context/index.html b/files/pt-br/web/api/webgl_api/tutorial/adding_2d_content_to_a_webgl_context/index.html new file mode 100644 index 0000000000..7b4f6384f6 --- /dev/null +++ b/files/pt-br/web/api/webgl_api/tutorial/adding_2d_content_to_a_webgl_context/index.html @@ -0,0 +1,226 @@ +--- +title: Adicionando conteúdo 2D a um contexto WebGL +slug: Web/API/WebGL_API/Tutorial/Adicionando_conteudo_2D_a_um_contexto_WebGL +tags: + - Tutorial + - WebGL +translation_of: Web/API/WebGL_API/Tutorial/Adding_2D_content_to_a_WebGL_context +--- +

{{WebGLSidebar("Tutorial")}} {{PreviousNext("Web/API/WebGL_API/Tutorial/Getting_started_with_WebGL", "Web/API/WebGL_API/Tutorial/Using_shaders_to_apply_color_in_WebGL")}}

+ +

Uma vez que você tenha  criado um contexto WebGL com sucesso, você pode iniciar a renderizar nele. O mais simples que podemos fazer é desenhar um objeto 2D não texturizado. Então vamos começar por aí, construindo o código necessário para se desenhar um quadrado.

+ +

Desenhando a cena

+ +

A coisa mais importante para se entender antes de começarmos é que, mesmo que estejamos só renderizando um objeto bidimensional nesse exemplo, nós ainda estamos desenhamos em um espaço 3d. Portanto, ainda precisamos estabelecer os shaders que irão criar a cor para a nossa cena simples, assim como desenhar o objeto. Eles irão estabelecer como o quadrado irá aparecer na tela.

+ +

Inicializando os shaders

+ +

Shaders são especificados ao usar a Linguagem de Shading OpenGL ES. Com o intuito de tornar mais fácil para manter e atualizar nosso conteúdo, nós podemos escrever nosso código que carrega os shaders para buscá-los no documento HTML, ao invés de termos de criar tudo em JavaScript. Vamos dar uma olhada na nossa rotina initShaders(), que cuida dessa tarefa:

+ +
function initShaders() {
+  var fragmentShader = getShader(gl, "shader-fs");
+  var vertexShader = getShader(gl, "shader-vs");
+
+  // Cria o progrma shader
+
+  shaderProgram = gl.createProgram();
+  gl.attachShader(shaderProgram, vertexShader);
+  gl.attachShader(shaderProgram, fragmentShader);
+  gl.linkProgram(shaderProgram);
+
+  // Se falhar ao criar o progrma shader, alerta
+
+  if (!gl.getProgramParameter(shaderProgram, gl.LINK_STATUS)) {
+    alert("Não foi possível inicializar o programa shader.");
+  }
+
+  gl.useProgram(shaderProgram);
+
+  vertexPositionAttribute = gl.getAttribLocation(shaderProgram, "aVertexPosition");
+  gl.enableVertexAttribArray(vertexPositionAttribute);
+}
+
+
+ +

Dois programas estão sendo inicializados por essa rotina; o primeiro, fragment shader, é carregado a partir do elemento HTML com o id "shader-fs". O segundo, vertex shader, é carregado pelo elemento HTML com o id "shader-vs". Nós vamos analisar a função getShader() no próximo tutorial; Essa rotina, na verdade, lida com a parte de puxar os programas shader da DOM.

+ +

Então nós criamos o programa shader chamando do objeto WebGL a função createProgram(), anexamos dois shaders nele e fazemos o link com o programa shader. Depois de fazer isso, o parametro LINK_STATUS do objeto g1 é checado para ter certeza de que o link foi criado com sucesso; Se sim, nós ativamos o novo programa shader.

+ +

Carregando os shaders da DOM

+ +

A rotina getShader() busca um programa shader com o nome específico do DOM, retornando o programa shader compilado para o requisitante, ou null se ele não pode ser carregado ou compilado.

+ +
function getShader(gl, id) {
+  var shaderScript, theSource, currentChild, shader;
+
+  shaderScript = document.getElementById(id);
+
+  if (!shaderScript) {
+    return null;
+  }
+
+  theSource = "";
+  currentChild = shaderScript.firstChild;
+
+  while(currentChild) {
+    if (currentChild.nodeType == currentChild.TEXT_NODE) {
+      theSource += currentChild.textContent;
+    }
+
+    currentChild = currentChild.nextSibling;
+  }
+
+ +

Uma vez que o elemento com o ID específico é encontrado, seu texto é lido na variável theSource.

+ +
  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.

+ +
  gl.shaderSource(shader, theSource);
+
+  // Compile o programa shader
+  gl.compileShader(shader);
+
+  // Veja se ele compila com sucesso
+  if (!gl.getShaderParameter(shader, gl.COMPILE_STATUS)) {
+      alert("Um erro ocorreu ao compilar os shaders: " + gl.getShaderInfoLog(shader));
+      return null;
+  }
+
+  return shader;
+}
+
+ +

Finalmente, a fonte é passada para o shader e compilada. Se um erro ocorrer enquanto o shader estiver compilando, nós mostraremos um alerta e retornaremos null; Caso contrário, o shader recém compilado é retornado para o requisitante.

+ +

Os shaders

+ +

Agora, nós precisamos adicionar os programas shaders ao HTML para descrever nosso documento. Os detalhes sobre como os shaders trabalham estão além do escopo deste artigo, assim como a sintaxe da linguagem do shader.

+ +

Fragmentos shader

+ +

Cada pixel é um poligono chamado de fragmento (fragment) na linguagem GL. O trabalho do fragmento de shader é estabelecer a cor de cada pixel. Ness caso, nós estamos apenas definindo a cor branca para cada pixel.

+ +

g1_FragColor é um construtor de variável GL que é utilizado para a cor do fragmento. Altere seu valor para definir a cor do pixel, como mostrado abaixo.

+ +
<script id="shader-fs" type="x-shader/x-fragment">
+  void main(void) {
+    gl_FragColor = vec4(1.0, 1.0, 1.0, 1.0);
+  }
+</script>
+
+ +

Vértice do shader

+ +

A vértice (vertex) do shader define a posição e a forma de cada vértice.

+ +
<script id="shader-vs" type="x-shader/x-vertex">
+  attribute vec3 aVertexPosition;
+
+  uniform mat4 uMVMatrix;
+  uniform mat4 uPMatrix;
+
+  void main(void) {
+    gl_Position = uPMatrix * uMVMatrix * vec4(aVertexPosition, 1.0);
+  }
+</script>
+
+ +

Criando um objeto

+ +

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.

+ +
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
+  ];
+
+  gl.bufferData(gl.ARRAY_BUFFER, new Float32Array(vertices), gl.STATIC_DRAW);
+}
+
+ +

This routine is pretty simplistic given the basic nature of the scene in this example. It starts by calling the gl object's createBuffer() method to obtain a buffer into which we'll store the vertices. This is then bound to the context by calling the bindBuffer() method.

+ +

Once that's done, we create a JavaScript array containing the coordinates for each vertex of the square. This is then converted into an array of WebGL floats and passed into the gl object's bufferData() method to establish the vertices for the object.

+ +

Desenhando a cena

+ +

Once the shaders are established and the object constructed, we can actually render the scene. Since we're not animating anything in this example, our drawScene() function is very simple. It uses a few utility routines we'll cover shortly.

+ +
function drawScene() {
+  gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT);
+
+  perspectiveMatrix = makePerspective(45, 640.0/480.0, 0.1, 100.0);
+
+  loadIdentity();
+  mvTranslate([-0.0, 0.0, -6.0]);
+
+  gl.bindBuffer(gl.ARRAY_BUFFER, squareVerticesBuffer);
+  gl.vertexAttribPointer(vertexPositionAttribute, 3, gl.FLOAT, false, 0, 0);
+  setMatrixUniforms();
+  gl.drawArrays(gl.TRIANGLE_STRIP, 0, 4);
+}
+
+ +

The first step is to clear the context to our background color; then we establish the camera's perspective. We set a field of view of 45°, with a width to height ratio of 640/480 (the dimensions of our canvas). We also specify that we only want objects between 0.1 and 100 units from the camera to be rendered.

+ +

Then we establish the position of the square by loading the identity position and translating away from the camera by 6 units. After that, we bind the square's vertex buffer to the context, configure it, and draw the object by calling the drawArrays() method.

+ +

{{EmbedGHLiveSample('webgl-examples/tutorial/sample2/index.html', 670, 510) }}

+ +

View the complete code | Open this demo on a new page

+ +

Operações úteis da Matrix

+ +

Matrix operations are complicated enough. Nobody really wants to write all the code needed to handle them on their own. Fortunately, there's Sylvester, a very handy library for handling vector and matrix operations from JavaScript.

+ +

The glUtils.js file used by this demo is used by a number of WebGL demos floating around on the Web. Nobody seems entirely clear on where it came from, but it does simplify the use of Sylvester even further by adding methods for building special types of matrices, as well as outputting HTML for displaying them.

+ +

In addition, this demo defines a few helpful routines to interface with these libraries for specific tasks. What exactly they do is beyond the scope of this demo, but there are plenty of good references on matrices available online; see the {{ anch("See also") }} section for a list of a few.

+ +
function loadIdentity() {
+  mvMatrix = Matrix.I(4);
+}
+
+function multMatrix(m) {
+  mvMatrix = mvMatrix.x(m);
+}
+
+function mvTranslate(v) {
+  multMatrix(Matrix.Translation($V([v[0], v[1], v[2]])).ensure4x4());
+}
+
+function setMatrixUniforms() {
+  var pUniform = gl.getUniformLocation(shaderProgram, "uPMatrix");
+  gl.uniformMatrix4fv(pUniform, false, new Float32Array(perspectiveMatrix.flatten()));
+
+  var mvUniform = gl.getUniformLocation(shaderProgram, "uMVMatrix");
+  gl.uniformMatrix4fv(mvUniform, false, new Float32Array(mvMatrix.flatten()));
+}
+
+ +

Ver Também

+ + + +

{{PreviousNext("Web/API/WebGL_API/Tutorial/Getting_started_with_WebGL", "Web/API/WebGL_API/Tutorial/Using_shaders_to_apply_color_in_WebGL")}}

diff --git a/files/pt-br/web/api/webgl_api/tutorial/adicionando_conteudo_2d_a_um_contexto_webgl/index.html b/files/pt-br/web/api/webgl_api/tutorial/adicionando_conteudo_2d_a_um_contexto_webgl/index.html deleted file mode 100644 index 7b4f6384f6..0000000000 --- a/files/pt-br/web/api/webgl_api/tutorial/adicionando_conteudo_2d_a_um_contexto_webgl/index.html +++ /dev/null @@ -1,226 +0,0 @@ ---- -title: Adicionando conteúdo 2D a um contexto WebGL -slug: Web/API/WebGL_API/Tutorial/Adicionando_conteudo_2D_a_um_contexto_WebGL -tags: - - Tutorial - - WebGL -translation_of: Web/API/WebGL_API/Tutorial/Adding_2D_content_to_a_WebGL_context ---- -

{{WebGLSidebar("Tutorial")}} {{PreviousNext("Web/API/WebGL_API/Tutorial/Getting_started_with_WebGL", "Web/API/WebGL_API/Tutorial/Using_shaders_to_apply_color_in_WebGL")}}

- -

Uma vez que você tenha  criado um contexto WebGL com sucesso, você pode iniciar a renderizar nele. O mais simples que podemos fazer é desenhar um objeto 2D não texturizado. Então vamos começar por aí, construindo o código necessário para se desenhar um quadrado.

- -

Desenhando a cena

- -

A coisa mais importante para se entender antes de começarmos é que, mesmo que estejamos só renderizando um objeto bidimensional nesse exemplo, nós ainda estamos desenhamos em um espaço 3d. Portanto, ainda precisamos estabelecer os shaders que irão criar a cor para a nossa cena simples, assim como desenhar o objeto. Eles irão estabelecer como o quadrado irá aparecer na tela.

- -

Inicializando os shaders

- -

Shaders são especificados ao usar a Linguagem de Shading OpenGL ES. Com o intuito de tornar mais fácil para manter e atualizar nosso conteúdo, nós podemos escrever nosso código que carrega os shaders para buscá-los no documento HTML, ao invés de termos de criar tudo em JavaScript. Vamos dar uma olhada na nossa rotina initShaders(), que cuida dessa tarefa:

- -
function initShaders() {
-  var fragmentShader = getShader(gl, "shader-fs");
-  var vertexShader = getShader(gl, "shader-vs");
-
-  // Cria o progrma shader
-
-  shaderProgram = gl.createProgram();
-  gl.attachShader(shaderProgram, vertexShader);
-  gl.attachShader(shaderProgram, fragmentShader);
-  gl.linkProgram(shaderProgram);
-
-  // Se falhar ao criar o progrma shader, alerta
-
-  if (!gl.getProgramParameter(shaderProgram, gl.LINK_STATUS)) {
-    alert("Não foi possível inicializar o programa shader.");
-  }
-
-  gl.useProgram(shaderProgram);
-
-  vertexPositionAttribute = gl.getAttribLocation(shaderProgram, "aVertexPosition");
-  gl.enableVertexAttribArray(vertexPositionAttribute);
-}
-
-
- -

Dois programas estão sendo inicializados por essa rotina; o primeiro, fragment shader, é carregado a partir do elemento HTML com o id "shader-fs". O segundo, vertex shader, é carregado pelo elemento HTML com o id "shader-vs". Nós vamos analisar a função getShader() no próximo tutorial; Essa rotina, na verdade, lida com a parte de puxar os programas shader da DOM.

- -

Então nós criamos o programa shader chamando do objeto WebGL a função createProgram(), anexamos dois shaders nele e fazemos o link com o programa shader. Depois de fazer isso, o parametro LINK_STATUS do objeto g1 é checado para ter certeza de que o link foi criado com sucesso; Se sim, nós ativamos o novo programa shader.

- -

Carregando os shaders da DOM

- -

A rotina getShader() busca um programa shader com o nome específico do DOM, retornando o programa shader compilado para o requisitante, ou null se ele não pode ser carregado ou compilado.

- -
function getShader(gl, id) {
-  var shaderScript, theSource, currentChild, shader;
-
-  shaderScript = document.getElementById(id);
-
-  if (!shaderScript) {
-    return null;
-  }
-
-  theSource = "";
-  currentChild = shaderScript.firstChild;
-
-  while(currentChild) {
-    if (currentChild.nodeType == currentChild.TEXT_NODE) {
-      theSource += currentChild.textContent;
-    }
-
-    currentChild = currentChild.nextSibling;
-  }
-
- -

Uma vez que o elemento com o ID específico é encontrado, seu texto é lido na variável theSource.

- -
  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.

- -
  gl.shaderSource(shader, theSource);
-
-  // Compile o programa shader
-  gl.compileShader(shader);
-
-  // Veja se ele compila com sucesso
-  if (!gl.getShaderParameter(shader, gl.COMPILE_STATUS)) {
-      alert("Um erro ocorreu ao compilar os shaders: " + gl.getShaderInfoLog(shader));
-      return null;
-  }
-
-  return shader;
-}
-
- -

Finalmente, a fonte é passada para o shader e compilada. Se um erro ocorrer enquanto o shader estiver compilando, nós mostraremos um alerta e retornaremos null; Caso contrário, o shader recém compilado é retornado para o requisitante.

- -

Os shaders

- -

Agora, nós precisamos adicionar os programas shaders ao HTML para descrever nosso documento. Os detalhes sobre como os shaders trabalham estão além do escopo deste artigo, assim como a sintaxe da linguagem do shader.

- -

Fragmentos shader

- -

Cada pixel é um poligono chamado de fragmento (fragment) na linguagem GL. O trabalho do fragmento de shader é estabelecer a cor de cada pixel. Ness caso, nós estamos apenas definindo a cor branca para cada pixel.

- -

g1_FragColor é um construtor de variável GL que é utilizado para a cor do fragmento. Altere seu valor para definir a cor do pixel, como mostrado abaixo.

- -
<script id="shader-fs" type="x-shader/x-fragment">
-  void main(void) {
-    gl_FragColor = vec4(1.0, 1.0, 1.0, 1.0);
-  }
-</script>
-
- -

Vértice do shader

- -

A vértice (vertex) do shader define a posição e a forma de cada vértice.

- -
<script id="shader-vs" type="x-shader/x-vertex">
-  attribute vec3 aVertexPosition;
-
-  uniform mat4 uMVMatrix;
-  uniform mat4 uPMatrix;
-
-  void main(void) {
-    gl_Position = uPMatrix * uMVMatrix * vec4(aVertexPosition, 1.0);
-  }
-</script>
-
- -

Criando um objeto

- -

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.

- -
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
-  ];
-
-  gl.bufferData(gl.ARRAY_BUFFER, new Float32Array(vertices), gl.STATIC_DRAW);
-}
-
- -

This routine is pretty simplistic given the basic nature of the scene in this example. It starts by calling the gl object's createBuffer() method to obtain a buffer into which we'll store the vertices. This is then bound to the context by calling the bindBuffer() method.

- -

Once that's done, we create a JavaScript array containing the coordinates for each vertex of the square. This is then converted into an array of WebGL floats and passed into the gl object's bufferData() method to establish the vertices for the object.

- -

Desenhando a cena

- -

Once the shaders are established and the object constructed, we can actually render the scene. Since we're not animating anything in this example, our drawScene() function is very simple. It uses a few utility routines we'll cover shortly.

- -
function drawScene() {
-  gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT);
-
-  perspectiveMatrix = makePerspective(45, 640.0/480.0, 0.1, 100.0);
-
-  loadIdentity();
-  mvTranslate([-0.0, 0.0, -6.0]);
-
-  gl.bindBuffer(gl.ARRAY_BUFFER, squareVerticesBuffer);
-  gl.vertexAttribPointer(vertexPositionAttribute, 3, gl.FLOAT, false, 0, 0);
-  setMatrixUniforms();
-  gl.drawArrays(gl.TRIANGLE_STRIP, 0, 4);
-}
-
- -

The first step is to clear the context to our background color; then we establish the camera's perspective. We set a field of view of 45°, with a width to height ratio of 640/480 (the dimensions of our canvas). We also specify that we only want objects between 0.1 and 100 units from the camera to be rendered.

- -

Then we establish the position of the square by loading the identity position and translating away from the camera by 6 units. After that, we bind the square's vertex buffer to the context, configure it, and draw the object by calling the drawArrays() method.

- -

{{EmbedGHLiveSample('webgl-examples/tutorial/sample2/index.html', 670, 510) }}

- -

View the complete code | Open this demo on a new page

- -

Operações úteis da Matrix

- -

Matrix operations are complicated enough. Nobody really wants to write all the code needed to handle them on their own. Fortunately, there's Sylvester, a very handy library for handling vector and matrix operations from JavaScript.

- -

The glUtils.js file used by this demo is used by a number of WebGL demos floating around on the Web. Nobody seems entirely clear on where it came from, but it does simplify the use of Sylvester even further by adding methods for building special types of matrices, as well as outputting HTML for displaying them.

- -

In addition, this demo defines a few helpful routines to interface with these libraries for specific tasks. What exactly they do is beyond the scope of this demo, but there are plenty of good references on matrices available online; see the {{ anch("See also") }} section for a list of a few.

- -
function loadIdentity() {
-  mvMatrix = Matrix.I(4);
-}
-
-function multMatrix(m) {
-  mvMatrix = mvMatrix.x(m);
-}
-
-function mvTranslate(v) {
-  multMatrix(Matrix.Translation($V([v[0], v[1], v[2]])).ensure4x4());
-}
-
-function setMatrixUniforms() {
-  var pUniform = gl.getUniformLocation(shaderProgram, "uPMatrix");
-  gl.uniformMatrix4fv(pUniform, false, new Float32Array(perspectiveMatrix.flatten()));
-
-  var mvUniform = gl.getUniformLocation(shaderProgram, "uMVMatrix");
-  gl.uniformMatrix4fv(mvUniform, false, new Float32Array(mvMatrix.flatten()));
-}
-
- -

Ver Também

- - - -

{{PreviousNext("Web/API/WebGL_API/Tutorial/Getting_started_with_WebGL", "Web/API/WebGL_API/Tutorial/Using_shaders_to_apply_color_in_WebGL")}}

diff --git a/files/pt-br/web/api/webrtc_api/simple_rtcdatachannel_sample/index.html b/files/pt-br/web/api/webrtc_api/simple_rtcdatachannel_sample/index.html new file mode 100644 index 0000000000..72ac37e56a --- /dev/null +++ b/files/pt-br/web/api/webrtc_api/simple_rtcdatachannel_sample/index.html @@ -0,0 +1,272 @@ +--- +title: Uma simples amostra de RTCDataChannel +slug: Web/API/WebRTC_API/Simples_RTCDataChannel_amostra +translation_of: Web/API/WebRTC_API/Simple_RTCDataChannel_sample +--- +

{{WebRTCSidebar}}

+ +

A interface {{domxref("RTCDataChannel")}} é um recurso da WebRTC API que permite abrir um canal entre dois pares sobre os quais você pode enviar e receber dados arbitrários. A API é intencionalmente semelhante à WebSocket API, de modo que o mesmo modelo de programação pode ser usado para ambos.

+ +

Neste exemplo, abriremos um {{domxref("RTCDataChannel")}} para realizar a conexão entre dois elementos na mesma página. Embora seja obviamente um cenário artificial, é útil para demonstrar o fluxo de conexão entre dois pares. Vamos cobrir a mecânica necessária para conectar, transmitir e receber dados, mas vamos deixar para outro exemplo os detalhes sobre como localizar e se conectar a um computador remoto.

+ +

O HTML

+ +

Primeiro, vamos dar uma olhada rápida no HTML que é necessário. Não há nada incrivelmente complicado aqui. Primeiro, temos um par de botões para estabelecer e fechar a conexão:

+ +
<button id="connectButton" name="connectButton" class="buttonleft">
+  Conectar
+</button>
+<button id="disconnectButton" name="disconnectButton" class="buttonright" disabled>
+  Desconectar
+</button>
+ +

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.

+ +
  <div class="messagebox">
+    <label for="message">Insira a mensagem:
+      <input type="text" name="message" id="message" placeholder="Texto da mensagem"
+              inputmode="latin" size=60 maxlength=120 disabled>
+    </label>
+    <button id="sendButton" name="sendButton" class="buttonright" disabled>
+      Enviar
+    </button>
+  </div>
+ +

Finalmente, há uma pequena caixa na qual vamos inserir as mensagens. Este bloco {{HTMLElement("div")}} será o segundo ponto do par (peer).

+ +
<div class="messagebox" id="receivebox">
+  <p>Mensagens recebidas:</p>
+</div>
+ +

O código JavaScript

+ +

Como você pode simplesmente ver o próprio código no GitHub, abaixo, analisaremos as partes do código que fazem o trabalho pesado.

+ +

A WebRTC API faz um intenso uso de {{jsxref("Promise")}}s. Que tornam muito fácil encadear as etapas do processo de conexão; Se você ainda não leu sobre esta funcionalidade do ECMAScript 2015, você deveria ler sobre eles. Da mesma forma, este exemplo usa arrow functions para simplificar a sintaxe.

+ +

Começando

+ +

Quando o script é executado, configuramos um {{event("load")}} ouvinte de eventos (event listener), De modo que, uma vez que a página esteja totalmente carregada, nossa função startup() seja chamada.

+ +
function startup() {
+  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);
+}
+ +

Isso é bastante direto. Pegamos referências de todos os elementos da página que precisaremos acessar e, em seguida, configuramos {{domxref("EventListener", "event listeners")}} nos três botões.

+ +

Estabelecendo uma conexão

+ +

Quando o usuário clica no botão "Conectar", o método connectPeers() é chamado. Para que fique mais claro, iremos quebrar o código em mais partes, e analisar um pouco de cada vez.

+ +
+

Nota: Mesmo que ambas as extremidades da nossa conexão estejam na mesma página, vamos nos referir ao ponto que inicia a conexão como "local", e ao outro como sendo o "remoto".

+
+ +

Configurando o ponto local (local peer)

+ +
localConnection = new RTCPeerConnection();
+
+sendChannel = localConnection.createDataChannel("sendChannel");
+sendChannel.onopen = handleSendChannelStatusChange;
+sendChannel.onclose = handleSendChannelStatusChange;
+
+ +

O primeiro passo é criar o ponto "local" da conexão. Este é o ponto que enviará o pedido de conexão. O próximo passo é criar o {{domxref("RTCDataChannel")}} chamando {{domxref("RTCPeerConnection.createDataChannel()")}} e configurando ouvintes de eventos (event listeners) para monitorar o canal, e para que possamos saber quando ele for aberto e fechado (isto é, quando o canal está conectado ou desconectado dentro dessa conexão entre pares (peer connection)).

+ +

É importante ter em mente que cada extremidade do canal tem seu próprio objeto {{domxref("RTCDataChannel")}} .

+ +

Configurando o ponto remoto (remote peer)

+ +
remoteConnection = new RTCPeerConnection();
+remoteConnection.ondatachannel = receiveChannelCallback;
+ +

O ponto remoto está configurado de forma semelhante, exceto que não precisamos nós mesmos criar explicitamente um {{domxref("RTCDataChannel")}} , uma vez que vamos ser conectados através do canal estabelecido acima. Em vez disso, criamos um {{event("datachannel")}} manipulador de eventos (event handler); Isso será chamado quando o canal de dados (data channel) for aberto; Este manipulador (handler) receberá um objeto RTCDataChannel; você verá isso abaixo.

+ +

Configurando  ICE candidates

+ +

O próximo passo é configurar cada conexão com os ouvintes do ICE que serão chamados quando houver um novo candidato ICE para comunicar com o outro lado.

+ +
+

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.

+
+ +
    localConnection.onicecandidate = e => !e.candidate
+        || remoteConnection.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")}} .

+ +

Iniciando a tentativa de conexão

+ +

A última coisa que precisamos fazer para começar a conectar nossos pares é criar uma oferta de conexão.

+ +
    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.

+ +
    +
  1. Primeiro chamamos {{domxref("RTCPeerConnection.createOffer()")}} método para criar um resumo {{Glossary("SDP")}} (Session Description Protocol) descrevendo a conexão que queremos fazer. Este método aceita, opcionalmente, um objeto com restrições a serem suportadas pela conexão para atender às suas necessidades, como no caso da conexão precisar suportar áudio, vídeo ou ambos. Em nosso exemplo simples, não temos restrições.
  2. +
  3. Se a oferta for criada com sucesso, passamos o resumo junto ao método de conexões locais {{domxref("RTCPeerConnection.setLocalDescription()")}} . Isso configura o ponto local da conexão.
  4. +
  5. O próximo passo é conectar o ponto local ao remoto comunicando ao ponto remoto sobre ele. Isso é feito chamando remoteConnection.{{domxref("RTCPeerConnection.setRemoteDescription()")}}. Agora o remoteConnection conhece a conexão que está sendo construída.
  6. +
  7. Isso significa que é hora do ponto remoto responder. Ele faz isso chamando o método {{domxref("RTCPeerConnection.createAnswer", "createAnswer()")}} . Isso gera um resumo de SDP que descreve a conexão que o ponto remoto está disposto e capaz de estabelecer. Essa configuração está em algum lugar na união das opções que ambos os pares podem suportar.
  8. +
  9. Uma vez que a resposta foi criada, ela é passada para o remoteConnection chamando {{domxref("RTCPeerConnection.setLocalDescription()")}}. Isso estabelece o ponto remoto da conexão (que, para o ponto remoto, é o ponto local. Isso pode parecer confuso, mas você irá se acostumar com isso.
  10. +
  11. Finalmente, a descrição local das conexões remotas está configurada para se referir ao ponto remoto, chamando localConnection's {{domxref("RTCPeerConnection.setRemoteDescription()")}}.
  12. +
  13. catch() chama uma rotina que lida com os erros que ocorrem.
  14. +
+ +
+

Nota: Mais uma vez, esse processo não é uma implementação do mundo real; No uso normal, há dois pedaços de código executados em duas máquinas, interagindo e negociando a conexão.

+
+ +

Manipulação da conexão de pares bem sucedida

+ +

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:

+ +
  function handleLocalAddCandidateSuccess() {
+    connectButton.disabled = true;
+  }
+
+  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.

+ +

Conectando o canal de dados

+ +

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:

+ +
  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.

+ +

Lidando com as mudanças de status do canal

+ +

Ambos nossos pontos locais e remotos usam um único método para lidar com eventos que indicam alguma alteração no status da conexão do canal.

+ +

Quando o ponto local experimenta um evento aberto ou fechado, o métodohandleSendChannelStatusChange() é chamado:

+ +
  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.

+ +

Se o estado do canal mudou para "closed", ocorre o conjunto oposto de ações: a caixa de entrada de texto e o botão "Enviar" estão desativados, o botão "Conectar" está habilitado para que o usuário possa abrir uma nova conexão se desejar, e o botão "Desconectar" está desativado, uma vez que não é útil quando não existe conexão.

+ +

Nosso exemplo de par remoto, por outro lado, ignora os eventos de alteração de status, exceto para registrar o evento no console:

+ +
  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")}}.

+ +

Enviando mensagens

+ +

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:

+ +
  function sendMessage() {
+    var message = messageInputBox.value;
+    sendChannel.send(message);
+
+    messageInputBox.value = "";
+    messageInputBox.focus();
+  }
+ +

Primeiro, o texto da mensagem é obtido dos atributos do elemento de input {{htmlattrxref("value", "input")}} . 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.

+ +

Recebendo mensagens

+ +

Quando ocorre um evento de "mensagem" no canal remoto, nosso método handleReceiveMessage() é chamado como o manipulador de eventos.

+ +
  function handleReceiveMessage(event) {
+    var el = document.createElement("p");
+    var txtNode = document.createTextNode(event.data);
+
+    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.

+ +

Desconectando os pares (peers)

+ +

Quando o usuário clica no botão "Desconectar", o método disconnectPeers() previamente configurado como o manipulador desse botão é chamado.

+ +
  function disconnectPeers() {
+
+    // Close the RTCDataChannels if they're open.
+
+    sendChannel.close();
+    receiveChannel.close();
+
+    // Close the RTCPeerConnections
+
+    localConnection.close();
+    remoteConnection.close();
+
+    sendChannel = null;
+    receiveChannel = null;
+    localConnection = null;
+    remoteConnection = null;
+
+    // Update user interface elements
+
+    connectButton.disabled = false;
+    disconnectButton.disabled = true;
+    sendButton.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.

+ +

Próximos passos

+ +

Você poderia tentar este exemplo e dar uma olhada no código fonte webrtc-simple-datachannel, disponível no GitHub.

diff --git a/files/pt-br/web/api/webrtc_api/simples_rtcdatachannel_amostra/index.html b/files/pt-br/web/api/webrtc_api/simples_rtcdatachannel_amostra/index.html deleted file mode 100644 index 72ac37e56a..0000000000 --- a/files/pt-br/web/api/webrtc_api/simples_rtcdatachannel_amostra/index.html +++ /dev/null @@ -1,272 +0,0 @@ ---- -title: Uma simples amostra de RTCDataChannel -slug: Web/API/WebRTC_API/Simples_RTCDataChannel_amostra -translation_of: Web/API/WebRTC_API/Simple_RTCDataChannel_sample ---- -

{{WebRTCSidebar}}

- -

A interface {{domxref("RTCDataChannel")}} é um recurso da WebRTC API que permite abrir um canal entre dois pares sobre os quais você pode enviar e receber dados arbitrários. A API é intencionalmente semelhante à WebSocket API, de modo que o mesmo modelo de programação pode ser usado para ambos.

- -

Neste exemplo, abriremos um {{domxref("RTCDataChannel")}} para realizar a conexão entre dois elementos na mesma página. Embora seja obviamente um cenário artificial, é útil para demonstrar o fluxo de conexão entre dois pares. Vamos cobrir a mecânica necessária para conectar, transmitir e receber dados, mas vamos deixar para outro exemplo os detalhes sobre como localizar e se conectar a um computador remoto.

- -

O HTML

- -

Primeiro, vamos dar uma olhada rápida no HTML que é necessário. Não há nada incrivelmente complicado aqui. Primeiro, temos um par de botões para estabelecer e fechar a conexão:

- -
<button id="connectButton" name="connectButton" class="buttonleft">
-  Conectar
-</button>
-<button id="disconnectButton" name="disconnectButton" class="buttonright" disabled>
-  Desconectar
-</button>
- -

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.

- -
  <div class="messagebox">
-    <label for="message">Insira a mensagem:
-      <input type="text" name="message" id="message" placeholder="Texto da mensagem"
-              inputmode="latin" size=60 maxlength=120 disabled>
-    </label>
-    <button id="sendButton" name="sendButton" class="buttonright" disabled>
-      Enviar
-    </button>
-  </div>
- -

Finalmente, há uma pequena caixa na qual vamos inserir as mensagens. Este bloco {{HTMLElement("div")}} será o segundo ponto do par (peer).

- -
<div class="messagebox" id="receivebox">
-  <p>Mensagens recebidas:</p>
-</div>
- -

O código JavaScript

- -

Como você pode simplesmente ver o próprio código no GitHub, abaixo, analisaremos as partes do código que fazem o trabalho pesado.

- -

A WebRTC API faz um intenso uso de {{jsxref("Promise")}}s. Que tornam muito fácil encadear as etapas do processo de conexão; Se você ainda não leu sobre esta funcionalidade do ECMAScript 2015, você deveria ler sobre eles. Da mesma forma, este exemplo usa arrow functions para simplificar a sintaxe.

- -

Começando

- -

Quando o script é executado, configuramos um {{event("load")}} ouvinte de eventos (event listener), De modo que, uma vez que a página esteja totalmente carregada, nossa função startup() seja chamada.

- -
function startup() {
-  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);
-}
- -

Isso é bastante direto. Pegamos referências de todos os elementos da página que precisaremos acessar e, em seguida, configuramos {{domxref("EventListener", "event listeners")}} nos três botões.

- -

Estabelecendo uma conexão

- -

Quando o usuário clica no botão "Conectar", o método connectPeers() é chamado. Para que fique mais claro, iremos quebrar o código em mais partes, e analisar um pouco de cada vez.

- -
-

Nota: Mesmo que ambas as extremidades da nossa conexão estejam na mesma página, vamos nos referir ao ponto que inicia a conexão como "local", e ao outro como sendo o "remoto".

-
- -

Configurando o ponto local (local peer)

- -
localConnection = new RTCPeerConnection();
-
-sendChannel = localConnection.createDataChannel("sendChannel");
-sendChannel.onopen = handleSendChannelStatusChange;
-sendChannel.onclose = handleSendChannelStatusChange;
-
- -

O primeiro passo é criar o ponto "local" da conexão. Este é o ponto que enviará o pedido de conexão. O próximo passo é criar o {{domxref("RTCDataChannel")}} chamando {{domxref("RTCPeerConnection.createDataChannel()")}} e configurando ouvintes de eventos (event listeners) para monitorar o canal, e para que possamos saber quando ele for aberto e fechado (isto é, quando o canal está conectado ou desconectado dentro dessa conexão entre pares (peer connection)).

- -

É importante ter em mente que cada extremidade do canal tem seu próprio objeto {{domxref("RTCDataChannel")}} .

- -

Configurando o ponto remoto (remote peer)

- -
remoteConnection = new RTCPeerConnection();
-remoteConnection.ondatachannel = receiveChannelCallback;
- -

O ponto remoto está configurado de forma semelhante, exceto que não precisamos nós mesmos criar explicitamente um {{domxref("RTCDataChannel")}} , uma vez que vamos ser conectados através do canal estabelecido acima. Em vez disso, criamos um {{event("datachannel")}} manipulador de eventos (event handler); Isso será chamado quando o canal de dados (data channel) for aberto; Este manipulador (handler) receberá um objeto RTCDataChannel; você verá isso abaixo.

- -

Configurando  ICE candidates

- -

O próximo passo é configurar cada conexão com os ouvintes do ICE que serão chamados quando houver um novo candidato ICE para comunicar com o outro lado.

- -
-

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.

-
- -
    localConnection.onicecandidate = e => !e.candidate
-        || remoteConnection.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")}} .

- -

Iniciando a tentativa de conexão

- -

A última coisa que precisamos fazer para começar a conectar nossos pares é criar uma oferta de conexão.

- -
    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.

- -
    -
  1. Primeiro chamamos {{domxref("RTCPeerConnection.createOffer()")}} método para criar um resumo {{Glossary("SDP")}} (Session Description Protocol) descrevendo a conexão que queremos fazer. Este método aceita, opcionalmente, um objeto com restrições a serem suportadas pela conexão para atender às suas necessidades, como no caso da conexão precisar suportar áudio, vídeo ou ambos. Em nosso exemplo simples, não temos restrições.
  2. -
  3. Se a oferta for criada com sucesso, passamos o resumo junto ao método de conexões locais {{domxref("RTCPeerConnection.setLocalDescription()")}} . Isso configura o ponto local da conexão.
  4. -
  5. O próximo passo é conectar o ponto local ao remoto comunicando ao ponto remoto sobre ele. Isso é feito chamando remoteConnection.{{domxref("RTCPeerConnection.setRemoteDescription()")}}. Agora o remoteConnection conhece a conexão que está sendo construída.
  6. -
  7. Isso significa que é hora do ponto remoto responder. Ele faz isso chamando o método {{domxref("RTCPeerConnection.createAnswer", "createAnswer()")}} . Isso gera um resumo de SDP que descreve a conexão que o ponto remoto está disposto e capaz de estabelecer. Essa configuração está em algum lugar na união das opções que ambos os pares podem suportar.
  8. -
  9. Uma vez que a resposta foi criada, ela é passada para o remoteConnection chamando {{domxref("RTCPeerConnection.setLocalDescription()")}}. Isso estabelece o ponto remoto da conexão (que, para o ponto remoto, é o ponto local. Isso pode parecer confuso, mas você irá se acostumar com isso.
  10. -
  11. Finalmente, a descrição local das conexões remotas está configurada para se referir ao ponto remoto, chamando localConnection's {{domxref("RTCPeerConnection.setRemoteDescription()")}}.
  12. -
  13. catch() chama uma rotina que lida com os erros que ocorrem.
  14. -
- -
-

Nota: Mais uma vez, esse processo não é uma implementação do mundo real; No uso normal, há dois pedaços de código executados em duas máquinas, interagindo e negociando a conexão.

-
- -

Manipulação da conexão de pares bem sucedida

- -

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:

- -
  function handleLocalAddCandidateSuccess() {
-    connectButton.disabled = true;
-  }
-
-  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.

- -

Conectando o canal de dados

- -

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:

- -
  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.

- -

Lidando com as mudanças de status do canal

- -

Ambos nossos pontos locais e remotos usam um único método para lidar com eventos que indicam alguma alteração no status da conexão do canal.

- -

Quando o ponto local experimenta um evento aberto ou fechado, o métodohandleSendChannelStatusChange() é chamado:

- -
  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.

- -

Se o estado do canal mudou para "closed", ocorre o conjunto oposto de ações: a caixa de entrada de texto e o botão "Enviar" estão desativados, o botão "Conectar" está habilitado para que o usuário possa abrir uma nova conexão se desejar, e o botão "Desconectar" está desativado, uma vez que não é útil quando não existe conexão.

- -

Nosso exemplo de par remoto, por outro lado, ignora os eventos de alteração de status, exceto para registrar o evento no console:

- -
  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")}}.

- -

Enviando mensagens

- -

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:

- -
  function sendMessage() {
-    var message = messageInputBox.value;
-    sendChannel.send(message);
-
-    messageInputBox.value = "";
-    messageInputBox.focus();
-  }
- -

Primeiro, o texto da mensagem é obtido dos atributos do elemento de input {{htmlattrxref("value", "input")}} . 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.

- -

Recebendo mensagens

- -

Quando ocorre um evento de "mensagem" no canal remoto, nosso método handleReceiveMessage() é chamado como o manipulador de eventos.

- -
  function handleReceiveMessage(event) {
-    var el = document.createElement("p");
-    var txtNode = document.createTextNode(event.data);
-
-    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.

- -

Desconectando os pares (peers)

- -

Quando o usuário clica no botão "Desconectar", o método disconnectPeers() previamente configurado como o manipulador desse botão é chamado.

- -
  function disconnectPeers() {
-
-    // Close the RTCDataChannels if they're open.
-
-    sendChannel.close();
-    receiveChannel.close();
-
-    // Close the RTCPeerConnections
-
-    localConnection.close();
-    remoteConnection.close();
-
-    sendChannel = null;
-    receiveChannel = null;
-    localConnection = null;
-    remoteConnection = null;
-
-    // Update user interface elements
-
-    connectButton.disabled = false;
-    disconnectButton.disabled = true;
-    sendButton.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.

- -

Próximos passos

- -

Você poderia tentar este exemplo e dar uma olhada no código fonte webrtc-simple-datachannel, disponível no GitHub.

diff --git a/files/pt-br/web/api/websockets_api/index.html b/files/pt-br/web/api/websockets_api/index.html new file mode 100644 index 0000000000..1a24b9d86a --- /dev/null +++ b/files/pt-br/web/api/websockets_api/index.html @@ -0,0 +1,178 @@ +--- +title: WebSockets +slug: WebSockets +tags: + - Referencia + - Sumario + - WebSockets +translation_of: Web/API/WebSockets_API +--- +

WebSockets é uma tecnologia avançada que torna possível abrir uma sessão de comunicação interativa entre o navegador do usuário e um servidor. Com esta API, você pode enviar mensagens para um servidor e receber respostas orientadas a eventos sem ter que consultar o servidor para obter uma resposta.

+ +
+
+

Documentação

+ +
+
Escrevendo aplicações cliente WebSocket
+
Um tutorial para escrever clientes WebSocket para ser executado no browser.
+
Referencias WebSockets
+
Uma referência para a API WebSocket do lado do cliente.
+
(TBD)Escrevendo servidores WebSocket
+
Um guia para escrever código do lado do servidor para lidar com o protocolo WebSocket.
+
+ +

Saiba mais...

+
+ +
+

Ferramentas

+ + + + + + +
+
+ +

Veja Também

+ + + + + +

{{CompatibilityTable}}

+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
CaracterísticasChromeFirefox (Gecko)Internet ExplorerOperaSafari
Suporte a versão 76 {{obsolete_inline}}6{{CompatGeckoDesktop("2.0")}}{{CompatNo}}11.00 (desativado)5.0.1
Protocolo suporta versão 7 {{obsolete_inline}}{{CompatNo}}{{CompatGeckoDesktop("6.0")}}
+ {{property_prefix("Moz")}}
{{CompatNo}}{{CompatNo}}{{CompatNo}}
Protocolo suporta versão 10 {{obsolete_inline}}14{{CompatGeckoDesktop("7.0")}}
+ {{property_prefix("Moz")}}
HTML5 Labs{{CompatUnknown}}{{CompatUnknown}}
Suporte padrão - RFC 645516{{CompatGeckoDesktop("11.0")}}1012.106.0
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
CaracterísticasAndroidFirefox Mobile (Gecko)IE MobileOpera MobileSafari Mobile
Suporte a versão 76 {{obsolete_inline}}{{CompatUnknown}}{{CompatUnknown}}{{CompatUnknown}}{{CompatUnknown}}{{CompatUnknown}}
Protocolo suporta versão 7 {{obsolete_inline}}{{CompatUnknown}}{{CompatUnknown}}{{CompatUnknown}}{{CompatUnknown}}{{CompatUnknown}}
Protocolo suporta versão 8 (IETF rascunho 10) {{obsolete_inline}}{{CompatUnknown}}{{CompatGeckoMobile("7.0")}}{{CompatUnknown}}{{CompatUnknown}}{{CompatUnknown}}
Suporte padrão - RFC 645516 (Chrome){{CompatGeckoDesktop("11.0")}}{{CompatUnknown}}12.106.0
+
+ +

Notas Gecko

+ +

O suporte a WebSockets no Firefox continua acompanhando as constantes especificações do WebSocket. O Firefox 6 implementa a versão 7 do protocolo subjacente, enquanto o Firefox 7 implementa a versão 8 (conforme especificado pelo rascunho IETF 10). O Firefox móvel recebeu suporte WebSocket no Firefox mobile 7.0.

+ +

Gecko 6.0

+ +

Antes do Gecko 6.0 {{geckoRelease("6.0")}}, estava incorreto, um objeto WebSocket que alguns sites implicavam que os serviços WebSocket não eram prefixados. Este objeto foi renomeado para MozWebSocket.

+ +

Gecko 7.0

+ +

Iniciado no Gecko 7.0 {{geckoRelease("7.0")}}, o network.websocket.max-connections preferencialmente usado para determinar o número máximo de conexões do WebSocket que pode m ser abertas de cada vez. O valor padrão é 200.

+ +

Gecko 8.0

+ +

Iniciado no Gecko 8.0 {{geckoRelease("8.0")}}, a extensão de fluxo de expansão para o protocolo WebSocket foi desativada, por estar obsoleta nas especificações. Isso resolve incompatibilidades com alguns sites.

+ +

Gecko 11.0

+ +

Antes do Gecko 11.0, as mensagens recebidas e enviadas estavam limitadas a 16 MB de tamanho. Agora elas podem ter até 2 GB de tamanho. Note, no entanto, que as limitações de memória (especialmente em dispositivos móveis) tornam isso apenas teoria, não se aplica à prática. Na realidade, as transferências desse tamanho falharão em dispositivos que não possuem memória suficiente.

+ +

Além disso, o ArrayBuffer envia e recebe suporte para dados binários

+ +

Iniciado no Gecko 11.0, a API do WebSocket já não é prefixada.

+ +
Atenção:Entre outras coisas, um motivo chave para o WebSockets estar desativado por padrão no Firefox 4 e 5 é a descoberta de um Problema de segurança no design do protocolo. Isso foi corrigido no Firefox 6 implementando uma versão mais recente do protocolo que corrige o problema.
diff --git a/files/pt-br/web/api/websockets_api/writing_websocket_client_applications/index.html b/files/pt-br/web/api/websockets_api/writing_websocket_client_applications/index.html new file mode 100644 index 0000000000..af608ae641 --- /dev/null +++ b/files/pt-br/web/api/websockets_api/writing_websocket_client_applications/index.html @@ -0,0 +1,182 @@ +--- +title: Escrevendo aplicações cliente WebSocket +slug: WebSockets/Escrevendo_aplicacoes_cliente_WebSocket +tags: + - Cliente + - Exemplo + - Guía + - WebSocket API +translation_of: Web/API/WebSockets_API/Writing_WebSocket_client_applications +--- +

Aplicações cliente usam o WebSocket API para se comunicar com WebSocket servers sob o protocolo WebSocket.

+ +

{{AvailableInWorkers}}

+ +
+

O fragmento de código neste artigo foi tomado de um exemplo de chat usando WebSocket. veja o código, então experimente o exemplo. O exemplo atual possui um bug; ele está tentando usar WebSockets inseguro e precisa ser atualizado para usar WebSocokets seguro. Iremos arrumar isso em breve!

+
+ +

Criando um objeto WebSocket 

+ +

Para se comunicar utilizando o protocolo WebSocket, você precisa criar um objeto WebSocket, que automaticamente tentará abrir a conexão com o servidor.

+ +

O construtor WebSocket aceita dois campos, um obrigatório e um opcional:

+ +
WebSocket WebSocket(
+  in DOMString url,
+  in optional DOMString protocols
+);
+
+ +
+
url
+
A URL para se conectar. Esta deve ser a URL para qual o WebSocket irá responder.
+
protocols {{ optional_inline() }}
+
Uma única string indicando o protocolo ou uma array de strings de protocolos. Estas strings são usadas para indicar sub-protocolos, de forma que um único servidor pode implementar múltiplos sub-protocolos WebSocket (por exemplo, você pode querer que um servidor seja capaz de lidar com diferentes tipos de interações a depender do protocol especificado). Se não especificar uma string de protocolo, uma string vazia é assumida.
+
+ +

O construtor lançará a exceção SECURITY_ERR se o destino não permitir acesso. Isso pode acontecer se você tentar utilizar uma conexão insegura (a maioria dos {{Glossary("user agent", "user agents")}} agora necessitam de um link seguro para todas as conexões WebSocket, a menos que estejam no mesmo dispositivo ou na mesma rede).

+ +
+
+ +

Erros de Conexão

+ +

Se um erro ocorrer durante a tentativa de conexão, primeiro um simpes evento com o nome "error" é enviado ao objeto WebSocket  (invocando, assim, seu manipulador onerror), e então o CloseEvent é enviado ao objeto WebSocket (invocando o manipulador onclose) para indicar a razão pela qual a conexão foi fechada.

+ +

O browser pode exibir uma descrição de erro mais detalhada na saída do console, ou mesmo um código de encerramento conforme definido na RFC 6455, Section 7.4 através do CloseEvent. Está implementado a partir do Firefox 11.

+ +

Exemplos

+ +

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.

+ +
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.

+ +

Se quiser abrir uma conexão e for flexível quanto aos protocolos suportados, você pode especificar um array de protocolos:

+ +
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.

+ +

Nos exemplos acima, ws foi substituído por http, de forma similar wss substitui https. Estabelecer uma conexão WebSocket depende do Mecanismo de Aprimoramento HTTP, de forma que o pedido para atualização de protocolo está implícito quando endereçamos o servidor HTTP como ws://www.example.com ou wss://www.example.com.

+ +

Enviando dados ao servidor

+ +

Uma vez a conexão aberta, você pode iniciar a transmisão de dados ao servidor. Para tanto, chame o método send() do WebSocket para cada mensagem que queira enviar:

+ +
exampleSocket.send("Aqui vai algum texto que o servidor esteja aguardando urgentemente!");
+
+ +

Você pode enviar dados como uma string, {{ domxref("Blob") }}, ou um ArrayBuffer.

+ +
Note: Nas versões anteriores à 11, o Firefox suporta apenas o envio de dados como string.
+ +

Visto que estabelecer uma conexão funciona de forma assícrona e, consequentemente, propensa a erros, não há garantia de sucesso ao chamar o método send() imediatamente após criar um objeto WebSocket. Podemos, pelo menos, ter certeza de que a tentativa de envio dos dados apenas ocorre quando uma conexão é estabelecida definindo um manipulador de eventos onopen:

+ +
exampleSocket.onopen = function (event) {
+  exampleSocket.send("Aqui vai algum texto que o servidor esteja aguardando urgentemente!");
+};
+
+ +

Utilizando JSON para transmitir objetos

+ +

Uma forma conveniente é usar JSON para enviar dados razoavelmente complexos ao servidor. Por exemplo, um aplicação de chat pode interagir  com o servidor empregando um protocolo que utilize pacotes de dados  JSON encapsulados:

+ +
// Enviar texto para todos os usuarios atraves do servidor
+function sendText() {
+  // Construir um objeto do tipo msg contendo o dado que o servidor precisa processar a partir do cliente de chat.
+  var msg = {
+    type: "message",
+    text: document.getElementById("text").value,
+    id:   clientID,
+    date: Date.now()
+  };
+
+  // Enviar o objeto msg como um JSON em formato de string.
+  exampleSocket.send(JSON.stringify(msg));
+
+  // Esvaziar o campo input do elemento text, pronto pra receber a próxima linha de texto do usuário.
+  document.getElementById("text").value = "";
+}
+
+ +

Recebendo mensagens do servidor

+ +

A API WebSockets é dirigida por eventos; quando mensagens são recebidas, um evento de "mensagem" é entregue à função onmessage. Para começar a ouvir os dados de entrada, você pode fazer algo conforme o exemplo abaixo:

+ +
exampleSocket.onmessage = function (event) {
+  console.log(event.data);
+}
+
+ +

Recebendo e interpretando objetos JSON

+ +

Vamos considerar que a aplicação cliente de chat remete o envio de dados {{ anch("Utilizando JSON para transmitir objetos") }}. Existem diversos tipos de pacotes de dados que o cliente pode receber, tais como:

+ + + +

O código que interpreta as mensagens de entrada se parecerá com esse:

+ +
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) {
+    case "id":
+      clientID = msg.id;
+      setUsername();
+      break;
+    case "username":
+      text = "<b>User <em>" + msg.name + "</em> signed in at " + timeStr + "</b><br>";
+      break;
+    case "message":
+      text = "(" + timeStr + ") <b>" + msg.name + "</b>: " + msg.text + "<br>";
+      break;
+    case "rejectusername":
+      text = "<b>Seu usuario foi configurado como <em>" + msg.name + "</em> porque o nome que você escolheu está em uso.</b><br>"
+      break;
+    case "userlist":
+      var ul = "";
+      for (i=0; i < msg.users.length; i++) {
+        ul += msg.users[i] + "<br>";
+      }
+      document.getElementById("userlistbox").innerHTML = ul;
+      break;
+  }
+
+  if (text.length) {
+    f.write(text);
+    document.getElementById("chatbox").contentWindow.scrollByPages(1);
+  }
+};
+
+ +

Aqui utilizamos JSON.parse() para conveter o objeto JSON de volta ao objeto original, em seguida, examine e aja de acordo com seu conteúdo.

+ +

Formato de dados de texto

+ +

O formato de Texto recebido através de uma conexão WebSocket está no formato UTF-8.

+ +

Fechando a conexão

+ +

Quando finalizar o uso da conexão WebSocket, invoque o método close():

+ +
exampleSocket.close();
+
+ +

Pode ser útil examinar o atributo bufferedAmount do socket  antes de tentar fechar a conexão para determinar se qualquer dado ainda está pendente de transmissão na rede. 

+ +

Considerações de segurança

+ +

WebSockets não devem ser utilizados em um contexto de um ambiente misto, isto é, você não deveria abrir uma conexão não-segura a partir de uma página previamente carregada utilizando HTTPS, ou vice-versa. A maioria dos browsers atuamente apenas permitem conexões seguras pelo Websocke, e não mais suportam contextos diferentes desse.

diff --git a/files/pt-br/web/api/websockets_api/writing_websocket_server/index.html b/files/pt-br/web/api/websockets_api/writing_websocket_server/index.html new file mode 100644 index 0000000000..553ba11aec --- /dev/null +++ b/files/pt-br/web/api/websockets_api/writing_websocket_server/index.html @@ -0,0 +1,237 @@ +--- +title: 'Escrevendo um servidor WebSocket em C #' +slug: WebSockets/Writing_WebSocket_server +translation_of: Web/API/WebSockets_API/Writing_WebSocket_server +--- +

Introdução

+ +

Se você quiser usar uma API WebSocket, você precisara ter um servidor. Neste artigo vou mostrar como escrever um WebSocket em C#. Você pode fazer isso em qualquer linguagem server-side, mas para manter as coisas simples e mais compreensíveis eu escolhi uma linguagem Microsoft.

+ +

Este servidor está em conformidade com a RFC 6455, por isso irá tratar apenas as conexões com os navegadores Chrome versão 16, Firefox 11, IE 10 ou superior. 

+ +

Primeiros passos

+ +

Os WebSocket´s se comunicam através de uma conexão TCP (Transmission Control Protocol), felizmente o C# possui a classe TcpListener que, como o nome sugere, tem a função de escutar (Listener) as comunicações via TCP. A classe TcpListener está no namespace System.Net.Sockets.

+ +
+

É uma boa idéia usar a palavra chave using para escrever menos. Isso significa que não é preciso você reescrever o namespace toda vez que usar uma classe dele.

+
+ +

TcpListener

+ +

Construtor:

+ +
TcpListener(System.Net.IPAddress localaddr, int port)
+ +

Aqui você define onde o servidor será acessível.

+ +
+

Para setar facilmente o tipo esperado no primeiro parâmetro, use o método estático Parse da classe IPAddress.

+
+ +

Métodos:

+ + + +

Veja como usar o que aprendemos:

+ +
​using System.Net.Sockets;
+using System.Net;
+using System;
+
+class Server {
+    public static void Main() {
+        TcpListener server = new TcpListener(IPAddress.Parse("127.0.0.1"), 80);
+
+        server.Start();
+        Console.WriteLine("Server has started on 127.0.0.1:80.{0}Waiting for a connection...", Environment.NewLine);
+
+        TcpClient client = server.AcceptTcpClient();
+
+        Console.WriteLine("A client connected.");
+    }
+}
+
+ +

TcpClient

+ +

Métodos:

+ + + +

Propriedades:

+ + + +

NetworkStream

+ +

Métodos:

+ +
Write(Byte[] buffer, int offset, int size)
+ +

Grava bytes do buffer, offset e size determinam o tamanho da mensagem.

+ +
Read(Byte[] buffer, int offset, int size)
+ +

Lê bytes para o buffer, offset e size determinam o tamanho da mensagem. 

+ +

Vamos estender nosso exemplo.

+ +
TcpClient client = server.AcceptTcpClient();
+
+Console.WriteLine("A client connected.");
+
+NetworkStream stream = client.GetStream();
+
+//enter to an infinite cycle to be able to handle every change in stream
+while (true) {
+    while (!stream.DataAvailable);
+
+    Byte[] bytes = new Byte[client.Available];
+
+    stream.Read(bytes, 0, bytes.Length);
+}
+ +

Handshaking

+ +

Quando um cliente se conecta a um servidor, ele envia uma solicitação GET para atualizar a conexão com o WebSocket a partir de uma simples requisição HTTP. Isto é conhecido como handshaking (aperto de mão).

+ +
+

Este código tem um defeito. Digamos que a propriedade client.Available retorna o valor 2 porque somente a requisição GET está disponível até agora. a expressão regular iria falhar mesmo que os dados recebidos sejam perfeitamente válidos.

+
+ +
using System.Text;
+using System.Text.RegularExpressions;
+
+Byte[] bytes = new Byte[client.Available];
+
+stream.Read(bytes, 0, bytes.Length);
+
+//translate bytes of request to string
+String data = Encoding.UTF8.GetString(bytes);
+
+if (new Regex("^GET").IsMatch(data)) {
+
+} else {
+
+}
+ +

Criar a resposta é mais fácil do que entender porque você deve fazê-lo desta forma.

+ +

Você deve,

+ +
    +
  1. Obter o valor do cabeçalho da requisição Sec-WebSocket-Key sem qualquer espaço à direita e à esquerda;
  2. +
  3. Concatenar com "258EAFA5-E914-47DA-95CA-C5AB0DC85B11";
  4. +
  5. Calcular o código SHA-1 e Base64 dele;
  6. +
  7. Reescreva no cabeçalho de resposta o valor de Sec-WebSocket-Accept como parte de uma resposta HTTP.
  8. +
+ +
if (new Regex("^GET").IsMatch(data)) {
+    Byte[] response = Encoding.UTF8.GetBytes("HTTP/1.1 101 Switching Protocols" + Environment.NewLine
+        + "Connection: Upgrade" + Environment.NewLine
+        + "Upgrade: websocket" + Environment.NewLine
+        + "Sec-WebSocket-Accept: " + Convert.ToBase64String (
+            SHA1.Create().ComputeHash (
+                Encoding.UTF8.GetBytes (
+                    new Regex("Sec-WebSocket-Key: (.*)").Match(data).Groups[1].Value.Trim() + "258EAFA5-E914-47DA-95CA-C5AB0DC85B11"
+                )
+            )
+        ) + Environment.NewLine
+        + Environment.NewLine);
+
+    stream.Write(response, 0, response.Length);
+}
+
+ +

Decodificação de mensagens

+ +

Após um handshake de sucesso o cliente ponde enviar mensagens ao servidor, mas agora estas mensagens são codificadas.

+ +

Se nós enviarmos "MDN", nós obtemos estes bytes:

+ + + + + + + + + + + + + + + +
129131618435611216109
+ +

- 129:

+ + + + + + + + + + + + + + + + + + + + +
FIN (Esta é toda a mensagem?)RSV1RSV2RSV3Opcode
10000x1=0001
+ +

FIN: Você pode enviar sua mensagem em quadros (frames), mas agora as coisas ficaram mais simples.
+ Opcode 0x1 significa que este é um texto. Veja aqui a lista completa de Opcodes.

+ +

- 131:

+ +

Se o segundo byte menos 128 estiver entre 0 e 125, este é o tamanho da mensagem. Se for 126, os 2 bytes seguintes (16-bit inteiro sem sinal) e se 127, os 8 bytes seguintes (64-bit inteiro sem sinal) são o comprimento.

+ +
+

Eu posso escolher 128, porque o primeiro bit sempre será 1.

+
+ +

- 61, 84, 35 e 6 são os bytes de chave para decodificar. Sempre mudam.

+ +

- O restante dos bytes codificados são a mensagem.

+ +

Algoritmo de decodificação

+ +

byte decodificado = [byte codificado XOR (posição do byte codificado MOD 4º byte da chave)]

+ +

Exemplo em C#:

+ +
Byte[] decoded = new Byte[3];
+Byte[] encoded = new Byte[3] {112, 16, 109};
+Byte[] key = Byte[4] {61, 84, 35, 6};
+
+for (int i = 0; i < encoded.Length; i++) {
+    decoded[i] = (Byte)(encoded[i] ^ key[i % 4]);
+}
+ + + + + +
 
diff --git a/files/pt-br/web/api/websockets_api/writing_websocket_servers/index.html b/files/pt-br/web/api/websockets_api/writing_websocket_servers/index.html new file mode 100644 index 0000000000..e493605538 --- /dev/null +++ b/files/pt-br/web/api/websockets_api/writing_websocket_servers/index.html @@ -0,0 +1,263 @@ +--- +title: Escrevendo um servidor WebSocket +slug: WebSockets/Writing_WebSocket_servers +tags: + - Guía + - HTML5 + - Tutorial + - WebSocket + - WebSockets +translation_of: Web/API/WebSockets_API/Writing_WebSocket_servers +--- +

Um servidor de WebSocket  é uma aplicação TCP que escuta uma porta de um servidor que segue um protocolo específico, simples assim. A tarefa de criar um servidor personalizado costuma assustar as pessoas; no entanto, pode ser fácil implementar um simples servidor WebSocket na sua plataforma de escolha. 

+ +

Um servidor WebSocket pode ser escrito em qualquer linguagem de programação server-side  que é capaz de utilizar Berkeley sockets,  tais como C(++) , ou Python, ou mesmo o PHP e o server-side JavaScript. Esse não é um tutorial em uma linguagem de programação específica, mas serve como guia para facilitar a escrita do seu próprio servidor.

+ +

Você precisará saber como o HTTP funciona e ter uma experiência média com programação.

+ +

Dependendo do suporte da linguagem, pode ser necessário o conhecimento sobre soquetes TCP. O escopo deste guia é apresentar o conhecimento mínimo que você precisa para escrever um servidor WebSocket.

+ +
+

Leia a útlima especificação sobre WebSockets, a RFC 6455. As seções 1 e 4-7 são especialmente interessantes para implementadores de servidores. A seção 10 discute assuntos sobre segurança que você definitivamente deveria examinar antes de expor seu servidor.

+
+ +

Um servidor de WebSocket é explicado de maneira bem simples aqui. Servidores de WebSocket geralmente são servidores separados e especializados (para balanceamento de carga ou outras razões práticas), então, geralmente você irá usar um proxy reverso (como um servidor HTTP comum) para detectar a solicitação de handshakes do WebSocket, pré-processá-los e enviar esses clientes para um servidor WebSocket real. Isso significa que você não precisa encher seu código com cookies e manipuladores de autenticação (por exemplo).

+ +

O Handshake ("aperto de mão") do WebSocket

+ +

Primeiro de tudo, o servidor deve ouvir as conexões socket recebidas usando um socket TCP padrão. Dependendo da sua plataforma, isso pode já ter sido tratado previamente. Por exemplo, vamos assumir que seu servidor está ouvindo example.com, porta 8000, e seu servidor socket responde às requisições  GET em /chat.

+ +
+

Aviso: O servidor pode ouvir qualquer porta que escolher, mas se escolher qualquer porta diferente de 80 e 443, podem ocorrer problemas relacionados aos firewalls e/ou proxies. Conexões na porta 443 tendem a ter mais sucesso com mais frequência, isso requer uma conexão segura (TLS/SSL). Também, note que a maioria dos browsers (notavelmente o  Firefox 8+) não permite conexões de servidores WebSocket de páginas seguras.

+
+ +

O handshake é a "Web" no WebSockets. É a ponte do HTTP para o Websocket. No handshake, detalhes da conexão são negociados, e qualquer uma das partes pode voltar antes da conclusão se os termos são desfavoráveis. O servidor deve ser cuidadoso para entender tudo que o cliente perguntar,  caso contrário, serão introduzidas questões de segurança.

+ +

Requisição Handshake do Cliente

+ +

Mesmo que você esteja construindo um servidor, um cliente ainda precisa iniciar o processo de handshake do WebSocket. Então você deve saber como interpretar a requisição do cliente. O cliente vai enviar uma requisição HTTP padrão que é parecida com isso (a versão do HTTP deve ser 1.1 ou maior, e o método deve ser um GET):

+ +
GET /chat HTTP/1.1
+Host: example.com:8000
+Upgrade: websocket
+Connection: Upgrade
+Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ==
+Sec-WebSocket-Version: 13
+
+
+ +

O cliente pode solicitar extensões e/ou subprotocolos aqui; veja Miscellaneous para mais detalhes. Também, cabeçalhos comuns como User-Agent, RefererCookie, ou cabeçalhos de autenticação poderiam estar bem aqui. Faça o que você quiser com eles; eles não pertencem diretamente ao WebSocket. Também é seguro ignora-los. Em muitas configurações comuns, um proxy reverso ja tratou deles.

+ +

Se qualquer cabeçalho não foi entendido ou conter um valor incorreto, o servidor deve enviar um erro "400 Bad Request" e fechar o socket imediatamente. É comum, também dar a razão pelo qual o handshake falhou no body da resposta do HTTP, mas muitas mensages nunca serão mostradas (os browsers não mostram isso). Se o servidor não reconhecer a versão do WebSockets, deve enviar um cabeçalho Sec-WebSocket-Version que contenha a(s) versão(versões) que o mesmo entenda. (Esse guia explica o v13, o mais novo). Agora, vamos continuar para o cabeçalho mais curioso, o Sec-WebSocket-Key.

+ +
+

Dica: Todos os browsers  vão enviar um Origin header. Você pode usar esse cabeçalho por segurança (verifique pelo de mesma origem, whitelisting/ blacklisting, etc.) e envie uma 403 Forbidden se você não gostou do que viu. Sobretanto, fique ciente que os agentes non-browser podem apenas enviar uma falsa Origin. Muitas aplicações vão rejeitar requisições sem cabeçalho.

+
+ +
+

Dica: A request-uri (/chat aqui) não tem significado definido na especificação. Muitas pessoas utilizam habilmente para que servidores lidem com muiltíplas aplicações WebSocket. Por exemplo, example.com/chat deve invocar um app de chat com multiplos usuários, enquanto /game no mesmo servidor poderia invocar um jogo multiplayer.

+
+ +
+

Nota: Regular HTTP status codes podem apenas ser usados antes do handshake. Depois que o handshake sucede, você deve usar um conjunto de códigos diferentes (definidos na seção 7.4 da especificação).

+
+ +

Resposta Handshake do Servidor

+ +

Quanto o servidor receber a requisição de handshake, ele deve enviar um resposta especifica (odd-looking) que indica que o protocolo está sendo alterado de HTTP para WebSocket. Essa resposta se parece com isso (lembre-se cada final do cabeçalho com \r\n e coloque um \r\n extra depois do último):

+ +
HTTP/1.1 101 Switching Protocols
+Upgrade: websocket
+Connection: Upgrade
+Sec-WebSocket-Accept: s3pPLMBiTxaQ9kYGzzhZRbK+xOo=
+
+
+ +

Adicionalmente, o servidor pode decidir sobre os pedidos de extensão/subprotocolo aqui; veja Miscellaneous para mais detalhes. O Sec-WebSocket-Accept é uma parte interessante. O servidor deve deriva-lo do Sec-WebSocket-Key que o cliente enviou. Para obte-lo, concatene o Sec-WebSocket-Key do cliente e a string "258EAFA5-E914-47DA-95CA-C5AB0DC85B11" juntos (isso é uma "magic string"), pegue o SHA-1 hash do resultado, e retorne o codigo base64 do hash.

+ +
+

FYI: Esse processo, aparentemente complicado existe para que seja óbvio para o cliente se o servidor suporta ou não o WebSockets. Isso é importante por causa de problemas com segurança que aparecem se o servidor aceita a conexão WebSocket mas interpreta que os dados são uma requisição HTTP.

+
+ +

Então se a chave foi "dGhlIHNhbXBsZSBub25jZQ==", o cabeçalho Sec-WebSocket-Accept aceito será "s3pPLMBiTxaQ9kYGzzhZRbK+xOo=". Uma vez que o servidor envie estes cabeçalhos, o handshake esta completo e você pode começar a trocar dados!

+ +
+

O servidor pode enviar outros cabeçalhos como Set-Cookie, ou perguntar por autenticação ou redirecionar via outros códigos de status, antes enviando  a resposta do handshake.

+
+ +

Acompanhamento dos clientes

+ +

Isso não está diretamente relacionado ao protocolo de WebSocket, mas vale apena mencionar aqui: seu servidor terá que acompanhar os soquetes dos clientes para que você não tenho que fazer o handshake novamente com clientes que já concluiram o handshake. O mesmo endereço IP do cliente pode tentar se conectar varias vezes (mas o servidor pode negar se tentarem fazer muitas conexões em razão de se defender de ataques de negação de serviço).

+ +

Trocando Data Frames

+ +

Tanto o cliente quanto o servidor podem enviar mensagens a qualquer momento — essa é a mágia do WebSocket. Entretanto, extrair informações desses chamados "frames" de dados não é um experiencia tão magica assim. Apesar de todos os frames seguirem um mesmo formato, os dados do cliente são enviados criptografados para o servidor, usando criptografia XOR (com uma chave de 32 bits). A seção 5 da especificação do protocolo de WebSocket descreve isso em detalhes.

+ +

Formato

+ +

Cada data frame (do cliente para o servidor ou vice-versa) segue o mesmo formato:

+ +
Frame format:
+​​
+      0                   1                   2                   3
+      0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+     +-+-+-+-+-------+-+-------------+-------------------------------+
+     |F|R|R|R| opcode|M| Payload len |    Extended payload length    |
+     |I|S|S|S|  (4)  |A|     (7)     |             (16/64)           |
+     |N|V|V|V|       |S|             |   (if payload len==126/127)   |
+     | |1|2|3|       |K|             |                               |
+     +-+-+-+-+-------+-+-------------+ - - - - - - - - - - - - - - - +
+     |     Extended payload length continued, if payload len == 127  |
+     + - - - - - - - - - - - - - - - +-------------------------------+
+     |                               |Masking-key, if MASK set to 1  |
+     +-------------------------------+-------------------------------+
+     | Masking-key (continued)       |          Payload Data         |
+     +-------------------------------- - - - - - - - - - - - - - - - +
+     :                     Payload Data continued ...                :
+     + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +
+     |                     Payload Data continued ...                |
+     +---------------------------------------------------------------+
+ +

O bit de MASK simplesmente diz se a mensagem está codificada. Mensagens do cliente devem estar mascaradas, então seu servidor deve esperar que o valor de MASK seja 1. De fato, a seção 5.1 da especificação diz que seu servidor deve se desconectar de um cliente se este cliente enviar mensagens que não estão mascaradas. Quando enviando um frame para o cliente, não mascare a mensagem e não defina o bit MASK. Explicaremos o mascaramento mais tarde.

+ +
+

Você tem que mascarar as mensagens mesmo quando usando secure socket (SSL).
+ Os campos RSV de 1 à 3 do cabeçalho podem ser ignorados, eles são para extenções.

+
+ +

O campo opcode define como interpretar o payload data: 0x0 para continuo, 0x1 para texto (que sempre está codificadao em UTF-8), 0x2 para binário, e outros conhecidos como "control codes" seram discutidos posteriormente. Nessa versão de WebSockets, 0x3, a 0x7 e 0xB a 0xF tem o mesmo significado.

+ +

O bit FIN disso se é a ultima mensagem da serie. Se for 0, então o servidor irá continuar esperando por mair partes da mensagem;  caso contrário, o servidor pode considerar a mensagem como enviada.

+ +

Se falará mais sobre isso depois.

+ +

Decodificando o Payload Length

+ +

Para ler o payload data, você deve saber quando parar de ler. Por isso é importante saber o tamanho do payload (payload length). Infelizmente,  conseguir essa informação é de certa forma complicado. Para obte-lá, seguimos esses passos:

+ +
    +
  1. Ler os bits 9-15 (inclusivo) e interpretar como um unsigned integer. Se o valor for de 125 ou menor, esse é o tamanho; temos a resposta. Se o valor é igual a 126, então vai para o passo 2, ou se for 127, então vai para o passo 3.
  2. +
  3. Ler os próximos 16 bits e interpretar como um unsined integer, esse é o tamanho; temos a resposta
  4. +
  5. Ler os próximos 64 bits e interpretar como um unsigned integer (o bit mais significante DEVE ser 0), esse é o tamanho; temos a resposta.
  6. +
+ +

Lendo e Desmascarando o Dado

+ +

Se o bit MASK for definido (e deve estar, para mensagens cliente-para-servidor), leia os próximos 4 octetos (32 bits); isso é a chave da mascara. Uma vez que o payload length e o masking key são decodificados, você pode seguir em frente e ler o número de bytes do socket.

+ +

Vamos chamar os dados de ENCODED, e a chave de MASK.

+ +

Para conseguir o DECODED, faça um loop sobre os octetos de ENCODED e um XOR do (i módulo 4) ezimo octeto de MASK. Em pseudo-código (isso é para ser valida em JavaScript):

+ +
var DECODED = "";
+for (var i = 0; i < ENCODED.length; i++) {
+    DECODED[i] = ENCODED[i] ^ MASK[i % 4];
+}
+ +

Agora você pode descobrir o que DECODED significa, dependendo da sua aplicação.

+ +

Fragmentação de Mensagens

+ +

Os campos FIN e opcode trabalham juntos para enviar uma mensagens quebradas em mais de um frame. Isso é chamado de fragmentação. Fragmentação está disponível apenas sobre opcode 0x0 a 0x2.

+ +

Lembre que o opcode diz o que o frame deve fazer. Se for 0x1, o payload um é texto. Se for 0x2, o payload são dados binários. Entretanto, se for 0x0, o frame é umframe de continuação. Isso significa que o servidor deve concatenar o frame de payload com o último frame recebido do cliente.

+ +

Aqui está um exemplo, de como o servidor reage a um cliente enviando uma mensagem de texto. A primeira mensagem é enviada em um frame unico, enquanto a segunda mensagem é enviada através de tres frames. Os detalhes de FIN e opcode são mostrados apenas para o cliente:

+ +
Client: FIN=1, opcode=0x1, msg="hello"
+Server: (process complete message immediately) Hi.
+Client: FIN=0, opcode=0x1, msg="and a"
+Server: (listening, new message containing text started)
+Client: FIN=0, opcode=0x0, msg="happy new"
+Server: (listening, payload concatenated to previous message)
+Client: FIN=1, opcode=0x0, msg="year!"
+Server: (process complete message) Happy new year to you too!
+ +

Note que o primeiro frame que contém a mensagem inteira tem o FIN igual a 1 e o opcode igual a 0x1, entao o servidor pode processar ou responder como achar melhor.
+ O segundo frame enviado pelo cliente é uma mensagem de texto com payload opcode igual a 0x1, mas a mensagem inteira ainda não chegou (FIN=0). Todos as partes restantes da mensagem são enviados em frames continuos (opcode=0x0), e o frame final da mensagem é marcado com FIN=1. Seção 5.4 da especificação descreve a fragmentação de mensagens.

+ +

Pings e Pongs: O Heartbeat do WebSockets

+ +

Em qualquer momento do handshake, tanto o cliente quanto o servidor podem enviar um ping para a outra parte. Quando o ping é rescebido, o destinatário deve responder com um pong assim que possível. Você pode usar isso para garantir que o cliente está conectado, por exemplo.

+ +

Um ping ou um pong é um frame comum, entretanto é usado para controle. Pings tem o valor de opcode 0x9, enquanto que pongs tem o opcode 0xA. Quando você recebe um ping, envia de volta um pong com o mesmo exato payload data do ping (para pings e pongs, o payload length máximo é 125). Você também pode ter um pong sem nunca receber um ping; ignore isso caso ocorra.

+ +
+

Se você receber mais de um ping antes de ter a chance de enviar um pong, você envia apenas um pong.

+
+ +

Fechando a conexão

+ +

Para fechar a conexão tanto cliente quanto servidor podem enviar um frame de controle com dados contendo a sequencia de controles especifica para iniciar o fim do handshake (detalhado na seção 5.5.1). Assim que receber esse tipo de frame, a outra parte envia um frame de fechamento em resposta. A primeira parte então fecha a conexão. Quais quer outros dados recebidos depois de fechar a conexão é descartado. 

+ +

Diversos

+ +
+

Códigos WebSocket, extensões, subprotocols, etc. são registrados na IANA WebSocket Protocol Registry.

+
+ +

As extensões e subprotocolos do WebSocket são negociados via headers durante the handshake. Algumas vezes extensões e subprotocolos paracem muito similares para serem coisas diferentes, mas eles tem claras distinções. Extensões controlam os frame do WebSocket e modificam o payload, enquanto os subprotocolos estruturam o payload do WebSocket e nunca modificam nada. Extensões são opcionais e generalizadas (como comporessam); subprotocolos são mandatórios e localizados (como os usados para chat e para jogos MMORPG).

+ +

Extensões

+ +
+

Essa sessão precisa ser mais desenvolvida. Por favor edite se você tiver conhecimento sobre.

+
+ +

Imagine um extensão que comprime um arquivo antes de ser enviado em um e-mail para alguem. Independente do que você faça, está enviando o mesmo dado de formas diferentes. O destinatário eventualmente terá os mesmos dados que a cópia local que você tem, mas foram enviadas de formas diferentes. Isso é o que extensões fazem. WebSockets definem um protocolo e um forma simples de envio de dados, mas uma extensão como um compressor pode enviar o mesmo dado em um formado menor.

+ +
+

Extensões são explicadas nas sessões 5.8, 9, 11.3.2 e 11.4 da especificação.

+
+ +

Subprotocols

+ +

Pense em um subprotocolo como um esquema XML personalizado ou doctype declaration. Você ainda está usando XML e sua sintaxe, mas também é restringido por uma estrutura em que concordou. Os subprotocolo WebSocket são exatamente assim. Eles não apresentam nada sofisticado, apenas estabelecem estrutura. Como um doctype ou esquema, ambas as partes devem concordar com o subprotocolo; diferente de um doctype ou esquema, o subprotocolo é implementado no servidor e não pode ser referenciado externamente pelo cliente.

+ +
+

Subprotocolos são explicados nas sessões 1.9, 4.2, 11.3.4 e 11.5 da especificação.

+
+ +

Um cliente precisa solicitar um subprotocolo específico. Para fazer isso, ele enviará algo como isso como parte do handshake original:

+ +
GET /chat HTTP/1.1
+...
+Sec-WebSocket-Protocol: soap, wamp
+
+
+ +

ou, equivalentemente:

+ +
...
+Sec-WebSocket-Protocol: soap
+Sec-WebSocket-Protocol: wamp
+
+
+ +

Agora, o servidor deve escolher um dos protocolos que o cliente sugeriu e suporta. Se houver mais de um, envie o primeiro que o cliente enviou. Imagine que nosso servidor possa usar soap e wamp. Em seguida, no handshake de resposta, ele enviará:

+ +
Sec-WebSocket-Protocol: soap
+
+
+ +
+

O servidor não pode enviar mais de um cabeçalho Sec-Websocket-Protocol.
+ Se o servidor não quiser usar nenhum subprotocolo, ele não deverá enviar nenhum cabeçalho Sec-WebSocket-Protocol. O envio de um cabeçalho em branco está incorreto.
+ O cliente pode fechar a conexão se não conseguir o subprotocolo desejado.

+
+ +

Se você deseja que seu servidor obedeça a certos subprotocolo, então naturalmente precisará de código extra no servidor. Vamos imaginar que estamos usando um subprotocolo json. Neste subprotocolo, todos os dados são transmitidos como JSON. Se o cliente solicitar esse protocolo e o servidor quiser usá-lo, o servidor precisará ter um analisador JSON. Na prática, isso fará parte de uma biblioteca, mas o servidor precisará transmitir os dados.

+ +
+

Tip: Para evitar o conflito de nomes, recomenda-se que o subprotocolo seja nomeado como parte da string do domínio. Se você está desenvolvendo um aplicativo de bate-papo personalizado que usa um formato proprietário exclusivo da Exemplo Inc., então você pode usar isso: Sec-WebSocket-Protocol: chat.example.com. Note que isso não é necessário, é apenas uma convenção opcional, e você pode usar qualquer string que desejar.

+
+ +

Relacionado

+ + diff --git a/files/pt-br/web/api/window/beforeunload_event/index.html b/files/pt-br/web/api/window/beforeunload_event/index.html new file mode 100644 index 0000000000..6d6034318c --- /dev/null +++ b/files/pt-br/web/api/window/beforeunload_event/index.html @@ -0,0 +1,106 @@ +--- +title: beforeunload +slug: Web/Events/beforeunload +translation_of: Web/API/Window/beforeunload_event +--- +

O evento beforeunload é disparado quando o window, o document e seus recursos estão prestes a ser descarregados.

+ +

Quando uma string é atribuída na propriedade returnValue do Event, uma caixa de díalogo aparecerá solicitando ao usuário uma confirmação para sair da página (veja exemplo abaixo). Quando nenhum valor é fornecido, o evento é processado silenciosamente.

+ + + + + + + + + + + + + + + + + + + + +
BubblesNão
CancelableSim
Target objectsdefaultView
Interface{{domxref("Event")}}
+ +

Propriedades

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
PropriedadeTipoDescriçã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).
+ +

Exemplos

+ +
window.addEventListener("beforeunload", function (event) {
+  event.returnValue = "\o/";
+});
+
+// equivalente a
+window.addEventListener("beforeunload", function (event) {
+  event.preventDefault();
+});
+ +

Navegadores baseados no WebKit não seguem a especificação para caixas de diálogo. Um exemplo que funcionaria na maioria dos navegadores seria aproximadamente o seguinte:

+ +
window.addEventListener("beforeunload", function (e) {
+  var confirmationMessage = "\o/";
+
+  e.returnValue = confirmationMessage;     // Gecko, Trident, Chrome 34+
+  return confirmationMessage;              // Gecko, WebKit, Chrome <34
+});
+ +

Notas

+ +

Quando este evento retorna um valor não vazio (non-void), é solicitada ao usuário uma confirmação para descarregar a página. Na maioria dos navegadores o valor retornado no evento é exibido como mensagem nessa confirmação. No Firefox 4 e versões anteriores a string retornada não é exibida para o usuário. Ao invés disso, o Firefox exibe a mensagem "Esta página está perguntanto se você deseja sair - é possível que as alterações feitas não sejam salvas." Veja {{bug("588292")}}.

+ +

Desde 25 de maio de 2011 a especificação HTML5 define que chamadas aos métodos {{domxref("window.alert()")}}, {{domxref("window.confirm()")}} e {{domxref("window.prompt()")}} serão ignoradas durante este evento. Para mais detalhes veja a especificação HTML5 (em inglês).

+ +

Note também que vários navegadores para celular ignoram o resultado deste evento (isso que dizer que eles não solicitam a confirmação do usuário). O Firefox possui uma configuração escondida em about:config que faz o mesmo. Em essência, isto significa que o usuário estará sempre confirmando que o documento pode ser descarregado.

+ +

Veja também

+ + diff --git a/files/pt-br/web/api/window/domcontentloaded_event/index.html b/files/pt-br/web/api/window/domcontentloaded_event/index.html new file mode 100644 index 0000000000..eb54671921 --- /dev/null +++ b/files/pt-br/web/api/window/domcontentloaded_event/index.html @@ -0,0 +1,177 @@ +--- +title: DOMContentLoaded +slug: Web/Events/DOMContentLoaded +translation_of: Web/API/Window/DOMContentLoaded_event +--- +

O evento DOMContentLoaded é acionado quando todo o HTML foi completamente carregado e analisado, sem aguardar pelo CSS, imagens, e subframes para encerrar o carregamento. Um evento muito diferente - load - deve ser usado apenas para detectar uma página completamente carregada. É um engano comum as pessoas usarem load quando DOMContentLoaded seria muito mais apropriado.

+ +
+

Nota: Javascript Síncrono pausa a análise do DOM.

+
+ +

Acelerando

+ +

Se você quer que o DOM seja analisado o mais rápido possível após uma requisição do usuário, você deve usar recursos do javascript assíncrono e otimizar o carregamento de folhas de estilo pois, caso contrário, a página será carregada mais lentamente pois muitos itens serão carregados paralelamente, atrasando a visualização da página.

+ +
+
+ +

Informações gerais

+ +
+
Especificação
+
HTML5
+
Interface
+
Event
+
Propaga
+
Sim
+
Cancelável
+
Sim (embora especificado como evento simples não-cancelável)
+
Alvo
+
Document
+
Ação Default
+
Nenhuma.
+
+ +

Propriedades

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
PropertyTypeDescription
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.
+ +

Exemplo

+ +

Básico

+ +
<script>
+  document.addEventListener("DOMContentLoaded", function(event) {
+    console.log("DOM completamente carregado e analisado");
+  });
+</script>
+
+ +

Forçando o atraso do DOMContentLoaded

+ +
<script>
+  document.addEventListener("DOMContentLoaded", function(event) {
+    console.log("DOM completamente carregado e analisado");
+  });
+
+for(var i=0; i<1000000000; i++)
+{} // este script síncrono irá o atrasar carregamento do DOM. Então o evento DOMContentLoaded irá ser ativado mais tarde.
+</script>
+
+ +

 

+ +

Verificando se o carregamento está completo

+ +

DOMContentLoaded pode disparar antes do seu script ser carregado, então é importante validar antes de adicionar um listener.

+ +
function doSomething() {
+  console.info("DOM carregado");
+}
+
+if (document.readyState === "loading") {  // Ainda carregando
+  document.addEventListener("DOMContentLoaded", doSomething);
+} else {  // `DOMContentLoaded` foi disparado
+  doSomething();
+}
+ +

 

+ +

Compatibilidade entre Navegadores

+ +

{{ CompatibilityTable() }}

+ +
+ + + + + + + + + + + + + + + + + + + +
CaracterísticaChromeFirefox (Gecko)Internet ExplorerOperaSafari
Suporte básico0.2{{ CompatGeckoDesktop("1") }}9.09.03.1
+
+ +
+ + + + + + + + + + + + + + + + + + + +
CaracterísticaAndroidFirefox Mobile (Gecko)IE MobileOpera MobileSafari Mobile
Suporte básico{{ CompatVersionUnknown() }}{{ CompatGeckoMobile("1") }}{{ CompatUnknown() }}{{ CompatVersionUnknown() }}{{ CompatVersionUnknown() }}
+
+ +

Propagação para este evento é suportada à partir do Gecko 1.9.2, Chrome 6, e Safari 4.

+ +

Cross-browser fallback

+ +

O Internet Explorer 8 suporta o evento readystatechange, que pode ser usado para detectar quando o DOM está pronto. Em versões anteriores do Internet Explorer, este estado pode ser detectado tentando executar document.documentElement.doScroll("left"); repetidas vezes; este comando dará erro repetidamente, até que o DOM esteja pronto.

+ +

Há também uma abundância de bibliotecas de propósito geral que oferecem métodos cross-browser para detectar se o DOM está pronto.

+ +

Eventos Relacionados

+ + diff --git a/files/pt-br/web/api/window/load_event/index.html b/files/pt-br/web/api/window/load_event/index.html new file mode 100644 index 0000000000..db04b1ecbe --- /dev/null +++ b/files/pt-br/web/api/window/load_event/index.html @@ -0,0 +1,89 @@ +--- +title: load +slug: Web/Events/load +translation_of: Web/API/Window/load_event +--- +
O evento de load é acionado quando um recurso e seus recursos
+dependentes terminaram de carregar.
+ +

Informações Gerais

+ +
+
Especificação
+
DOM L3
+
Interface
+
UIEvent
+
Bubbles
+
Não
+
Cancelavel
+
Não
+
Alvo
+
Window
+
Ação Padrão
+
Nenhuma.
+
+ +

Propriedades

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
PropertyTypeDescription
target {{readonlyInline}}EventTargetThe event target (the topmost target in the DOM tree).
type {{readonlyInline}}DOMStringThe type of event.
bubbles {{readonlyInline}}BooleanWhether the event normally bubbles or not.
cancelable {{readonlyInline}}BooleanWhether the event is cancellable or not.
view {{readonlyInline}}WindowProxydocument.defaultView (window of the document)
detail {{readonlyInline}}long (float)0.
+ +

Exemplo

+ +
<script>
+  window.addEventListener("load", function(event) {
+    console.log("Todos os recursos terminaram o carregamento!");
+  });
+</script>
+
+ +

 

+ +

Eventos Relacionados

+ + diff --git a/files/pt-br/web/api/window/localstorage/index.html b/files/pt-br/web/api/window/localstorage/index.html new file mode 100644 index 0000000000..8c7c379435 --- /dev/null +++ b/files/pt-br/web/api/window/localstorage/index.html @@ -0,0 +1,123 @@ +--- +title: Window.localStorage +slug: Web/API/Window/Window.localStorage +tags: + - API + - Armazenamento + - Propriedade + - Referencia + - WindowLocalStorage + - localStorage +translation_of: Web/API/Window/localStorage +--- +

{{APIRef()}}

+ +

A propriedade localStorage permite acessar um objeto {{domxref("Storage")}} local. A localStorage é similar ao sessionStorage. A única diferença é que enquanto os dados armazenados no localStorage não expiram, os dados no sessionStorage tem os seus dados limpos ao expirar a sessão da página — ou seja, quando a página (aba ou janela) é fechada.

+ +

Sintaxe

+ +
meuStorage = localStorage;
+ +

Valor

+ +

Objeto {{domxref("Storage")}}.

+ +

Exemplo

+ +

O seguinte trecho acessa o objeto {{domxref("Storage")}} local do domínio atual e adiciona um item usando o {{domxref("Storage.setItem()")}}.

+ +
localStorage.setItem('meuGato', 'Tom');
+ +
+

Nota: Por favor veja o artigo Using the Web Storage API para um exemplo completo.

+
+ +

Especificações

+ + + + + + + + + + + + + + +
EspecificaçãoStatusComentário
{{SpecName('Web Storage', '#dom-localstorage', 'localStorage')}}{{Spec2('Web Storage')}} 
+ + + +

{{ CompatibilityTable() }}

+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
FeatureChromeFirefox (Gecko)Internet ExplorerOperaSafari (WebKit)
localStorage43.5810.504
sessionStorage52810.504
+
+ +
+ + + + + + + + + + + + + + + + + + + +
FeatureAndroidFirefox Mobile (Gecko)IE PhoneOpera MobileSafari Mobile
Basic support2.1{{ CompatUnknown }}811iOS 3.2
+
+ +

Cada navegador tem o seu nível de capacidade de armazenamento para localStorage e {{domxref("sessionStorage")}}. Aqui está um teste detalhado de toda a capacidade de armazenamento de vários browsers.

+ +
+

Nota: desde o iOS 5.1, Safari Mobile armazena os dados do localStorage em uma pasta de cache, o que está sujeito a ocasionalmente ser limpa, de acordo com o SO, se houver pouco espaço. O modo de Navegação Privada do Safari Mobile não permite escrever no localStorage de forma alguma.

+
+ +

Veja também

+ + diff --git a/files/pt-br/web/api/window/onscroll/index.html b/files/pt-br/web/api/window/onscroll/index.html deleted file mode 100644 index e5e756482a..0000000000 --- a/files/pt-br/web/api/window/onscroll/index.html +++ /dev/null @@ -1,99 +0,0 @@ ---- -title: window.onscroll -slug: Web/API/Window/onscroll -translation_of: Web/API/GlobalEventHandlers/onscroll -translation_of_original: Web/API/Window/onscroll ---- -

{{ ApiRef() }}

-

Sumário

-

Especifica a função a ser chamada quando é feito o scroll na janela.

-

Sintaxe

-
window.onscroll = funcRef;
-
- -

Exemplos

-

Exemplo 1: Genérico

-
window.onscroll = function (oEvent) {
-  // executa um bloco de código ou funções, quando o scroll é feito na janela.
-}
-
-

Examplo 2: Dectando a rolagem

-

O exemplo a seguir, irá disparar um alerta sempre que o usuário rolar a página .

-
<!doctype html>
-<html>
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<title>onscroll test</title>
-<script type="text/javascript">
-window.onscroll = scroll;
-
-function scroll () {
- alert("evento scroll detectado! " + window.pageXOffset + " " + window.pageYOffset);
- // nota: você pode usar window.innerWidth e window.innerHeight para obter a largura e altura da área de visão.
-}
-</script>
-</head>
-
-<body>
-<p>Redimensione a janela</p>
-<p>para um tamanho pequeno,</p>
-<p>e use a barra de rolagem</p>
-<p>para mover ao redor do conteúdo da página</p>
-<p>na janela.</p>
-</body>
-</html>
-
- -

O exemplo a seguir irá mostrar um link( uma imagem de seta ) no topo da página quando a rolagem vertical atingir 500 pixels

-

 

-
<!doctype html>
-<html>
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<title>MDN Example</title>
-<script type="text/javascript">
-var bAppended = false, oBookmark = document.createElement("div");
-oBookmark.id = "arrowUp";
-oBookmark.innerHTML = "<a href=\"#\" title=\"Top of the page.\">&uarr;<\/a>";
-
-onscroll = function() {
-  var nVScroll = document.documentElement.scrollTop || document.body.scrollTop;
-  bAppended = nVScroll > 500 ?
-    bAppended || (document.body.appendChild(oBookmark), true)
-    : bAppended && (document.body.removeChild(oBookmark), false);
-};
-</script>
-<style type="text/css">
-#arrowUp {
-  position: fixed;
-  height: auto;
-  width: auto;
-  right: 10px;
-  top: 10px;
-  font-size: 48px;
-}
-#arrowUp a {
-  text-decoration: none;
-  color: black;
-  font-weight: bold;
-  font-family: serif;
-}
-</style>
-</head>
-
-<body>
-<p>Conteúdo da página aqui!</p>
-</body>
-
-</html>
-

Notas

-

{{ Bug(189308) }}, nas versões antigas do Gecko, o evento 'onscroll' era executado apenas quando a barra de rolagem era arrastada, não quando utilizada a seta do teclado ou scroll do mouse.
- Esse bug foi corrigido no Gecko 1.8/Firefox 1.5

-

Quando o window.scrollX/scrollY não é 0 -- considerando que o scroll ocorreu por algum script ou uma ação manual -- recarregando a página irá disparar o evento onscroll imediatamente.

-

Especificação

- -

{{ languages( { "zh-cn": "zh-cn/DOM/window.onscroll"} ) }}

diff --git a/files/pt-br/web/api/window/url/index.html b/files/pt-br/web/api/window/url/index.html deleted file mode 100644 index 1dec25bd24..0000000000 --- a/files/pt-br/web/api/window/url/index.html +++ /dev/null @@ -1,101 +0,0 @@ ---- -title: Window.URL -slug: Web/API/Window/URL -translation_of: Web/API/URL -translation_of_original: Web/API/Window/URL ---- -

{{ApiRef("Window")}}{{SeeCompatTable}}

- -

A propriedade Window.URL retorna um objeto que fornece métodos estáticos usados para criar e gerenciar URLs de objeto. Também pode ser chamado como um construtor para construir objetos {{domxref("URL")}}.

- -

{{AvailableInWorkers}}

- -

Sintaxe

- -

Chamando um método estático:

- -
img.src = URL.{{domxref("URL.createObjectURL", "createObjectURL")}}(blob);
- -

Construindo um novo objeto:

- -
var url = new {{domxref("URL.URL", "URL")}}("../cats/", "https://www.example.com/dogs/");
- -

Especificação

- - - - - - - - - - - - - - -
EspecificaçãoStatusComentário
{{SpecName('URL', '#dom-url', 'URL')}}{{Spec2('URL')}}Initial definition
- -

Compatibilidade do navegador

- -

{{CompatibilityTable}}

- -
- - - - - - - - - - - - - - - - - - - -
FeatureChromeFirefox (Gecko)Internet ExplorerOperaSafari
Basic support8.0[2]{{CompatGeckoDesktop("2.0")}}[1]
- {{CompatGeckoDesktop("19.0")}}
10.015.0[2]6.0[2]
- 7.0
-
- -
- - - - - - - - - - - - - - - - - - - -
FeatureAndroidFirefox Mobile (Gecko)IE MobileOpera MobileSafari Mobile
Basic support{{CompatVersionUnknown}}[2]{{CompatGeckoMobile("14.0")}}[1]
- {{CompatGeckoMobile("19.0")}}
{{CompatVersionUnknown}}15.0[2]6.0[2]
-
- -

[1] Do Gecko 2 (Firefox 4) ao Gecko 18 incluído, o Gecko retornou um objeto com o tipo interno nsIDOMMozURLProperty não padrão. Na prática, isso não fez diferença.

- -

[2] Implementado sob o nome não padronizado webkitURL.

- -

Veja também

- - diff --git a/files/pt-br/web/api/window/window.localstorage/index.html b/files/pt-br/web/api/window/window.localstorage/index.html deleted file mode 100644 index 8c7c379435..0000000000 --- a/files/pt-br/web/api/window/window.localstorage/index.html +++ /dev/null @@ -1,123 +0,0 @@ ---- -title: Window.localStorage -slug: Web/API/Window/Window.localStorage -tags: - - API - - Armazenamento - - Propriedade - - Referencia - - WindowLocalStorage - - localStorage -translation_of: Web/API/Window/localStorage ---- -

{{APIRef()}}

- -

A propriedade localStorage permite acessar um objeto {{domxref("Storage")}} local. A localStorage é similar ao sessionStorage. A única diferença é que enquanto os dados armazenados no localStorage não expiram, os dados no sessionStorage tem os seus dados limpos ao expirar a sessão da página — ou seja, quando a página (aba ou janela) é fechada.

- -

Sintaxe

- -
meuStorage = localStorage;
- -

Valor

- -

Objeto {{domxref("Storage")}}.

- -

Exemplo

- -

O seguinte trecho acessa o objeto {{domxref("Storage")}} local do domínio atual e adiciona um item usando o {{domxref("Storage.setItem()")}}.

- -
localStorage.setItem('meuGato', 'Tom');
- -
-

Nota: Por favor veja o artigo Using the Web Storage API para um exemplo completo.

-
- -

Especificações

- - - - - - - - - - - - - - -
EspecificaçãoStatusComentário
{{SpecName('Web Storage', '#dom-localstorage', 'localStorage')}}{{Spec2('Web Storage')}} 
- - - -

{{ CompatibilityTable() }}

- -
- - - - - - - - - - - - - - - - - - - - - - - - - - - -
FeatureChromeFirefox (Gecko)Internet ExplorerOperaSafari (WebKit)
localStorage43.5810.504
sessionStorage52810.504
-
- -
- - - - - - - - - - - - - - - - - - - -
FeatureAndroidFirefox Mobile (Gecko)IE PhoneOpera MobileSafari Mobile
Basic support2.1{{ CompatUnknown }}811iOS 3.2
-
- -

Cada navegador tem o seu nível de capacidade de armazenamento para localStorage e {{domxref("sessionStorage")}}. Aqui está um teste detalhado de toda a capacidade de armazenamento de vários browsers.

- -
-

Nota: desde o iOS 5.1, Safari Mobile armazena os dados do localStorage em uma pasta de cache, o que está sujeito a ocasionalmente ser limpa, de acordo com o SO, se houver pouco espaço. O modo de Navegação Privada do Safari Mobile não permite escrever no localStorage de forma alguma.

-
- -

Veja também

- - diff --git a/files/pt-br/web/api/windowbase64/atob/index.html b/files/pt-br/web/api/windowbase64/atob/index.html deleted file mode 100644 index cb9058abe5..0000000000 --- a/files/pt-br/web/api/windowbase64/atob/index.html +++ /dev/null @@ -1,72 +0,0 @@ ---- -title: WindowBase64.atob() -slug: Web/API/WindowBase64/atob -tags: - - API - - Referencia - - WindowBase64 - - metodo -translation_of: Web/API/WindowOrWorkerGlobalScope/atob ---- -
{{APIRef("HTML DOM")}}
- -

A função WindowBase64.atob() decodifica uma string de dados que foi codificada através da codificação base-64. Você pode usar o método {{domxref("WindowBase64.btoa","window.btoa()")}} para codificar e transmitir dados que, se não codificados, podem causar problemas de comunicação. Após transmití-los pode-se usar o método window.atob() para decodificar os dados novamente. Por exemplo, você pode codificar, transmitir,  e decodificar caracteres de controle como valores ASCII de 0 a 31.

- -

Para utilizar com strings Unicode ou UTF-8, veja esta nota em Base64 encoding and decoding e essa nota em window.btoa().

- -

Sintaxe

- -
var dadoDecodificado = window.atob(dadoCodificado);
- -

Exemplo

- -
var dadoCodificado = window.btoa("Olá, mundo"); // codifica a string
-var dadoDecodificado = window.atob(dadoCodificado); // decodifica a string
- -

Especificações

- - - - - - - - - - - - - - - - - - - - - - - - - - -
EspecificaçãoStatusComentário
{{SpecName('HTML WHATWG', '#dom-windowbase64-atob', 'WindowBase64.atob()')}}{{Spec2('HTML WHATWG')}}Nenhuma mudança desde a última versão, {{SpecName("HTML5.1")}}.
{{SpecName('HTML5.1', '#dom-windowbase64-atob', 'WindowBase64.atob()')}}{{Spec2('HTML5.1')}}Versão de {{SpecName("HTML WHATWG")}}. Nenhuma mudança.
{{SpecName("HTML5 W3C", "#dom-windowbase64-atob", "WindowBase64.atob()")}}{{Spec2('HTML5 W3C')}}Versão de {{SpecName("HTML WHATWG")}}. Criação do WindowBase64 (antes as propriedades ficavam no target).
- -

Compatibilidade de navegadores

- -
{{Compat("api.WindowOrWorkerGlobalScope.atob")}}
- -
- -

[1] atob() também está disponível para os componentes do XPCOM implementado em JavaScript, porém o objeto window não é global nos componentes.

- -

[2] A partir do Firefox 27, atob() ignora todos os caracteres de espaço no argumento para seguir as últimas especificações do HTML5. ({{bug(711180)}})

- -

Veja também

- - diff --git a/files/pt-br/web/api/windowbase64/index.html b/files/pt-br/web/api/windowbase64/index.html deleted file mode 100644 index f51b72c102..0000000000 --- a/files/pt-br/web/api/windowbase64/index.html +++ /dev/null @@ -1,121 +0,0 @@ ---- -title: WindowBase64 -slug: Web/API/WindowBase64 -tags: - - API - - HTML-DOM - - Helper - - NeedsTranslation - - TopicStub - - WindowBase64 -translation_of: Web/API/WindowOrWorkerGlobalScope -translation_of_original: Web/API/WindowBase64 ---- -

{{APIRef("HTML DOM")}}

- -

The WindowBase64 helper contains utility methods to convert data to and from base64, a binary-to-text encoding scheme. For example it is used in data URIs.

- -

There is no object of this type, though the context object, either the {{domxref("Window")}} for regular browsing scope, or the {{domxref("WorkerGlobalScope")}}  for workers, implements it.

- -

Properties

- -

This helper neither defines nor inherits any properties.

- -

Methods

- -

This helper does not inherit any methods.

- -
-
{{domxref("WindowBase64.atob()")}}
-
Decodes a string of data which has been encoded using base-64 encoding.
-
{{domxref("WindowBase64.btoa()")}}
-
Creates a base-64 encoded ASCII string from a string of binary data.
-
- -

Specifications

- - - - - - - - - - - - - - - - - - - - - - - - - - -
SpecificationStatusComment
{{SpecName('HTML WHATWG', '#windowbase64', 'WindowBase64')}}{{Spec2('HTML WHATWG')}}No change since the latest snapshot, {{SpecName("HTML5.1")}}.
{{SpecName('HTML5.1', '#windowbase64', 'WindowBase64')}}{{Spec2('HTML5.1')}}Snapshot of {{SpecName("HTML WHATWG")}}. No change.
{{SpecName("HTML5 W3C", "#windowbase64", "WindowBase64")}}{{Spec2('HTML5 W3C')}}Snapshot of {{SpecName("HTML WHATWG")}}. Creation of WindowBase64 (properties where on the target before it).
- -

Browser compatibility

- -

{{CompatibilityTable}}

- -
- - - - - - - - - - - - - - - - - - - -
FeatureFirefox (Gecko)ChromeInternet ExplorerOperaSafari
Basic support{{CompatGeckoDesktop(1)}} [1]{{CompatVersionUnknown}}10.0{{CompatVersionUnknown}}{{CompatVersionUnknown}}
-
- -
- - - - - - - - - - - - - - - - - - - -
FeatureFirefox Mobile (Gecko)AndroidIE MobileOpera MobileSafari Mobile
Basic support{{CompatGeckoMobile(1)}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}
-
- -

[1]  atob() is also available to XPCOM components implemented in JavaScript, even though {{domxref("Window")}} is not the global object in components.

- -

See also

- - diff --git a/files/pt-br/web/api/windoworworkerglobalscope/atob/index.html b/files/pt-br/web/api/windoworworkerglobalscope/atob/index.html new file mode 100644 index 0000000000..cb9058abe5 --- /dev/null +++ b/files/pt-br/web/api/windoworworkerglobalscope/atob/index.html @@ -0,0 +1,72 @@ +--- +title: WindowBase64.atob() +slug: Web/API/WindowBase64/atob +tags: + - API + - Referencia + - WindowBase64 + - metodo +translation_of: Web/API/WindowOrWorkerGlobalScope/atob +--- +
{{APIRef("HTML DOM")}}
+ +

A função WindowBase64.atob() decodifica uma string de dados que foi codificada através da codificação base-64. Você pode usar o método {{domxref("WindowBase64.btoa","window.btoa()")}} para codificar e transmitir dados que, se não codificados, podem causar problemas de comunicação. Após transmití-los pode-se usar o método window.atob() para decodificar os dados novamente. Por exemplo, você pode codificar, transmitir,  e decodificar caracteres de controle como valores ASCII de 0 a 31.

+ +

Para utilizar com strings Unicode ou UTF-8, veja esta nota em Base64 encoding and decoding e essa nota em window.btoa().

+ +

Sintaxe

+ +
var dadoDecodificado = window.atob(dadoCodificado);
+ +

Exemplo

+ +
var dadoCodificado = window.btoa("Olá, mundo"); // codifica a string
+var dadoDecodificado = window.atob(dadoCodificado); // decodifica a string
+ +

Especificações

+ + + + + + + + + + + + + + + + + + + + + + + + + + +
EspecificaçãoStatusComentário
{{SpecName('HTML WHATWG', '#dom-windowbase64-atob', 'WindowBase64.atob()')}}{{Spec2('HTML WHATWG')}}Nenhuma mudança desde a última versão, {{SpecName("HTML5.1")}}.
{{SpecName('HTML5.1', '#dom-windowbase64-atob', 'WindowBase64.atob()')}}{{Spec2('HTML5.1')}}Versão de {{SpecName("HTML WHATWG")}}. Nenhuma mudança.
{{SpecName("HTML5 W3C", "#dom-windowbase64-atob", "WindowBase64.atob()")}}{{Spec2('HTML5 W3C')}}Versão de {{SpecName("HTML WHATWG")}}. Criação do WindowBase64 (antes as propriedades ficavam no target).
+ +

Compatibilidade de navegadores

+ +
{{Compat("api.WindowOrWorkerGlobalScope.atob")}}
+ +
+ +

[1] atob() também está disponível para os componentes do XPCOM implementado em JavaScript, porém o objeto window não é global nos componentes.

+ +

[2] A partir do Firefox 27, atob() ignora todos os caracteres de espaço no argumento para seguir as últimas especificações do HTML5. ({{bug(711180)}})

+ +

Veja também

+ + diff --git a/files/pt-br/web/api/windoworworkerglobalscope/cleartimeout/index.html b/files/pt-br/web/api/windoworworkerglobalscope/cleartimeout/index.html new file mode 100644 index 0000000000..f03f43979f --- /dev/null +++ b/files/pt-br/web/api/windoworworkerglobalscope/cleartimeout/index.html @@ -0,0 +1,100 @@ +--- +title: WindowTimers.clearTimeout() +slug: Web/API/WindowTimers/clearTimeout +tags: + - API + - Method + - Window +translation_of: Web/API/WindowOrWorkerGlobalScope/clearTimeout +--- +
+
+
{{APIRef("HTML DOM")}}
+
+
+ +

Sumário

+ +

O método clearTimeout() do escopo {{domxref("WindowOrWorkerGlobalScope")}} cancela um timeout previamente estabelecido pela função {{domxref("WindowOrWorkerGlobalScope.setTimeout", "setTimeout()")}}.

+ +

Síntaxe

+ +
escopo.clearTimeout(timeoutID)
+
+ +

Parâmetros

+ +
+
timeoutID
+
O ID do timeout que você deseja cancelar. Esse ID é o retorno da função setTimeout().
+
+ +

É interessante ressaltar que os conjuntso de IDs usados pelos métodos {{domxref("WindowOrWorkerGlobalScope.setTimeout", "setTimeout()")}} e {{domxref("WindowOrWorkerGlobalScope.setInterval", "setInterval()")}} são compartilhados, o que significa que clearTimeout() e {{domxref("WindowOrWorkerGlobalScope.clearInterval", "clearInterval()")}} podem ser tecnicamente utilizados de forma intercambiável. No entanto, para obter-se maior clareza, isso deve ser evitado.

+ +

Exemplo

+ +

Execute o script abaixo em uma página web e clique na página uma vez. Você verá uma mensagem aparecer um segundo depois. Se você continuar clicando na página várias vezes nesse intervalo de tempo, a mensagem aparecerá uma única vez.

+ +
var alarme = {
+  relembrar: function(aMessage) {
+    alert(aMessage);
+    delete this.timeoutID;
+  },
+
+  setup: function() {
+    if (typeof this.timeoutID === 'number') {
+        this.cancelar();
+    }
+
+    this.timeoutID = window.setTimeout(function(msg) {
+        this.relembrar(msg);
+    }.bind(this), 1000, 'Wake up!');
+  },
+
+  cancelar: function() {
+    window.clearTimeout(this.timeoutID);
+  }
+};
+window.onclick = function() { alarme.setup() };
+ +

Notas

+ +

Passar um ID inválido para clearTimeout não causa nenhum efeito (não lança nenhuma exceção).

+ +

Especificações

+ + + + + + + + + + + + + + + + + + + +
EspecificaçãoStatusComentário
{{SpecName('HTML WHATWG', 'webappapis.html#dom-cleartimeout', 'WindowOrWorkerGlobalScope.clearTimeout()')}}{{Spec2("HTML WHATWG")}}Método movido para WindowOrWorkerGlobalScope .
{{SpecName('HTML WHATWG', 'webappapis.html#dom-cleartimeout', 'clearTimeout()')}}{{Spec2('HTML WHATWG')}} 
+ +

Compatibilidade

+ + + +

{{Compat("api.WindowOrWorkerGlobalScope.clearTimeout")}}

+ +

Veja também

+ + diff --git a/files/pt-br/web/api/windowtimers/cleartimeout/index.html b/files/pt-br/web/api/windowtimers/cleartimeout/index.html deleted file mode 100644 index f03f43979f..0000000000 --- a/files/pt-br/web/api/windowtimers/cleartimeout/index.html +++ /dev/null @@ -1,100 +0,0 @@ ---- -title: WindowTimers.clearTimeout() -slug: Web/API/WindowTimers/clearTimeout -tags: - - API - - Method - - Window -translation_of: Web/API/WindowOrWorkerGlobalScope/clearTimeout ---- -
-
-
{{APIRef("HTML DOM")}}
-
-
- -

Sumário

- -

O método clearTimeout() do escopo {{domxref("WindowOrWorkerGlobalScope")}} cancela um timeout previamente estabelecido pela função {{domxref("WindowOrWorkerGlobalScope.setTimeout", "setTimeout()")}}.

- -

Síntaxe

- -
escopo.clearTimeout(timeoutID)
-
- -

Parâmetros

- -
-
timeoutID
-
O ID do timeout que você deseja cancelar. Esse ID é o retorno da função setTimeout().
-
- -

É interessante ressaltar que os conjuntso de IDs usados pelos métodos {{domxref("WindowOrWorkerGlobalScope.setTimeout", "setTimeout()")}} e {{domxref("WindowOrWorkerGlobalScope.setInterval", "setInterval()")}} são compartilhados, o que significa que clearTimeout() e {{domxref("WindowOrWorkerGlobalScope.clearInterval", "clearInterval()")}} podem ser tecnicamente utilizados de forma intercambiável. No entanto, para obter-se maior clareza, isso deve ser evitado.

- -

Exemplo

- -

Execute o script abaixo em uma página web e clique na página uma vez. Você verá uma mensagem aparecer um segundo depois. Se você continuar clicando na página várias vezes nesse intervalo de tempo, a mensagem aparecerá uma única vez.

- -
var alarme = {
-  relembrar: function(aMessage) {
-    alert(aMessage);
-    delete this.timeoutID;
-  },
-
-  setup: function() {
-    if (typeof this.timeoutID === 'number') {
-        this.cancelar();
-    }
-
-    this.timeoutID = window.setTimeout(function(msg) {
-        this.relembrar(msg);
-    }.bind(this), 1000, 'Wake up!');
-  },
-
-  cancelar: function() {
-    window.clearTimeout(this.timeoutID);
-  }
-};
-window.onclick = function() { alarme.setup() };
- -

Notas

- -

Passar um ID inválido para clearTimeout não causa nenhum efeito (não lança nenhuma exceção).

- -

Especificações

- - - - - - - - - - - - - - - - - - - -
EspecificaçãoStatusComentário
{{SpecName('HTML WHATWG', 'webappapis.html#dom-cleartimeout', 'WindowOrWorkerGlobalScope.clearTimeout()')}}{{Spec2("HTML WHATWG")}}Método movido para WindowOrWorkerGlobalScope .
{{SpecName('HTML WHATWG', 'webappapis.html#dom-cleartimeout', 'clearTimeout()')}}{{Spec2('HTML WHATWG')}} 
- -

Compatibilidade

- - - -

{{Compat("api.WindowOrWorkerGlobalScope.clearTimeout")}}

- -

Veja também

- - diff --git a/files/pt-br/web/api/windowtimers/index.html b/files/pt-br/web/api/windowtimers/index.html deleted file mode 100644 index 8be6ca7e8b..0000000000 --- a/files/pt-br/web/api/windowtimers/index.html +++ /dev/null @@ -1,117 +0,0 @@ ---- -title: WindowTimers -slug: Web/API/WindowTimers -translation_of: Web/API/WindowOrWorkerGlobalScope -translation_of_original: Web/API/WindowTimers ---- -
{{APIRef("HTML DOM")}}
- -

WindowTimers contains utility methods to set and clear timers.

- -

There is no object of this type, though the context object, either the {{domxref("Window")}} for regular browsing scope, or the {{domxref("WorkerGlobalScope")}}  for workers, implements it.

- -

Properties

- -

This interface do not define any property, nor inherit any.

- -

Methods

- -

This interface do not inherit any method.

- -
-
{{domxref("WindowTimers.clearInterval()")}}
-
Cancels the repeated execution set using {{domxref("WindowTimers.setInterval()")}}.
-
{{domxref("WindowTimers.clearTimeout()")}}
-
Cancels the repeated execution set using {{domxref("WindowTimers.setTimeout()")}}.
-
{{domxref("WindowTimers.setInterval()")}}
-
Schedules the execution of a function each X milliseconds.
-
{{domxref("WindowTimers.setTimeout()")}}
-
Sets a delay for executing a function.
-
- -

Specifications

- - - - - - - - - - - - - - - - - - - - - - - - - - -
SpecificationStatusComment
{{SpecName('HTML WHATWG', '#windowtimers', 'WindowTimers')}}{{Spec2('HTML WHATWG')}}No change since the latest snapshot, {{SpecName("HTML5.1")}}.
{{SpecName('HTML5.1', '#windowtimers', 'WindowTimers')}}{{Spec2('HTML5.1')}}Snapshot of {{SpecName("HTML WHATWG")}}. No change.
{{SpecName("HTML5 W3C", "#windowtimers", "WindowTimers")}}{{Spec2('HTML5 W3C')}}Snapshot of {{SpecName("HTML WHATWG")}}. Creation of WindowBase64 (properties where on the target before it).
- -

Browser compatibility

- -

{{CompatibilityTable}}

- -
- - - - - - - - - - - - - - - - - - - -
FeatureFirefox (Gecko)ChromeInternet ExplorerOperaSafari
Basic support{{CompatGeckoDesktop(1)}}1.04.04.01.0
-
- -
- - - - - - - - - - - - - - - - - - - -
FeatureFirefox Mobile (Gecko)AndroidIE MobileOpera MobileSafari Mobile
Basic support{{CompatGeckoMobile(1)}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}
-
- -

 

- -

See also

- - diff --git a/files/pt-br/web/api/xmlhttprequest/requisicoes_sincronas_e_assincronas/index.html b/files/pt-br/web/api/xmlhttprequest/requisicoes_sincronas_e_assincronas/index.html deleted file mode 100644 index 81b8fb8d3e..0000000000 --- a/files/pt-br/web/api/xmlhttprequest/requisicoes_sincronas_e_assincronas/index.html +++ /dev/null @@ -1,234 +0,0 @@ ---- -title: Requisições síncronas e assíncronas -slug: Web/API/XMLHttpRequest/Requisicoes_sincronas_e_assincronas -translation_of: Web/API/XMLHttpRequest/Synchronous_and_Asynchronous_Requests ---- -

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. 

- -

Requisição assíncrona

- -

Se você usa XMLHttpRequest de uma extensão, você deveria usá-la de forma assíncrona. Neste caso, você recebe um callback quando os dados forem recebidos, o que permite que o browser continue seu trabalho normalmente enquanto sua requisição estiver sendo processada.

- -

Exemplo: envie um arquivo para o console de log

- -

Esse é o exemplo mais simples de uso do XMLHttpRequest assíncrono.

- -
var xhr = new XMLHttpRequest();
-xhr.open("GET", "/bar/foo.txt", true);
-xhr.onload = function (e) {
-  if (xhr.readyState === 4) {
-    if (xhr.status === 200) {
-      console.log(xhr.responseText);
-    } else {
-      console.error(xhr.statusText);
-    }
-  }
-};
-xhr.onerror = function (e) {
-  console.error(xhr.statusText);
-};
-xhr.send(null); 
- -

A Linha 2 define o terceiro parâmetro como true, indicando que a requisição deve ser tratada assincronamente.

- -

A Linha 3 cria um objeto função do tipo event handler e atribui ele ao atributo onload da requisição.

- -

Na LInha 4, Este handler verifica o estado da requisição, através da variável readyState, para ver se a transação está completa, e se o status do HTTP é 200. Em caso positivo lê o conteúdo recebido. Se um erro ocorrer, uma mensagem de erro será exibida no console.

- -

A requisição é, de fato, realizada na Linha 15. A rotina de callback é invocada quando o estado da requisição muda.

- -

Exemplo: Criando uma função standard para ler arquivos externos

- -

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.

- -
function xhrSuccess () { this.callback.apply(this, this.arguments); }
-
-function xhrError () { console.error(this.statusText); }
-
-function loadFile (sURL, fCallback /*, argumentToPass1, argumentToPass2, etc. */) {
-  var oReq = new XMLHttpRequest();
-  oReq.callback = fCallback;
-  oReq.arguments = Array.prototype.slice.call(arguments, 2);
-  oReq.onload = xhrSuccess;
-  oReq.onerror = xhrError;
-  oReq.open("get", sURL, true);
-  oReq.send(null);
-}
-
- -

Uso:

- -
function showMessage (sMsg) {
-  alert(sMsg + this.responseText);
-}
-
-loadFile("message.txt", showMessage, "New message!\n\n");
-
- -

A assinatura da função loadFile declara (i) uma URL de destino que será lida (via HTTP GET), (ii) uma função de callback para executar na conclusão bem-sucedida da instância xhr, e (iii) uma lista opcional de argumentos adicionais que são "passados através" do objeto XHR caso a função de callback seja bem-sucedida.

- -

A linha 1 declara uma função que será invocada quando a operação XHR for completada com sucesso.  Isso, por sua vez, invoca uma função de callback especificada na invocação da função loadFile (neste caso, a função showMessage) que foi atribuída a propriedade do objeto XHR (Linha 7). Os  argumentos adicionais (caso existam) fornecem a invocação da função loadFile são "aplicados" para a execução da função de callback..

- -

A linha 3 declara uma função que será invocada quando a operação XHR não for completada com sucesso.

- -

A linha 7 define no objeto XHR  the success callback function given as the second argument to loadFile.

- -

Line 8 slices the arguments array given to the invocation of loadFile. Starting with the third argument, all remaining arguments are collected, assigned to the arguments property of the variable oReq, passed to the success callback function xhrSuccess., and ultimately supplied to the callback function (in this case, showMessage) which is invoked by function xhrSuccess.

- -

Line 9 designates the function xhrSuccess as the callback to be invoked when the onload event fires, that is, when the XHR sucessfully completes.  

- -

Line 10 designates the function xhrError as the callback to be invoked when the XHR requests fails to complete.

- -

Line 11 specifies true for its third parameter to indicate that the request should be handled asynchronously.

- -

Line 12 actually initiates the request.

- -

Example: using a timeout

- -

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:

- -
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);
-}
- -

Notice the addition of code to handle the "timeout" event by setting the ontimeout handler.

- -

Usage:

- -
function showMessage (sMsg) {
-  alert(sMsg + this.responseText);
-}
-
-loadFile("message.txt", 2000, showMessage, "New message!\n");
-
- -

Here, we're specifying a timeout of 2000 ms.

- -
-

Note: Support for timeout was added in {{Gecko("12.0")}}.

-
- -

Synchronous request

- -
Note: Starting with Gecko 30.0 {{ geckoRelease("30.0") }}, synchronous requests on the main thread have been deprecated due to the negative effects to the user experience.
- -

Em casos raros, o uso do método síncrono é preferível ao invés do método assíncrono.

- -

Example: HTTP synchronous request

- -

This example demonstrates how to make a simple synchronous request.

- -
var request = new XMLHttpRequest();
-request.open('GET', '/bar/foo.txt', false);  // `false` makes the request synchronous
-request.send(null);
-
-if (request.status === 200) {
-  console.log(request.responseText);
-}
-
- -

Line 3 sends the request.  The null parameter indicates that no body content is needed for the GET request.

- -

Line 5 checks the status code after the transaction is completed.  If the result is 200 -- HTTP's "OK" result -- the document's text content is output to the console.

- -

Example: Synchronous HTTP request from a Worker

- -

One of the few cases in which a synchronous request does not usually block execution is the use of XMLHttpRequest within a Worker.

- -

example.html (the main page):

- -
<!doctype html>
-<html>
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<title>MDN Example</title>
-<script type="text/javascript">
-  var worker = new Worker("myTask.js");
-  worker.onmessage = function(event) {
-    alert("Worker said: " + event.data);
-  };
-
-  worker.postMessage("Hello");
-</script>
-</head>
-<body></body>
-</html>
-
- -

myFile.txt (the target of the synchronous XMLHttpRequest invocation):

- -
Hello World!!
-
- -

myTask.js (the Worker):

- -
self.onmessage = function (event) {
-  if (event.data === "Hello") {
-    var xhr = new XMLHttpRequest();
-    xhr.open("GET", "myFile.txt", false);  // synchronous request
-    xhr.send(null);
-    self.postMessage(xhr.responseText);
-  }
-};
-
- -
Note: The effect, because of the use of the Worker, is however asynchronous.
- -

It could be useful in order to interact in background with the server or to preload some content. See Using web workers for examples and details.

- -

Adapting Sync XHR usecases to the Beacon API

- -

There are some cases in which the synchronous usage of XMLHttpRequest was not replaceable, like during the window.onunload and window.onbeforeunload events.  The navigator.sendBeacon API can support these usecases typically while delivering a good UX.

- -

The following example (from the sendBeacon docs) 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.

- -
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);
-}
-
- -

Using the sendBeacon() method, the data will be transmitted asynchronously to the web server when the User Agent has had an opportunity to do so, without delaying the unload or affecting the performance of the next navigation.

- -

The following example shows a theoretical analytics code pattern that submits data to a server using the by using the sendBeacon() method.

- -
window.addEventListener('unload', logData, false);
-
-function logData() {
-    navigator.sendBeacon("/log", analyticsData);
-}
-
- -

See also

- - - -

{{ languages( {"zh-cn": "zh-cn/DOM/XMLHttpRequest/Synchronous_and_Asynchronous_Requests" } ) }}

diff --git a/files/pt-br/web/api/xmlhttprequest/synchronous_and_asynchronous_requests/index.html b/files/pt-br/web/api/xmlhttprequest/synchronous_and_asynchronous_requests/index.html new file mode 100644 index 0000000000..81b8fb8d3e --- /dev/null +++ b/files/pt-br/web/api/xmlhttprequest/synchronous_and_asynchronous_requests/index.html @@ -0,0 +1,234 @@ +--- +title: Requisições síncronas e assíncronas +slug: Web/API/XMLHttpRequest/Requisicoes_sincronas_e_assincronas +translation_of: Web/API/XMLHttpRequest/Synchronous_and_Asynchronous_Requests +--- +

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. 

+ +

Requisição assíncrona

+ +

Se você usa XMLHttpRequest de uma extensão, você deveria usá-la de forma assíncrona. Neste caso, você recebe um callback quando os dados forem recebidos, o que permite que o browser continue seu trabalho normalmente enquanto sua requisição estiver sendo processada.

+ +

Exemplo: envie um arquivo para o console de log

+ +

Esse é o exemplo mais simples de uso do XMLHttpRequest assíncrono.

+ +
var xhr = new XMLHttpRequest();
+xhr.open("GET", "/bar/foo.txt", true);
+xhr.onload = function (e) {
+  if (xhr.readyState === 4) {
+    if (xhr.status === 200) {
+      console.log(xhr.responseText);
+    } else {
+      console.error(xhr.statusText);
+    }
+  }
+};
+xhr.onerror = function (e) {
+  console.error(xhr.statusText);
+};
+xhr.send(null); 
+ +

A Linha 2 define o terceiro parâmetro como true, indicando que a requisição deve ser tratada assincronamente.

+ +

A Linha 3 cria um objeto função do tipo event handler e atribui ele ao atributo onload da requisição.

+ +

Na LInha 4, Este handler verifica o estado da requisição, através da variável readyState, para ver se a transação está completa, e se o status do HTTP é 200. Em caso positivo lê o conteúdo recebido. Se um erro ocorrer, uma mensagem de erro será exibida no console.

+ +

A requisição é, de fato, realizada na Linha 15. A rotina de callback é invocada quando o estado da requisição muda.

+ +

Exemplo: Criando uma função standard para ler arquivos externos

+ +

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.

+ +
function xhrSuccess () { this.callback.apply(this, this.arguments); }
+
+function xhrError () { console.error(this.statusText); }
+
+function loadFile (sURL, fCallback /*, argumentToPass1, argumentToPass2, etc. */) {
+  var oReq = new XMLHttpRequest();
+  oReq.callback = fCallback;
+  oReq.arguments = Array.prototype.slice.call(arguments, 2);
+  oReq.onload = xhrSuccess;
+  oReq.onerror = xhrError;
+  oReq.open("get", sURL, true);
+  oReq.send(null);
+}
+
+ +

Uso:

+ +
function showMessage (sMsg) {
+  alert(sMsg + this.responseText);
+}
+
+loadFile("message.txt", showMessage, "New message!\n\n");
+
+ +

A assinatura da função loadFile declara (i) uma URL de destino que será lida (via HTTP GET), (ii) uma função de callback para executar na conclusão bem-sucedida da instância xhr, e (iii) uma lista opcional de argumentos adicionais que são "passados através" do objeto XHR caso a função de callback seja bem-sucedida.

+ +

A linha 1 declara uma função que será invocada quando a operação XHR for completada com sucesso.  Isso, por sua vez, invoca uma função de callback especificada na invocação da função loadFile (neste caso, a função showMessage) que foi atribuída a propriedade do objeto XHR (Linha 7). Os  argumentos adicionais (caso existam) fornecem a invocação da função loadFile são "aplicados" para a execução da função de callback..

+ +

A linha 3 declara uma função que será invocada quando a operação XHR não for completada com sucesso.

+ +

A linha 7 define no objeto XHR  the success callback function given as the second argument to loadFile.

+ +

Line 8 slices the arguments array given to the invocation of loadFile. Starting with the third argument, all remaining arguments are collected, assigned to the arguments property of the variable oReq, passed to the success callback function xhrSuccess., and ultimately supplied to the callback function (in this case, showMessage) which is invoked by function xhrSuccess.

+ +

Line 9 designates the function xhrSuccess as the callback to be invoked when the onload event fires, that is, when the XHR sucessfully completes.  

+ +

Line 10 designates the function xhrError as the callback to be invoked when the XHR requests fails to complete.

+ +

Line 11 specifies true for its third parameter to indicate that the request should be handled asynchronously.

+ +

Line 12 actually initiates the request.

+ +

Example: using a timeout

+ +

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:

+ +
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);
+}
+ +

Notice the addition of code to handle the "timeout" event by setting the ontimeout handler.

+ +

Usage:

+ +
function showMessage (sMsg) {
+  alert(sMsg + this.responseText);
+}
+
+loadFile("message.txt", 2000, showMessage, "New message!\n");
+
+ +

Here, we're specifying a timeout of 2000 ms.

+ +
+

Note: Support for timeout was added in {{Gecko("12.0")}}.

+
+ +

Synchronous request

+ +
Note: Starting with Gecko 30.0 {{ geckoRelease("30.0") }}, synchronous requests on the main thread have been deprecated due to the negative effects to the user experience.
+ +

Em casos raros, o uso do método síncrono é preferível ao invés do método assíncrono.

+ +

Example: HTTP synchronous request

+ +

This example demonstrates how to make a simple synchronous request.

+ +
var request = new XMLHttpRequest();
+request.open('GET', '/bar/foo.txt', false);  // `false` makes the request synchronous
+request.send(null);
+
+if (request.status === 200) {
+  console.log(request.responseText);
+}
+
+ +

Line 3 sends the request.  The null parameter indicates that no body content is needed for the GET request.

+ +

Line 5 checks the status code after the transaction is completed.  If the result is 200 -- HTTP's "OK" result -- the document's text content is output to the console.

+ +

Example: Synchronous HTTP request from a Worker

+ +

One of the few cases in which a synchronous request does not usually block execution is the use of XMLHttpRequest within a Worker.

+ +

example.html (the main page):

+ +
<!doctype html>
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<title>MDN Example</title>
+<script type="text/javascript">
+  var worker = new Worker("myTask.js");
+  worker.onmessage = function(event) {
+    alert("Worker said: " + event.data);
+  };
+
+  worker.postMessage("Hello");
+</script>
+</head>
+<body></body>
+</html>
+
+ +

myFile.txt (the target of the synchronous XMLHttpRequest invocation):

+ +
Hello World!!
+
+ +

myTask.js (the Worker):

+ +
self.onmessage = function (event) {
+  if (event.data === "Hello") {
+    var xhr = new XMLHttpRequest();
+    xhr.open("GET", "myFile.txt", false);  // synchronous request
+    xhr.send(null);
+    self.postMessage(xhr.responseText);
+  }
+};
+
+ +
Note: The effect, because of the use of the Worker, is however asynchronous.
+ +

It could be useful in order to interact in background with the server or to preload some content. See Using web workers for examples and details.

+ +

Adapting Sync XHR usecases to the Beacon API

+ +

There are some cases in which the synchronous usage of XMLHttpRequest was not replaceable, like during the window.onunload and window.onbeforeunload events.  The navigator.sendBeacon API can support these usecases typically while delivering a good UX.

+ +

The following example (from the sendBeacon docs) 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.

+ +
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);
+}
+
+ +

Using the sendBeacon() method, the data will be transmitted asynchronously to the web server when the User Agent has had an opportunity to do so, without delaying the unload or affecting the performance of the next navigation.

+ +

The following example shows a theoretical analytics code pattern that submits data to a server using the by using the sendBeacon() method.

+ +
window.addEventListener('unload', logData, false);
+
+function logData() {
+    navigator.sendBeacon("/log", analyticsData);
+}
+
+ +

See also

+ + + +

{{ languages( {"zh-cn": "zh-cn/DOM/XMLHttpRequest/Synchronous_and_Asynchronous_Requests" } ) }}

diff --git a/files/pt-br/web/api/xmlhttprequest/usando_xmlhttprequest/index.html b/files/pt-br/web/api/xmlhttprequest/usando_xmlhttprequest/index.html deleted file mode 100644 index b541e64bc1..0000000000 --- a/files/pt-br/web/api/xmlhttprequest/usando_xmlhttprequest/index.html +++ /dev/null @@ -1,688 +0,0 @@ ---- -title: Usando XMLHttpRequest -slug: Web/API/XMLHttpRequest/Usando_XMLHttpRequest -translation_of: Web/API/XMLHttpRequest/Using_XMLHttpRequest ---- -

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 HTTP 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.

- -
function reqListener () {
-  console.log(this.responseText);
-};
-
-var oReq = new XMLHttpRequest();
-oReq.onload = reqListener;
-oReq.open("get", "yourFile.txt", true);
-oReq.send();
- -

Tipos de Requisições

- -

Uma requisição feita via XMLHttpRequest pode buscar dados de duas maneiras, sícrona e assíncrona. O tipo de requisição é dado pelo argumento async que é opcional (terceiro argumento) e é definido no método XMLHttpRequest open(). Se esse argumento for true ou não especificado, o XMLHttpRequest será processado de maneira assíncrona, caso contrário o processamento será síncrono. Uma discussão detalhada e demonstrações desses dois tipos podem ser encontradas na página requisições síncronas e assíncronas. No geral a melhor prática é a das solicitações assíncronas.

- -

Manipulando Respostas

- -

Existem vários tipos de atributos de resposta definidos pela especificação da W3C para o  XMLHttpRequest.  Eles informam ao cliente que efetuou a requisição XMLHttpRequest informações importantes sobre o status da resposta. Em alguns casos onde se lida com tipos de resposa de não-texto, os tipos de resposta podem envolver alguma manipulação e/ou análise conforme descrito nas seções seguintes.

- -

Analisando e manipulando a propriedade responseXML

- -

Se você utiliza o XMLHttpRequest para obter o conteúdo de um documento XML remoto, a propriedade responseXML será um objeto DOM que contém um documento XML, o que pode dificultar a manipulação e análise.

- -

As cinco formas mais utilizadas para análisar e manipular um arquivo XML são:

- -
    -
  1. Usando XPath para análisar parte deles.
  2. -
  3. Usando JXON para converter em um Objeto JavaScript.
  4. -
  5. Manualmente Parsing and serializing XML para strings ou objetos.
  6. -
  7. Usando XMLSerializer para serializar árvores do DOM para strings ou para arquivos.
  8. -
  9. RegExp pode ser usado se você souber de antemão qual é o conteúdo do XML. Você pode remover quebras de linhas, usando a RegExp para procurar as quebras de linha. No entanto, este é o "último método", caso o código do XML sofra alterações, o método se torna falho.
  10. -
- -

Analisando e manipulando uma propriedade responseText contendo um documento HTML

- -
Nota: A especificação W3C do XMLHttpRequest permite analisar HTML através da propriedade XMLHttpRequest.responseXML . Leia o artigo sobre HTML in XMLHttpRequest para maiores detalhes.
- -

Se você usa o XMLHttpRequest para recuperar o conteúdo de uma página HTML remota, a propriedade responseText será uma string contendo um a "sopa" de todos as tags HTML, o que pode ser difícil de manipular e analizar. Existem três formas básicas para analizar esta sopa de string HTML:

- -
    -
  1. Use a propriedade  XMLHttpRequest.responseXML.
  2. -
  3. Introduza o conteúdo dentro do corpo de um document fragment Através de fragment.body.innerHTML e percorra o fragmento do DOM.
  4. -
  5. RegExp pode se usada se você sempre conhece o conteúdo HTML responseText de que tem em mãos. Você pode quere remover quebras de linha, se você usar RegExp para varrer no que diz respeito a quebra de linhas. Contudo, este método é um "último recurso" uma vez que se o código HTML mudar um pouco, o método provavelmente irá falhar.
  6. -
- -

Manipulação de dados binários

- -

Apesar de XMLHttpRequest ser mais comumente usado para enviar e receber dados textual, ele pode ser utilizado para enviar e receber conteúdo binário. Existem vários métodos bem testados para forçar a resposta de um XMLHttpRequest para o envio de dados binário. Eles envolvem a utilização do método  .overrideMimeType()  sobre o objeto  XMLHttpRequest e é uma solução viável.

- -
var oReq = new XMLHttpRequest();
-oReq.open("GET", url, true);
-// recupera dados não processados como uma string binária
-oReq.overrideMimeType("text/plain; charset=x-user-defined");
-/* ... */
-
- -

A especificação XMLHttpRequest Level 2  adiciona novo responseType attributes que tornam o envio e recebimento de dados muito mais fácil.

- -
var oReq = new XMLHttpRequest();
-
-oReq.open("GET", url, true);
-oReq.responseType = "arraybuffer";
-oReq.onload = function(e) {
-  var arraybuffer = oReq.response; // não é responseText
-  /* ... */
-}
-oReq.send();
-
- -

Para mais exemplos confira a página Sending and Receiving Binary Data.

- -

Monitorando o progresso

- -

XMLHttpRequest fornece a capacidade de ouvir vários eventos que podem ocorrer enquanto o pedido está sendo processado. Isso inclui notificações periódicas de progresso, notificações de erro e assim por diante.

- -

Suporte para evento de progresso DOM monitorando a conexão XMLHttpRequest transfers siga a Web API specification for progress events: estes eventos implementam a interface {{domxref("ProgressEvent")}} .

- -
var oReq = new XMLHttpRequest();
-
-oReq.addEventListener("progress", updateProgress, false);
-oReq.addEventListener("load", transferComplete, false);
-oReq.addEventListener("error", transferFailed, false);
-oReq.addEventListener("abort", transferCanceled, false);
-
-oReq.open();
-
-// ...A transferência foi cancelada pelo usuário
-
-// progresso de transferências do servidor para o cliente (downloads)
-function updateProgress (oEvent) {
-  if (oEvent.lengthComputable) {
-    var percentComplete = oEvent.loaded / oEvent.total;
-    // ...
-  } else {
-    // Não é possível calcular informações de progresso uma vez que a dimensão total é desconhecida
-  }
-}
-
-function transferComplete(evt) {
-  alert("A transferência foi concluída.");
-}
-
-function transferFailed(evt) {
-  alert("Um erro ocorreu durante a transferência do arquivo.");
-}
-
-function transferCanceled(evt) {
-  alert("A transferência foi cancelada pelo usuário.");
-}
- -

Lines 3-6 adiciona receptores de eventos (event listeners) para os vários que são enviados ao executar uma transferência de dados usando XMLHttpRequest.

- -
Nota: Você precisa adicionar os receptores de eventos (event listeners) antes de chamar open() sobre a requisição.  Caso contrário, os eventos de prograsso não dispararão..
- -

O manipulador de evento  de prograsso, especificado pela função updateProgress() neste exemplo, recebe o número total de bytes para transferir, bem como o número de bytes transferidos até o momento em total de eventos e campos  carregados . No entanto, se o campo lengthComputable é false, o comprimento total não é conhecido e será zero..

- -

Eventos de progresso existem para ambos as transferências de download e upload. The download events are fired on the XMLHttpRequest object itself, as shown in the above sample. The upload events are fired on the XMLHttpRequest.upload object, as shown below:

- -
var oReq = new XMLHttpRequest();
-
-oReq.upload.addEventListener("progress", updateProgress, false);
-oReq.upload.addEventListener("load", transferComplete, false);
-oReq.upload.addEventListener("error", transferFailed, false);
-oReq.upload.addEventListener("abort", transferCanceled, false);
-
-oReq.open();
-
- -
Nota: eventos de progresso não estão disponíveis para o arquivo: protocol.
- -
Nota: Atualmente, existem bugs em aberto para o evento de progresso que continua fetando a versão 25 do Firefox sobre OS X e Linux.
- -
-

Nota: Iniciando no {{Gecko("9.0")}}, eventos de progresso agora podem ser invocados a entrar para cada pedaço de dados recebidos, incluindo o último bloco, nos casos em que o último pacote é recebido e a conexão fechada antes do evento progresso ser disparado. Neste caso, o evento de progresso é automaticamente acionado quando o evento load ocorre para esse pacote. Isso permite que você agora acompanhe de forma confiável apenas observando o evento de progresso

-
- -
-

Nota: A partir do {{Gecko("12.0")}}, se o seu evento de progresso e chamado com um responseType de "moz-blob", o valor da resposta será um {{domxref("Blob")}} contendo os dados recebidos até agorar.

-
- -

POde-se também detectar todas as três condições de fim de carga (abort, load, or error) usando o evento loadend:

- -
req.addEventListener("loadend", loadEnd, false);
-
-function loadEnd(e) {
-  alert("A transferência terminou (embora não sabemos se ele conseguiu ou não).");
-}
-
- -

Note que não há nenhuma maneira de ter certeza a partir da informação recebida pelo evento loadend sobre qual condição causou a operação de encerrar; no entanto, você pode usar isso para lidar com tarefas que precisam ser realizadas em todos os cenários de fim-de-transferência.

- -

Submitting forms and uploading files

- -

Instances of XMLHttpRequest can be used to submit forms in two ways:

- - - -

The second way (using the FormData API) is the simplest and the fastest, but has the disadvantage that the data thus collected can not be stringified: they are in every way a blob. It is the best solution for simple cases.
- The first way (pure AJAX) is instead the most complex, but in compensation is also the most flexible and powerful: it lends itself to wider uses and the data thus collected can be stringified and reused for other purposes such as, for example, populating the status object during a manipulation of the browser history, or other.

- -

Using nothing but pure AJAX

- -

Submitting forms without the FormData API does not require other APIs, except that, only if you want to upload one or more files, the FileReader API.

- -

A brief introduction to the submit methods

- -

An html {{ HTMLElement("form") }} can be sent in four ways:

- - - -

Now, consider to submit a form containing only two fields, named foo and baz. If you are using the POST method, the server will receive a string similar to one of the following three ones depending on the encoding type you are using:

- - - -

Instead, if you are using the GET method, a string like the following will be simply added to the URL:

- -
?foo=bar&baz=The%20first%20line.%0AThe%20second%20line.
- -

A little vanilla framework

- -

All these things are done automatically by the web browser whenever you submit a {{ HTMLElement("form") }}. But if you want to do the same things using JavaScript you have to instruct the interpreter about all things. So, how to send forms in pure AJAX is too complex to be explained in detail here. For this reason we posted here a complete (but still didactic) framework, which is able to use all the four ways of submit and, also, to upload files:

- -
-
<!doctype html>
-<html>
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<title>Sending forms with pure AJAX &ndash; MDN</title>
-<script type="text/javascript">
-
-"use strict";
-
-/*\
-|*|
-|*|  :: XMLHttpRequest.prototype.sendAsBinary() Polifyll ::
-|*|
-|*|  https://developer.mozilla.org/en-US/docs/DOM/XMLHttpRequest#sendAsBinary()
-\*/
-
-if (!XMLHttpRequest.prototype.sendAsBinary) {
-  XMLHttpRequest.prototype.sendAsBinary = function (sData) {
-    var nBytes = sData.length, ui8Data = new Uint8Array(nBytes);
-    for (var nIdx = 0; nIdx < nBytes; nIdx++) {
-      ui8Data[nIdx] = sData.charCodeAt(nIdx) & 0xff;
-    }
-    /* send as ArrayBufferView...: */
-    this.send(ui8Data);
-    /* ...or as ArrayBuffer (legacy)...: this.send(ui8Data.buffer); */
-  };
-}
-
-/*\
-|*|
-|*|  :: AJAX Form Submit Framework ::
-|*|
-|*|  https://developer.mozilla.org/en-US/docs/DOM/XMLHttpRequest/Using_XMLHttpRequest
-|*|
-|*|  This framework is released under the GNU Public License, version 3 or later.
-|*|  http://www.gnu.org/licenses/gpl-3.0-standalone.html
-|*|
-|*|  Syntax:
-|*|
-|*|   AJAXSubmit(HTMLFormElement);
-\*/
-
-var AJAXSubmit = (function () {
-
-  function ajaxSuccess () {
-    /* console.log("AJAXSubmit - Success!"); */
-    alert(this.responseText);
-    /* you can get the serialized data through the "submittedData" custom property: */
-    /* alert(JSON.stringify(this.submittedData)); */
-  }
-
-  function submitData (oData) {
-    /* the AJAX request... */
-    var oAjaxReq = new XMLHttpRequest();
-    oAjaxReq.submittedData = oData;
-    oAjaxReq.onload = ajaxSuccess;
-    if (oData.technique === 0) {
-      /* method is GET */
-      oAjaxReq.open("get", oData.receiver.replace(/(?:\?.*)?$/, oData.segments.length > 0 ? "?" + oData.segments.join("&") : ""), true);
-      oAjaxReq.send(null);
-    } else {
-      /* method is POST */
-      oAjaxReq.open("post", oData.receiver, true);
-      if (oData.technique === 3) {
-        /* enctype is multipart/form-data */
-        var sBoundary = "---------------------------" + Date.now().toString(16);
-        oAjaxReq.setRequestHeader("Content-Type", "multipart\/form-data; boundary=" + sBoundary);
-        oAjaxReq.sendAsBinary("--" + sBoundary + "\r\n" + oData.segments.join("--" + sBoundary + "\r\n") + "--" + sBoundary + "--\r\n");
-      } else {
-        /* enctype is application/x-www-form-urlencoded or text/plain */
-        oAjaxReq.setRequestHeader("Content-Type", oData.contentType);
-        oAjaxReq.send(oData.segments.join(oData.technique === 2 ? "\r\n" : "&"));
-      }
-    }
-  }
-
-  function processStatus (oData) {
-    if (oData.status > 0) { return; }
-    /* the form is now totally serialized! do something before sending it to the server... */
-    /* doSomething(oData); */
-    /* console.log("AJAXSubmit - The form is now serialized. Submitting..."); */
-    submitData (oData);
-  }
-
-  function pushSegment (oFREvt) {
-    this.owner.segments[this.segmentIdx] += oFREvt.target.result + "\r\n";
-    this.owner.status--;
-    processStatus(this.owner);
-  }
-
-  function plainEscape (sText) {
-    /* how should I treat a text/plain form encoding? what characters are not allowed? this is what I suppose...: */
-    /* "4\3\7 - Einstein said E=mc2" ----> "4\\3\\7\ -\ Einstein\ said\ E\=mc2" */
-    return sText.replace(/[\s\=\\]/g, "\\$&");
-  }
-
-  function SubmitRequest (oTarget) {
-    var nFile, sFieldType, oField, oSegmReq, oFile, bIsPost = oTarget.method.toLowerCase() === "post";
-    /* console.log("AJAXSubmit - Serializing form..."); */
-    this.contentType = bIsPost && oTarget.enctype ? oTarget.enctype : "application\/x-www-form-urlencoded";
-    this.technique = bIsPost ? this.contentType === "multipart\/form-data" ? 3 : this.contentType === "text\/plain" ? 2 : 1 : 0;
-    this.receiver = oTarget.action;
-    this.status = 0;
-    this.segments = [];
-    var fFilter = this.technique === 2 ? plainEscape : escape;
-    for (var nItem = 0; nItem < oTarget.elements.length; nItem++) {
-      oField = oTarget.elements[nItem];
-      if (!oField.hasAttribute("name")) { continue; }
-      sFieldType = oField.nodeName.toUpperCase() === "INPUT" ? oField.getAttribute("type").toUpperCase() : "TEXT";
-      if (sFieldType === "FILE" && oField.files.length > 0) {
-        if (this.technique === 3) {
-          /* enctype is multipart/form-data */
-          for (nFile = 0; nFile < oField.files.length; nFile++) {
-            oFile = oField.files[nFile];
-            oSegmReq = new FileReader();
-            /* (custom properties:) */
-            oSegmReq.segmentIdx = this.segments.length;
-            oSegmReq.owner = this;
-            /* (end of custom properties) */
-            oSegmReq.onload = pushSegment;
-            this.segments.push("Content-Disposition: form-data; name=\"" + oField.name + "\"; filename=\""+ oFile.name + "\"\r\nContent-Type: " + oFile.type + "\r\n\r\n");
-            this.status++;
-            oSegmReq.readAsBinaryString(oFile);
-          }
-        } else {
-          /* enctype is application/x-www-form-urlencoded or text/plain or method is GET: files will not be sent! */
-          for (nFile = 0; nFile < oField.files.length; this.segments.push(fFilter(oField.name) + "=" + fFilter(oField.files[nFile++].name)));
-        }
-      } else if ((sFieldType !== "RADIO" && sFieldType !== "CHECKBOX") || oField.checked) {
-        /* field type is not FILE or is FILE but is empty */
-        this.segments.push(
-          this.technique === 3 ? /* enctype is multipart/form-data */
-            "Content-Disposition: form-data; name=\"" + oField.name + "\"\r\n\r\n" + oField.value + "\r\n"
-          : /* enctype is application/x-www-form-urlencoded or text/plain or method is GET */
-            fFilter(oField.name) + "=" + fFilter(oField.value)
-        );
-      }
-    }
-    processStatus(this);
-  }
-
-  return function (oFormElement) {
-    if (!oFormElement.action) { return; }
-    new SubmitRequest(oFormElement);
-  };
-
-})();
-
-</script>
-</head>
-<body>
-
-<h1>Sending forms with pure AJAX</h1>
-
-<h2>Using the GET method</h2>
-
-<form action="register.php" method="get" onsubmit="AJAXSubmit(this); return false;">
-  <fieldset>
-    <legend>Registration example</legend>
-    <p>
-      First name: <input type="text" name="firstname" /><br />
-      Last name: <input type="text" name="lastname" />
-    </p>
-    <p>
-      <input type="submit" value="Submit" />
-    </p>
-  </fieldset>
-</form>
-
-<h2>Using the POST method</h2>
-<h3>Enctype: application/x-www-form-urlencoded (default)</h3>
-
-<form action="register.php" method="post" onsubmit="AJAXSubmit(this); return false;">
-  <fieldset>
-    <legend>Registration example</legend>
-    <p>
-      First name: <input type="text" name="firstname" /><br />
-      Last name: <input type="text" name="lastname" />
-    </p>
-    <p>
-      <input type="submit" value="Submit" />
-    </p>
-  </fieldset>
-</form>
-
-<h3>Enctype: text/plain</h3>
-
-<form action="register.php" method="post" enctype="text/plain" onsubmit="AJAXSubmit(this); return false;">
-  <fieldset>
-    <legend>Registration example</legend>
-    <p>
-      Your name: <input type="text" name="user" />
-    </p>
-    <p>
-      Your message:<br />
-      <textarea name="message" cols="40" rows="8"></textarea>
-    </p>
-    <p>
-      <input type="submit" value="Submit" />
-    </p>
-  </fieldset>
-</form>
-
-<h3>Enctype: multipart/form-data</h3>
-
-<form action="register.php" method="post" enctype="multipart/form-data" onsubmit="AJAXSubmit(this); return false;">
-  <fieldset>
-    <legend>Upload example</legend>
-    <p>
-      First name: <input type="text" name="firstname" /><br />
-      Last name: <input type="text" name="lastname" /><br />
-      Sex:
-      <input id="sex_male" type="radio" name="sex" value="male" /> <label for="sex_male">Male</label>
-      <input id="sex_female" type="radio" name="sex" value="female" /> <label for="sex_female">Female</label><br />
-      Password: <input type="password" name="secret" /><br />
-      What do you prefer:
-      <select name="image_type">
-        <option>Books</option>
-        <option>Cinema</option>
-        <option>TV</option>
-      </select>
-    </p>
-    <p>
-      Post your photos:
-      <input type="file" multiple name="photos[]">
-    </p>
-    <p>
-      <input id="vehicle_bike" type="checkbox" name="vehicle[]" value="Bike" /> <label for="vehicle_bike">I have a bike</label><br />
-      <input id="vehicle_car" type="checkbox" name="vehicle[]" value="Car" /> <label for="vehicle_car">I have a car</label>
-    </p>
-    <p>
-      Describe yourself:<br />
-      <textarea name="description" cols="50" rows="8"></textarea>
-    </p>
-    <p>
-      <input type="submit" value="Submit" />
-    </p>
-  </fieldset>
-</form>
-
-</body>
-</html>
-
- -

To test it, please, create a page named register.php (which is the action attribute of these sample forms) and just put the following minimalistic content:

- -
<?php
-
-  /* register.php */
-
-  header("Content-type: text/plain");
-
-  echo ":: data received via GET ::\n\n";
-  print_r($_GET);
-
-  echo "\n\n:: Data received via POST ::\n\n";
-  print_r($_POST);
-
-  echo "\n\n:: Data received as \"raw\" (text/plain encoding) ::\n\n";
-  if (isset($HTTP_RAW_POST_DATA)) { echo $HTTP_RAW_POST_DATA; }
-
-  echo "\n\n:: Files received ::\n\n";
-  print_r($_FILES);
-
-?>
- -

The syntax of this script is the following:

- -
AJAXSubmit(myForm);
- -
Note: This little vanilla framework uses the FileReader API, which is a recent technique (but only when there are files to upload, the method of the {{ HTMLElement("form") }} is POST and the enctype attribute is setted to multipart/form-data). For this reason, the pure-AJAX upload is to be considered an experimental technique. Instead, if you don't want to upload files, this framework will not use any recent API.
-Note also that the best way to send binary content is using ArrayBuffers or Blobs in conjuncton with the send() method and, possibly, with the readAsArrayBuffer() method of the FileReader API. But, since the aim of this little script is to work with a stringifiable raw data, we used the sendAsBinary() method in conjunction with the readAsBinaryString() method of the FileReader API. So, this is the best solution when working with a relatively few data which must be stringified in order to be reused later. Anyhow, since working with strings instead of typed arrays implies a greater waste of resources, this script makes sense only when you are dealing with small files (like images, documents, mp3, etc.). Otherwise, if you don't want to stringify the submitted or uploaded data, in addition to typed arrays, consider also the use of the FormData API.
- -

Using FormData objects

- -

The FormData constructor lets you compile a set of key/value pairs to send using XMLHttpRequest. Its primarily intended for use in sending form data, but can be used independently from forms in order to transmit keyed data. The transmitted data is in the same format that the form's submit() method would use to send the data if the form's encoding type were set to "multipart/form-data". FormData objects can be utilized in a number of ways with an XMLHttpRequest. For examples and explanations of how one can utilize FormData with XMLHttpRequests see the Using FormData Objects page. For didactic purpose only we post here a translation of the previous example transformed so as to make use of the FormData API. Note the brevity of the code:

- -
-
<!doctype html>
-<html>
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<title>Sending forms with FormData &ndash; MDN</title>
-<script type="text/javascript">
-"use strict";
-
-function ajaxSuccess () {
-  alert(this.responseText);
-}
-
-function AJAXSubmit (oFormElement) {
-  if (!oFormElement.action) { return; }
-  var oReq = new XMLHttpRequest();
-  oReq.onload = ajaxSuccess;
-  if (oFormElement.method.toLowerCase() === "post") {
-    oReq.open("post", oFormElement.action, true);
-    oReq.send(new FormData(oFormElement));
-  } else {
-    var oField, sFieldType, nFile, sSearch = "";
-    for (var nItem = 0; nItem < oFormElement.elements.length; nItem++) {
-      oField = oFormElement.elements[nItem];
-      if (!oField.hasAttribute("name")) { continue; }
-      sFieldType = oField.nodeName.toUpperCase() === "INPUT" ? oField.getAttribute("type").toUpperCase() : "TEXT";
-      if (sFieldType === "FILE") {
-        for (nFile = 0; nFile < oField.files.length; sSearch += "&" + escape(oField.name) + "=" + escape(oField.files[nFile++].name));
-      } else if ((sFieldType !== "RADIO" && sFieldType !== "CHECKBOX") || oField.checked) {
-        sSearch += "&" + escape(oField.name) + "=" + escape(oField.value);
-      }
-    }
-    oReq.open("get", oFormElement.action.replace(/(?:\?.*)?$/, sSearch.replace(/^&/, "?")), true);
-    oReq.send(null);
-  }
-}
-</script>
-</head>
-<body>
-
-<h1>Sending forms with FormData</h1>
-
-<h2>Using the GET method</h2>
-
-<form action="register.php" method="get" onsubmit="AJAXSubmit(this); return false;">
-  <fieldset>
-    <legend>Registration example</legend>
-    <p>
-      First name: <input type="text" name="firstname" /><br />
-      Last name: <input type="text" name="lastname" />
-    </p>
-    <p>
-      <input type="submit" value="Submit" />
-    </p>
-  </fieldset>
-</form>
-
-<h2>Using the POST method</h2>
-<h3>Enctype: application/x-www-form-urlencoded (default)</h3>
-
-<form action="register.php" method="post" onsubmit="AJAXSubmit(this); return false;">
-  <fieldset>
-    <legend>Registration example</legend>
-    <p>
-      First name: <input type="text" name="firstname" /><br />
-      Last name: <input type="text" name="lastname" />
-    </p>
-    <p>
-      <input type="submit" value="Submit" />
-    </p>
-  </fieldset>
-</form>
-
-<h3>Enctype: text/plain</h3>
-
-<p>The text/plain encoding is not supported by the FormData API.</p>
-
-<h3>Enctype: multipart/form-data</h3>
-
-<form action="register.php" method="post" enctype="multipart/form-data" onsubmit="AJAXSubmit(this); return false;">
-  <fieldset>
-    <legend>Upload example</legend>
-    <p>
-      First name: <input type="text" name="firstname" /><br />
-      Last name: <input type="text" name="lastname" /><br />
-      Sex:
-      <input id="sex_male" type="radio" name="sex" value="male" /> <label for="sex_male">Male</label>
-      <input id="sex_female" type="radio" name="sex" value="female" /> <label for="sex_female">Female</label><br />
-      Password: <input type="password" name="secret" /><br />
-      What do you prefer:
-      <select name="image_type">
-        <option>Books</option>
-        <option>Cinema</option>
-        <option>TV</option>
-      </select>
-    </p>
-    <p>
-      Post your photos:
-      <input type="file" multiple name="photos[]">
-    </p>
-    <p>
-      <input id="vehicle_bike" type="checkbox" name="vehicle[]" value="Bike" /> <label for="vehicle_bike">I have a bike</label><br />
-      <input id="vehicle_car" type="checkbox" name="vehicle[]" value="Car" /> <label for="vehicle_car">I have a car</label>
-    </p>
-    <p>
-      Describe yourself:<br />
-      <textarea name="description" cols="50" rows="8"></textarea>
-    </p>
-    <p>
-      <input type="submit" value="Submit" />
-    </p>
-  </fieldset>
-</form>
-
-</body>
-</html>
-
- -
Note: As we said, FormData objects are not stringifiable objects. If you want to stringify a submitted data, use the previous pure-AJAX example. Note also that, although in this example there are some file {{ HTMLElement("input") }} fields, when you submit a form through the FormData API you do not need to use the FileReader API also: files are automatically loaded and uploaded.
- -

Cross-site XMLHttpRequest

- -

Modern browsers support cross-site requests by implementing the web applications working group's Access Control for Cross-Site Requests standard.  As long as the server is configured to allow requests from your web application's origin, XMLHttpRequest will work.  Otherwise, an INVALID_ACCESS_ERR exception is thrown.

- -

Bypassing the cache

- -

A, cross-browser compatible approach to bypassing the cache is to append a timestamp to the URL, being sure to include a "?" or "&" as appropriate.  For example:

- -
http://foo.com/bar.html -> http://foo.com/bar.html?12345
-http://foo.com/bar.html?foobar=baz -> http://foo.com/bar.html?foobar=baz&12345
-
- -

Since the local cache is indexed by URL, this causes every request to be unique, thereby bypassing the cache.

- -

You can automatically adjust URLs using the following code:

- -
var oReq = new XMLHttpRequest();
-
-oReq.open("GET", url + ((/\?/).test(url) ? "&" : "?") + (new Date()).getTime(), true);
-oReq.send(null);
- -

Security

- -

{{fx_minversion_note(3, "Versions of Firefox prior to Firefox 3 allowed you to set the preference capability.policy..XMLHttpRequest.open to allAccess to give specific sites cross-site access.  This is no longer supported.")}}

- -

{{fx_minversion_note(5, "Versions of Firefox prior to Firefox 5 could use netscape.security.PrivilegeManager.enablePrivilege(\"UniversalBrowserRead\"); to request cross-site access. This is no longer supported, even though it produces no warning and permission dialog is still presented.")}}

- -

The recommended way to enable cross-site scripting is to use the Access-Control-Allow-Origin HTTP header in the response to the XMLHttpRequest.

- -

XMLHttpRequests being stopped

- -

If you end up with an XMLHttpRequest having status=0 and statusText=null, it means that the request was not allowed to be performed. It was UNSENT. A likely cause for this is when the XMLHttpRequest origin (at the creation of the XMLHttpRequest) has changed when the XMLHttpRequest is then open(). This case can happen for example when one has an XMLHttpRequest that gets fired on an onunload event for a window: the XMLHttpRequest gets in fact created when the window to be closed is still there, and then the request is sent (ie open()) when this window has lost its focus and potentially different window has gained focus. The way to avoid this problem is to set a listener on the new window "activate" event that gets set when the old window has its "unload" event fired.

- -

Using XMLHttpRequest from JavaScript modules / XPCOM components

- -

Instantiating XMLHttpRequest from a JavaScript module 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.

- -
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.

- -
const { XMLHttpRequest } = Components.classes["@mozilla.org/appshell/appShellService;1"]
-                                     .getService(Components.interfaces.nsIAppShellService)
-                                     .hiddenDOMWindow;
-var oReq = XMLHttpRequest();
-
- -

See also

- -
    -
  1. MDC AJAX introduction
  2. -
  3. HTTP access control
  4. -
  5. How to check the security state of an XMLHTTPRequest over SSL
  6. -
  7. XMLHttpRequest - REST and the Rich User Experience
  8. -
  9. Microsoft documentation
  10. -
  11. Apple developers' reference
  12. -
  13. "Using the XMLHttpRequest Object" (jibbering.com)
  14. -
  15. The XMLHttpRequest Object: W3C Specification
  16. -
  17. Web Progress Events specification
  18. -
diff --git a/files/pt-br/web/api/xmlhttprequest/using_xmlhttprequest/index.html b/files/pt-br/web/api/xmlhttprequest/using_xmlhttprequest/index.html new file mode 100644 index 0000000000..b541e64bc1 --- /dev/null +++ b/files/pt-br/web/api/xmlhttprequest/using_xmlhttprequest/index.html @@ -0,0 +1,688 @@ +--- +title: Usando XMLHttpRequest +slug: Web/API/XMLHttpRequest/Usando_XMLHttpRequest +translation_of: Web/API/XMLHttpRequest/Using_XMLHttpRequest +--- +

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 HTTP 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.

+ +
function reqListener () {
+  console.log(this.responseText);
+};
+
+var oReq = new XMLHttpRequest();
+oReq.onload = reqListener;
+oReq.open("get", "yourFile.txt", true);
+oReq.send();
+ +

Tipos de Requisições

+ +

Uma requisição feita via XMLHttpRequest pode buscar dados de duas maneiras, sícrona e assíncrona. O tipo de requisição é dado pelo argumento async que é opcional (terceiro argumento) e é definido no método XMLHttpRequest open(). Se esse argumento for true ou não especificado, o XMLHttpRequest será processado de maneira assíncrona, caso contrário o processamento será síncrono. Uma discussão detalhada e demonstrações desses dois tipos podem ser encontradas na página requisições síncronas e assíncronas. No geral a melhor prática é a das solicitações assíncronas.

+ +

Manipulando Respostas

+ +

Existem vários tipos de atributos de resposta definidos pela especificação da W3C para o  XMLHttpRequest.  Eles informam ao cliente que efetuou a requisição XMLHttpRequest informações importantes sobre o status da resposta. Em alguns casos onde se lida com tipos de resposa de não-texto, os tipos de resposta podem envolver alguma manipulação e/ou análise conforme descrito nas seções seguintes.

+ +

Analisando e manipulando a propriedade responseXML

+ +

Se você utiliza o XMLHttpRequest para obter o conteúdo de um documento XML remoto, a propriedade responseXML será um objeto DOM que contém um documento XML, o que pode dificultar a manipulação e análise.

+ +

As cinco formas mais utilizadas para análisar e manipular um arquivo XML são:

+ +
    +
  1. Usando XPath para análisar parte deles.
  2. +
  3. Usando JXON para converter em um Objeto JavaScript.
  4. +
  5. Manualmente Parsing and serializing XML para strings ou objetos.
  6. +
  7. Usando XMLSerializer para serializar árvores do DOM para strings ou para arquivos.
  8. +
  9. RegExp pode ser usado se você souber de antemão qual é o conteúdo do XML. Você pode remover quebras de linhas, usando a RegExp para procurar as quebras de linha. No entanto, este é o "último método", caso o código do XML sofra alterações, o método se torna falho.
  10. +
+ +

Analisando e manipulando uma propriedade responseText contendo um documento HTML

+ +
Nota: A especificação W3C do XMLHttpRequest permite analisar HTML através da propriedade XMLHttpRequest.responseXML . Leia o artigo sobre HTML in XMLHttpRequest para maiores detalhes.
+ +

Se você usa o XMLHttpRequest para recuperar o conteúdo de uma página HTML remota, a propriedade responseText será uma string contendo um a "sopa" de todos as tags HTML, o que pode ser difícil de manipular e analizar. Existem três formas básicas para analizar esta sopa de string HTML:

+ +
    +
  1. Use a propriedade  XMLHttpRequest.responseXML.
  2. +
  3. Introduza o conteúdo dentro do corpo de um document fragment Através de fragment.body.innerHTML e percorra o fragmento do DOM.
  4. +
  5. RegExp pode se usada se você sempre conhece o conteúdo HTML responseText de que tem em mãos. Você pode quere remover quebras de linha, se você usar RegExp para varrer no que diz respeito a quebra de linhas. Contudo, este método é um "último recurso" uma vez que se o código HTML mudar um pouco, o método provavelmente irá falhar.
  6. +
+ +

Manipulação de dados binários

+ +

Apesar de XMLHttpRequest ser mais comumente usado para enviar e receber dados textual, ele pode ser utilizado para enviar e receber conteúdo binário. Existem vários métodos bem testados para forçar a resposta de um XMLHttpRequest para o envio de dados binário. Eles envolvem a utilização do método  .overrideMimeType()  sobre o objeto  XMLHttpRequest e é uma solução viável.

+ +
var oReq = new XMLHttpRequest();
+oReq.open("GET", url, true);
+// recupera dados não processados como uma string binária
+oReq.overrideMimeType("text/plain; charset=x-user-defined");
+/* ... */
+
+ +

A especificação XMLHttpRequest Level 2  adiciona novo responseType attributes que tornam o envio e recebimento de dados muito mais fácil.

+ +
var oReq = new XMLHttpRequest();
+
+oReq.open("GET", url, true);
+oReq.responseType = "arraybuffer";
+oReq.onload = function(e) {
+  var arraybuffer = oReq.response; // não é responseText
+  /* ... */
+}
+oReq.send();
+
+ +

Para mais exemplos confira a página Sending and Receiving Binary Data.

+ +

Monitorando o progresso

+ +

XMLHttpRequest fornece a capacidade de ouvir vários eventos que podem ocorrer enquanto o pedido está sendo processado. Isso inclui notificações periódicas de progresso, notificações de erro e assim por diante.

+ +

Suporte para evento de progresso DOM monitorando a conexão XMLHttpRequest transfers siga a Web API specification for progress events: estes eventos implementam a interface {{domxref("ProgressEvent")}} .

+ +
var oReq = new XMLHttpRequest();
+
+oReq.addEventListener("progress", updateProgress, false);
+oReq.addEventListener("load", transferComplete, false);
+oReq.addEventListener("error", transferFailed, false);
+oReq.addEventListener("abort", transferCanceled, false);
+
+oReq.open();
+
+// ...A transferência foi cancelada pelo usuário
+
+// progresso de transferências do servidor para o cliente (downloads)
+function updateProgress (oEvent) {
+  if (oEvent.lengthComputable) {
+    var percentComplete = oEvent.loaded / oEvent.total;
+    // ...
+  } else {
+    // Não é possível calcular informações de progresso uma vez que a dimensão total é desconhecida
+  }
+}
+
+function transferComplete(evt) {
+  alert("A transferência foi concluída.");
+}
+
+function transferFailed(evt) {
+  alert("Um erro ocorreu durante a transferência do arquivo.");
+}
+
+function transferCanceled(evt) {
+  alert("A transferência foi cancelada pelo usuário.");
+}
+ +

Lines 3-6 adiciona receptores de eventos (event listeners) para os vários que são enviados ao executar uma transferência de dados usando XMLHttpRequest.

+ +
Nota: Você precisa adicionar os receptores de eventos (event listeners) antes de chamar open() sobre a requisição.  Caso contrário, os eventos de prograsso não dispararão..
+ +

O manipulador de evento  de prograsso, especificado pela função updateProgress() neste exemplo, recebe o número total de bytes para transferir, bem como o número de bytes transferidos até o momento em total de eventos e campos  carregados . No entanto, se o campo lengthComputable é false, o comprimento total não é conhecido e será zero..

+ +

Eventos de progresso existem para ambos as transferências de download e upload. The download events are fired on the XMLHttpRequest object itself, as shown in the above sample. The upload events are fired on the XMLHttpRequest.upload object, as shown below:

+ +
var oReq = new XMLHttpRequest();
+
+oReq.upload.addEventListener("progress", updateProgress, false);
+oReq.upload.addEventListener("load", transferComplete, false);
+oReq.upload.addEventListener("error", transferFailed, false);
+oReq.upload.addEventListener("abort", transferCanceled, false);
+
+oReq.open();
+
+ +
Nota: eventos de progresso não estão disponíveis para o arquivo: protocol.
+ +
Nota: Atualmente, existem bugs em aberto para o evento de progresso que continua fetando a versão 25 do Firefox sobre OS X e Linux.
+ +
+

Nota: Iniciando no {{Gecko("9.0")}}, eventos de progresso agora podem ser invocados a entrar para cada pedaço de dados recebidos, incluindo o último bloco, nos casos em que o último pacote é recebido e a conexão fechada antes do evento progresso ser disparado. Neste caso, o evento de progresso é automaticamente acionado quando o evento load ocorre para esse pacote. Isso permite que você agora acompanhe de forma confiável apenas observando o evento de progresso

+
+ +
+

Nota: A partir do {{Gecko("12.0")}}, se o seu evento de progresso e chamado com um responseType de "moz-blob", o valor da resposta será um {{domxref("Blob")}} contendo os dados recebidos até agorar.

+
+ +

POde-se também detectar todas as três condições de fim de carga (abort, load, or error) usando o evento loadend:

+ +
req.addEventListener("loadend", loadEnd, false);
+
+function loadEnd(e) {
+  alert("A transferência terminou (embora não sabemos se ele conseguiu ou não).");
+}
+
+ +

Note que não há nenhuma maneira de ter certeza a partir da informação recebida pelo evento loadend sobre qual condição causou a operação de encerrar; no entanto, você pode usar isso para lidar com tarefas que precisam ser realizadas em todos os cenários de fim-de-transferência.

+ +

Submitting forms and uploading files

+ +

Instances of XMLHttpRequest can be used to submit forms in two ways:

+ + + +

The second way (using the FormData API) is the simplest and the fastest, but has the disadvantage that the data thus collected can not be stringified: they are in every way a blob. It is the best solution for simple cases.
+ The first way (pure AJAX) is instead the most complex, but in compensation is also the most flexible and powerful: it lends itself to wider uses and the data thus collected can be stringified and reused for other purposes such as, for example, populating the status object during a manipulation of the browser history, or other.

+ +

Using nothing but pure AJAX

+ +

Submitting forms without the FormData API does not require other APIs, except that, only if you want to upload one or more files, the FileReader API.

+ +

A brief introduction to the submit methods

+ +

An html {{ HTMLElement("form") }} can be sent in four ways:

+ + + +

Now, consider to submit a form containing only two fields, named foo and baz. If you are using the POST method, the server will receive a string similar to one of the following three ones depending on the encoding type you are using:

+ + + +

Instead, if you are using the GET method, a string like the following will be simply added to the URL:

+ +
?foo=bar&baz=The%20first%20line.%0AThe%20second%20line.
+ +

A little vanilla framework

+ +

All these things are done automatically by the web browser whenever you submit a {{ HTMLElement("form") }}. But if you want to do the same things using JavaScript you have to instruct the interpreter about all things. So, how to send forms in pure AJAX is too complex to be explained in detail here. For this reason we posted here a complete (but still didactic) framework, which is able to use all the four ways of submit and, also, to upload files:

+ +
+
<!doctype html>
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<title>Sending forms with pure AJAX &ndash; MDN</title>
+<script type="text/javascript">
+
+"use strict";
+
+/*\
+|*|
+|*|  :: XMLHttpRequest.prototype.sendAsBinary() Polifyll ::
+|*|
+|*|  https://developer.mozilla.org/en-US/docs/DOM/XMLHttpRequest#sendAsBinary()
+\*/
+
+if (!XMLHttpRequest.prototype.sendAsBinary) {
+  XMLHttpRequest.prototype.sendAsBinary = function (sData) {
+    var nBytes = sData.length, ui8Data = new Uint8Array(nBytes);
+    for (var nIdx = 0; nIdx < nBytes; nIdx++) {
+      ui8Data[nIdx] = sData.charCodeAt(nIdx) & 0xff;
+    }
+    /* send as ArrayBufferView...: */
+    this.send(ui8Data);
+    /* ...or as ArrayBuffer (legacy)...: this.send(ui8Data.buffer); */
+  };
+}
+
+/*\
+|*|
+|*|  :: AJAX Form Submit Framework ::
+|*|
+|*|  https://developer.mozilla.org/en-US/docs/DOM/XMLHttpRequest/Using_XMLHttpRequest
+|*|
+|*|  This framework is released under the GNU Public License, version 3 or later.
+|*|  http://www.gnu.org/licenses/gpl-3.0-standalone.html
+|*|
+|*|  Syntax:
+|*|
+|*|   AJAXSubmit(HTMLFormElement);
+\*/
+
+var AJAXSubmit = (function () {
+
+  function ajaxSuccess () {
+    /* console.log("AJAXSubmit - Success!"); */
+    alert(this.responseText);
+    /* you can get the serialized data through the "submittedData" custom property: */
+    /* alert(JSON.stringify(this.submittedData)); */
+  }
+
+  function submitData (oData) {
+    /* the AJAX request... */
+    var oAjaxReq = new XMLHttpRequest();
+    oAjaxReq.submittedData = oData;
+    oAjaxReq.onload = ajaxSuccess;
+    if (oData.technique === 0) {
+      /* method is GET */
+      oAjaxReq.open("get", oData.receiver.replace(/(?:\?.*)?$/, oData.segments.length > 0 ? "?" + oData.segments.join("&") : ""), true);
+      oAjaxReq.send(null);
+    } else {
+      /* method is POST */
+      oAjaxReq.open("post", oData.receiver, true);
+      if (oData.technique === 3) {
+        /* enctype is multipart/form-data */
+        var sBoundary = "---------------------------" + Date.now().toString(16);
+        oAjaxReq.setRequestHeader("Content-Type", "multipart\/form-data; boundary=" + sBoundary);
+        oAjaxReq.sendAsBinary("--" + sBoundary + "\r\n" + oData.segments.join("--" + sBoundary + "\r\n") + "--" + sBoundary + "--\r\n");
+      } else {
+        /* enctype is application/x-www-form-urlencoded or text/plain */
+        oAjaxReq.setRequestHeader("Content-Type", oData.contentType);
+        oAjaxReq.send(oData.segments.join(oData.technique === 2 ? "\r\n" : "&"));
+      }
+    }
+  }
+
+  function processStatus (oData) {
+    if (oData.status > 0) { return; }
+    /* the form is now totally serialized! do something before sending it to the server... */
+    /* doSomething(oData); */
+    /* console.log("AJAXSubmit - The form is now serialized. Submitting..."); */
+    submitData (oData);
+  }
+
+  function pushSegment (oFREvt) {
+    this.owner.segments[this.segmentIdx] += oFREvt.target.result + "\r\n";
+    this.owner.status--;
+    processStatus(this.owner);
+  }
+
+  function plainEscape (sText) {
+    /* how should I treat a text/plain form encoding? what characters are not allowed? this is what I suppose...: */
+    /* "4\3\7 - Einstein said E=mc2" ----> "4\\3\\7\ -\ Einstein\ said\ E\=mc2" */
+    return sText.replace(/[\s\=\\]/g, "\\$&");
+  }
+
+  function SubmitRequest (oTarget) {
+    var nFile, sFieldType, oField, oSegmReq, oFile, bIsPost = oTarget.method.toLowerCase() === "post";
+    /* console.log("AJAXSubmit - Serializing form..."); */
+    this.contentType = bIsPost && oTarget.enctype ? oTarget.enctype : "application\/x-www-form-urlencoded";
+    this.technique = bIsPost ? this.contentType === "multipart\/form-data" ? 3 : this.contentType === "text\/plain" ? 2 : 1 : 0;
+    this.receiver = oTarget.action;
+    this.status = 0;
+    this.segments = [];
+    var fFilter = this.technique === 2 ? plainEscape : escape;
+    for (var nItem = 0; nItem < oTarget.elements.length; nItem++) {
+      oField = oTarget.elements[nItem];
+      if (!oField.hasAttribute("name")) { continue; }
+      sFieldType = oField.nodeName.toUpperCase() === "INPUT" ? oField.getAttribute("type").toUpperCase() : "TEXT";
+      if (sFieldType === "FILE" && oField.files.length > 0) {
+        if (this.technique === 3) {
+          /* enctype is multipart/form-data */
+          for (nFile = 0; nFile < oField.files.length; nFile++) {
+            oFile = oField.files[nFile];
+            oSegmReq = new FileReader();
+            /* (custom properties:) */
+            oSegmReq.segmentIdx = this.segments.length;
+            oSegmReq.owner = this;
+            /* (end of custom properties) */
+            oSegmReq.onload = pushSegment;
+            this.segments.push("Content-Disposition: form-data; name=\"" + oField.name + "\"; filename=\""+ oFile.name + "\"\r\nContent-Type: " + oFile.type + "\r\n\r\n");
+            this.status++;
+            oSegmReq.readAsBinaryString(oFile);
+          }
+        } else {
+          /* enctype is application/x-www-form-urlencoded or text/plain or method is GET: files will not be sent! */
+          for (nFile = 0; nFile < oField.files.length; this.segments.push(fFilter(oField.name) + "=" + fFilter(oField.files[nFile++].name)));
+        }
+      } else if ((sFieldType !== "RADIO" && sFieldType !== "CHECKBOX") || oField.checked) {
+        /* field type is not FILE or is FILE but is empty */
+        this.segments.push(
+          this.technique === 3 ? /* enctype is multipart/form-data */
+            "Content-Disposition: form-data; name=\"" + oField.name + "\"\r\n\r\n" + oField.value + "\r\n"
+          : /* enctype is application/x-www-form-urlencoded or text/plain or method is GET */
+            fFilter(oField.name) + "=" + fFilter(oField.value)
+        );
+      }
+    }
+    processStatus(this);
+  }
+
+  return function (oFormElement) {
+    if (!oFormElement.action) { return; }
+    new SubmitRequest(oFormElement);
+  };
+
+})();
+
+</script>
+</head>
+<body>
+
+<h1>Sending forms with pure AJAX</h1>
+
+<h2>Using the GET method</h2>
+
+<form action="register.php" method="get" onsubmit="AJAXSubmit(this); return false;">
+  <fieldset>
+    <legend>Registration example</legend>
+    <p>
+      First name: <input type="text" name="firstname" /><br />
+      Last name: <input type="text" name="lastname" />
+    </p>
+    <p>
+      <input type="submit" value="Submit" />
+    </p>
+  </fieldset>
+</form>
+
+<h2>Using the POST method</h2>
+<h3>Enctype: application/x-www-form-urlencoded (default)</h3>
+
+<form action="register.php" method="post" onsubmit="AJAXSubmit(this); return false;">
+  <fieldset>
+    <legend>Registration example</legend>
+    <p>
+      First name: <input type="text" name="firstname" /><br />
+      Last name: <input type="text" name="lastname" />
+    </p>
+    <p>
+      <input type="submit" value="Submit" />
+    </p>
+  </fieldset>
+</form>
+
+<h3>Enctype: text/plain</h3>
+
+<form action="register.php" method="post" enctype="text/plain" onsubmit="AJAXSubmit(this); return false;">
+  <fieldset>
+    <legend>Registration example</legend>
+    <p>
+      Your name: <input type="text" name="user" />
+    </p>
+    <p>
+      Your message:<br />
+      <textarea name="message" cols="40" rows="8"></textarea>
+    </p>
+    <p>
+      <input type="submit" value="Submit" />
+    </p>
+  </fieldset>
+</form>
+
+<h3>Enctype: multipart/form-data</h3>
+
+<form action="register.php" method="post" enctype="multipart/form-data" onsubmit="AJAXSubmit(this); return false;">
+  <fieldset>
+    <legend>Upload example</legend>
+    <p>
+      First name: <input type="text" name="firstname" /><br />
+      Last name: <input type="text" name="lastname" /><br />
+      Sex:
+      <input id="sex_male" type="radio" name="sex" value="male" /> <label for="sex_male">Male</label>
+      <input id="sex_female" type="radio" name="sex" value="female" /> <label for="sex_female">Female</label><br />
+      Password: <input type="password" name="secret" /><br />
+      What do you prefer:
+      <select name="image_type">
+        <option>Books</option>
+        <option>Cinema</option>
+        <option>TV</option>
+      </select>
+    </p>
+    <p>
+      Post your photos:
+      <input type="file" multiple name="photos[]">
+    </p>
+    <p>
+      <input id="vehicle_bike" type="checkbox" name="vehicle[]" value="Bike" /> <label for="vehicle_bike">I have a bike</label><br />
+      <input id="vehicle_car" type="checkbox" name="vehicle[]" value="Car" /> <label for="vehicle_car">I have a car</label>
+    </p>
+    <p>
+      Describe yourself:<br />
+      <textarea name="description" cols="50" rows="8"></textarea>
+    </p>
+    <p>
+      <input type="submit" value="Submit" />
+    </p>
+  </fieldset>
+</form>
+
+</body>
+</html>
+
+ +

To test it, please, create a page named register.php (which is the action attribute of these sample forms) and just put the following minimalistic content:

+ +
<?php
+
+  /* register.php */
+
+  header("Content-type: text/plain");
+
+  echo ":: data received via GET ::\n\n";
+  print_r($_GET);
+
+  echo "\n\n:: Data received via POST ::\n\n";
+  print_r($_POST);
+
+  echo "\n\n:: Data received as \"raw\" (text/plain encoding) ::\n\n";
+  if (isset($HTTP_RAW_POST_DATA)) { echo $HTTP_RAW_POST_DATA; }
+
+  echo "\n\n:: Files received ::\n\n";
+  print_r($_FILES);
+
+?>
+ +

The syntax of this script is the following:

+ +
AJAXSubmit(myForm);
+ +
Note: This little vanilla framework uses the FileReader API, which is a recent technique (but only when there are files to upload, the method of the {{ HTMLElement("form") }} is POST and the enctype attribute is setted to multipart/form-data). For this reason, the pure-AJAX upload is to be considered an experimental technique. Instead, if you don't want to upload files, this framework will not use any recent API.
+Note also that the best way to send binary content is using ArrayBuffers or Blobs in conjuncton with the send() method and, possibly, with the readAsArrayBuffer() method of the FileReader API. But, since the aim of this little script is to work with a stringifiable raw data, we used the sendAsBinary() method in conjunction with the readAsBinaryString() method of the FileReader API. So, this is the best solution when working with a relatively few data which must be stringified in order to be reused later. Anyhow, since working with strings instead of typed arrays implies a greater waste of resources, this script makes sense only when you are dealing with small files (like images, documents, mp3, etc.). Otherwise, if you don't want to stringify the submitted or uploaded data, in addition to typed arrays, consider also the use of the FormData API.
+ +

Using FormData objects

+ +

The FormData constructor lets you compile a set of key/value pairs to send using XMLHttpRequest. Its primarily intended for use in sending form data, but can be used independently from forms in order to transmit keyed data. The transmitted data is in the same format that the form's submit() method would use to send the data if the form's encoding type were set to "multipart/form-data". FormData objects can be utilized in a number of ways with an XMLHttpRequest. For examples and explanations of how one can utilize FormData with XMLHttpRequests see the Using FormData Objects page. For didactic purpose only we post here a translation of the previous example transformed so as to make use of the FormData API. Note the brevity of the code:

+ +
+
<!doctype html>
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<title>Sending forms with FormData &ndash; MDN</title>
+<script type="text/javascript">
+"use strict";
+
+function ajaxSuccess () {
+  alert(this.responseText);
+}
+
+function AJAXSubmit (oFormElement) {
+  if (!oFormElement.action) { return; }
+  var oReq = new XMLHttpRequest();
+  oReq.onload = ajaxSuccess;
+  if (oFormElement.method.toLowerCase() === "post") {
+    oReq.open("post", oFormElement.action, true);
+    oReq.send(new FormData(oFormElement));
+  } else {
+    var oField, sFieldType, nFile, sSearch = "";
+    for (var nItem = 0; nItem < oFormElement.elements.length; nItem++) {
+      oField = oFormElement.elements[nItem];
+      if (!oField.hasAttribute("name")) { continue; }
+      sFieldType = oField.nodeName.toUpperCase() === "INPUT" ? oField.getAttribute("type").toUpperCase() : "TEXT";
+      if (sFieldType === "FILE") {
+        for (nFile = 0; nFile < oField.files.length; sSearch += "&" + escape(oField.name) + "=" + escape(oField.files[nFile++].name));
+      } else if ((sFieldType !== "RADIO" && sFieldType !== "CHECKBOX") || oField.checked) {
+        sSearch += "&" + escape(oField.name) + "=" + escape(oField.value);
+      }
+    }
+    oReq.open("get", oFormElement.action.replace(/(?:\?.*)?$/, sSearch.replace(/^&/, "?")), true);
+    oReq.send(null);
+  }
+}
+</script>
+</head>
+<body>
+
+<h1>Sending forms with FormData</h1>
+
+<h2>Using the GET method</h2>
+
+<form action="register.php" method="get" onsubmit="AJAXSubmit(this); return false;">
+  <fieldset>
+    <legend>Registration example</legend>
+    <p>
+      First name: <input type="text" name="firstname" /><br />
+      Last name: <input type="text" name="lastname" />
+    </p>
+    <p>
+      <input type="submit" value="Submit" />
+    </p>
+  </fieldset>
+</form>
+
+<h2>Using the POST method</h2>
+<h3>Enctype: application/x-www-form-urlencoded (default)</h3>
+
+<form action="register.php" method="post" onsubmit="AJAXSubmit(this); return false;">
+  <fieldset>
+    <legend>Registration example</legend>
+    <p>
+      First name: <input type="text" name="firstname" /><br />
+      Last name: <input type="text" name="lastname" />
+    </p>
+    <p>
+      <input type="submit" value="Submit" />
+    </p>
+  </fieldset>
+</form>
+
+<h3>Enctype: text/plain</h3>
+
+<p>The text/plain encoding is not supported by the FormData API.</p>
+
+<h3>Enctype: multipart/form-data</h3>
+
+<form action="register.php" method="post" enctype="multipart/form-data" onsubmit="AJAXSubmit(this); return false;">
+  <fieldset>
+    <legend>Upload example</legend>
+    <p>
+      First name: <input type="text" name="firstname" /><br />
+      Last name: <input type="text" name="lastname" /><br />
+      Sex:
+      <input id="sex_male" type="radio" name="sex" value="male" /> <label for="sex_male">Male</label>
+      <input id="sex_female" type="radio" name="sex" value="female" /> <label for="sex_female">Female</label><br />
+      Password: <input type="password" name="secret" /><br />
+      What do you prefer:
+      <select name="image_type">
+        <option>Books</option>
+        <option>Cinema</option>
+        <option>TV</option>
+      </select>
+    </p>
+    <p>
+      Post your photos:
+      <input type="file" multiple name="photos[]">
+    </p>
+    <p>
+      <input id="vehicle_bike" type="checkbox" name="vehicle[]" value="Bike" /> <label for="vehicle_bike">I have a bike</label><br />
+      <input id="vehicle_car" type="checkbox" name="vehicle[]" value="Car" /> <label for="vehicle_car">I have a car</label>
+    </p>
+    <p>
+      Describe yourself:<br />
+      <textarea name="description" cols="50" rows="8"></textarea>
+    </p>
+    <p>
+      <input type="submit" value="Submit" />
+    </p>
+  </fieldset>
+</form>
+
+</body>
+</html>
+
+ +
Note: As we said, FormData objects are not stringifiable objects. If you want to stringify a submitted data, use the previous pure-AJAX example. Note also that, although in this example there are some file {{ HTMLElement("input") }} fields, when you submit a form through the FormData API you do not need to use the FileReader API also: files are automatically loaded and uploaded.
+ +

Cross-site XMLHttpRequest

+ +

Modern browsers support cross-site requests by implementing the web applications working group's Access Control for Cross-Site Requests standard.  As long as the server is configured to allow requests from your web application's origin, XMLHttpRequest will work.  Otherwise, an INVALID_ACCESS_ERR exception is thrown.

+ +

Bypassing the cache

+ +

A, cross-browser compatible approach to bypassing the cache is to append a timestamp to the URL, being sure to include a "?" or "&" as appropriate.  For example:

+ +
http://foo.com/bar.html -> http://foo.com/bar.html?12345
+http://foo.com/bar.html?foobar=baz -> http://foo.com/bar.html?foobar=baz&12345
+
+ +

Since the local cache is indexed by URL, this causes every request to be unique, thereby bypassing the cache.

+ +

You can automatically adjust URLs using the following code:

+ +
var oReq = new XMLHttpRequest();
+
+oReq.open("GET", url + ((/\?/).test(url) ? "&" : "?") + (new Date()).getTime(), true);
+oReq.send(null);
+ +

Security

+ +

{{fx_minversion_note(3, "Versions of Firefox prior to Firefox 3 allowed you to set the preference capability.policy..XMLHttpRequest.open to allAccess to give specific sites cross-site access.  This is no longer supported.")}}

+ +

{{fx_minversion_note(5, "Versions of Firefox prior to Firefox 5 could use netscape.security.PrivilegeManager.enablePrivilege(\"UniversalBrowserRead\"); to request cross-site access. This is no longer supported, even though it produces no warning and permission dialog is still presented.")}}

+ +

The recommended way to enable cross-site scripting is to use the Access-Control-Allow-Origin HTTP header in the response to the XMLHttpRequest.

+ +

XMLHttpRequests being stopped

+ +

If you end up with an XMLHttpRequest having status=0 and statusText=null, it means that the request was not allowed to be performed. It was UNSENT. A likely cause for this is when the XMLHttpRequest origin (at the creation of the XMLHttpRequest) has changed when the XMLHttpRequest is then open(). This case can happen for example when one has an XMLHttpRequest that gets fired on an onunload event for a window: the XMLHttpRequest gets in fact created when the window to be closed is still there, and then the request is sent (ie open()) when this window has lost its focus and potentially different window has gained focus. The way to avoid this problem is to set a listener on the new window "activate" event that gets set when the old window has its "unload" event fired.

+ +

Using XMLHttpRequest from JavaScript modules / XPCOM components

+ +

Instantiating XMLHttpRequest from a JavaScript module 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.

+ +
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.

+ +
const { XMLHttpRequest } = Components.classes["@mozilla.org/appshell/appShellService;1"]
+                                     .getService(Components.interfaces.nsIAppShellService)
+                                     .hiddenDOMWindow;
+var oReq = XMLHttpRequest();
+
+ +

See also

+ +
    +
  1. MDC AJAX introduction
  2. +
  3. HTTP access control
  4. +
  5. How to check the security state of an XMLHTTPRequest over SSL
  6. +
  7. XMLHttpRequest - REST and the Rich User Experience
  8. +
  9. Microsoft documentation
  10. +
  11. Apple developers' reference
  12. +
  13. "Using the XMLHttpRequest Object" (jibbering.com)
  14. +
  15. The XMLHttpRequest Object: W3C Specification
  16. +
  17. Web Progress Events specification
  18. +
-- cgit v1.2.3-54-g00ecf From 1d435be33d8b76cd7b06cd06996c19d74f83cfd4 Mon Sep 17 00:00:00 2001 From: Florian Merz Date: Thu, 11 Feb 2021 14:49:58 +0100 Subject: unslug pt-br: modify --- files/pt-br/_redirects.txt | 708 +- files/pt-br/_wikihistory.json | 21218 +++++++++---------- .../cascade_and_inheritance/index.html | 3 +- .../learn/css/building_blocks/selectors/index.html | 3 +- .../learn/css/first_steps/how_css_works/index.html | 5 +- .../index.html | 4 +- .../index.html | 4 +- .../conflicting/learn/css/first_steps/index.html | 3 +- .../video_and_audio_content/index.html | 3 +- .../learn/javascript/objects/index.html | 3 +- .../mdn/contribute/getting_started/index.html | 3 +- files/pt-br/conflicting/mozilla/add-ons/index.html | 3 +- .../mozilla/firefox/releases/index.html | 3 +- .../pt-br/conflicting/web/accessibility/index.html | 3 +- .../web/api/crypto/getrandomvalues/index.html | 3 +- .../pt-br/conflicting/web/api/cryptokey/index.html | 3 +- .../index.html | 3 +- .../index.html | 3 +- .../index.html | 3 +- .../web/api/document_object_model/index.html | 3 +- .../api/globaleventhandlers/onscroll/index.html | 3 +- .../web/api/html_drag_and_drop_api/index.html | 3 +- files/pt-br/conflicting/web/api/index.html | 3 +- files/pt-br/conflicting/web/api/url/index.html | 3 +- .../conflicting/web/api/webrtc_api/index.html | 3 +- .../web/api/windoworworkerglobalscope/index.html | 3 +- .../index.html | 3 +- .../index.html | 3 +- .../basic_concepts_of_flexbox/index.html | 3 +- files/pt-br/conflicting/web/css/cursor/index.html | 3 +- files/pt-br/conflicting/web/guide/index.html | 3 +- .../pt-br/conflicting/web/guide/mobile/index.html | 3 +- files/pt-br/conflicting/web/http/cors/index.html | 3 +- .../equality_comparisons_and_sameness/index.html | 3 +- .../reference/global_objects/boolean/index.html | 3 +- .../reference/global_objects/function/index.html | 3 +- .../global_objects/intl/numberformat/index.html | 3 +- .../reference/global_objects/map/index.html | 3 +- .../reference/global_objects/number/index.html | 3 +- .../reference/global_objects/object/index.html | 3 +- .../reference/global_objects/promise/index.html | 3 +- .../reference/global_objects/set/index.html | 3 +- .../reference/global_objects/string/index.html | 3 +- .../reference/global_objects/weakmap/index.html | 3 +- .../web/javascript/reference/operators/index.html | 3 +- .../reference/operators/spread_syntax/index.html | 3 +- .../index.html | 4 +- .../index.html | 4 +- .../index.html | 4 +- .../reference/statements/switch/index.html | 3 +- .../web/progressive_web_apps/index.html | 3 +- .../index.html | 3 +- files/pt-br/glossary/404/index.html | 3 +- files/pt-br/glossary/502/index.html | 3 +- files/pt-br/glossary/abstraction/index.html | 3 +- files/pt-br/glossary/accessibility/index.html | 3 +- files/pt-br/glossary/accessibility_tree/index.html | 3 +- files/pt-br/glossary/adobe_flash/index.html | 3 +- files/pt-br/glossary/ajax/index.html | 3 +- files/pt-br/glossary/algorithm/index.html | 3 +- .../pt-br/glossary/alignment_container/index.html | 3 +- files/pt-br/glossary/alignment_subject/index.html | 3 +- files/pt-br/glossary/alpha/index.html | 3 +- files/pt-br/glossary/api/index.html | 3 +- files/pt-br/glossary/apple_safari/index.html | 3 +- files/pt-br/glossary/argument/index.html | 3 +- files/pt-br/glossary/arpanet/index.html | 3 +- files/pt-br/glossary/array/index.html | 3 +- files/pt-br/glossary/ascii/index.html | 3 +- files/pt-br/glossary/asynchronous/index.html | 3 +- files/pt-br/glossary/attribute/index.html | 3 +- files/pt-br/glossary/bandwidth/index.html | 3 +- files/pt-br/glossary/bigint/index.html | 3 +- files/pt-br/glossary/boolean/index.html | 3 +- files/pt-br/glossary/browser/index.html | 3 +- files/pt-br/glossary/cache/index.html | 3 +- files/pt-br/glossary/call_stack/index.html | 3 +- files/pt-br/glossary/callback_function/index.html | 3 +- files/pt-br/glossary/caret/index.html | 3 +- files/pt-br/glossary/cdn/index.html | 3 +- files/pt-br/glossary/character/index.html | 3 +- files/pt-br/glossary/character_encoding/index.html | 3 +- files/pt-br/glossary/chrome/index.html | 3 +- files/pt-br/glossary/class/index.html | 3 +- files/pt-br/glossary/cms/index.html | 3 +- .../pt-br/glossary/computer_programming/index.html | 3 +- files/pt-br/glossary/cors/index.html | 3 +- files/pt-br/glossary/crud/index.html | 3 +- files/pt-br/glossary/css/index.html | 3 +- files/pt-br/glossary/css_pixel/index.html | 3 +- files/pt-br/glossary/css_preprocessor/index.html | 3 +- files/pt-br/glossary/css_selector/index.html | 3 +- files/pt-br/glossary/cssom/index.html | 3 +- files/pt-br/glossary/doctype/index.html | 3 +- files/pt-br/glossary/dom/index.html | 3 +- files/pt-br/glossary/domain/index.html | 3 +- files/pt-br/glossary/domain_name/index.html | 3 +- .../dynamic_programming_language/index.html | 3 +- files/pt-br/glossary/ecma/index.html | 3 +- files/pt-br/glossary/element/index.html | 3 +- files/pt-br/glossary/endianness/index.html | 3 +- files/pt-br/glossary/entity_header/index.html | 3 +- files/pt-br/glossary/falsy/index.html | 3 +- .../pt-br/glossary/first-class_function/index.html | 3 +- files/pt-br/glossary/flex/index.html | 3 +- .../glossary/forbidden_header_name/index.html | 3 +- .../forbidden_response_header_name/index.html | 3 +- files/pt-br/glossary/function/index.html | 3 +- files/pt-br/glossary/fuzzing/index.html | 3 +- files/pt-br/glossary/gecko/index.html | 3 +- files/pt-br/glossary/general_header/index.html | 3 +- files/pt-br/glossary/global_object/index.html | 3 +- .../pt-br/glossary/graceful_degradation/index.html | 3 +- files/pt-br/glossary/grid/index.html | 3 +- files/pt-br/glossary/grid_areas/index.html | 3 +- files/pt-br/glossary/hoisting/index.html | 3 +- files/pt-br/glossary/hsts/index.html | 3 +- files/pt-br/glossary/html/index.html | 3 +- files/pt-br/glossary/http/index.html | 3 +- files/pt-br/glossary/http_2/index.html | 5 +- files/pt-br/glossary/http_header/index.html | 3 +- files/pt-br/glossary/https/index.html | 3 +- files/pt-br/glossary/idempotent/index.html | 3 +- files/pt-br/glossary/identifier/index.html | 3 +- files/pt-br/glossary/iife/index.html | 3 +- files/pt-br/glossary/index.html | 3 +- files/pt-br/glossary/indexeddb/index.html | 3 +- files/pt-br/glossary/internet/index.html | 3 +- files/pt-br/glossary/ip_address/index.html | 3 +- files/pt-br/glossary/ipv4/index.html | 3 +- files/pt-br/glossary/ipv6/index.html | 3 +- files/pt-br/glossary/irc/index.html | 3 +- files/pt-br/glossary/iso/index.html | 3 +- files/pt-br/glossary/jank/index.html | 3 +- files/pt-br/glossary/javascript/index.html | 3 +- files/pt-br/glossary/jpeg/index.html | 3 +- files/pt-br/glossary/jquery/index.html | 3 +- files/pt-br/glossary/json/index.html | 3 +- files/pt-br/glossary/key/index.html | 3 +- files/pt-br/glossary/keyword/index.html | 3 +- files/pt-br/glossary/localization/index.html | 3 +- files/pt-br/glossary/markup/index.html | 3 +- files/pt-br/glossary/metadata/index.html | 3 +- files/pt-br/glossary/mozilla_firefox/index.html | 3 +- files/pt-br/glossary/mutable/index.html | 3 +- files/pt-br/glossary/node.js/index.html | 3 +- files/pt-br/glossary/null/index.html | 3 +- files/pt-br/glossary/number/index.html | 3 +- files/pt-br/glossary/object/index.html | 3 +- files/pt-br/glossary/oop/index.html | 3 +- files/pt-br/glossary/opengl/index.html | 3 +- files/pt-br/glossary/opera_browser/index.html | 3 +- files/pt-br/glossary/operand/index.html | 3 +- files/pt-br/glossary/operator/index.html | 3 +- files/pt-br/glossary/origin/index.html | 3 +- files/pt-br/glossary/ota/index.html | 3 +- files/pt-br/glossary/php/index.html | 3 +- files/pt-br/glossary/pixel/index.html | 3 +- files/pt-br/glossary/polyfill/index.html | 3 +- files/pt-br/glossary/port/index.html | 3 +- files/pt-br/glossary/preflight_request/index.html | 3 +- files/pt-br/glossary/primitive/index.html | 3 +- .../pt-br/glossary/progressive_web_apps/index.html | 3 +- files/pt-br/glossary/property/css/index.html | 3 +- files/pt-br/glossary/property/index.html | 3 +- .../pt-br/glossary/property/javascript/index.html | 3 +- files/pt-br/glossary/protocol/index.html | 3 +- files/pt-br/glossary/prototype/index.html | 3 +- files/pt-br/glossary/proxy_server/index.html | 3 +- files/pt-br/glossary/pseudo-class/index.html | 3 +- files/pt-br/glossary/pseudo-element/index.html | 3 +- files/pt-br/glossary/python/index.html | 3 +- files/pt-br/glossary/recursion/index.html | 3 +- files/pt-br/glossary/reflow/index.html | 3 +- files/pt-br/glossary/request_header/index.html | 3 +- .../glossary/responsive_web_design/index.html | 3 +- files/pt-br/glossary/rest/index.html | 3 +- files/pt-br/glossary/ruby/index.html | 3 +- files/pt-br/glossary/safe/index.html | 3 +- files/pt-br/glossary/scope/index.html | 3 +- files/pt-br/glossary/sdp/index.html | 3 +- .../self-executing_anonymous_function/index.html | 3 +- files/pt-br/glossary/semantics/index.html | 3 +- files/pt-br/glossary/seo/index.html | 3 +- files/pt-br/glossary/server/index.html | 3 +- files/pt-br/glossary/sgml/index.html | 3 +- files/pt-br/glossary/sloppy_mode/index.html | 3 +- .../pt-br/glossary/speculative_parsing/index.html | 3 +- files/pt-br/glossary/stacking_context/index.html | 3 +- files/pt-br/glossary/statement/index.html | 3 +- files/pt-br/glossary/string/index.html | 3 +- files/pt-br/glossary/svg/index.html | 5 +- files/pt-br/glossary/symbol/index.html | 3 +- files/pt-br/glossary/synchronous/index.html | 3 +- files/pt-br/glossary/tag/index.html | 3 +- files/pt-br/glossary/tcp/index.html | 3 +- files/pt-br/glossary/three_js/index.html | 3 +- files/pt-br/glossary/tls/index.html | 3 +- files/pt-br/glossary/truthy/index.html | 3 +- files/pt-br/glossary/type_conversion/index.html | 3 +- files/pt-br/glossary/undefined/index.html | 3 +- files/pt-br/glossary/uri/index.html | 3 +- files/pt-br/glossary/url/index.html | 3 +- files/pt-br/glossary/utf-8/index.html | 3 +- files/pt-br/glossary/ux/index.html | 3 +- files/pt-br/glossary/value/index.html | 3 +- files/pt-br/glossary/variable/index.html | 3 +- files/pt-br/glossary/vendor_prefix/index.html | 3 +- files/pt-br/glossary/viewport/index.html | 3 +- files/pt-br/glossary/w3c/index.html | 3 +- files/pt-br/glossary/webp/index.html | 3 +- files/pt-br/glossary/websockets/index.html | 3 +- files/pt-br/glossary/whatwg/index.html | 3 +- files/pt-br/glossary/wrapper/index.html | 3 +- .../pt-br/glossary/xhr_(xmlhttprequest)/index.html | 3 +- files/pt-br/glossary/xhtml/index.html | 3 +- files/pt-br/glossary/xml/index.html | 3 +- .../accessibility_troubleshooting/index.html | 3 +- .../accessibility/css_and_javascript/index.html | 3 +- .../index.html | 3 +- .../how_does_the_internet_work/index.html | 3 +- .../how_much_does_it_cost/index.html | 3 +- .../set_up_a_local_testing_server/index.html | 3 +- .../thinking_before_coding/index.html | 3 +- .../what_are_browser_developer_tools/index.html | 3 +- .../what_are_hyperlinks/index.html | 3 +- .../what_is_a_web_server/index.html | 3 +- .../what_software_do_i_need/index.html | 3 +- .../cascade_and_inheritance/index.html | 3 +- files/pt-br/learn/css/building_blocks/index.html | 3 +- .../css/building_blocks/the_box_model/index.html | 3 +- .../learn/css/css_layout/introduction/index.html | 3 +- .../css_layout/multiple-column_layout/index.html | 3 +- .../learn/css/css_layout/normal_flow/index.html | 3 +- .../css/first_steps/getting_started/index.html | 3 +- .../first_steps/how_css_is_structured/index.html | 3 +- .../learn/css/first_steps/what_is_css/index.html | 3 +- files/pt-br/learn/css/howto/css_faq/index.html | 3 +- files/pt-br/learn/css/index.html | 3 +- files/pt-br/learn/css/styling_text/index.html | 3 +- .../css/styling_text/styling_lists/index.html | 3 +- .../forms/basic_native_form_controls/index.html | 3 +- files/pt-br/learn/forms/form_validation/index.html | 3 +- .../how_to_build_custom_form_controls/index.html | 3 +- .../forms/how_to_structure_a_web_form/index.html | 3 +- files/pt-br/learn/forms/index.html | 3 +- .../sending_and_retrieving_form_data/index.html | 3 +- files/pt-br/learn/forms/your_first_form/index.html | 3 +- .../pt-br/learn/front-end_web_developer/index.html | 3 +- .../css_basics/index.html | 5 +- .../dealing_with_files/index.html | 5 +- .../how_the_web_works/index.html | 5 +- .../html_basics/index.html | 5 +- .../learn/getting_started_with_the_web/index.html | 5 +- .../installing_basic_software/index.html | 5 +- .../javascript_basics/index.html | 5 +- .../publishing_your_website/index.html | 5 +- .../the_web_and_web_standards/index.html | 3 +- .../what_will_your_website_look_like/index.html | 5 +- .../author_fast-loading_html_pages/index.html | 3 +- files/pt-br/learn/html/howto/index.html | 3 +- .../html/howto/use_data_attributes/index.html | 3 +- files/pt-br/learn/html/index.html | 3 +- .../advanced_text_formatting/index.html | 3 +- .../creating_hyperlinks/index.html | 3 +- .../introduction_to_html/debugging_html/index.html | 3 +- .../document_and_website_structure/index.html | 3 +- .../getting_started/index.html | 3 +- .../html_text_fundamentals/index.html | 3 +- .../learn/html/introduction_to_html/index.html | 3 +- .../index.html | 5 +- .../the_head_metadata_in_html/index.html | 3 +- .../adding_vector_graphics_to_the_web/index.html | 3 +- .../images_in_html/index.html | 3 +- .../learn/html/multimedia_and_embedding/index.html | 3 +- .../other_embedding_technologies/index.html | 3 +- .../responsive_images/index.html | 3 +- .../video_and_audio_content/index.html | 3 +- files/pt-br/learn/html/tables/basics/index.html | 3 +- files/pt-br/learn/html/tables/index.html | 3 +- files/pt-br/learn/index.html | 3 +- .../choosing_the_right_approach/index.html | 3 +- .../javascript/asynchronous/concepts/index.html | 3 +- .../javascript/asynchronous/introducing/index.html | 3 +- .../build_your_own_function/index.html | 3 +- .../building_blocks/conditionals/index.html | 3 +- .../javascript/building_blocks/events/index.html | 3 +- .../building_blocks/functions/index.html | 3 +- .../building_blocks/image_gallery/index.html | 3 +- .../learn/javascript/building_blocks/index.html | 3 +- .../building_blocks/looping_code/index.html | 3 +- .../building_blocks/return_values/index.html | 3 +- .../client-side_storage/index.html | 3 +- .../javascript/client-side_web_apis/index.html | 3 +- .../client-side_web_apis/introduction/index.html | 3 +- .../manipulating_documents/index.html | 3 +- .../learn/javascript/first_steps/math/index.html | 3 +- .../first_steps/silly_story_generator/index.html | 3 +- .../test_your_skills_colon__variables/index.html | 5 +- .../javascript/first_steps/variables/index.html | 3 +- .../first_steps/what_is_javascript/index.html | 5 +- files/pt-br/learn/javascript/howto/index.html | 3 +- files/pt-br/learn/javascript/index.html | 3 +- .../adding_bouncing_balls_features/index.html | 3 +- .../learn/javascript/objects/basics/index.html | 3 +- files/pt-br/learn/javascript/objects/index.html | 3 +- .../javascript/objects/inheritance/index.html | 3 +- .../pt-br/learn/javascript/objects/json/index.html | 3 +- .../objects/object-oriented_js/index.html | 3 +- .../objects/object_building_practice/index.html | 3 +- .../objects/object_prototypes/index.html | 3 +- .../learn/learning_and_getting_help/index.html | 3 +- files/pt-br/learn/release_notes/index.html | 3 +- .../learn/server-side/django/deployment/index.html | 3 +- .../django/development_environment/index.html | 3 +- .../server-side/django/introduction/index.html | 3 +- .../learn/server-side/django/sessions/index.html | 3 +- .../tutorial_local_library_website/index.html | 3 +- .../development_environment/index.html | 3 +- .../express_nodejs/introduction/index.html | 3 +- .../first_steps/introduction/index.html | 3 +- .../first_steps/website_security/index.html | 3 +- .../react_getting_started/index.html | 4 +- .../vue_getting_started/index.html | 3 +- files/pt-br/learn/tools_and_testing/index.html | 3 +- files/pt-br/mdn/at_ten/index.html | 3 +- .../convert_code_samples_to_be_live/index.html | 3 +- .../distant_example/index.html | 4 +- .../index.html | 3 +- .../howto/create_and_edit_pages/index.html | 3 +- files/pt-br/mdn/contribute/howto/index.html | 3 +- files/pt-br/mdn/contribute/howto/tag/index.html | 3 +- files/pt-br/mdn/contribute/processes/index.html | 3 +- .../mdn/guidelines/writing_style_guide/index.html | 3 +- .../tools/kumascript/troubleshooting/index.html | 3 +- files/pt-br/mdn/yari/index.html | 3 +- .../anatomy_of_a_webextension/index.html | 3 +- .../add-ons/webextensions/api/theme/index.html | 3 +- .../manifest.json/permissions/index.html | 3 +- .../add-ons/webextensions/prerequisites/index.html | 3 +- .../user_interface/context_menu_items/index.html | 3 +- .../add-ons/webextensions/what_next_/index.html | 3 +- .../your_first_webextension/index.html | 3 +- .../your_second_webextension/index.html | 3 +- .../mozilla/developer_guide/source_code/index.html | 3 +- .../firefox/experimental_features/index.html | 3 +- .../firefox/releases/3/full_page_zoom/index.html | 3 +- .../index.html" | 3 +- files/pt-br/orphaned/hello_world_rust/index.html | 3 +- files/pt-br/orphaned/instalando_rust/index.html | 3 +- .../orphaned/learn/how_to_contribute/index.html | 3 +- .../learn/html/forms/html5_updates/index.html | 3 +- files/pt-br/orphaned/mdn/community/index.html | 3 +- .../mdn/community/whats_happening/index.html | 3 +- .../mdn/community/working_in_community/index.html | 3 +- .../howto/create_an_mdn_account/index.html | 3 +- .../howto/do_a_technical_review/index.html | 3 +- .../howto/do_an_editorial_review/index.html | 3 +- .../howto/set_the_summary_for_a_page/index.html | 3 +- .../howto/tag_javascript_pages/index.html | 3 +- .../index.html | 3 +- .../cross-team_collaboration_tactics/index.html | 3 +- files/pt-br/orphaned/mdn/dashboards/index.html | 3 +- files/pt-br/orphaned/mdn/editor/basics/index.html | 3 +- files/pt-br/orphaned/mdn/editor/index.html | 3 +- .../mdn/tools/page_regeneration/index.html | 3 +- .../temporary_installation_in_firefox/index.html | 3 +- .../tools/add-ons/dom_inspector/index.html | 7 +- files/pt-br/orphaned/tools/add-ons/index.html | 3 +- files/pt-br/orphaned/tools/css_coverage/index.html | 3 +- .../disable_breakpoints/index.html | 3 +- .../tools/debugger_(before_firefox_52)/index.html | 3 +- .../jaws_issues_with_firefox/index.html | 3 +- .../index.html" | 3 +- .../index.html" | 3 +- .../orphaned/web/html/element/command/index.html | 3 +- files/pt-br/orphaned/web/html/favicon/index.html | 3 +- .../cole\303\247\303\265es_chaveadas/index.html" | 3 +- .../javascript/guide/sintaxe_e_tipos/index.html | 3 +- .../global_objects/array/prototype/index.html | 3 +- .../global_objects/bigint/prototype/index.html | 3 +- .../information_security_basics/index.html | 3 +- .../how_to/set_watch_expressions/index.html | 7 +- files/pt-br/tools/debugger/index.html | 3 +- .../pt-br/tools/debugger/set_a_logpoint/index.html | 3 +- .../tools/firefox_os_1.1_simulator/index.html | 3 +- .../tools/measure_a_portion_of_the_page/index.html | 3 +- .../how_to/examine_event_listeners/index.html | 3 +- .../how_to/work_with_animations/index.html | 3 +- files/pt-br/tools/performance/index.html | 3 +- files/pt-br/tools/remote_debugging/index.html | 3 +- .../pt-br/tools/responsive_design_mode/index.html | 5 +- files/pt-br/tools/storage_inspector/index.html | 3 +- files/pt-br/tools/style_editor/index.html | 3 +- files/pt-br/tools/web_console/ui_tour/index.html | 3 +- .../index.html | 3 +- .../index.html | 3 +- .../using_the_alert_role/index.html | 3 +- .../using_the_aria-labelledby_attribute/index.html | 3 +- .../using_the_aria-required_attribute/index.html | 3 +- .../using_the_slider_role/index.html | 3 +- .../aria/forms/basic_form_hints/index.html | 3 +- .../accessibility/aria/widgets/overview/index.html | 3 +- files/pt-br/web/accessibility/index.html | 3 +- .../mobile_accessibility_checklist/index.html | 3 +- .../accessibility/understanding_wcag/index.html | 3 +- .../understanding_wcag/keyboard/index.html | 3 +- .../api/baseaudiocontext/currenttime/index.html | 3 +- files/pt-br/web/api/battery_status_api/index.html | 3 +- .../ondischargingtimechange/index.html | 3 +- .../api/canvas_api/a_basic_ray-caster/index.html | 3 +- files/pt-br/web/api/canvas_api/index.html | 3 +- .../tutorial/advanced_animations/index.html | 3 +- .../tutorial/applying_styles_and_colors/index.html | 3 +- .../tutorial/basic_animations/index.html | 3 +- .../api/canvas_api/tutorial/basic_usage/index.html | 3 +- .../tutorial/compositing/example/index.html | 3 +- .../api/canvas_api/tutorial/compositing/index.html | 3 +- .../canvas_api/tutorial/drawing_shapes/index.html | 3 +- .../canvas_api/tutorial/drawing_text/index.html | 3 +- .../web/api/canvas_api/tutorial/finale/index.html | 3 +- files/pt-br/web/api/canvas_api/tutorial/index.html | 3 +- .../tutorial/optimizing_canvas/index.html | 3 +- .../canvas_api/tutorial/using_images/index.html | 3 +- .../web/api/crypto/getrandomvalues/index.html | 3 +- .../api/devicemotioneventacceleration/index.html | 3 +- .../api/devicemotioneventrotationrate/index.html | 3 +- .../api/document/readystatechange_event/index.html | 3 +- .../web/api/document/registerelement/index.html | 3 +- .../api/document_object_model/events/index.html | 3 +- .../api/document_object_model/examples/index.html | 3 +- .../how_to_create_a_dom_tree/index.html | 3 +- .../pt-br/web/api/document_object_model/index.html | 3 +- .../document_object_model/introduction/index.html | 3 +- .../document_object_model/whitespace/index.html | 3 +- .../documentorshadowroot/activeelement/index.html | 3 +- .../elementfrompoint/index.html | 3 +- .../documentorshadowroot/getselection/index.html | 3 +- files/pt-br/web/api/element/blur_event/index.html | 3 +- files/pt-br/web/api/element/focus_event/index.html | 3 +- .../pt-br/web/api/element/focusin_event/index.html | 3 +- .../web/api/element/focusout_event/index.html | 3 +- .../event/comparison_of_event_targets/index.html | 3 +- .../api/eventtarget/addeventlistener/index.html | 3 +- .../fetch_api/cross-global_fetch_usage/index.html | 3 +- files/pt-br/web/api/geolocation_api/index.html | 3 +- files/pt-br/web/api/history_api/example/index.html | 3 +- .../file_drag_and_drop/index.html | 3 +- .../web/api/html_drag_and_drop_api/index.html | 3 +- .../web/api/htmlcontentelement/select/index.html | 3 +- .../pt-br/web/api/htmlelement/accesskey/index.html | 3 +- .../pt-br/web/api/htmlelement/innertext/index.html | 3 +- .../web/api/htmlelement/input_event/index.html | 3 +- .../api/htmlmediaelement/abort_event/index.html | 3 +- .../web/api/htmlorforeignelement/blur/index.html | 3 +- .../api/htmlorforeignelement/dataset/index.html | 3 +- .../web/api/htmlorforeignelement/focus/index.html | 3 +- .../api/indexeddb_api/using_indexeddb/index.html | 3 +- .../web/api/network_information_api/index.html | 3 +- files/pt-br/web/api/notification/index.html | 3 +- files/pt-br/web/api/performance_api/index.html | 3 +- .../web/api/push_api/best_practices/index.html | 3 +- files/pt-br/web/api/push_api/index.html | 3 +- files/pt-br/web/api/selection/index.html | 3 +- files/pt-br/web/api/svgaelement/target/index.html | 3 +- files/pt-br/web/api/touch_events/index.html | 3 +- .../using_the_web_animations_api/index.html | 3 +- files/pt-br/web/api/web_audio_api/index.html | 3 +- .../web/api/web_audio_api/simple_synth/index.html | 3 +- files/pt-br/web/api/web_storage_api/index.html | 3 +- .../using_the_web_storage_api/index.html | 3 +- .../index.html | 3 +- .../simple_rtcdatachannel_sample/index.html | 3 +- files/pt-br/web/api/websockets_api/index.html | 3 +- .../index.html | 3 +- .../writing_websocket_server/index.html | 3 +- .../writing_websocket_servers/index.html | 3 +- .../web/api/window/beforeunload_event/index.html | 3 +- .../api/window/domcontentloaded_event/index.html | 3 +- files/pt-br/web/api/window/load_event/index.html | 3 +- files/pt-br/web/api/window/localstorage/index.html | 3 +- .../api/windoworworkerglobalscope/atob/index.html | 3 +- .../cleartimeout/index.html | 3 +- .../index.html | 3 +- .../xmlhttprequest/using_xmlhttprequest/index.html | 3 +- files/pt-br/web/css/actual_value/index.html | 3 +- files/pt-br/web/css/attribute_selectors/index.html | 3 +- files/pt-br/web/css/box-ordinal-group/index.html | 3 +- files/pt-br/web/css/comments/index.html | 3 +- files/pt-br/web/css/computed_value/index.html | 3 +- .../css_animations/using_css_animations/index.html | 3 +- .../border-image_generator/index.html | 3 +- .../border-radius_generator/index.html | 3 +- .../web/css/css_backgrounds_and_borders/index.html | 3 +- .../resizing_background_images/index.html | 3 +- .../using_multiple_backgrounds/index.html | 3 +- .../introduction_to_the_css_box_model/index.html | 3 +- .../mastering_margin_collapsing/index.html | 3 +- .../css/css_colors/color_picker_tool/index.html | 3 +- .../basic_concepts_of_flexbox/index.html | 3 +- .../implementing_image_sprites_in_css/index.html | 3 +- .../understanding_z_index/index.html | 3 +- files/pt-br/web/css/css_selectors/index.html | 3 +- files/pt-br/web/css/css_types/index.html | 3 +- files/pt-br/web/css/hyphens/index.html | 3 +- files/pt-br/web/css/image/index.html | 3 +- files/pt-br/web/css/initial_value/index.html | 3 +- files/pt-br/web/css/layout_mode/index.html | 3 +- files/pt-br/web/css/mask/index.html | 3 +- .../media_queries/using_media_queries/index.html | 3 +- files/pt-br/web/css/overflow-wrap/index.html | 3 +- .../index.html | 7 +- files/pt-br/web/css/pseudo-elements/index.html | 3 +- files/pt-br/web/css/reference/index.html | 3 +- files/pt-br/web/css/replaced_element/index.html | 3 +- files/pt-br/web/css/resolved_value/index.html | 3 +- files/pt-br/web/css/specified_value/index.html | 3 +- files/pt-br/web/css/syntax/index.html | 3 +- files/pt-br/web/css/universal_selectors/index.html | 3 +- files/pt-br/web/css/used_value/index.html | 3 +- .../web/css/value_definition_syntax/index.html | 3 +- .../web/css/visual_formatting_model/index.html | 3 +- .../creating_and_triggering_events/index.html | 3 +- files/pt-br/web/guide/graphics/index.html | 3 +- .../web/guide/html/content_categories/index.html | 3 +- .../web/guide/html/editable_content/index.html | 3 +- files/pt-br/web/guide/html/html5/index.html | 3 +- .../html/html5/introduction_to_html5/index.html | 3 +- .../using_html_sections_and_outlines/index.html | 3 +- .../introduction_to_web_development/index.html | 3 +- .../guide/mobile/mobile-friendliness/index.html | 3 +- .../web/guide/mobile/separate_sites/index.html | 3 +- files/pt-br/web/html/attributes/index.html | 3 +- .../pt-br/web/html/block-level_elements/index.html | 3 +- files/pt-br/web/html/cors_enabled_image/index.html | 3 +- files/pt-br/web/html/element/content/index.html | 3 +- files/pt-br/web/html/element/figure/index.html | 3 +- files/pt-br/web/html/element/input/date/index.html | 3 +- .../html/global_attributes/spellcheck/index.html | 3 +- files/pt-br/web/html/inline_elements/index.html | 3 +- files/pt-br/web/html/microformats/index.html | 3 +- files/pt-br/web/html/reference/index.html | 3 +- .../identifying_resources_on_the_web/index.html | 3 +- files/pt-br/web/http/basics_of_http/index.html | 3 +- .../mime_types/common_types/index.html | 3 +- .../web/http/basics_of_http/mime_types/index.html | 3 +- files/pt-br/web/http/caching/index.html | 3 +- files/pt-br/web/http/compression/index.html | 3 +- .../connection_management_in_http_1.x/index.html | 3 +- files/pt-br/web/http/cors/index.html | 3 +- files/pt-br/web/http/headers/connection/index.html | 3 +- files/pt-br/web/http/headers/location/index.html | 3 +- files/pt-br/web/http/messages/index.html | 3 +- files/pt-br/web/http/redirections/index.html | 3 +- files/pt-br/web/javascript/closures/index.html | 3 +- .../index.html | 3 +- .../control_flow_and_error_handling/index.html | 3 +- .../guide/details_of_the_object_model/index.html | 3 +- .../web/javascript/guide/functions/index.html | 3 +- .../javascript/guide/grammar_and_types/index.html | 3 +- .../guide/iterators_and_generators/index.html | 3 +- .../guide/loops_and_iteration/index.html | 3 +- .../pt-br/web/javascript/guide/modules/index.html | 3 +- .../javascript/guide/numbers_and_dates/index.html | 3 +- .../javascript/guide/text_formatting/index.html | 3 +- .../web/javascript/guide/using_promises/index.html | 3 +- .../guide/working_with_objects/index.html | 3 +- .../inheritance_and_the_prototype_chain/index.html | 3 +- .../missing_curly_after_property_list/index.html | 3 +- .../index.html | 3 +- .../reference/errors/not_defined/index.html | 3 +- .../errors/unnamed_function_statement/index.html | 3 +- .../functions/default_parameters/index.html | 3 +- .../functions/method_definitions/index.html | 3 +- .../global_objects/array/filter/index.html | 3 +- .../global_objects/array/includes/index.html | 3 +- .../reference/operators/comma_operator/index.html | 3 +- .../operators/conditional_operator/index.html | 3 +- .../operators/destructuring_assignment/index.html | 3 +- .../nullish_coalescing_operator/index.html | 3 +- .../operators/object_initializer/index.html | 3 +- .../reference/statements/async_function/index.html | 3 +- .../reference/template_literals/index.html | 3 +- files/pt-br/web/mathml/examples/index.html | 3 +- files/pt-br/web/media/formats/index.html | 3 +- .../performance/critical_rendering_path/index.html | 3 +- .../progressive_web_apps/introduction/index.html | 3 +- .../web/svg/namespaces_crash_course/index.html | 3 +- files/pt-br/web/tutorials/index.html | 3 +- .../using_custom_elements/index.html | 3 +- .../advanced_example/index.html | 3 +- .../web/xslt/xslt_js_interface_in_gecko/index.html | 3 +- .../understanding_the_text_format/index.html | 3 +- .../using_the_javascript_api/index.html | 3 +- 594 files changed, 12472 insertions(+), 11281 deletions(-) (limited to 'files/pt-br/web/api') diff --git a/files/pt-br/_redirects.txt b/files/pt-br/_redirects.txt index 7ef2b3446c..03e9b2c75e 100644 --- a/files/pt-br/_redirects.txt +++ b/files/pt-br/_redirects.txt @@ -1,7 +1,13 @@ # FROM-URL TO-URL /pt-BR/docs/AJAX /pt-BR/docs/Web/Guide/AJAX /pt-BR/docs/AJAX/Getting_Started /pt-BR/docs/Web/Guide/AJAX/Getting_Started -/pt-BR/docs/API_Web_Audio /pt-BR/docs/Web/API/API_Web_Audio +/pt-BR/docs/API_Web_Audio /pt-BR/docs/Web/API/Web_Audio_API +/pt-BR/docs/Aprender /pt-BR/docs/Learn +/pt-BR/docs/Aprender/CSS /pt-BR/docs/Learn/CSS +/pt-BR/docs/Aprender/CSS/Construindo_blocos /pt-BR/docs/Learn/CSS/Building_blocks +/pt-BR/docs/Aprender/CSS/Construindo_blocos/Cascade_and_inheritance /pt-BR/docs/Learn/CSS/Building_blocks/Cascade_and_inheritance +/pt-BR/docs/Aprender/CSS/Construindo_blocos/The_box_model /pt-BR/docs/Learn/CSS/Building_blocks/The_box_model +/pt-BR/docs/Aprender/CSS/Estilizando_texto /pt-BR/docs/Learn/CSS/Styling_text /pt-BR/docs/Aprender/CSS/Introduction_to_CSS /en-US/docs/Learn/CSS/First_steps /pt-BR/docs/Aprender/CSS/Introduction_to_CSS/Cascade_and_inheritance /en-US/docs/Learn/CSS/Building_blocks/Cascade_and_inheritance /pt-BR/docs/Aprender/CSS/Introduction_to_CSS/Combinators_and_multiple_selectors /en-US/docs/Learn/CSS/Building_blocks/Selectors/Combinators @@ -10,47 +16,278 @@ /pt-BR/docs/Aprender/CSS/Introduction_to_CSS/como_CSS_funciona /en-US/docs/Learn/CSS/First_steps/How_CSS_works /pt-BR/docs/Aprender/CSS/Introduction_to_CSS/sintaxe /en-US/docs/Learn/CSS/First_steps/How_CSS_is_structured /pt-BR/docs/Aprender/CSS/Styling_boxes /en-US/docs/Learn/CSS/Building_blocks +/pt-BR/docs/Aprender/Como_contribuir /pt-BR/docs/orphaned/Learn/How_to_contribute /pt-BR/docs/Aprender/Design_e_acessibilidade /pt-BR/docs/Learn/Common_questions +/pt-BR/docs/Aprender/Ferramentas_e_teste /pt-BR/docs/Learn/Tools_and_testing +/pt-BR/docs/Aprender/Front-end_web_developer /pt-BR/docs/Learn/Front-end_web_developer +/pt-BR/docs/Aprender/Getting_started_with_the_web /pt-BR/docs/Learn/Getting_started_with_the_web +/pt-BR/docs/Aprender/Getting_started_with_the_web/A_web_e_seus_padrões /pt-BR/docs/Learn/Getting_started_with_the_web/The_web_and_web_standards +/pt-BR/docs/Aprender/Getting_started_with_the_web/CSS_basico /pt-BR/docs/Learn/Getting_started_with_the_web/CSS_basics +/pt-BR/docs/Aprender/Getting_started_with_the_web/Como_a_Web_funciona /pt-BR/docs/Learn/Getting_started_with_the_web/How_the_Web_works +/pt-BR/docs/Aprender/Getting_started_with_the_web/HTML_basico /pt-BR/docs/Learn/Getting_started_with_the_web/HTML_basics +/pt-BR/docs/Aprender/Getting_started_with_the_web/JavaScript_basico /pt-BR/docs/Learn/Getting_started_with_the_web/JavaScript_basics +/pt-BR/docs/Aprender/Getting_started_with_the_web/Publicando_seu_site /pt-BR/docs/Learn/Getting_started_with_the_web/Publishing_your_website +/pt-BR/docs/Aprender/Getting_started_with_the_web/com_que_seu_site_vai_parecer /pt-BR/docs/Learn/Getting_started_with_the_web/What_will_your_website_look_like +/pt-BR/docs/Aprender/Getting_started_with_the_web/instalando_programas_basicos /pt-BR/docs/Learn/Getting_started_with_the_web/Installing_basic_software +/pt-BR/docs/Aprender/Getting_started_with_the_web/lidando_com_arquivos /pt-BR/docs/Learn/Getting_started_with_the_web/Dealing_with_files +/pt-BR/docs/Aprender/HTML /pt-BR/docs/Learn/HTML +/pt-BR/docs/Aprender/HTML/Introducao_ao_HTML /pt-BR/docs/Learn/HTML/Introduction_to_HTML +/pt-BR/docs/Aprender/HTML/Introducao_ao_HTML/Criando_hyperlinks /pt-BR/docs/Learn/HTML/Introduction_to_HTML/Creating_hyperlinks +/pt-BR/docs/Aprender/HTML/Introducao_ao_HTML/Debugging_HTML /pt-BR/docs/Learn/HTML/Introduction_to_HTML/Debugging_HTML +/pt-BR/docs/Aprender/HTML/Introducao_ao_HTML/Estrutura_de_documento_e_sites /pt-BR/docs/Learn/HTML/Introduction_to_HTML/Document_and_website_structure +/pt-BR/docs/Aprender/HTML/Introducao_ao_HTML/Formatacao_avancada_texto /pt-BR/docs/Learn/HTML/Introduction_to_HTML/Advanced_text_formatting +/pt-BR/docs/Aprender/HTML/Introducao_ao_HTML/Fundamentos_textuais_HTML /pt-BR/docs/Learn/HTML/Introduction_to_HTML/HTML_text_fundamentals +/pt-BR/docs/Aprender/HTML/Introducao_ao_HTML/Getting_started /pt-BR/docs/Learn/HTML/Introduction_to_HTML/Getting_started +/pt-BR/docs/Aprender/HTML/Introducao_ao_HTML/Test_your_skills:_HTML_text_basics /pt-BR/docs/Learn/HTML/Introduction_to_HTML/Test_your_skills:_HTML_text_basics +/pt-BR/docs/Aprender/HTML/Introducao_ao_HTML/The_head_metadata_in_HTML /pt-BR/docs/Learn/HTML/Introduction_to_HTML/The_head_metadata_in_HTML +/pt-BR/docs/Aprender/HTML/Multimedia_and_embedding /pt-BR/docs/Learn/HTML/Multimedia_and_embedding +/pt-BR/docs/Aprender/HTML/Multimedia_and_embedding/Adding_vector_graphics_to_the_Web /pt-BR/docs/Learn/HTML/Multimedia_and_embedding/Adding_vector_graphics_to_the_Web +/pt-BR/docs/Aprender/HTML/Multimedia_and_embedding/Images_in_HTML /pt-BR/docs/Learn/HTML/Multimedia_and_embedding/Images_in_HTML +/pt-BR/docs/Aprender/HTML/Multimedia_and_embedding/Other_embedding_technologies /pt-BR/docs/Learn/HTML/Multimedia_and_embedding/Other_embedding_technologies +/pt-BR/docs/Aprender/HTML/Multimedia_and_embedding/Responsive_images /pt-BR/docs/Learn/HTML/Multimedia_and_embedding/Responsive_images +/pt-BR/docs/Aprender/HTML/Multimedia_and_embedding/Video_and_audio_content /pt-BR/docs/Learn/HTML/Multimedia_and_embedding/Video_and_audio_content +/pt-BR/docs/Aprender/HTML/Tables /pt-BR/docs/Learn/HTML/Tables +/pt-BR/docs/Aprender/HTML/Tables/Basics /pt-BR/docs/Learn/HTML/Tables/Basics +/pt-BR/docs/Aprender/HTML/como-fazer /pt-BR/docs/Learn/HTML/Howto +/pt-BR/docs/Aprender/JavaScript /pt-BR/docs/Learn/JavaScript +/pt-BR/docs/Aprender/JavaScript/Client-side_web_APIs /pt-BR/docs/Learn/JavaScript/Client-side_web_APIs +/pt-BR/docs/Aprender/JavaScript/Client-side_web_APIs/Client-side_storage /pt-BR/docs/Learn/JavaScript/Client-side_web_APIs/Client-side_storage +/pt-BR/docs/Aprender/JavaScript/Client-side_web_APIs/Introdução /pt-BR/docs/Learn/JavaScript/Client-side_web_APIs/Introduction +/pt-BR/docs/Aprender/JavaScript/Elementos_construtivos /pt-BR/docs/Learn/JavaScript/Building_blocks +/pt-BR/docs/Aprender/JavaScript/Elementos_construtivos/Build_your_own_function /pt-BR/docs/Learn/JavaScript/Building_blocks/Build_your_own_function +/pt-BR/docs/Aprender/JavaScript/Elementos_construtivos/Código_em_loop /pt-BR/docs/Learn/JavaScript/Building_blocks/Looping_code +/pt-BR/docs/Aprender/JavaScript/Elementos_construtivos/Events /pt-BR/docs/Learn/JavaScript/Building_blocks/Events +/pt-BR/docs/Aprender/JavaScript/Elementos_construtivos/Functions /pt-BR/docs/Learn/JavaScript/Building_blocks/Functions +/pt-BR/docs/Aprender/JavaScript/Elementos_construtivos/Image_gallery /pt-BR/docs/Learn/JavaScript/Building_blocks/Image_gallery +/pt-BR/docs/Aprender/JavaScript/Elementos_construtivos/Return_values /pt-BR/docs/Learn/JavaScript/Building_blocks/Return_values +/pt-BR/docs/Aprender/JavaScript/Elementos_construtivos/conditionals /pt-BR/docs/Learn/JavaScript/Building_blocks/conditionals +/pt-BR/docs/Aprender/JavaScript/Howto /pt-BR/docs/Learn/JavaScript/Howto +/pt-BR/docs/Aprender/JavaScript/Objetos /pt-BR/docs/Learn/JavaScript/Objects +/pt-BR/docs/Aprender/JavaScript/Objetos/Adding_bouncing_balls_features /pt-BR/docs/Learn/JavaScript/Objects/Adding_bouncing_balls_features +/pt-BR/docs/Aprender/JavaScript/Objetos/Básico /pt-BR/docs/Learn/JavaScript/Objects/Basics +/pt-BR/docs/Aprender/JavaScript/Objetos/Herança /pt-BR/docs/Learn/JavaScript/Objects/Inheritance +/pt-BR/docs/Aprender/JavaScript/Objetos/JSON /pt-BR/docs/Learn/JavaScript/Objects/JSON +/pt-BR/docs/Aprender/JavaScript/Objetos/Object-oriented_JS /pt-BR/docs/Learn/JavaScript/Objects/Object-oriented_JS +/pt-BR/docs/Aprender/JavaScript/Objetos/Object_building_practice /pt-BR/docs/Learn/JavaScript/Objects/Object_building_practice +/pt-BR/docs/Aprender/JavaScript/Objetos/Object_prototypes /pt-BR/docs/Learn/JavaScript/Objects/Object_prototypes +/pt-BR/docs/Aprender/Learning_and_getting_help /pt-BR/docs/Learn/Learning_and_getting_help +/pt-BR/docs/Aprender/Release_notes /pt-BR/docs/Learn/Release_notes /pt-BR/docs/CSS /pt-BR/docs/Web/CSS /pt-BR/docs/CSS/@page /pt-BR/docs/Web/CSS/@page /pt-BR/docs/CSS/At-rule /pt-BR/docs/Web/CSS/At-rule -/pt-BR/docs/CSS/CSS_Reference /pt-BR/docs/Web/CSS/CSS_Reference +/pt-BR/docs/CSS/CSS_Reference /pt-BR/docs/Web/CSS/Reference /pt-BR/docs/CSS/Especificação /pt-BR/docs/Web/CSS/Specificity -/pt-BR/docs/CSS/Getting_Started /pt-BR/docs/Web/CSS/Getting_Started -/pt-BR/docs/CSS/Getting_Started/JavaScript /pt-BR/docs/Web/CSS/Getting_Started/JavaScript -/pt-BR/docs/CSS/Multiple_backgrounds /pt-BR/docs/Web/CSS/CSS_Background_and_Borders/Using_CSS_multiple_backgrounds -/pt-BR/docs/CSS/Primeiros_Passos /pt-BR/docs/Web/CSS/Getting_Started +/pt-BR/docs/CSS/Getting_Started /pt-BR/docs/conflicting/Learn/CSS/First_steps +/pt-BR/docs/CSS/Getting_Started/JavaScript /pt-BR/docs/Learn/JavaScript/Client-side_web_APIs/Manipulating_documents +/pt-BR/docs/CSS/Multiple_backgrounds /pt-BR/docs/Web/CSS/CSS_Backgrounds_and_Borders/Using_multiple_backgrounds +/pt-BR/docs/CSS/Primeiros_Passos /pt-BR/docs/conflicting/Learn/CSS/First_steps /pt-BR/docs/CSS/Specificity /pt-BR/docs/Web/CSS/Specificity -/pt-BR/docs/CSS/Usando_animacoes_CSS /pt-BR/docs/Web/CSS/CSS_Animations/Usando_animações_CSS -/pt-BR/docs/CSS/Using_CSS_animations /pt-BR/docs/Web/CSS/CSS_Animations/Usando_animações_CSS +/pt-BR/docs/CSS/Usando_animacoes_CSS /pt-BR/docs/Web/CSS/CSS_Animations/Using_CSS_animations +/pt-BR/docs/CSS/Usando_caixas_flexiveis_css /pt-BR/docs/conflicting/Web/CSS/CSS_Flexible_Box_Layout/Basic_Concepts_of_Flexbox +/pt-BR/docs/CSS/Using_CSS_animations /pt-BR/docs/Web/CSS/CSS_Animations/Using_CSS_animations /pt-BR/docs/CSS/Using_CSS_transforms /pt-BR/docs/Web/CSS/CSS_Transforms/Using_CSS_transforms /pt-BR/docs/CSS/display /pt-BR/docs/Web/CSS/display /pt-BR/docs/CSS/overflow /pt-BR/docs/Web/CSS/overflow /pt-BR/docs/CSS/regra at /pt-BR/docs/Web/CSS/At-rule /pt-BR/docs/CSS/repeating-linear-gradient /pt-BR/docs/Web/CSS/repeating-linear-gradient() -/pt-BR/docs/CSS/sintaxe /pt-BR/docs/Web/CSS/sintaxe +/pt-BR/docs/CSS/sintaxe /pt-BR/docs/Web/CSS/Syntax /pt-BR/docs/CSS/text-overflow /pt-BR/docs/Web/CSS/text-overflow /pt-BR/docs/CSS/text-rendering /pt-BR/docs/Web/CSS/text-rendering /pt-BR/docs/CSS/transform /pt-BR/docs/Web/CSS/transform -/pt-BR/docs/CSS/word-wrap /pt-BR/docs/Web/CSS/word-wrap +/pt-BR/docs/CSS/word-wrap /pt-BR/docs/Web/CSS/overflow-wrap +/pt-BR/docs/Construindo_um_complemento /pt-BR/docs/conflicting/Mozilla/Add-ons +/pt-BR/docs/DOM /pt-BR/docs/conflicting/Web/API/Document_Object_Model /pt-BR/docs/DOM/BatteryManager.charging /pt-BR/docs/Web/API/BatteryManager/charging /pt-BR/docs/DOM/Document.querySelector /pt-BR/docs/Web/API/Document/querySelector /pt-BR/docs/DOM/Document.querySelectorAll /pt-BR/docs/Web/API/Document/querySelectorAll +/pt-BR/docs/DOM/Referencia_do_DOM /pt-BR/docs/Web/API/Document_Object_Model +/pt-BR/docs/DOM/Referencia_do_DOM/Events /pt-BR/docs/Web/API/Document_Object_Model/Events +/pt-BR/docs/DOM/Referencia_do_DOM/Examples /pt-BR/docs/Web/API/Document_Object_Model/Examples +/pt-BR/docs/DOM/Referencia_do_DOM/How_to_create_a_DOM_tree /pt-BR/docs/Web/API/Document_object_model/How_to_create_a_DOM_tree +/pt-BR/docs/DOM/Referencia_do_DOM/Introdução /pt-BR/docs/Web/API/Document_Object_Model/Introduction +/pt-BR/docs/DOM/Referencia_do_DOM/Whitespace_in_the_DOM /pt-BR/docs/Web/API/Document_Object_Model/Whitespace /pt-BR/docs/DOM/XMLHttpRequest /pt-BR/docs/Web/API/XMLHttpRequest -/pt-BR/docs/DOM/XMLHttpRequest/Usando_XMLHttpRequest /pt-BR/docs/Web/API/XMLHttpRequest/Usando_XMLHttpRequest -/pt-BR/docs/DOM/element.addEventListener /pt-BR/docs/Web/API/Element/addEventListener -/pt-BR/docs/DOM/element.addEventListener-redirect-1 /pt-BR/docs/Web/API/Element/addEventListener +/pt-BR/docs/DOM/XMLHttpRequest/Usando_XMLHttpRequest /pt-BR/docs/Web/API/XMLHttpRequest/Using_XMLHttpRequest +/pt-BR/docs/DOM/element.addEventListener /pt-BR/docs/Web/API/EventTarget/addEventListener +/pt-BR/docs/DOM/element.addEventListener-redirect-1 /pt-BR/docs/Web/API/EventTarget/addEventListener /pt-BR/docs/DOM/window.URL.createObjectURL /pt-BR/docs/Web/API/URL/createObjectURl -/pt-BR/docs/DOM/window.onscroll /pt-BR/docs/Web/API/Window/onscroll +/pt-BR/docs/DOM/window.onscroll /pt-BR/docs/conflicting/Web/API/GlobalEventHandlers/onscroll /pt-BR/docs/Developer_Guide /pt-BR/docs/Mozilla/Developer_guide -/pt-BR/docs/Developer_Guide/Codigo_Fonte /pt-BR/docs/Mozilla/Developer_guide/Codigo_Fonte +/pt-BR/docs/Developer_Guide/Codigo_Fonte /pt-BR/docs/Mozilla/Developer_guide/Source_Code /pt-BR/docs/Developer_Guide/Mozilla_build_FAQ /pt-BR/docs/Mozilla/Developer_guide/Mozilla_build_FAQ -/pt-BR/docs/DragDrop/Arrastar_e_Soltar /pt-BR/docs/DragDrop/Drag_and_Drop +/pt-BR/docs/DragDrop /pt-BR/docs/conflicting/Web/API/HTML_Drag_and_Drop_API +/pt-BR/docs/DragDrop/Arrastar_e_Soltar /pt-BR/docs/Web/API/HTML_Drag_and_Drop_API +/pt-BR/docs/DragDrop/Drag_and_Drop /pt-BR/docs/Web/API/HTML_Drag_and_Drop_API +/pt-BR/docs/DragDrop/Drag_and_Drop/Arrastar_e_soltar_arquivos /pt-BR/docs/Web/API/HTML_Drag_and_Drop_API/File_drag_and_drop /pt-BR/docs/Eventos_on-line_off-line /pt-BR/docs/Web/API/NavigatorOnLine/Online_and_offline_events +/pt-BR/docs/Games/Introduction_to_HTML5_Game_Gevelopment_(summary) /pt-BR/docs/Games/Introduction_to_HTML5_Game_Development +/pt-BR/docs/Glossario /pt-BR/docs/Glossary +/pt-BR/docs/Glossario/404 /pt-BR/docs/Glossary/404 +/pt-BR/docs/Glossario/502 /pt-BR/docs/Glossary/502 +/pt-BR/docs/Glossario/AJAX /pt-BR/docs/Glossary/AJAX +/pt-BR/docs/Glossario/API /pt-BR/docs/Glossary/API +/pt-BR/docs/Glossario/ASCII /pt-BR/docs/Glossary/ASCII +/pt-BR/docs/Glossario/Abstração /pt-BR/docs/Glossary/Abstraction +/pt-BR/docs/Glossario/Acessibilidade /pt-BR/docs/Glossary/Accessibility +/pt-BR/docs/Glossario/Adobe_Flash /pt-BR/docs/Glossary/Adobe_Flash +/pt-BR/docs/Glossario/Algoritmo /pt-BR/docs/Glossary/Algorithm +/pt-BR/docs/Glossario/Alpha /pt-BR/docs/Glossary/Alpha +/pt-BR/docs/Glossario/Apple_Safari /pt-BR/docs/Glossary/Apple_Safari +/pt-BR/docs/Glossario/Argument /pt-BR/docs/Glossary/Argument +/pt-BR/docs/Glossario/Arpanet /pt-BR/docs/Glossary/Arpanet +/pt-BR/docs/Glossario/Assincrono /pt-BR/docs/Glossary/Asynchronous +/pt-BR/docs/Glossario/Atributo /pt-BR/docs/Glossary/Attribute +/pt-BR/docs/Glossario/Bandwidth /pt-BR/docs/Glossary/Bandwidth +/pt-BR/docs/Glossario/BigInt /pt-BR/docs/Glossary/BigInt +/pt-BR/docs/Glossario/Booleano /pt-BR/docs/Glossary/Boolean +/pt-BR/docs/Glossario/CDN /pt-BR/docs/Glossary/CDN +/pt-BR/docs/Glossario/CMS /pt-BR/docs/Glossary/CMS +/pt-BR/docs/Glossario/CORS /pt-BR/docs/Glossary/CORS +/pt-BR/docs/Glossario/CRUD /pt-BR/docs/Glossary/CRUD +/pt-BR/docs/Glossario/CSS /pt-BR/docs/Glossary/CSS +/pt-BR/docs/Glossario/CSSOM /pt-BR/docs/Glossary/CSSOM +/pt-BR/docs/Glossario/CSS_Selector /pt-BR/docs/Glossary/CSS_Selector +/pt-BR/docs/Glossario/CSS_pixel /pt-BR/docs/Glossary/CSS_pixel +/pt-BR/docs/Glossario/CSS_preprocessor /pt-BR/docs/Glossary/CSS_preprocessor +/pt-BR/docs/Glossario/Cabecalho_HTTP /pt-BR/docs/Glossary/HTTP_header +/pt-BR/docs/Glossario/Cache /pt-BR/docs/Glossary/Cache +/pt-BR/docs/Glossario/Call_stack /pt-BR/docs/Glossary/Call_stack +/pt-BR/docs/Glossario/Callback_function /pt-BR/docs/Glossary/Callback_function +/pt-BR/docs/Glossario/Caractere /pt-BR/docs/Glossary/Character +/pt-BR/docs/Glossario/Chrome /pt-BR/docs/Glossary/Chrome +/pt-BR/docs/Glossario/Class /pt-BR/docs/Glossary/Class +/pt-BR/docs/Glossario/Conversao_de_Tipo /pt-BR/docs/Glossary/Type_Conversion +/pt-BR/docs/Glossario/DOM /pt-BR/docs/Glossary/DOM +/pt-BR/docs/Glossario/Declaração /pt-BR/docs/Glossary/Statement +/pt-BR/docs/Glossario/Doctype /pt-BR/docs/Glossary/Doctype +/pt-BR/docs/Glossario/Domínio /pt-BR/docs/Glossary/Domain +/pt-BR/docs/Glossario/ECMA /pt-BR/docs/Glossary/ECMA +/pt-BR/docs/Glossario/Elemento /pt-BR/docs/Glossary/Element +/pt-BR/docs/Glossario/Endereco_IP /pt-BR/docs/Glossary/IP_Address +/pt-BR/docs/Glossario/Endianness /pt-BR/docs/Glossary/Endianness +/pt-BR/docs/Glossario/Entity_header /pt-BR/docs/Glossary/Entity_header +/pt-BR/docs/Glossario/Escopo /pt-BR/docs/Glossary/Scope +/pt-BR/docs/Glossario/Falsy /pt-BR/docs/Glossary/Falsy +/pt-BR/docs/Glossario/Flex /pt-BR/docs/Glossary/Flex +/pt-BR/docs/Glossario/Forbidden_header_name /pt-BR/docs/Glossary/Forbidden_header_name +/pt-BR/docs/Glossario/Forbidden_response_header_name /pt-BR/docs/Glossary/Forbidden_response_header_name +/pt-BR/docs/Glossario/Funcao-First-class /pt-BR/docs/Glossary/First-class_Function +/pt-BR/docs/Glossario/Função /pt-BR/docs/Glossary/Function +/pt-BR/docs/Glossario/Fuzzing /pt-BR/docs/Glossary/Fuzzing +/pt-BR/docs/Glossario/Gecko /pt-BR/docs/Glossary/Gecko +/pt-BR/docs/Glossario/General_header /pt-BR/docs/Glossary/General_header +/pt-BR/docs/Glossario/Global_object /pt-BR/docs/Glossary/Global_object +/pt-BR/docs/Glossario/Grade /pt-BR/docs/Glossary/Grid +/pt-BR/docs/Glossario/Grid_Areas /pt-BR/docs/Glossary/Grid_Areas +/pt-BR/docs/Glossario/HSTS /pt-BR/docs/Glossary/HSTS +/pt-BR/docs/Glossario/HTML /pt-BR/docs/Glossary/HTML +/pt-BR/docs/Glossario/HTTP /pt-BR/docs/Glossary/HTTP +/pt-BR/docs/Glossario/HTTP_2 /pt-BR/docs/Glossary/HTTP_2 +/pt-BR/docs/Glossario/Hoisting /pt-BR/docs/Glossary/Hoisting +/pt-BR/docs/Glossario/IIFE /pt-BR/docs/Glossary/IIFE +/pt-BR/docs/Glossario/IPv4 /pt-BR/docs/Glossary/IPv4 +/pt-BR/docs/Glossario/IPv6 /pt-BR/docs/Glossary/IPv6 +/pt-BR/docs/Glossario/IRC /pt-BR/docs/Glossary/IRC +/pt-BR/docs/Glossario/ISO /pt-BR/docs/Glossary/ISO +/pt-BR/docs/Glossario/Idempotente /pt-BR/docs/Glossary/Idempotent +/pt-BR/docs/Glossario/Identificador /pt-BR/docs/Glossary/Identifier +/pt-BR/docs/Glossario/IndexedDB /pt-BR/docs/Glossary/IndexedDB +/pt-BR/docs/Glossario/Internet /pt-BR/docs/Glossary/Internet +/pt-BR/docs/Glossario/JPEG /pt-BR/docs/Glossary/jpeg +/pt-BR/docs/Glossario/Jank /pt-BR/docs/Glossary/Jank +/pt-BR/docs/Glossario/JavaScript /pt-BR/docs/Glossary/JavaScript +/pt-BR/docs/Glossario/Key /pt-BR/docs/Glossary/Key +/pt-BR/docs/Glossario/Linguagem_de_programação_dinâmica /pt-BR/docs/Glossary/Dynamic_programming_language +/pt-BR/docs/Glossario/Metadata /pt-BR/docs/Glossary/Metadata +/pt-BR/docs/Glossario/Mozilla_Firefox /pt-BR/docs/Glossary/Mozilla_Firefox +/pt-BR/docs/Glossario/Mutavel /pt-BR/docs/Glossary/Mutable +/pt-BR/docs/Glossario/Navegador /pt-BR/docs/Glossary/Browser +/pt-BR/docs/Glossario/Navegador_Opera /pt-BR/docs/Glossary/Opera_Browser +/pt-BR/docs/Glossario/Node.js /pt-BR/docs/Glossary/Node.js +/pt-BR/docs/Glossario/Nome_de_domínio /pt-BR/docs/Glossary/Domain_name +/pt-BR/docs/Glossario/Nulo /pt-BR/docs/Glossary/Null +/pt-BR/docs/Glossario/Número /pt-BR/docs/Glossary/Number +/pt-BR/docs/Glossario/OOP /pt-BR/docs/Glossary/OOP +/pt-BR/docs/Glossario/OTA /pt-BR/docs/Glossary/OTA +/pt-BR/docs/Glossario/Objeto /pt-BR/docs/Glossary/Object +/pt-BR/docs/Glossario/OpenGL /pt-BR/docs/Glossary/OpenGL +/pt-BR/docs/Glossario/Operador /pt-BR/docs/Glossary/Operator +/pt-BR/docs/Glossario/Operando /pt-BR/docs/Glossary/Operand +/pt-BR/docs/Glossario/Origem /pt-BR/docs/Glossary/Origin +/pt-BR/docs/Glossario/PHP /pt-BR/docs/Glossary/PHP +/pt-BR/docs/Glossario/Palavra-chave /pt-BR/docs/Glossary/Keyword +/pt-BR/docs/Glossario/Pixel /pt-BR/docs/Glossary/Pixel +/pt-BR/docs/Glossario/Polyfill /pt-BR/docs/Glossary/Polyfill +/pt-BR/docs/Glossario/Port /pt-BR/docs/Glossary/Port +/pt-BR/docs/Glossario/Prefixos_vendor /pt-BR/docs/Glossary/Vendor_Prefix +/pt-BR/docs/Glossario/Preflight_request /pt-BR/docs/Glossary/Preflight_request +/pt-BR/docs/Glossario/Primitivo /pt-BR/docs/Glossary/Primitive +/pt-BR/docs/Glossario/Programação_de_Computadores /pt-BR/docs/Glossary/Computer_Programming +/pt-BR/docs/Glossario/Progressive_web_apps /pt-BR/docs/Glossary/Progressive_web_apps +/pt-BR/docs/Glossario/Protocolo /pt-BR/docs/Glossary/Protocol +/pt-BR/docs/Glossario/Prototype /pt-BR/docs/Glossary/Prototype +/pt-BR/docs/Glossario/Proxy_server /pt-BR/docs/Glossary/Proxy_server +/pt-BR/docs/Glossario/Pseudo-class /pt-BR/docs/Glossary/Pseudo-class +/pt-BR/docs/Glossario/Pseudo-element /pt-BR/docs/Glossary/Pseudo-element +/pt-BR/docs/Glossario/Python /pt-BR/docs/Glossary/Python +/pt-BR/docs/Glossario/REST /pt-BR/docs/Glossary/REST +/pt-BR/docs/Glossario/Recursão /pt-BR/docs/Glossary/Recursion +/pt-BR/docs/Glossario/Reflow /pt-BR/docs/Glossary/Reflow +/pt-BR/docs/Glossario/Request_header /pt-BR/docs/Glossary/Request_header +/pt-BR/docs/Glossario/Responsive_web_design /pt-BR/docs/Glossary/Responsive_web_design +/pt-BR/docs/Glossario/Ruby /pt-BR/docs/Glossary/Ruby +/pt-BR/docs/Glossario/SDP /pt-BR/docs/Glossary/SDP +/pt-BR/docs/Glossario/SEO /pt-BR/docs/Glossary/SEO +/pt-BR/docs/Glossario/SGML /pt-BR/docs/Glossary/SGML +/pt-BR/docs/Glossario/SVG /pt-BR/docs/Glossary/SVG +/pt-BR/docs/Glossario/Self-Executing_Anonymous_Function /pt-BR/docs/Glossary/Self-Executing_Anonymous_Function +/pt-BR/docs/Glossario/Semantica /pt-BR/docs/Glossary/Semantics +/pt-BR/docs/Glossario/Servidor /pt-BR/docs/Glossary/Server +/pt-BR/docs/Glossario/Sincrono /pt-BR/docs/Glossary/Synchronous +/pt-BR/docs/Glossario/Sloppy_mode /pt-BR/docs/Glossary/Sloppy_mode +/pt-BR/docs/Glossario/Stacking_context /pt-BR/docs/Glossary/Stacking_context +/pt-BR/docs/Glossario/String /pt-BR/docs/Glossary/String +/pt-BR/docs/Glossario/Symbol /pt-BR/docs/Glossary/Symbol +/pt-BR/docs/Glossario/TCP /pt-BR/docs/Glossary/TCP +/pt-BR/docs/Glossario/TLS /pt-BR/docs/Glossary/TLS +/pt-BR/docs/Glossario/Tag /pt-BR/docs/Glossary/Tag +/pt-BR/docs/Glossario/Three_js /pt-BR/docs/Glossary/Three_js +/pt-BR/docs/Glossario/Tratando_Formulários_com_PHP /pt-BR/docs/orphaned/Glossary/Tratando_Formulários_com_PHP +/pt-BR/docs/Glossario/Truthy /pt-BR/docs/Glossary/Truthy +/pt-BR/docs/Glossario/URI /pt-BR/docs/Glossary/URI +/pt-BR/docs/Glossario/URL /pt-BR/docs/Glossary/URL +/pt-BR/docs/Glossario/UTF-8 /pt-BR/docs/Glossary/UTF-8 +/pt-BR/docs/Glossario/UX /pt-BR/docs/Glossary/UX +/pt-BR/docs/Glossario/Valor /pt-BR/docs/Glossary/Value +/pt-BR/docs/Glossario/Variável /pt-BR/docs/Glossary/Variable +/pt-BR/docs/Glossario/Viewport /pt-BR/docs/Glossary/Viewport +/pt-BR/docs/Glossario/W3C /pt-BR/docs/Glossary/W3C +/pt-BR/docs/Glossario/WHATWG /pt-BR/docs/Glossary/WHATWG +/pt-BR/docs/Glossario/WebSockets /pt-BR/docs/Glossary/WebSockets +/pt-BR/docs/Glossario/Wrapper /pt-BR/docs/Glossary/Wrapper +/pt-BR/docs/Glossario/XHR_(XMLHttpRequest) /pt-BR/docs/Glossary/XHR_(XMLHttpRequest) +/pt-BR/docs/Glossario/XML /pt-BR/docs/Glossary/XML +/pt-BR/docs/Glossario/array /pt-BR/docs/Glossary/array +/pt-BR/docs/Glossario/arvore_de_acessibilidade /pt-BR/docs/Glossary/Accessibility_tree +/pt-BR/docs/Glossario/caret /pt-BR/docs/Glossary/caret +/pt-BR/docs/Glossario/character_encoding /pt-BR/docs/Glossary/character_encoding +/pt-BR/docs/Glossario/conteiner_de_alinhamento /pt-BR/docs/Glossary/Alignment_Container +/pt-BR/docs/Glossario/degradação_graciosa /pt-BR/docs/Glossary/Graceful_degradation +/pt-BR/docs/Glossario/https /pt-BR/docs/Glossary/https +/pt-BR/docs/Glossario/jQuery /pt-BR/docs/Glossary/jQuery +/pt-BR/docs/Glossario/marcação /pt-BR/docs/Glossary/markup +/pt-BR/docs/Glossario/property /pt-BR/docs/Glossary/property +/pt-BR/docs/Glossario/property/CSS /pt-BR/docs/Glossary/property/CSS +/pt-BR/docs/Glossario/property/JavaScript /pt-BR/docs/Glossary/property/JavaScript +/pt-BR/docs/Glossario/seguro /pt-BR/docs/Glossary/safe +/pt-BR/docs/Glossario/topico_de_alinhamento /pt-BR/docs/Glossary/Alignment_Subject +/pt-BR/docs/Glossario/undefined /pt-BR/docs/Glossary/undefined +/pt-BR/docs/Glossario/webp /pt-BR/docs/Glossary/webp /pt-BR/docs/Guia_do_Desenvolvedor /pt-BR/docs/Mozilla/Developer_guide /pt-BR/docs/HTML /pt-BR/docs/Web/HTML -/pt-BR/docs/HTML/Canvas /pt-BR/docs/Web/HTML/Canvas -/pt-BR/docs/HTML/Dicas_para_criar_páginas_HTML_de_carregamento_rápido /pt-BR/docs/Web/HTML/Dicas_para_criar_páginas_HTML_de_carregamento_rápido +/pt-BR/docs/HTML/Attributes /pt-BR/docs/Web/HTML/Attributes +/pt-BR/docs/HTML/Canvas /pt-BR/docs/Web/API/Canvas_API +/pt-BR/docs/HTML/Dicas_para_criar_páginas_HTML_de_carregamento_rápido /pt-BR/docs/Learn/HTML/Howto/Author_fast-loading_HTML_pages /pt-BR/docs/HTML/Element /pt-BR/docs/Web/HTML/Element /pt-BR/docs/HTML/Element-redirect-1 /pt-BR/docs/Web/HTML/Element /pt-BR/docs/HTML/Element/Audio /pt-BR/docs/Web/HTML/Element/Audio @@ -66,13 +303,13 @@ /pt-BR/docs/HTML/Element/article /pt-BR/docs/Web/HTML/Element/article /pt-BR/docs/HTML/Element/aside /pt-BR/docs/Web/HTML/Element/aside /pt-BR/docs/HTML/Element/canvas /pt-BR/docs/Web/HTML/Element/canvas -/pt-BR/docs/HTML/Element/command /pt-BR/docs/Web/HTML/Element/command +/pt-BR/docs/HTML/Element/command /pt-BR/docs/orphaned/Web/HTML/Element/command /pt-BR/docs/HTML/Element/data /pt-BR/docs/Web/HTML/Element/data /pt-BR/docs/HTML/Element/datalist /pt-BR/docs/Web/HTML/Element/datalist /pt-BR/docs/HTML/Element/details /pt-BR/docs/Web/HTML/Element/details /pt-BR/docs/HTML/Element/dfn /pt-BR/docs/Web/HTML/Element/dfn /pt-BR/docs/HTML/Element/dl /pt-BR/docs/Web/HTML/Element/dl -/pt-BR/docs/HTML/Element/figura /pt-BR/docs/Web/HTML/Element/figura +/pt-BR/docs/HTML/Element/figura /pt-BR/docs/Web/HTML/Element/figure /pt-BR/docs/HTML/Element/footer /pt-BR/docs/Web/HTML/Element/footer /pt-BR/docs/HTML/Element/footer-redirect-1 /pt-BR/docs/Web/HTML/Element/footer /pt-BR/docs/HTML/Element/form /pt-BR/docs/Web/HTML/Element/form @@ -93,38 +330,42 @@ /pt-BR/docs/HTML/Element/table /pt-BR/docs/Web/HTML/Element/table /pt-BR/docs/HTML/Element/wbr /pt-BR/docs/Web/HTML/Element/wbr /pt-BR/docs/HTML/Elementos HTML /pt-BR/docs/Web/HTML/Element -/pt-BR/docs/HTML/Formularios_em_HTML /pt-BR/docs/HTML/Forms_in_HTML -/pt-BR/docs/HTML/HTML5 /pt-BR/docs/Web/HTML/HTML5 +/pt-BR/docs/HTML/Forms_in_HTML /pt-BR/docs/orphaned/Learn/HTML/Forms/HTML5_updates +/pt-BR/docs/HTML/Formularios_em_HTML /pt-BR/docs/orphaned/Learn/HTML/Forms/HTML5_updates +/pt-BR/docs/HTML/HTML5 /pt-BR/docs/Web/Guide/HTML/HTML5 /pt-BR/docs/HTML/HTML5/HTML5_element_list /pt-BR/docs/Web/HTML/Element -/pt-BR/docs/HTML/HTML5/Introduction_to_HTML5 /pt-BR/docs/Web/HTML/HTML5/Introduction_to_HTML5 -/pt-BR/docs/HTML/HTML5/Introdução_ao_HTML5 /pt-BR/docs/Web/HTML/HTML5/Introduction_to_HTML5 +/pt-BR/docs/HTML/HTML5/Introduction_to_HTML5 /pt-BR/docs/Web/Guide/HTML/HTML5/Introduction_to_HTML5 +/pt-BR/docs/HTML/HTML5/Introdução_ao_HTML5 /pt-BR/docs/Web/Guide/HTML/HTML5/Introduction_to_HTML5 /pt-BR/docs/HTML/HTML_Elements /pt-BR/docs/Web/HTML/Element /pt-BR/docs/HTML/HTML_Elements/time /pt-BR/docs/Web/HTML/Element/time -/pt-BR/docs/HTML/Introducao /pt-BR/docs/Aprender/HTML/Introducao_ao_HTML -/pt-BR/docs/HTML/Introduction /pt-BR/docs/Aprender/HTML/Introducao_ao_HTML -/pt-BR/docs/HTML/Optimizing_Your_Pages_for_Speculative_Parsing /pt-BR/docs/Web/HTML/Optimizing_your_pages_for_speculative_parsing +/pt-BR/docs/HTML/Introducao /pt-BR/docs/Learn/HTML/Introduction_to_HTML +/pt-BR/docs/HTML/Introduction /pt-BR/docs/Learn/HTML/Introduction_to_HTML +/pt-BR/docs/HTML/Optimizing_Your_Pages_for_Speculative_Parsing /pt-BR/docs/Glossary/speculative_parsing /pt-BR/docs/HTML/Using_the_application_cache /pt-BR/docs/Web/HTML/Using_the_application_cache +/pt-BR/docs/Hello_World_Rust /pt-BR/docs/orphaned/Hello_World_Rust /pt-BR/docs/IndexedDB /pt-BR/docs/Web/API/IndexedDB_API /pt-BR/docs/IndexedDB/Basic_Concepts_Behind_IndexedDB /pt-BR/docs/Web/API/IndexedDB_API/Basic_Concepts_Behind_IndexedDB -/pt-BR/docs/IndexedDB/Usando_IndexedDB /pt-BR/docs/Web/API/IndexedDB_API/Usando_IndexedDB +/pt-BR/docs/IndexedDB/Usando_IndexedDB /pt-BR/docs/Web/API/IndexedDB_API/Using_IndexedDB +/pt-BR/docs/Instalando_Rust /pt-BR/docs/orphaned/Instalando_Rust +/pt-BR/docs/JSON /pt-BR/docs/Glossary/JSON /pt-BR/docs/JavaScript /pt-BR/docs/Web/JavaScript /pt-BR/docs/JavaScript/A_re-introduction_to_JavaScript /pt-BR/docs/Web/JavaScript/A_re-introduction_to_JavaScript /pt-BR/docs/JavaScript/About_JavaScript /pt-BR/docs/Web/JavaScript/About_JavaScript /pt-BR/docs/JavaScript/Data_structures /pt-BR/docs/Web/JavaScript/Data_structures /pt-BR/docs/JavaScript/Guide /pt-BR/docs/Web/JavaScript/Guide /pt-BR/docs/JavaScript/Guide/About /pt-BR/docs/Web/JavaScript/Guide/Introduction -/pt-BR/docs/JavaScript/Guide/Closures /pt-BR/docs/Web/JavaScript/Guide/Closures -/pt-BR/docs/JavaScript/Guide/Detalhes_do_Modelo_do_Objeto /pt-BR/docs/Web/JavaScript/Guide/Detalhes_do_Modelo_do_Objeto +/pt-BR/docs/JavaScript/Guide/Closures /pt-BR/docs/Web/JavaScript/Closures +/pt-BR/docs/JavaScript/Guide/Detalhes_do_Modelo_do_Objeto /pt-BR/docs/Web/JavaScript/Guide/Details_of_the_Object_Model /pt-BR/docs/JavaScript/Guide/Expressions_and_Operators /pt-BR/docs/Web/JavaScript/Guide/Expressions_and_Operators -/pt-BR/docs/JavaScript/Guide/Herança_Revisitada /pt-BR/docs/Web/JavaScript/Guide/Inheritance_and_the_prototype_chain -/pt-BR/docs/JavaScript/Guide/Igualdade /pt-BR/docs/Web/JavaScript/Guide/Igualdade -/pt-BR/docs/JavaScript/Guide/Inheritance_Revisited /pt-BR/docs/Web/JavaScript/Guide/Inheritance_and_the_prototype_chain +/pt-BR/docs/JavaScript/Guide/Herança_Revisitada /pt-BR/docs/Web/JavaScript/Inheritance_and_the_prototype_chain +/pt-BR/docs/JavaScript/Guide/Igualdade /pt-BR/docs/conflicting/Web/JavaScript/Equality_comparisons_and_sameness +/pt-BR/docs/JavaScript/Guide/Inheritance_Revisited /pt-BR/docs/Web/JavaScript/Inheritance_and_the_prototype_chain /pt-BR/docs/JavaScript/Guide/JavaScript_Visão_Geral /pt-BR/docs/Web/JavaScript/Guide/Introduction /pt-BR/docs/JavaScript/Guide/Regular_Expressions /pt-BR/docs/Web/JavaScript/Guide/Regular_Expressions -/pt-BR/docs/JavaScript/Guide/Trabalhando_com_Objetos /pt-BR/docs/Web/JavaScript/Guide/Trabalhando_com_Objetos -/pt-BR/docs/JavaScript/Guide/Valores,_variáveis_e_literais /pt-BR/docs/Web/JavaScript/Guide/Values,_variables,_and_literals -/pt-BR/docs/JavaScript/Guide/Values,_variables,_and_literals /pt-BR/docs/Web/JavaScript/Guide/Values,_variables,_and_literals -/pt-BR/docs/JavaScript/Introduction_to_Object-Oriented_JavaScript /pt-BR/docs/Web/JavaScript/Introduction_to_Object-Oriented_JavaScript +/pt-BR/docs/JavaScript/Guide/Trabalhando_com_Objetos /pt-BR/docs/Web/JavaScript/Guide/Working_with_Objects +/pt-BR/docs/JavaScript/Guide/Valores,_variáveis_e_literais /pt-BR/docs/Web/JavaScript/Guide/Grammar_and_types +/pt-BR/docs/JavaScript/Guide/Values,_variables,_and_literals /pt-BR/docs/Web/JavaScript/Guide/Grammar_and_types +/pt-BR/docs/JavaScript/Introduction_to_Object-Oriented_JavaScript /pt-BR/docs/conflicting/Learn/JavaScript/Objects /pt-BR/docs/JavaScript/JavaScript_technologies_overview /pt-BR/docs/Web/JavaScript/JavaScript_technologies_overview /pt-BR/docs/JavaScript/Outras_ferramentas_JavaScript /pt-BR/docs/Tools /pt-BR/docs/JavaScript/Reference /pt-BR/docs/Web/JavaScript/Reference @@ -146,68 +387,194 @@ /pt-BR/docs/JavaScript/Reference/Global_Objects/String /pt-BR/docs/Web/JavaScript/Reference/Global_Objects/String /pt-BR/docs/JavaScript/Reference/Global_Objects/String/indexOf /pt-BR/docs/Web/JavaScript/Reference/Global_Objects/String/indexOf /pt-BR/docs/JavaScript/Reference/Global_Objects/WeakMap /pt-BR/docs/Web/JavaScript/Reference/Global_Objects/WeakMap -/pt-BR/docs/JavaScript/Reference/Global_Objects/WeakMap/prototype /pt-BR/docs/Web/JavaScript/Reference/Global_Objects/WeakMap/prototype +/pt-BR/docs/JavaScript/Reference/Global_Objects/WeakMap/prototype /pt-BR/docs/conflicting/Web/JavaScript/Reference/Global_Objects/WeakMap /pt-BR/docs/JavaScript/Reference/Global_Objects/isNaN /pt-BR/docs/Web/JavaScript/Reference/Global_Objects/isNaN /pt-BR/docs/JavaScript/Reference/Global_Objects/parseInt /pt-BR/docs/Web/JavaScript/Reference/Global_Objects/parseInt /pt-BR/docs/JavaScript/Reference/Operators /pt-BR/docs/Web/JavaScript/Reference/Operators -/pt-BR/docs/JavaScript/Reference/Operators/Operador_Virgula /pt-BR/docs/Web/JavaScript/Reference/Operators/Operador_Virgula +/pt-BR/docs/JavaScript/Reference/Operators/Operador_Virgula /pt-BR/docs/Web/JavaScript/Reference/Operators/Comma_Operator /pt-BR/docs/JavaScript/Reference/Operators/typeof /pt-BR/docs/Web/JavaScript/Reference/Operators/typeof /pt-BR/docs/JavaScript/Reference/Statements /pt-BR/docs/Web/JavaScript/Reference/Statements /pt-BR/docs/JavaScript/Reference/Statements/label /pt-BR/docs/Web/JavaScript/Reference/Statements/label /pt-BR/docs/JavaScript/Reference/Statements/let /pt-BR/docs/Web/JavaScript/Reference/Statements/let /pt-BR/docs/JavaScript/uma_reintroduction_ao_JavaScript /pt-BR/docs/Web/JavaScript/A_re-introduction_to_JavaScript +/pt-BR/docs/Learn/Accessibility/Acessibilidade_problemas /pt-BR/docs/Learn/Accessibility/Accessibility_troubleshooting +/pt-BR/docs/Learn/Accessibility/CSS_e_JavaScript /pt-BR/docs/Learn/Accessibility/CSS_and_JavaScript +/pt-BR/docs/Learn/CSS/CSS_layout/Fluxo_Normal /pt-BR/docs/Learn/CSS/CSS_layout/Normal_Flow +/pt-BR/docs/Learn/CSS/CSS_layout/Intro_leiaute_CSS /pt-BR/docs/Learn/CSS/CSS_layout/Introduction +/pt-BR/docs/Learn/CSS/CSS_layout/Layout_de_varias_colunas /pt-BR/docs/Learn/CSS/CSS_layout/Multiple-column_Layout +/pt-BR/docs/Learn/CSS/First_steps/Como_CSS_e_estruturado /pt-BR/docs/Learn/CSS/First_steps/How_CSS_is_structured +/pt-BR/docs/Learn/CSS/First_steps/Iniciando /pt-BR/docs/Learn/CSS/First_steps/Getting_started +/pt-BR/docs/Learn/CSS/First_steps/O_que_e_CSS /pt-BR/docs/Learn/CSS/First_steps/What_is_CSS +/pt-BR/docs/Learn/CSS/Howto/CSS_Perguntas_Frequentes /pt-BR/docs/Learn/CSS/Howto/CSS_FAQ +/pt-BR/docs/Learn/Common_questions/Como_a_internet_funciona /pt-BR/docs/Learn/Common_questions/How_does_the_Internet_work +/pt-BR/docs/Learn/Common_questions/Como_configurar_um_servidor_de_testes_local /pt-BR/docs/Learn/Common_questions/set_up_a_local_testing_server +/pt-BR/docs/Learn/Common_questions/Como_voce_hospeda_seu_site_Google_App_Engine /pt-BR/docs/Learn/Common_questions/How_do_you_host_your_website_on_Google_App_Engine +/pt-BR/docs/Learn/Common_questions/O_que_são_hyperlinks /pt-BR/docs/Learn/Common_questions/What_are_hyperlinks +/pt-BR/docs/Learn/Common_questions/Pensando_antes_de_codificar /pt-BR/docs/Learn/Common_questions/Thinking_before_coding +/pt-BR/docs/Learn/Common_questions/Quanto_custa_fazer_algo_web /pt-BR/docs/Learn/Common_questions/How_much_does_it_cost +/pt-BR/docs/Learn/Common_questions/Que_software_eu_preciso /pt-BR/docs/Learn/Common_questions/What_software_do_I_need +/pt-BR/docs/Learn/Common_questions/ferramentas_de_desenvolvimento_do_navegador /pt-BR/docs/Learn/Common_questions/What_are_browser_developer_tools +/pt-BR/docs/Learn/Common_questions/o_que_e_um_web_server /pt-BR/docs/Learn/Common_questions/What_is_a_web_server +/pt-BR/docs/Learn/JavaScript/Asynchronous/Conceitos /pt-BR/docs/Learn/JavaScript/Asynchronous/Concepts +/pt-BR/docs/Learn/JavaScript/Asynchronous/Escolhendo_abordagem_correta /pt-BR/docs/Learn/JavaScript/Asynchronous/Choosing_the_right_approach +/pt-BR/docs/Learn/JavaScript/Asynchronous/Introdução /pt-BR/docs/Learn/JavaScript/Asynchronous/Introducing +/pt-BR/docs/Learn/JavaScript/First_steps/Gerador_de_historias_bobas /pt-BR/docs/Learn/JavaScript/First_steps/Silly_story_generator +/pt-BR/docs/Learn/JavaScript/First_steps/Matematica /pt-BR/docs/Learn/JavaScript/First_steps/Math +/pt-BR/docs/Learn/JavaScript/First_steps/O_que_e_JavaScript /pt-BR/docs/Learn/JavaScript/First_steps/What_is_JavaScript +/pt-BR/docs/Learn/JavaScript/First_steps/Teste_suas_habilidades:_variaveis /pt-BR/docs/Learn/JavaScript/First_steps/Test_your_skills:_variables +/pt-BR/docs/Learn/JavaScript/First_steps/Variáveis /pt-BR/docs/Learn/JavaScript/First_steps/Variables +/pt-BR/docs/Learn/Server-side/Django/Hospedagem /pt-BR/docs/Learn/Server-side/Django/Deployment +/pt-BR/docs/Learn/Server-side/Django/Introdução /pt-BR/docs/Learn/Server-side/Django/Introduction +/pt-BR/docs/Learn/Server-side/Django/Sessões /pt-BR/docs/Learn/Server-side/Django/Sessions +/pt-BR/docs/Learn/Server-side/Django/Tutorial_website_biblioteca_local /pt-BR/docs/Learn/Server-side/Django/Tutorial_local_library_website +/pt-BR/docs/Learn/Server-side/Django/ambiente_de_desenvolvimento /pt-BR/docs/Learn/Server-side/Django/development_environment +/pt-BR/docs/Learn/Server-side/Express_Nodejs/Introdução /pt-BR/docs/Learn/Server-side/Express_Nodejs/Introduction +/pt-BR/docs/Learn/Server-side/Express_Nodejs/ambiente_de_desenvolvimento /pt-BR/docs/Learn/Server-side/Express_Nodejs/development_environment +/pt-BR/docs/Learn/Server-side/First_steps/Introdução /pt-BR/docs/Learn/Server-side/First_steps/Introduction +/pt-BR/docs/Learn/Server-side/First_steps/Seguranca_site /pt-BR/docs/Learn/Server-side/First_steps/Website_security +/pt-BR/docs/Learn/Tools_and_testing/Client-side_JavaScript_frameworks/Comecando_com_React /pt-BR/docs/Learn/Tools_and_testing/Client-side_JavaScript_frameworks/React_getting_started +/pt-BR/docs/Learn/Tools_and_testing/Client-side_JavaScript_frameworks/Vue_iniciando /pt-BR/docs/Learn/Tools_and_testing/Client-side_JavaScript_frameworks/Vue_getting_started +/pt-BR/docs/Localização /pt-BR/docs/Glossary/Localization +/pt-BR/docs/MDN/Comunidade /pt-BR/docs/orphaned/MDN/Community +/pt-BR/docs/MDN/Comunidade/Trabalhando_em_comunidade /pt-BR/docs/orphaned/MDN/Community/Working_in_community +/pt-BR/docs/MDN/Comunidade/Whats_happening /pt-BR/docs/orphaned/MDN/Community/Whats_happening +/pt-BR/docs/MDN/Contribute/Collaboration_tactics /pt-BR/docs/orphaned/MDN/Contribute/Processes/Cross-team_collaboration_tactics /pt-BR/docs/MDN/Contribute/Content /pt-BR/docs/MDN/Guidelines -/pt-BR/docs/MDN/Contribute/Content/Style_guide /pt-BR/docs/MDN/Guidelines/Style_guide -/pt-BR/docs/MDN/Contribute/Editor /pt-BR/docs/MDN/Editor -/pt-BR/docs/MDN/Contribute/Editor/Basics /pt-BR/docs/MDN/Editor/Basics +/pt-BR/docs/MDN/Contribute/Content/Style_guide /pt-BR/docs/MDN/Guidelines/Writing_style_guide +/pt-BR/docs/MDN/Contribute/Editor /pt-BR/docs/orphaned/MDN/Editor +/pt-BR/docs/MDN/Contribute/Editor/Basics /pt-BR/docs/orphaned/MDN/Editor/Basics /pt-BR/docs/MDN/Contribute/Estruturas /pt-BR/docs/MDN/Structures /pt-BR/docs/MDN/Contribute/Estruturas/Compatibility_tables /pt-BR/docs/MDN/Structures/Compatibility_tables /pt-BR/docs/MDN/Contribute/Estruturas/Macros /pt-BR/docs/MDN/Structures/Macros +/pt-BR/docs/MDN/Contribute/Processos /pt-BR/docs/MDN/Contribute/Processes /pt-BR/docs/MDN/Contribute/Tools /pt-BR/docs/MDN/Tools /pt-BR/docs/MDN/Contribute/Tools/KumaScript /pt-BR/docs/MDN/Tools/KumaScript -/pt-BR/docs/MDN/Contribute/Tools/KumaScript/Solucionando_problemas_de_erros_de_KumaScript /pt-BR/docs/MDN/Tools/KumaScript/Solucionando_problemas_de_erros_de_KumaScript -/pt-BR/docs/MDN/Contribute/Tools/Page_regeneration /pt-BR/docs/MDN/Tools/Page_regeneration +/pt-BR/docs/MDN/Contribute/Tools/KumaScript/Solucionando_problemas_de_erros_de_KumaScript /pt-BR/docs/MDN/Tools/KumaScript/Troubleshooting +/pt-BR/docs/MDN/Contribute/Tools/Page_regeneration /pt-BR/docs/orphaned/MDN/Tools/Page_regeneration +/pt-BR/docs/MDN/Contribute/criando_e_editando_paginas /pt-BR/docs/MDN/Contribute/Howto/Create_and_edit_pages +/pt-BR/docs/MDN/Contribute/guia /pt-BR/docs/MDN/Contribute/Howto +/pt-BR/docs/MDN/Contribute/guia/Como-marcar-as-paginas-corretamente /pt-BR/docs/MDN/Contribute/Howto/Tag +/pt-BR/docs/MDN/Contribute/guia/Converter_exemplos_codigo_para_ao_vivo /pt-BR/docs/MDN/Contribute/Howto/Convert_code_samples_to_be_live +/pt-BR/docs/MDN/Contribute/guia/Create_an_MDN_account /pt-BR/docs/orphaned/MDN/Contribute/Howto/Create_an_MDN_account +/pt-BR/docs/MDN/Contribute/guia/Create_an_interactive_exercise_to_help_learning_the_web /pt-BR/docs/MDN/Contribute/Howto/Create_an_interactive_exercise_to_help_learning_the_web +/pt-BR/docs/MDN/Contribute/guia/Create_an_interactive_exercise_to_help_learning_the_web/distant_example /pt-BR/docs/MDN/Contribute/Howto/Create_an_interactive_exercise_to_help_learning_the_web/distant_example +/pt-BR/docs/MDN/Contribute/guia/Do_a_technical_review /pt-BR/docs/orphaned/MDN/Contribute/Howto/Do_a_technical_review +/pt-BR/docs/MDN/Contribute/guia/Do_an_editorial_review /pt-BR/docs/orphaned/MDN/Contribute/Howto/Do_an_editorial_review +/pt-BR/docs/MDN/Contribute/guia/Escreva_um_artigo_para_ajudar_aprender_sobre_a_Web /pt-BR/docs/orphaned/MDN/Contribute/Howto/Write_an_article_to_help_learn_about_the_Web +/pt-BR/docs/MDN/Contribute/guia/Set_the_summary_for_a_page /pt-BR/docs/orphaned/MDN/Contribute/Howto/Set_the_summary_for_a_page +/pt-BR/docs/MDN/Contribute/guia/Tag_JavaScript_pages /pt-BR/docs/orphaned/MDN/Contribute/Howto/Tag_JavaScript_pages +/pt-BR/docs/MDN/Editor /pt-BR/docs/orphaned/MDN/Editor +/pt-BR/docs/MDN/Editor/Basics /pt-BR/docs/orphaned/MDN/Editor/Basics /pt-BR/docs/MDN/Feedback /pt-BR/docs/MDN/Contribute/Feedback +/pt-BR/docs/MDN/Guidelines/Style_guide /pt-BR/docs/MDN/Guidelines/Writing_style_guide +/pt-BR/docs/MDN/Kuma /pt-BR/docs/MDN/Yari +/pt-BR/docs/MDN/Paineis /pt-BR/docs/orphaned/MDN/Dashboards /pt-BR/docs/MDN/Primeiros_Passos /pt-BR/docs/MDN/Contribute/Getting_started +/pt-BR/docs/MDN/Tools/KumaScript/Solucionando_problemas_de_erros_de_KumaScript /pt-BR/docs/MDN/Tools/KumaScript/Troubleshooting +/pt-BR/docs/MDN/Tools/Page_regeneration /pt-BR/docs/orphaned/MDN/Tools/Page_regeneration /pt-BR/docs/MDN/guia_usuário /pt-BR/docs/MDN/Tools +/pt-BR/docs/Mozilla/Add-ons/WebExtensions/API/tema /pt-BR/docs/Mozilla/Add-ons/WebExtensions/API/theme +/pt-BR/docs/Mozilla/Add-ons/WebExtensions/Anatomia_de_uma_WebExtension /pt-BR/docs/Mozilla/Add-ons/WebExtensions/Anatomy_of_a_WebExtension +/pt-BR/docs/Mozilla/Add-ons/WebExtensions/Empacotando_e_instalando /pt-BR/docs/orphaned/Mozilla/Add-ons/WebExtensions/Temporary_Installation_in_Firefox +/pt-BR/docs/Mozilla/Add-ons/WebExtensions/O_que_vem_a_seguir_ /pt-BR/docs/Mozilla/Add-ons/WebExtensions/What_next_ +/pt-BR/docs/Mozilla/Add-ons/WebExtensions/Passo-a-Passo /pt-BR/docs/Mozilla/Add-ons/WebExtensions/Your_second_WebExtension +/pt-BR/docs/Mozilla/Add-ons/WebExtensions/manifest.json/permissões /pt-BR/docs/Mozilla/Add-ons/WebExtensions/manifest.json/permissions +/pt-BR/docs/Mozilla/Add-ons/WebExtensions/pre-requisitos /pt-BR/docs/Mozilla/Add-ons/WebExtensions/Prerequisites +/pt-BR/docs/Mozilla/Add-ons/WebExtensions/sua_primeira_WebExtension /pt-BR/docs/Mozilla/Add-ons/WebExtensions/Your_first_WebExtension +/pt-BR/docs/Mozilla/Add-ons/WebExtensions/user_interface/Itens_do_menu_de_contexto /pt-BR/docs/Mozilla/Add-ons/WebExtensions/user_interface/Context_menu_items +/pt-BR/docs/Mozilla/Developer_guide/Codigo_Fonte /pt-BR/docs/Mozilla/Developer_guide/Source_Code +/pt-BR/docs/Mozilla/Firefox/Novas_funcionalidades /pt-BR/docs/Mozilla/Firefox/Experimental_features +/pt-BR/docs/Mozilla/Firefox/Releases/3/Zoom_de_página_inteira /pt-BR/docs/Mozilla/Firefox/Releases/3/Full_page_zoom /pt-BR/docs/Online_and_offline_events /pt-BR/docs/Web/API/NavigatorOnLine/Online_and_offline_events -/pt-BR/docs/Projeto:Como_ajudar_com_MDN-redirect-1 /pt-BR/docs/Projeto:Como_ajudar_com_MDN -/pt-BR/docs/Projeto:Como_ajudar_com_MDN-redirect-2 /pt-BR/docs/Projeto:Como_ajudar_com_MDN +/pt-BR/docs/Projeto:Como_ajudar_com_MDN /pt-BR/docs/conflicting/MDN/Contribute/Getting_started +/pt-BR/docs/Projeto:Como_ajudar_com_MDN-redirect-1 /pt-BR/docs/conflicting/MDN/Contribute/Getting_started +/pt-BR/docs/Projeto:Como_ajudar_com_MDN-redirect-2 /pt-BR/docs/conflicting/MDN/Contribute/Getting_started /pt-BR/docs/Quirks_Mode_and_Standards_Mode /pt-BR/docs/Web/HTML/Quirks_Mode_and_Standards_Mode /pt-BR/docs/SVG /pt-BR/docs/Web/SVG /pt-BR/docs/SVG/Element /pt-BR/docs/Web/SVG/Element /pt-BR/docs/SVG/Element/desc /pt-BR/docs/Web/SVG/Element/desc /pt-BR/docs/SVG/Element/svg /pt-BR/docs/Web/SVG/Element/svg /pt-BR/docs/SVG/Element/texto /pt-BR/docs/Web/SVG/Element/text +/pt-BR/docs/Sections_and_Outlines_of_an_HTML5_document /pt-BR/docs/Web/Guide/HTML/Using_HTML_sections_and_outlines /pt-BR/docs/Security/CSP/Utilizando_Politicas_De_Seguranca_De_Conteudo /pt-BR/docs/Web/HTTP/CSP -/pt-BR/docs/Seções_e_estrutura_HTML5 /pt-BR/docs/Sections_and_Outlines_of_an_HTML5_document -/pt-BR/docs/Using_HTML5_audio_and_video /pt-BR/docs/Web/HTML/Using_HTML5_audio_and_video +/pt-BR/docs/Seções_e_estrutura_HTML5 /pt-BR/docs/Web/Guide/HTML/Using_HTML_sections_and_outlines +/pt-BR/docs/The_XSLT_JavaScript_Interface_in_Gecko /pt-BR/docs/Web/XSLT/XSLT_JS_interface_in_Gecko +/pt-BR/docs/The_XSLT_JavaScript_Interface_in_Gecko/Advanced_Example /pt-BR/docs/Web/XSLT/XSLT_JS_interface_in_Gecko/Advanced_Example +/pt-BR/docs/Tools/Add-ons /pt-BR/docs/orphaned/Tools/Add-ons +/pt-BR/docs/Tools/Add-ons/DOM_Inspector_Pt-Br /pt-BR/docs/orphaned/Tools/Add-ons/DOM_Inspector +/pt-BR/docs/Tools/CSS_Coverage /pt-BR/docs/orphaned/Tools/CSS_Coverage +/pt-BR/docs/Tools/Debugger/How_to/Examine,_modify,_and_watch_variables /pt-BR/docs/Tools/Debugger/How_to/Set_Watch_Expressions +/pt-BR/docs/Tools/Debugger_(before_Firefox_52) /pt-BR/docs/orphaned/Tools/Debugger_(before_Firefox_52) +/pt-BR/docs/Tools/Debugger_(before_Firefox_52)/Disable_breakpoints /pt-BR/docs/orphaned/Tools/Debugger_(before_Firefox_52)/Disable_breakpoints +/pt-BR/docs/Tools/Depurador /pt-BR/docs/Tools/Debugger +/pt-BR/docs/Tools/Depurador/Set_a_logpoint /pt-BR/docs/Tools/Debugger/Set_a_logpoint +/pt-BR/docs/Tools/Depuração_Remota /pt-BR/docs/Tools/Remote_Debugging +/pt-BR/docs/Tools/Editor_de_Estilos /pt-BR/docs/Tools/Style_Editor +/pt-BR/docs/Tools/Inspetor_de_Armazenamento /pt-BR/docs/Tools/Storage_Inspector +/pt-BR/docs/Tools/Medir_uma_porcao_da_pagina /pt-BR/docs/Tools/Measure_a_portion_of_the_page +/pt-BR/docs/Tools/Modo_Design_Adaptavel /pt-BR/docs/Tools/Responsive_Design_Mode +/pt-BR/docs/Tools/Notas_de_lancamento /pt-BR/docs/conflicting/Mozilla/Firefox/Releases +/pt-BR/docs/Tools/Page_Inspector/How_to/Examinando_eventos_escuta /pt-BR/docs/Tools/Page_Inspector/How_to/Examine_event_listeners +/pt-BR/docs/Tools/Page_Inspector/How_to/Trabalho_Com_Animaçoes /pt-BR/docs/Tools/Page_Inspector/How_to/Work_with_animations +/pt-BR/docs/Tools/Simulador_Firefox_OS_1.1 /pt-BR/docs/Tools/Firefox_OS_1.1_Simulator +/pt-BR/docs/Tools/Web_Console/Opening_the_Web_Console /pt-BR/docs/Tools/Web_Console/UI_Tour +/pt-BR/docs/Tools/atuação /pt-BR/docs/Tools/Performance +/pt-BR/docs/Using_HTML5_audio_and_video /pt-BR/docs/conflicting/Learn/HTML/Multimedia_and_embedding/Video_and_audio_content /pt-BR/docs/Using_files_from_web_applications /pt-BR/docs/Web/API/File/Using_files_from_web_applications -/pt-BR/docs/Utilizando_áudio_e_vídeo_com_HTML5 /pt-BR/docs/Web/HTML/Using_HTML5_audio_and_video +/pt-BR/docs/Using_geolocation /pt-BR/docs/Web/API/Geolocation_API +/pt-BR/docs/Utilizando_áudio_e_vídeo_com_HTML5 /pt-BR/docs/conflicting/Learn/HTML/Multimedia_and_embedding/Video_and_audio_content +/pt-BR/docs/Web/API/API_Push /pt-BR/docs/Web/API/Push_API +/pt-BR/docs/Web/API/API_Push/Best_Practices /pt-BR/docs/Web/API/Push_API/Best_Practices +/pt-BR/docs/Web/API/API_Web_Audio /pt-BR/docs/Web/API/Web_Audio_API +/pt-BR/docs/Web/API/API_Web_Audio/Sintetizador_simples /pt-BR/docs/Web/API/Web_Audio_API/Simple_synth +/pt-BR/docs/Web/API/API_de_Desempenho /pt-BR/docs/Web/API/Performance_API /pt-BR/docs/Web/API/ArrayBuffer /pt-BR/docs/Web/JavaScript/Reference/Global_Objects/ArrayBuffer +/pt-BR/docs/Web/API/AudioContext/currentTime /pt-BR/docs/Web/API/BaseAudioContext/currentTime /pt-BR/docs/Web/API/BatteryManager.charging /pt-BR/docs/Web/API/BatteryManager/charging /pt-BR/docs/Web/API/BatteryManager.chargingTime /pt-BR/docs/Web/API/BatteryManager/chargingTime /pt-BR/docs/Web/API/BatteryManager.dischargingTime /pt-BR/docs/Web/API/BatteryManager/dischargingTime /pt-BR/docs/Web/API/BatteryManager.level /pt-BR/docs/Web/API/BatteryManager/level /pt-BR/docs/Web/API/BatteryManager.onchargingchange /pt-BR/docs/Web/API/BatteryManager/onchargingchange /pt-BR/docs/Web/API/BatteryManager.onchargingtimechange /pt-BR/docs/Web/API/BatteryManager/onchargingtimechange -/pt-BR/docs/Web/API/BatteryManager.ondischargingtimechange /pt-BR/docs/Web/API/BatteryManager/ondischargintimechange +/pt-BR/docs/Web/API/BatteryManager.ondischargingtimechange /pt-BR/docs/Web/API/BatteryManager/ondischargingtimechange /pt-BR/docs/Web/API/BatteryManager.onlevelchange /pt-BR/docs/Web/API/BatteryManager/onlevelchange +/pt-BR/docs/Web/API/BatteryManager/ondischargintimechange /pt-BR/docs/Web/API/BatteryManager/ondischargingtimechange /pt-BR/docs/Web/API/Console.timeEnd /pt-BR/docs/Web/API/Console/timeEnd /pt-BR/docs/Web/API/Coordinates /pt-BR/docs/Web/API/GeolocationCoordinates /pt-BR/docs/Web/API/Coordinates/altitude /pt-BR/docs/Web/API/GeolocationCoordinates/altitude +/pt-BR/docs/Web/API/CryptoKey/algorithm /pt-BR/docs/conflicting/Web/API/CryptoKey +/pt-BR/docs/Web/API/CryptoKey/extractable /pt-BR/docs/conflicting/Web/API/CryptoKey_53ae81677f4d9298717f2f245ae4da0d +/pt-BR/docs/Web/API/CryptoKey/type /pt-BR/docs/conflicting/Web/API/CryptoKey_33bd21ca8f20b4cd8c7b8c762e2fc597 +/pt-BR/docs/Web/API/CryptoKey/usages /pt-BR/docs/conflicting/Web/API/CryptoKey_f39d256ef7fbd1cf0a1f26de1e887ae7 +/pt-BR/docs/Web/API/DeviceAcceleration /pt-BR/docs/Web/API/DeviceMotionEventAcceleration +/pt-BR/docs/Web/API/DeviceRotationRate /pt-BR/docs/Web/API/DeviceMotionEventRotationRate /pt-BR/docs/Web/API/Document.querySelector /pt-BR/docs/Web/API/Document/querySelector /pt-BR/docs/Web/API/Document.querySelectorAll /pt-BR/docs/Web/API/Document/querySelectorAll +/pt-BR/docs/Web/API/Document/ElementoRegistrado /pt-BR/docs/Web/API/Document/registerElement +/pt-BR/docs/Web/API/Document/activeElement /pt-BR/docs/Web/API/DocumentOrShadowRoot/activeElement /pt-BR/docs/Web/API/Document/async /pt-BR/docs/Web/API/XMLDocument/async /pt-BR/docs/Web/API/Document/defaultView/popstate_event /pt-BR/docs/Web/API/Window/popstate_event /pt-BR/docs/Web/API/Document/defaultView/resize_event /pt-BR/docs/Web/API/Window/resize_event +/pt-BR/docs/Web/API/Document/elementFromPoint /pt-BR/docs/Web/API/DocumentOrShadowRoot/elementFromPoint +/pt-BR/docs/Web/API/Document/getSelection /pt-BR/docs/Web/API/DocumentOrShadowRoot/getSelection /pt-BR/docs/Web/API/DocumentoXML /pt-BR/docs/Web/API/XMLDocument -/pt-BR/docs/Web/API/Element.addEventListener /pt-BR/docs/Web/API/Element/addEventListener +/pt-BR/docs/Web/API/Element.addEventListener /pt-BR/docs/Web/API/EventTarget/addEventListener /pt-BR/docs/Web/API/Element.getAttribute /pt-BR/docs/Web/API/Element/getAttribute /pt-BR/docs/Web/API/Element.id /pt-BR/docs/Web/API/Element/id /pt-BR/docs/Web/API/Element.querySelector /pt-BR/docs/Web/API/Element/querySelector /pt-BR/docs/Web/API/Element.querySelectorAll /pt-BR/docs/Web/API/Element/querySelectorAll /pt-BR/docs/Web/API/Element.removeAttribute /pt-BR/docs/Web/API/Element/removeAttribute +/pt-BR/docs/Web/API/Element/accessKey /pt-BR/docs/Web/API/HTMLElement/accessKey +/pt-BR/docs/Web/API/Element/addEventListener /pt-BR/docs/Web/API/EventTarget/addEventListener +/pt-BR/docs/Web/API/Element/name /pt-BR/docs/conflicting/Web/API +/pt-BR/docs/Web/API/Event/Comparativo_entre_Event_Targets /pt-BR/docs/Web/API/Event/Comparison_of_Event_Targets +/pt-BR/docs/Web/API/Fetch_API/Uso_de_busca_Cross-global /pt-BR/docs/Web/API/Fetch_API/Cross-global_fetch_usage +/pt-BR/docs/Web/API/HTMLContentElement/Seletor /pt-BR/docs/Web/API/HTMLContentElement/select +/pt-BR/docs/Web/API/HTMLElement/blur /pt-BR/docs/Web/API/HTMLOrForeignElement/blur +/pt-BR/docs/Web/API/HTMLElement/dataset /pt-BR/docs/Web/API/HTMLOrForeignElement/dataset +/pt-BR/docs/Web/API/HTMLElement/focus /pt-BR/docs/Web/API/HTMLOrForeignElement/focus +/pt-BR/docs/Web/API/History_API/Exemplo /pt-BR/docs/Web/API/History_API/Example +/pt-BR/docs/Web/API/IndexedDB_API/Usando_IndexedDB /pt-BR/docs/Web/API/IndexedDB_API/Using_IndexedDB /pt-BR/docs/Web/API/Navigator.battery /pt-BR/docs/Web/API/Navigator/battery /pt-BR/docs/Web/API/NavigatorID.platform /pt-BR/docs/Web/API/NavigatorID/platform /pt-BR/docs/Web/API/Node.appendChild /pt-BR/docs/Web/API/Node/appendChild @@ -218,69 +585,294 @@ /pt-BR/docs/Web/API/Node.previousSibling /pt-BR/docs/Web/API/Node/previousSibling /pt-BR/docs/Web/API/Node.removeChild /pt-BR/docs/Web/API/Node/removeChild /pt-BR/docs/Web/API/Node.replaceChild /pt-BR/docs/Web/API/Node/replaceChild +/pt-BR/docs/Web/API/Node/Entendendo_o_uso_do_método_AppendChild-javascript /pt-BR/docs/orphaned/Web/API/Node/Entendendo_o_uso_do_método_AppendChild-javascript +/pt-BR/docs/Web/API/Node/innerText /pt-BR/docs/Web/API/HTMLElement/innerText /pt-BR/docs/Web/API/Position /pt-BR/docs/Web/API/GeolocationPosition /pt-BR/docs/Web/API/Position/coords /pt-BR/docs/Web/API/GeolocationPosition/coords /pt-BR/docs/Web/API/PositionError /pt-BR/docs/Web/API/GeolocationPositionError +/pt-BR/docs/Web/API/RandomSource /pt-BR/docs/conflicting/Web/API/Crypto/getRandomValues +/pt-BR/docs/Web/API/RandomSource/getRandomValues /pt-BR/docs/Web/API/Crypto/getRandomValues +/pt-BR/docs/Web/API/SVGAElement/SVGAlement.target /pt-BR/docs/Web/API/SVGAElement/target +/pt-BR/docs/Web/API/Seleção /pt-BR/docs/Web/API/Selection /pt-BR/docs/Web/API/URL.createObjectURL /pt-BR/docs/Web/API/URL/createObjectURl +/pt-BR/docs/Web/API/WebGL_API/Tutorial/Adicionando_conteudo_2D_a_um_contexto_WebGL /pt-BR/docs/Web/API/WebGL_API/Tutorial/Adding_2D_content_to_a_WebGL_context +/pt-BR/docs/Web/API/WebRTC_API/Simples_RTCDataChannel_amostra /pt-BR/docs/Web/API/WebRTC_API/Simple_RTCDataChannel_sample +/pt-BR/docs/Web/API/Web_Animations_API/Usando_a_Web_Animations_API /pt-BR/docs/Web/API/Web_Animations_API/Using_the_Web_Animations_API +/pt-BR/docs/Web/API/Web_Storage_API_pt_br /pt-BR/docs/Web/API/Web_Storage_API +/pt-BR/docs/Web/API/Web_Storage_API_pt_br/Using_the_Web_Storage_API /pt-BR/docs/Web/API/Web_Storage_API/Using_the_Web_Storage_API /pt-BR/docs/Web/API/Window.alert /pt-BR/docs/Web/API/Window/alert /pt-BR/docs/Web/API/Window.navigator /pt-BR/docs/Web/API/Window/navigator -/pt-BR/docs/Web/API/Window.onscroll /pt-BR/docs/Web/API/Window/onscroll +/pt-BR/docs/Web/API/Window.onscroll /pt-BR/docs/conflicting/Web/API/GlobalEventHandlers/onscroll /pt-BR/docs/Web/API/Window.openDialog /pt-BR/docs/Web/API/Window/openDialog -/pt-BR/docs/Web/API/WindowTimers.clearTimeout /pt-BR/docs/Web/API/WindowTimers/clearTimeout +/pt-BR/docs/Web/API/Window/URL /pt-BR/docs/conflicting/Web/API/URL +/pt-BR/docs/Web/API/Window/Window.localStorage /pt-BR/docs/Web/API/Window/localStorage +/pt-BR/docs/Web/API/Window/onscroll /pt-BR/docs/conflicting/Web/API/GlobalEventHandlers/onscroll +/pt-BR/docs/Web/API/WindowBase64 /pt-BR/docs/conflicting/Web/API/WindowOrWorkerGlobalScope +/pt-BR/docs/Web/API/WindowBase64/atob /pt-BR/docs/Web/API/WindowOrWorkerGlobalScope/atob +/pt-BR/docs/Web/API/WindowTimers /pt-BR/docs/conflicting/Web/API/WindowOrWorkerGlobalScope_e2691f7ad05781a30c5fc5bb3b3f633a +/pt-BR/docs/Web/API/WindowTimers.clearTimeout /pt-BR/docs/Web/API/WindowOrWorkerGlobalScope/clearTimeout +/pt-BR/docs/Web/API/WindowTimers/clearTimeout /pt-BR/docs/Web/API/WindowOrWorkerGlobalScope/clearTimeout +/pt-BR/docs/Web/API/XMLHttpRequest/Requisicoes_sincronas_e_assincronas /pt-BR/docs/Web/API/XMLHttpRequest/Synchronous_and_Asynchronous_Requests +/pt-BR/docs/Web/API/XMLHttpRequest/Usando_XMLHttpRequest /pt-BR/docs/Web/API/XMLHttpRequest/Using_XMLHttpRequest /pt-BR/docs/Web/API/document.getElementById /pt-BR/docs/Web/API/Document/getElementById /pt-BR/docs/Web/API/document.images /pt-BR/docs/Web/API/Document/images /pt-BR/docs/Web/API/document.scripts /pt-BR/docs/Web/API/Document/scripts /pt-BR/docs/Web/API/document.writeln /pt-BR/docs/Web/API/Document/writeln /pt-BR/docs/Web/API/event.type /pt-BR/docs/Web/API/Event/type +/pt-BR/docs/Web/API/notificacoes /pt-BR/docs/Web/API/Notification +/pt-BR/docs/Web/Accessibility/ARIA/ARIA_Techniques/Usando_o_atributo_aria-labelledby /pt-BR/docs/Web/Accessibility/ARIA/ARIA_Techniques/Using_the_aria-labelledby_attribute +/pt-BR/docs/Web/Accessibility/ARIA/ARIA_Techniques/Usando_o_atributo_aria-required /pt-BR/docs/Web/Accessibility/ARIA/ARIA_Techniques/Using_the_aria-required_attribute +/pt-BR/docs/Web/Accessibility/ARIA/ARIA_Techniques/Usando_o_slider_role /pt-BR/docs/Web/Accessibility/ARIA/ARIA_Techniques/Using_the_slider_role +/pt-BR/docs/Web/Accessibility/ARIA/ARIA_Techniques/Utilizando_o_alert_role /pt-BR/docs/Web/Accessibility/ARIA/ARIA_Techniques/Using_the_alert_role +/pt-BR/docs/Web/Accessibility/ARIA/Guia_para_implementar_o_leitor_de_tela_ARIA /pt-BR/docs/Web/Accessibility/ARIA/ARIA_Screen_Reader_Implementors_Guide +/pt-BR/docs/Web/Accessibility/ARIA/forms/Dicas_básicas_de_form /pt-BR/docs/Web/Accessibility/ARIA/forms/Basic_form_hints +/pt-BR/docs/Web/Accessibility/ARIA/widgets/Visão_geral /pt-BR/docs/Web/Accessibility/ARIA/widgets/overview +/pt-BR/docs/Web/Acessibilidade /pt-BR/docs/Web/Accessibility +/pt-BR/docs/Web/Acessibilidade/Accessibilidade_para_plataforma_movel /pt-BR/docs/Web/Accessibility/Mobile_accessibility_checklist +/pt-BR/docs/Web/Acessibilidade/An_overview_of_accessible_web_applications_and_widgets /pt-BR/docs/Web/Accessibility/An_overview_of_accessible_web_applications_and_widgets +/pt-BR/docs/Web/Acessibilidade/Desenvolvimento_Web /pt-BR/docs/conflicting/Web/Accessibility +/pt-BR/docs/Web/Acessibilidade/Entendendo_WCAG /pt-BR/docs/Web/Accessibility/Understanding_WCAG +/pt-BR/docs/Web/Acessibilidade/Entendendo_WCAG/Keyboard /pt-BR/docs/Web/Accessibility/Understanding_WCAG/Keyboard +/pt-BR/docs/Web/Acessibilidade/Problemas_com_JAWS_no_Firefox /pt-BR/docs/orphaned/Web/Accessibility/JAWS_Issues_with_Firefox /pt-BR/docs/Web/Apps/Progressive /pt-BR/docs/Web/Progressive_web_apps -/pt-BR/docs/Web/Apps/Progressive/Introdução /pt-BR/docs/Web/Progressive_web_apps/Introdução +/pt-BR/docs/Web/Apps/Progressive/Introdução /pt-BR/docs/Web/Progressive_web_apps/Introduction +/pt-BR/docs/Web/CSS/-moz-box-ordinal-group /pt-BR/docs/Web/CSS/box-ordinal-group +/pt-BR/docs/Web/CSS/-moz-cell /pt-BR/docs/conflicting/Web/CSS/cursor +/pt-BR/docs/Web/CSS/CSS_Animations/Usando_animações_CSS /pt-BR/docs/Web/CSS/CSS_Animations/Using_CSS_animations +/pt-BR/docs/Web/CSS/CSS_Background_and_Borders /pt-BR/docs/Web/CSS/CSS_Backgrounds_and_Borders +/pt-BR/docs/Web/CSS/CSS_Background_and_Borders/Using_CSS_multiple_backgrounds /pt-BR/docs/Web/CSS/CSS_Backgrounds_and_Borders/Using_multiple_backgrounds +/pt-BR/docs/Web/CSS/CSS_Box_Model/margin_collapsing /pt-BR/docs/Web/CSS/CSS_Box_Model/Mastering_margin_collapsing +/pt-BR/docs/Web/CSS/CSS_Colors/seletor_de_cores /pt-BR/docs/Web/CSS/CSS_Colors/Color_picker_tool +/pt-BR/docs/Web/CSS/CSS_Flexible_Box_Layout/Conceitos_Basicos_do_Flexbox /pt-BR/docs/Web/CSS/CSS_Flexible_Box_Layout/Basic_Concepts_of_Flexbox +/pt-BR/docs/Web/CSS/CSS_Images/Implementando_sprites_de_imagens_em_CSS /pt-BR/docs/Web/CSS/CSS_Images/Implementing_image_sprites_in_CSS +/pt-BR/docs/Web/CSS/CSS_Reference /pt-BR/docs/Web/CSS/Reference /pt-BR/docs/Web/CSS/CSS_Reference/mix-blend-mode /pt-BR/docs/Web/CSS/mix-blend-mode +/pt-BR/docs/Web/CSS/CSS_Tipos /pt-BR/docs/Web/CSS/CSS_Types +/pt-BR/docs/Web/CSS/Comentário /pt-BR/docs/Web/CSS/Comments +/pt-BR/docs/Web/CSS/Elemento_substituido /pt-BR/docs/Web/CSS/Replaced_element /pt-BR/docs/Web/CSS/General_sibling_selectors /pt-BR/docs/Web/CSS/General_sibling_combinator +/pt-BR/docs/Web/CSS/Getting_Started /pt-BR/docs/conflicting/Learn/CSS/First_steps +/pt-BR/docs/Web/CSS/Getting_Started/Cascading_and_inheritance /pt-BR/docs/conflicting/Learn/CSS/Building_blocks/Cascade_and_inheritance +/pt-BR/docs/Web/CSS/Getting_Started/Como_CSS_funciona /pt-BR/docs/conflicting/Learn/CSS/First_steps/How_CSS_works +/pt-BR/docs/Web/CSS/Getting_Started/JavaScript /pt-BR/docs/Learn/JavaScript/Client-side_web_APIs/Manipulating_documents +/pt-BR/docs/Web/CSS/Getting_Started/Lists /pt-BR/docs/Learn/CSS/Styling_text/Styling_lists +/pt-BR/docs/Web/CSS/Getting_Started/Oque_é_CSS /pt-BR/docs/conflicting/Learn/CSS/First_steps/How_CSS_works_199dae2aa1447fa94457a213c989744d +/pt-BR/docs/Web/CSS/Getting_Started/Porque_usar_CSS /pt-BR/docs/conflicting/Learn/CSS/First_steps/How_CSS_works_61240ddc35a4ddd533ea33cc8ccf1c87 +/pt-BR/docs/Web/CSS/Getting_Started/Seletores /pt-BR/docs/conflicting/Learn/CSS/Building_blocks/Selectors +/pt-BR/docs/Web/CSS/Modelo_Visual /pt-BR/docs/Web/CSS/Visual_formatting_model +/pt-BR/docs/Web/CSS/Modelo_layout /pt-BR/docs/Web/CSS/Layout_mode +/pt-BR/docs/Web/CSS/Privacidade_e_o_seletor_:visited /pt-BR/docs/Web/CSS/Privacy_and_the_:visited_selector +/pt-BR/docs/Web/CSS/Pseudo-elementos /pt-BR/docs/Web/CSS/Pseudo-elements +/pt-BR/docs/Web/CSS/Seletor_de_atributos /pt-BR/docs/Web/CSS/Attribute_selectors +/pt-BR/docs/Web/CSS/Seletor_universal /pt-BR/docs/Web/CSS/Universal_selectors +/pt-BR/docs/Web/CSS/Seletores_CSS /pt-BR/docs/Web/CSS/CSS_Selectors +/pt-BR/docs/Web/CSS/Sintexe_valor /pt-BR/docs/Web/CSS/Value_definition_syntax +/pt-BR/docs/Web/CSS/Tools/Border-image_generator /pt-BR/docs/Web/CSS/CSS_Background_and_Borders/Border-image_generator +/pt-BR/docs/Web/CSS/Tools/Border-radius_generator /pt-BR/docs/Web/CSS/CSS_Background_and_Borders/Border-radius_generator /pt-BR/docs/Web/CSS/Using_CSS_variables /pt-BR/docs/Web/CSS/Using_CSS_custom_properties +/pt-BR/docs/Web/CSS/Valor_atual /pt-BR/docs/Web/CSS/actual_value +/pt-BR/docs/Web/CSS/Valor_resolvido /pt-BR/docs/Web/CSS/resolved_value +/pt-BR/docs/Web/CSS/Valor_usado /pt-BR/docs/Web/CSS/used_value /pt-BR/docs/Web/CSS/attr /pt-BR/docs/Web/CSS/attr() +/pt-BR/docs/Web/CSS/box_model /pt-BR/docs/Web/CSS/CSS_Box_Model/Introduction_to_the_CSS_box_model /pt-BR/docs/Web/CSS/calc /pt-BR/docs/Web/CSS/calc() /pt-BR/docs/Web/CSS/element /pt-BR/docs/Web/CSS/element() /pt-BR/docs/Web/CSS/env /pt-BR/docs/Web/CSS/env() /pt-BR/docs/Web/CSS/filter-function/grayscale /pt-BR/docs/Web/CSS/filter-function/grayscale() /pt-BR/docs/Web/CSS/filter-function/opacity /pt-BR/docs/Web/CSS/filter-function/opacity() /pt-BR/docs/Web/CSS/filter-function/sepia /pt-BR/docs/Web/CSS/filter-function/sepia() +/pt-BR/docs/Web/CSS/hifens /pt-BR/docs/Web/CSS/hyphens /pt-BR/docs/Web/CSS/image-set /pt-BR/docs/Web/CSS/image-set() -/pt-BR/docs/Web/CSS/máscara /pt-BR/docs/mask +/pt-BR/docs/Web/CSS/imagem /pt-BR/docs/Web/CSS/image +/pt-BR/docs/Web/CSS/máscara /pt-BR/docs/Web/CSS/mask /pt-BR/docs/Web/CSS/radial-gradient /pt-BR/docs/Web/CSS/radial-gradient() /pt-BR/docs/Web/CSS/repeating-linear-gradient /pt-BR/docs/Web/CSS/repeating-linear-gradient() +/pt-BR/docs/Web/CSS/sintaxe /pt-BR/docs/Web/CSS/Syntax /pt-BR/docs/Web/CSS/transform-function/matrix /pt-BR/docs/Web/CSS/transform-function/matrix() /pt-BR/docs/Web/CSS/transform-function/perspective /pt-BR/docs/Web/CSS/transform-function/perspective() /pt-BR/docs/Web/CSS/transform-function/rotate /pt-BR/docs/Web/CSS/transform-function/rotate() /pt-BR/docs/Web/CSS/transform-function/rotate3d /pt-BR/docs/Web/CSS/transform-function/rotate3d() /pt-BR/docs/Web/CSS/transform-function/scale /pt-BR/docs/Web/CSS/transform-function/scale() /pt-BR/docs/Web/CSS/transform-function/translate /pt-BR/docs/Web/CSS/transform-function/translate() +/pt-BR/docs/Web/CSS/valor_computado /pt-BR/docs/Web/CSS/computed_value +/pt-BR/docs/Web/CSS/valor_espeficifco /pt-BR/docs/Web/CSS/specified_value +/pt-BR/docs/Web/CSS/valor_inicial /pt-BR/docs/Web/CSS/initial_value /pt-BR/docs/Web/CSS/var /pt-BR/docs/Web/CSS/var() +/pt-BR/docs/Web/CSS/word-wrap /pt-BR/docs/Web/CSS/overflow-wrap +/pt-BR/docs/Web/Events/DOMContentLoaded /pt-BR/docs/Web/API/Window/DOMContentLoaded_event +/pt-BR/docs/Web/Events/abort /pt-BR/docs/Web/API/HTMLMediaElement/abort_event +/pt-BR/docs/Web/Events/beforeunload /pt-BR/docs/Web/API/Window/beforeunload_event +/pt-BR/docs/Web/Events/blur /pt-BR/docs/Web/API/Element/blur_event /pt-BR/docs/Web/Events/click /pt-BR/docs/Web/API/Element/click_event +/pt-BR/docs/Web/Events/focus /pt-BR/docs/Web/API/Element/focus_event +/pt-BR/docs/Web/Events/focusin /pt-BR/docs/Web/API/Element/focusin_event +/pt-BR/docs/Web/Events/focusout /pt-BR/docs/Web/API/Element/focusout_event +/pt-BR/docs/Web/Events/input /pt-BR/docs/Web/API/HTMLElement/input_event /pt-BR/docs/Web/Events/keydown /pt-BR/docs/Web/API/Document/keydown_event /pt-BR/docs/Web/Events/keypress /pt-BR/docs/Web/API/Document/keypress_event /pt-BR/docs/Web/Events/keyup /pt-BR/docs/Web/API/Document/keyup_event +/pt-BR/docs/Web/Events/load /pt-BR/docs/Web/API/Window/load_event /pt-BR/docs/Web/Events/mousedown /pt-BR/docs/Web/API/Element/mousedown_event /pt-BR/docs/Web/Events/mouseenter /pt-BR/docs/Web/API/Element/mouseenter_event /pt-BR/docs/Web/Events/mouseover /pt-BR/docs/Web/API/Element/mouseover_event /pt-BR/docs/Web/Events/popstate /pt-BR/docs/Web/API/Window/popstate_event +/pt-BR/docs/Web/Events/readystatechange /pt-BR/docs/Web/API/Document/readystatechange_event /pt-BR/docs/Web/Events/resize /pt-BR/docs/Web/API/Window/resize_event /pt-BR/docs/Web/Events/touchstart /pt-BR/docs/Web/API/Element/touchstart_event -/pt-BR/docs/Web/HTML/Elementos_nlock-level /pt-BR/docs/Web/HTML/Elementos_block-level +/pt-BR/docs/Web/Guide/CSS/CSS_Media_queries /pt-BR/docs/Web/CSS/Media_Queries/Using_media_queries +/pt-BR/docs/Web/Guide/CSS/CSS_media_queries_(consultas_de_mídia_em_CSS) /pt-BR/docs/orphaned/Web/Guide/CSS/CSS_media_queries_(consultas_de_mídia_em_CSS) +/pt-BR/docs/Web/Guide/CSS/Scaling_background_images /pt-BR/docs/Web/CSS/CSS_Backgrounds_and_Borders/Resizing_background_images +/pt-BR/docs/Web/Guide/CSS/Understanding_z_index /pt-BR/docs/Web/CSS/CSS_Positioning/Understanding_z_index +/pt-BR/docs/Web/Guide/Events/Touch_events /pt-BR/docs/Web/API/Touch_events +/pt-BR/docs/Web/Guide/Events/criando_e_disparando_eventos /pt-BR/docs/Web/Guide/Events/Creating_and_triggering_events +/pt-BR/docs/Web/Guide/Gráficos /pt-BR/docs/Web/Guide/Graphics +/pt-BR/docs/Web/Guide/HTML/Canvas_tutorial /pt-BR/docs/Web/API/Canvas_API/Tutorial +/pt-BR/docs/Web/Guide/HTML/Canvas_tutorial/Advanced_animations /pt-BR/docs/Web/API/Canvas_API/Tutorial/Advanced_animations +/pt-BR/docs/Web/Guide/HTML/Canvas_tutorial/Applying_styles_and_colors /pt-BR/docs/Web/API/Canvas_API/Tutorial/Applying_styles_and_colors +/pt-BR/docs/Web/Guide/HTML/Canvas_tutorial/Basic_animations /pt-BR/docs/Web/API/Canvas_API/Tutorial/Basic_animations +/pt-BR/docs/Web/Guide/HTML/Canvas_tutorial/Compositing /pt-BR/docs/Web/API/Canvas_API/Tutorial/Compositing +/pt-BR/docs/Web/Guide/HTML/Canvas_tutorial/Compositing/Exemplo /pt-BR/docs/Web/API/Canvas_API/Tutorial/Compositing/Example +/pt-BR/docs/Web/Guide/HTML/Canvas_tutorial/Conclusão /pt-BR/docs/Web/API/Canvas_API/Tutorial/Finale +/pt-BR/docs/Web/Guide/HTML/Canvas_tutorial/Drawing_shapes /pt-BR/docs/Web/API/Canvas_API/Tutorial/Drawing_shapes +/pt-BR/docs/Web/Guide/HTML/Canvas_tutorial/Drawing_text /pt-BR/docs/Web/API/Canvas_API/Tutorial/Drawing_text +/pt-BR/docs/Web/Guide/HTML/Canvas_tutorial/Otimizando_Canvas /pt-BR/docs/Web/API/Canvas_API/Tutorial/Optimizing_canvas +/pt-BR/docs/Web/Guide/HTML/Canvas_tutorial/Using_images /pt-BR/docs/Web/API/Canvas_API/Tutorial/Using_images +/pt-BR/docs/Web/Guide/HTML/Canvas_tutorial/Utilizacao_basica /pt-BR/docs/Web/API/Canvas_API/Tutorial/Basic_usage +/pt-BR/docs/Web/Guide/HTML/Categorias_de_conteudo /pt-BR/docs/Web/Guide/HTML/Content_categories +/pt-BR/docs/Web/Guide/HTML/Content_Editable /pt-BR/docs/Web/Guide/HTML/Editable_content +/pt-BR/docs/Web/Guide/HTML/Forms /pt-BR/docs/Learn/Forms +/pt-BR/docs/Web/Guide/HTML/Forms/Form_validation /pt-BR/docs/Learn/Forms/Form_validation +/pt-BR/docs/Web/Guide/HTML/Forms/How_to_build_custom_form_widgets /pt-BR/docs/Learn/Forms/How_to_build_custom_form_controls +/pt-BR/docs/Web/Guide/HTML/Forms/How_to_structure_an_HTML_form /pt-BR/docs/Learn/Forms/How_to_structure_a_web_form +/pt-BR/docs/Web/Guide/HTML/Forms/Meu_primeiro_formulario_HTML /pt-BR/docs/Learn/Forms/Your_first_form +/pt-BR/docs/Web/Guide/HTML/Forms/Os_widgets_nativos /pt-BR/docs/Learn/Forms/Basic_native_form_controls +/pt-BR/docs/Web/Guide/HTML/Forms/Sending_and_retrieving_form_data /pt-BR/docs/Learn/Forms/Sending_and_retrieving_form_data +/pt-BR/docs/Web/Guide/HTML/Using_data_attributes /pt-BR/docs/Learn/HTML/Howto/Use_data_attributes +/pt-BR/docs/Web/Guide/Introducao_ao_Desenvolvimento_Web /pt-BR/docs/Web/Guide/Introduction_to_Web_development +/pt-BR/docs/Web/HTML/CORS_imagens_habilitadas /pt-BR/docs/Web/HTML/CORS_enabled_image +/pt-BR/docs/Web/HTML/Canvas /pt-BR/docs/Web/API/Canvas_API +/pt-BR/docs/Web/HTML/Canvas/A_basic_ray-caster /pt-BR/docs/Web/API/Canvas_API/A_basic_ray-caster +/pt-BR/docs/Web/HTML/Controlando_verificacao_ortografica_em_formularios_HTML /pt-BR/docs/Web/HTML/Global_attributes/spellcheck +/pt-BR/docs/Web/HTML/Dicas_para_criar_páginas_HTML_de_carregamento_rápido /pt-BR/docs/Learn/HTML/Howto/Author_fast-loading_HTML_pages +/pt-BR/docs/Web/HTML/Element/Input/data /pt-BR/docs/Web/HTML/Element/input/date +/pt-BR/docs/Web/HTML/Element/command /pt-BR/docs/orphaned/Web/HTML/Element/command +/pt-BR/docs/Web/HTML/Element/conteúdo /pt-BR/docs/Web/HTML/Element/content +/pt-BR/docs/Web/HTML/Element/figura /pt-BR/docs/Web/HTML/Element/figure +/pt-BR/docs/Web/HTML/Elementos_block-level /pt-BR/docs/Web/HTML/Block-level_elements +/pt-BR/docs/Web/HTML/Elementos_nlock-level /pt-BR/docs/Web/HTML/Block-level_elements +/pt-BR/docs/Web/HTML/HTML5 /pt-BR/docs/Web/Guide/HTML/HTML5 /pt-BR/docs/Web/HTML/HTML5/HTML5_element_list /pt-BR/docs/Web/HTML/Element +/pt-BR/docs/Web/HTML/HTML5/Introduction_to_HTML5 /pt-BR/docs/Web/Guide/HTML/HTML5/Introduction_to_HTML5 +/pt-BR/docs/Web/HTML/Inline_elemente /pt-BR/docs/Web/HTML/Inline_elements +/pt-BR/docs/Web/HTML/Optimizing_your_pages_for_speculative_parsing /pt-BR/docs/Glossary/speculative_parsing +/pt-BR/docs/Web/HTML/ReferenciaHTML /pt-BR/docs/Web/HTML/Reference +/pt-BR/docs/Web/HTML/Using_HTML5_audio_and_video /pt-BR/docs/conflicting/Learn/HTML/Multimedia_and_embedding/Video_and_audio_content +/pt-BR/docs/Web/HTML/favicon /pt-BR/docs/orphaned/Web/HTML/favicon +/pt-BR/docs/Web/HTML/formatos_midia_suportados /pt-BR/docs/Web/Media/Formats +/pt-BR/docs/Web/HTML/microformatos /pt-BR/docs/Web/HTML/microformats +/pt-BR/docs/Web/HTTP/Basico_sobre_HTTP /pt-BR/docs/Web/HTTP/Basics_of_HTTP +/pt-BR/docs/Web/HTTP/Basico_sobre_HTTP/Identifying_resources_on_the_Web /pt-BR/docs/Web/HTTP/Basics_of_HTTP/Identifying_resources_on_the_Web +/pt-BR/docs/Web/HTTP/Basico_sobre_HTTP/MIME_types /pt-BR/docs/Web/HTTP/Basics_of_HTTP/MIME_types +/pt-BR/docs/Web/HTTP/Basico_sobre_HTTP/MIME_types/Complete_list_of_MIME_types /pt-BR/docs/Web/HTTP/Basics_of_HTTP/MIME_types/Common_types /pt-BR/docs/Web/HTTP/Cabecalhos_HTTP /pt-BR/docs/Web/HTTP/Headers +/pt-BR/docs/Web/HTTP/Compressão /pt-BR/docs/Web/HTTP/Compression +/pt-BR/docs/Web/HTTP/Controle_Acesso_CORS /pt-BR/docs/Web/HTTP/CORS +/pt-BR/docs/Web/HTTP/Gerenciamento_de_Conexão_em_HTTP_1.x /pt-BR/docs/Web/HTTP/Connection_management_in_HTTP_1.x +/pt-BR/docs/Web/HTTP/HTTP /pt-BR/docs/Web/HTTP/Caching +/pt-BR/docs/Web/HTTP/Headers/Conexão /pt-BR/docs/Web/HTTP/Headers/Connection /pt-BR/docs/Web/HTTP/Headers/Expira /pt-BR/docs/Web/HTTP/Headers/Expires +/pt-BR/docs/Web/HTTP/Headers/Localização /pt-BR/docs/Web/HTTP/Headers/Location +/pt-BR/docs/Web/HTTP/Mensagens /pt-BR/docs/Web/HTTP/Messages +/pt-BR/docs/Web/HTTP/Redirecionamento /pt-BR/docs/Web/HTTP/Redirections +/pt-BR/docs/Web/HTTP/Server-Side_Access_Control /pt-BR/docs/conflicting/Web/HTTP/CORS +/pt-BR/docs/Web/JavaScript/Enumerabilidade_e_posse_de_propriedades /pt-BR/docs/Web/JavaScript/Enumerability_and_ownership_of_properties /pt-BR/docs/Web/JavaScript/Guide/About /pt-BR/docs/Web/JavaScript/Guide/Introduction -/pt-BR/docs/Web/JavaScript/Guide/Inheritance_Revisited /pt-BR/docs/Web/JavaScript/Guide/Inheritance_and_the_prototype_chain +/pt-BR/docs/Web/JavaScript/Guide/Closures /pt-BR/docs/Web/JavaScript/Closures +/pt-BR/docs/Web/JavaScript/Guide/Coleções_chaveadas /pt-BR/docs/orphaned/Web/JavaScript/Guide/Coleções_chaveadas +/pt-BR/docs/Web/JavaScript/Guide/Declarações /pt-BR/docs/Web/JavaScript/Guide/Control_flow_and_error_handling +/pt-BR/docs/Web/JavaScript/Guide/Detalhes_do_Modelo_do_Objeto /pt-BR/docs/Web/JavaScript/Guide/Details_of_the_Object_Model +/pt-BR/docs/Web/JavaScript/Guide/Formatando_texto /pt-BR/docs/Web/JavaScript/Guide/Text_formatting +/pt-BR/docs/Web/JavaScript/Guide/Funções /pt-BR/docs/Web/JavaScript/Guide/Functions +/pt-BR/docs/Web/JavaScript/Guide/Igualdade /pt-BR/docs/conflicting/Web/JavaScript/Equality_comparisons_and_sameness +/pt-BR/docs/Web/JavaScript/Guide/Inheritance_Revisited /pt-BR/docs/Web/JavaScript/Inheritance_and_the_prototype_chain +/pt-BR/docs/Web/JavaScript/Guide/Inheritance_and_the_prototype_chain /pt-BR/docs/Web/JavaScript/Inheritance_and_the_prototype_chain +/pt-BR/docs/Web/JavaScript/Guide/Iteratores_e_geradores /pt-BR/docs/Web/JavaScript/Guide/Iterators_and_Generators /pt-BR/docs/Web/JavaScript/Guide/JavaScript_Visão_Geral /pt-BR/docs/Web/JavaScript/Guide/Introduction +/pt-BR/docs/Web/JavaScript/Guide/Lacos_e_iteracoes /pt-BR/docs/Web/JavaScript/Guide/Loops_and_iteration +/pt-BR/docs/Web/JavaScript/Guide/Módulos /pt-BR/docs/Web/JavaScript/Guide/Modules +/pt-BR/docs/Web/JavaScript/Guide/Numeros_e_datas /pt-BR/docs/Web/JavaScript/Guide/Numbers_and_dates +/pt-BR/docs/Web/JavaScript/Guide/Sintaxe_e_tipos /pt-BR/docs/orphaned/Web/JavaScript/Guide/Sintaxe_e_tipos +/pt-BR/docs/Web/JavaScript/Guide/Trabalhando_com_Objetos /pt-BR/docs/Web/JavaScript/Guide/Working_with_Objects +/pt-BR/docs/Web/JavaScript/Guide/Usando_promises /pt-BR/docs/Web/JavaScript/Guide/Using_promises +/pt-BR/docs/Web/JavaScript/Guide/Values,_variables,_and_literals /pt-BR/docs/Web/JavaScript/Guide/Grammar_and_types +/pt-BR/docs/Web/JavaScript/Introduction_to_Object-Oriented_JavaScript /pt-BR/docs/conflicting/Learn/JavaScript/Objects /pt-BR/docs/Web/JavaScript/Outras_ferramentas_JavaScript /pt-BR/docs/Tools +/pt-BR/docs/Web/JavaScript/Reference/Errors/Fata_parênteses_após_lista_argumento /pt-BR/docs/Web/JavaScript/Reference/Errors/Missing_parenthesis_after_argument_list +/pt-BR/docs/Web/JavaScript/Reference/Errors/Fecha_chaves_esquecida_apos_lista_propriedades /pt-BR/docs/Web/JavaScript/Reference/Errors/Missing_curly_after_property_list +/pt-BR/docs/Web/JavaScript/Reference/Errors/NãoNomeado_funcão_declaração /pt-BR/docs/Web/JavaScript/Reference/Errors/Unnamed_function_statement +/pt-BR/docs/Web/JavaScript/Reference/Errors/Não_definido /pt-BR/docs/Web/JavaScript/Reference/Errors/Not_defined +/pt-BR/docs/Web/JavaScript/Reference/Functions/Definicoes_metodos /pt-BR/docs/Web/JavaScript/Reference/Functions/Method_definitions +/pt-BR/docs/Web/JavaScript/Reference/Functions/Parametros_Predefinidos /pt-BR/docs/Web/JavaScript/Reference/Functions/Default_parameters +/pt-BR/docs/Web/JavaScript/Reference/Global_Objects/Array/contains /pt-BR/docs/Web/JavaScript/Reference/Global_Objects/Array/includes +/pt-BR/docs/Web/JavaScript/Reference/Global_Objects/Array/filtro /pt-BR/docs/Web/JavaScript/Reference/Global_Objects/Array/filter +/pt-BR/docs/Web/JavaScript/Reference/Global_Objects/Array/prototype /pt-BR/docs/orphaned/Web/JavaScript/Reference/Global_Objects/Array/prototype +/pt-BR/docs/Web/JavaScript/Reference/Global_Objects/BigInt/prototype /pt-BR/docs/orphaned/Web/JavaScript/Reference/Global_Objects/BigInt/prototype +/pt-BR/docs/Web/JavaScript/Reference/Global_Objects/Boolean/prototype /pt-BR/docs/conflicting/Web/JavaScript/Reference/Global_Objects/Boolean +/pt-BR/docs/Web/JavaScript/Reference/Global_Objects/Function/prototype /pt-BR/docs/conflicting/Web/JavaScript/Reference/Global_Objects/Function +/pt-BR/docs/Web/JavaScript/Reference/Global_Objects/Intl/NumberFormat/prototype /pt-BR/docs/conflicting/Web/JavaScript/Reference/Global_Objects/Intl/NumberFormat +/pt-BR/docs/Web/JavaScript/Reference/Global_Objects/Map/prototype /pt-BR/docs/conflicting/Web/JavaScript/Reference/Global_Objects/Map +/pt-BR/docs/Web/JavaScript/Reference/Global_Objects/Number/prototype /pt-BR/docs/conflicting/Web/JavaScript/Reference/Global_Objects/Number /pt-BR/docs/Web/JavaScript/Reference/Global_Objects/NumberFormat /pt-BR/docs/Web/JavaScript/Reference/Global_Objects/Intl/NumberFormat -/pt-BR/docs/Web/JavaScript/Reference/Global_Objects/NumberFormat/prototype /pt-BR/docs/Web/JavaScript/Reference/Global_Objects/Intl/NumberFormat/prototype +/pt-BR/docs/Web/JavaScript/Reference/Global_Objects/NumberFormat/prototype /pt-BR/docs/conflicting/Web/JavaScript/Reference/Global_Objects/Intl/NumberFormat +/pt-BR/docs/Web/JavaScript/Reference/Global_Objects/Object/prototype /pt-BR/docs/conflicting/Web/JavaScript/Reference/Global_Objects/Object +/pt-BR/docs/Web/JavaScript/Reference/Global_Objects/Promise/prototype /pt-BR/docs/conflicting/Web/JavaScript/Reference/Global_Objects/Promise /pt-BR/docs/Web/JavaScript/Reference/Global_Objects/RelativeTimeFormat /pt-BR/docs/Web/JavaScript/Reference/Global_Objects/Intl/RelativeTimeFormat +/pt-BR/docs/Web/JavaScript/Reference/Global_Objects/Set/prototype /pt-BR/docs/conflicting/Web/JavaScript/Reference/Global_Objects/Set +/pt-BR/docs/Web/JavaScript/Reference/Global_Objects/String/prototype /pt-BR/docs/conflicting/Web/JavaScript/Reference/Global_Objects/String +/pt-BR/docs/Web/JavaScript/Reference/Global_Objects/WeakMap/prototype /pt-BR/docs/conflicting/Web/JavaScript/Reference/Global_Objects/WeakMap /pt-BR/docs/Web/JavaScript/Reference/Indice_metodos_js /pt-BR/docs/Web/JavaScript/Reference +/pt-BR/docs/Web/JavaScript/Reference/Operators/Arithmetic_Operators /pt-BR/docs/conflicting/Web/JavaScript/Reference/Operators +/pt-BR/docs/Web/JavaScript/Reference/Operators/Atribuicao_via_desestruturacao /pt-BR/docs/Web/JavaScript/Reference/Operators/Destructuring_assignment +/pt-BR/docs/Web/JavaScript/Reference/Operators/Bitwise_Operators /pt-BR/docs/conflicting/Web/JavaScript/Reference/Operators_7c8eb9475d97a4a734c5991857698560 +/pt-BR/docs/Web/JavaScript/Reference/Operators/Inicializador_Objeto /pt-BR/docs/Web/JavaScript/Reference/Operators/Object_initializer +/pt-BR/docs/Web/JavaScript/Reference/Operators/Operador_Condicional /pt-BR/docs/Web/JavaScript/Reference/Operators/Conditional_Operator +/pt-BR/docs/Web/JavaScript/Reference/Operators/Operador_Virgula /pt-BR/docs/Web/JavaScript/Reference/Operators/Comma_Operator +/pt-BR/docs/Web/JavaScript/Reference/Operators/Operadores_Logicos /pt-BR/docs/conflicting/Web/JavaScript/Reference/Operators_8fa8b34b0547a749514637a15d386886 +/pt-BR/docs/Web/JavaScript/Reference/Operators/Operadores_de_comparação /pt-BR/docs/conflicting/Web/JavaScript/Reference/Operators_0d2e4b8154642b5a9dbd76a2a48cf96a +/pt-BR/docs/Web/JavaScript/Reference/Operators/Spread_operator /pt-BR/docs/conflicting/Web/JavaScript/Reference/Operators/Spread_syntax +/pt-BR/docs/Web/JavaScript/Reference/Operators/operador_de_coalescencia_nula /pt-BR/docs/Web/JavaScript/Reference/Operators/Nullish_coalescing_operator /pt-BR/docs/Web/JavaScript/Reference/Properties_Index /pt-BR/docs/Web/JavaScript/Reference +/pt-BR/docs/Web/JavaScript/Reference/Statements/default /pt-BR/docs/conflicting/Web/JavaScript/Reference/Statements/switch +/pt-BR/docs/Web/JavaScript/Reference/Statements/funcoes_assincronas /pt-BR/docs/Web/JavaScript/Reference/Statements/async_function +/pt-BR/docs/Web/JavaScript/Reference/template_strings /pt-BR/docs/Web/JavaScript/Reference/Template_literals +/pt-BR/docs/Web/MathML/Exemplos /pt-BR/docs/Web/MathML/Examples +/pt-BR/docs/Web/Performance/caminho_de_renderizacao_critico /pt-BR/docs/Web/Performance/Critical_rendering_path +/pt-BR/docs/Web/Progressive_web_apps/Introdução /pt-BR/docs/Web/Progressive_web_apps/Introduction /pt-BR/docs/Web/SVG/Element/texto /pt-BR/docs/Web/SVG/Element/text +/pt-BR/docs/Web/SVG/Intensivo_de_Namespaces /pt-BR/docs/Web/SVG/Namespaces_Crash_Course +/pt-BR/docs/Web/Security/Básico_de_Segurança_da_Informação /pt-BR/docs/orphaned/Web/Security/Information_Security_Basics +/pt-BR/docs/Web/Tutoriais /pt-BR/docs/Web/Tutorials /pt-BR/docs/Web/WebGL /pt-BR/docs/Web/API/WebGL_API +/pt-BR/docs/Web/Web_Components/Usando_custom_elements /pt-BR/docs/Web/Web_Components/Using_custom_elements +/pt-BR/docs/WebAPI /pt-BR/docs/conflicting/Web/API_dd04ca1265cb79b990b8120e5f5070d3 +/pt-BR/docs/WebAPI/Battery_Status /pt-BR/docs/Web/API/Battery_Status_API +/pt-BR/docs/WebAPI/Network_Information /pt-BR/docs/Web/API/Network_Information_API +/pt-BR/docs/WebAssembly/Entendendo_o_formato_textual_do_WebAssembly /pt-BR/docs/WebAssembly/Understanding_the_text_format +/pt-BR/docs/WebAssembly/Usando_a_API_JavaScript_do_WebAssembly /pt-BR/docs/WebAssembly/Using_the_JavaScript_API /pt-BR/docs/WebGL /pt-BR/docs/Web/API/WebGL_API +/pt-BR/docs/WebRTC /pt-BR/docs/conflicting/Web/API/WebRTC_API /pt-BR/docs/WebRTC/navigator.getUserMedia /pt-BR/docs/Web/API/Navigator/getUserMedia +/pt-BR/docs/WebSockets /pt-BR/docs/Web/API/WebSockets_API +/pt-BR/docs/WebSockets/Escrevendo_aplicacoes_cliente_WebSocket /pt-BR/docs/Web/API/WebSockets_API/Writing_WebSocket_client_applications +/pt-BR/docs/WebSockets/Writing_WebSocket_server /pt-BR/docs/Web/API/WebSockets_API/Writing_WebSocket_server +/pt-BR/docs/WebSockets/Writing_WebSocket_servers /pt-BR/docs/Web/API/WebSockets_API/Writing_WebSocket_servers +/pt-BR/docs/Web_Development/Mobile /pt-BR/docs/conflicting/Web/Guide/Mobile +/pt-BR/docs/Web_Development/Mobile/Design_responsivo /pt-BR/docs/conflicting/Web/Progressive_web_apps +/pt-BR/docs/Web_Development/Mobile/Mobile-friendliness /pt-BR/docs/Web/Guide/Mobile/Mobile-friendliness +/pt-BR/docs/Web_Development/Mobile/Sites_separados /pt-BR/docs/Web/Guide/Mobile/Separate_sites +/pt-BR/docs/XHTML /pt-BR/docs/Glossary/XHTML /pt-BR/docs/c_temp /pt-BR/docs/Web/API/Console +/pt-BR/docs/desenvolvimento_web /pt-BR/docs/conflicting/Web/Guide +/pt-BR/docs/dez_anos_de_MDN /pt-BR/docs/MDN/At_ten /pt-BR/docs/en /en-US/ +/pt-BR/docs/mask /pt-BR/docs/Web/CSS/mask diff --git a/files/pt-br/_wikihistory.json b/files/pt-br/_wikihistory.json index f76a3f57e0..7dd7857632 100644 --- a/files/pt-br/_wikihistory.json +++ b/files/pt-br/_wikihistory.json @@ -1,17371 +1,17371 @@ { - "Aprender": { - "modified": "2020-08-17T01:24:04.475Z", + "Games": { + "modified": "2019-11-13T05:55:50.889Z", "contributors": [ - "GiovanniHD201E", - "Magela", - "Anonymous", "SphinxKnight", - "wcqueiroz", - "leticiacampanharo", - "svarlamov", - "julio-elipse", - "CodexZombie", - "Ermesoml", + "Aschlla", + "wbamberg", + "allanthales", "LucasPrado", - "phhoffmann", - "mrmorais", - "Gilbertosilvax1", - "teoli", - "toscano", - "CNicola", - "JamileLima", - "Diegoprsz", - "Doug_Fany", - "gustavoaraujo", - "-" + "quindai", + "dayanyrec", + "sidbalito", + "-", + "michaelws25" ] }, - "Aprender/CSS": { - "modified": "2020-07-16T22:25:36.584Z", + "Games/Anatomy": { + "modified": "2019-03-18T21:46:19.514Z", "contributors": [ - "fbilinski", - "peas", - "adoniasvitorio", - "melostbr", - "stefanocbl", - "ThiagoMSArrais", - "uteifeld", - "megaday", - "mak213k", - "luan03" + "kaluabentes", + "wbamberg", + "Emanuelpantoja" ] }, - "Aprender/CSS/Construindo_blocos": { - "modified": "2020-07-16T22:28:09.218Z", + "Games/Introduction": { + "modified": "2019-03-23T22:16:29.874Z", "contributors": [ - "terasider" + "wbamberg", + "LucasPrado", + "quindai" ] }, - "Aprender/CSS/Construindo_blocos/Cascade_and_inheritance": { - "modified": "2020-08-10T11:05:37.121Z", + "Games/Publishing_games": { + "modified": "2019-07-16T19:29:14.975Z", "contributors": [ - "dsantana77" + "SubaruSama" ] }, - "Aprender/CSS/Construindo_blocos/The_box_model": { - "modified": "2020-11-09T11:05:07.161Z", + "Games/Techniques": { + "modified": "2019-01-16T21:47:44.488Z", "contributors": [ - "wilsonbrandao", - "eduardodarocha", - "warleyfdias" + "wbamberg", + "zerox347", + "ladybenko" ] }, - "Aprender/CSS/Estilizando_texto": { - "modified": "2020-11-10T21:16:01.558Z", + "Games/Techniques/2D_collision_detection": { + "modified": "2020-07-04T08:12:21.880Z", "contributors": [ - "wilsonbrandao", - "WesleyCristiano" + "erickcpassos", + "deyvidfk", + "Erickfgfg" ] }, - "Aprender/Como_contribuir": { - "modified": "2020-07-16T22:33:45.702Z", + "Games/Techniques/3D_on_the_web": { + "modified": "2019-03-18T20:56:23.810Z", "contributors": [ - "MistarSometung", - "SphinxKnight", - "G_Nascimento", - "AdrianoCh" + "ViniciusMatias" ] }, - "Aprender/Ferramentas_e_teste": { - "modified": "2020-07-16T22:38:56.887Z", + "Games/Techniques/Control_mechanisms": { + "modified": "2019-04-12T01:31:35.859Z" + }, + "Games/Tools": { + "modified": "2019-03-23T22:21:04.609Z", "contributors": [ - "GPrimola" + "wbamberg", + "LincePotiguara" ] }, - "Aprender/Front-end_web_developer": { - "modified": "2020-11-06T17:15:48.569Z", + "Games/Tools/asm.js": { + "modified": "2019-01-17T01:24:47.932Z", "contributors": [ - "flaviomicheletti", - "SphinxKnight", - "marcus.simei", - "vinidesign.web", - "victorwvieira", - "etc_william" + "wbamberg", + "skwcontadores" ] }, - "Aprender/Getting_started_with_the_web": { - "modified": "2020-11-12T14:47:17.943Z", + "Games/Tutorials": { + "modified": "2020-04-12T15:58:10.944Z" + }, + "Games/Tutorials/2D_Breakout_game_pure_JavaScript": { + "modified": "2020-04-12T15:58:11.112Z", "contributors": [ - "msevero.vasconcelos", - "Magela", - "wcqueiroz", - "ivanagui2", - "adoniasvitorio", - "LucianoHanna", - "RobMota", - "gustavoaraujo", - "duuz" + "JoeParrilla" ] }, - "Aprender/Getting_started_with_the_web/A_web_e_seus_padrões": { - "modified": "2020-09-30T16:25:35.717Z", + "Games/Tutorials/2D_Breakout_game_pure_JavaScript/Move_the_ball": { + "modified": "2020-04-12T15:58:12.124Z", "contributors": [ - "kleversonsc", - "Xxxtechnopy", - "wilkersalazar" + "liara987" ] }, - "Aprender/Getting_started_with_the_web/CSS_basico": { - "modified": "2020-07-16T22:35:02.824Z", + "Glossary/Block": { + "modified": "2019-03-18T21:20:53.271Z", "contributors": [ - "Magela", - "The-Physicist", - "klisostom", - "SphinxKnight", - "MidianLima", - "wcqueiroz", - "fpsaraiva", - "otavioarc", - "yosasuke", - "rsip22", - "MatheusSales", - "DiegoBousfield", - "gustavoaraujo" + "Sheppy" ] }, - "Aprender/Getting_started_with_the_web/Como_a_Web_funciona": { - "modified": "2020-07-16T22:34:02.146Z", + "Glossary/Block/CSS": { + "modified": "2019-03-18T21:20:51.476Z", "contributors": [ - "raucer", - "Magela", - "wcqueiroz", - "joaopaulogn.dev", - "kleinerbr", - "otavioarc", - "pablobfonseca", - "gustavoaraujo" + "hlays" ] }, - "Aprender/Getting_started_with_the_web/HTML_basico": { - "modified": "2020-09-28T22:22:12.899Z", + "Learn/Accessibility": { + "modified": "2020-09-28T22:33:19.289Z", "contributors": [ - "kleversonsc", - "Magela", - "cisojacobsen", - "lukebarneys", - "The-Physicist", - "wcqueiroz", "helton-mori-dev", - "fabianosantos.net", - "RobMota", - "brunopulis", - "marciioluucas", - "rsip22", - "DiegoBousfield", - "gustavoaraujo" + "hadleyel" ] }, - "Aprender/Getting_started_with_the_web/JavaScript_basico": { - "modified": "2020-11-19T13:42:46.355Z", + "Learn/Accessibility/HTML": { + "modified": "2020-07-16T22:40:14.200Z", "contributors": [ - "msevero.vasconcelos", - "yurigauermarques", - "imsantosrodrigo", - "di3goCS", - "raucer", - "soarescamila", - "lucas-av7", - "Magela", - "wcqueiroz", - "helton-mori-dev", - "pietromesadri", - "raphaelhenrique", - "gabrielrosa2004", - "fernandosavio", - "Ralf_Amr", - "otavioarc", - "davilmaster", - "mrmorais", - "marcio-ti", - "barrosval", - "capaci", - "MatheusSales", - "DiegoBousfield", - "leleofg", - "gustavoaraujo" + "claubatista", + "msales", + "djagher" ] }, - "Aprender/Getting_started_with_the_web/Publicando_seu_site": { - "modified": "2020-07-16T22:34:28.025Z", + "Learn/CSS/Building_blocks/Selectors": { + "modified": "2020-09-20T16:23:13.975Z", "contributors": [ - "raucer", - "Magela", - "wcqueiroz", - "tuxpilgrim", - "Fernandolrs", - "otavioarc", - "barrosval", - "gustavoaraujo" + "Dhiezon_Gois", + "chrisdavidmills" ] }, - "Aprender/Getting_started_with_the_web/com_que_seu_site_vai_parecer": { - "modified": "2020-11-26T14:10:39.382Z", + "Learn/CSS/Building_blocks/Selectors/Attribute_selectors": { + "modified": "2020-08-10T15:51:24.045Z", "contributors": [ - "SphinxKnight", - "Fernando_Moreira", - "Magela", - "wcqueiroz", - "rafael-junio", - "RobMota", - "Gabriela-23", - "ricardoferreirades", - "psergiojr", - "gustavoaraujo" + "dsantana77" ] }, - "Aprender/Getting_started_with_the_web/instalando_programas_basicos": { - "modified": "2020-07-16T22:34:10.512Z", + "Learn/CSS/CSS_layout": { + "modified": "2020-07-31T21:27:32.805Z", "contributors": [ - "Magela", - "wcqueiroz", - "israeljunior", - "helton-mori-dev", - "el-unicorn", - "rafael-junio", - "RobMota", - "leocadiomichael", - "CNicola", - "gustavoaraujo" + "cyz", + "WesleyCristiano", + "peas", + "webfelipemaia", + "agathasilva28", + "Tiagosb", + "chrisdavidmills" ] }, - "Aprender/Getting_started_with_the_web/lidando_com_arquivos": { - "modified": "2020-07-16T22:34:37.257Z", + "Learn/CSS/CSS_layout/Flexbox": { + "modified": "2020-07-16T22:26:55.364Z", "contributors": [ - "Andrya", - "Magela", - "wcqueiroz", - "RobMota", - "SphinxKnight", - "Mservicos", - "Gabriela-23", - "ricardoferreirades", - "rsip22", - "rvNN", - "CNicola", - "gustavoaraujo" + "peas", + "GPrimola", + "magnonp" ] }, - "Aprender/HTML": { - "modified": "2020-10-31T12:06:06.944Z", + "Learn/CSS/CSS_layout/Positioning": { + "modified": "2020-07-16T22:26:45.710Z", "contributors": [ - "yurigauermarques", - "Magela", - "wcqueiroz", - "julio-elipse", - "Gabriela-23", - "luzniek", - "Fernandolrs", - "Leodma", - "lsvinicius", - "dnlezin" + "GiovanniHD201E" ] }, - "Aprender/HTML/Introducao_ao_HTML": { - "modified": "2020-11-27T11:33:56.639Z", + "Learn/CSS/CSS_layout/Responsive_Design": { + "modified": "2020-08-22T17:27:59.073Z", "contributors": [ - "msevero.vasconcelos", - "SphinxKnight", - "marcus.simei", - "Magela", - "wcqueiroz", - "Gabriela-23", - "BrunoThomaz", - "JonatasTeixeira", - "Ronicley", - "Isaakie", - "stefanocbl", - "farfael", - "yfernandes", - "AnteroJunior", - "erickmartim", - "andrekutianski" + "manoelbjr", + "crisleitaoguerra" ] }, - "Aprender/HTML/Introducao_ao_HTML/Criando_hyperlinks": { - "modified": "2020-12-09T14:37:56.311Z", + "Learn/CSS/First_steps": { + "modified": "2020-09-21T13:39:03.225Z", "contributors": [ - "Magela", - "imsantosrodrigo", - "soarescamila", - "klisostom", - "wcqueiroz", - "joaopaulogn.dev", - "Kardhyr", - "programando", - "fossalex", - "stefanocbl" + "BeatrizCavallieri", + "josealisson95", + "dmchaves", + "gpdias", + "danielSramos", + "arthurssfreitas", + "felipekafuri", + "chrisdavidmills" ] }, - "Aprender/HTML/Introducao_ao_HTML/Debugging_HTML": { - "modified": "2020-10-10T15:20:53.986Z", + "Learn/CSS/First_steps/How_CSS_works": { + "modified": "2020-07-27T17:09:53.707Z", "contributors": [ - "imsantosrodrigo", - "ricardo-ap-abreu", - "drikoh", - "charles_melara", - "Marnei-Cardoso" + "warleyfdias", + "lancaluis", + "LuisFreitas1", + "Edsonoguera", + "danielcmelonio", + "cirogomes58" ] }, - "Aprender/HTML/Introducao_ao_HTML/Estrutura_de_documento_e_sites": { - "modified": "2020-10-10T12:24:24.277Z", + "Learn/CSS/First_steps/Using_your_new_knowledge": { + "modified": "2020-07-16T22:28:04.939Z", "contributors": [ - "imsantosrodrigo", - "LucasPereira", - "Lukff", - "wcqueiroz", - "felipe-luiz" + "LuisFreitas1" ] }, - "Aprender/HTML/Introducao_ao_HTML/Formatacao_avancada_texto": { - "modified": "2020-11-03T03:15:01.344Z", + "Learn/CSS/Howto": { + "modified": "2020-07-16T22:25:43.674Z", "contributors": [ - "SphinxKnight", - "MiguelZK", - "imsantosrodrigo", - "klisostom", - "romulocarvalho", - "itamarsilva" + "chrisdavidmills" ] }, - "Aprender/HTML/Introducao_ao_HTML/Fundamentos_textuais_HTML": { - "modified": "2020-10-08T15:21:36.053Z", + "Learn/Common_questions": { + "modified": "2020-07-16T22:35:26.243Z", "contributors": [ - "imsantosrodrigo", - "soarescamila", - "Magela", - "hillary-reis", - "klisostom", - "wcqueiroz", - "digoribeiro", - "joaopaulogn.dev", - "RobMota", - "SphinxKnight", - "programando", - "stefanocbl" + "ManoMartins", + "mrmorais", + "rudolfo" ] }, - "Aprender/HTML/Introducao_ao_HTML/Getting_started": { - "modified": "2020-12-07T16:55:14.326Z", + "Learn/Common_questions/Pages_sites_servers_and_search_engines": { + "modified": "2020-07-16T22:35:40.295Z", "contributors": [ "Magela", - "soarescamila", + "tavieto", + "brunoAlves", "wcqueiroz", - "diegobarcelar", - "Gabriela-23", - "IsabellaMacedo", - "hocraveiro", - "GustavoAlvesDaSilvaCoder", - "allysonthales", - "jorgeclesio" + "juliana-amoasei", + "danielbrai" ] }, - "Aprender/HTML/Introducao_ao_HTML/Test_your_skills:_HTML_text_basics": { - "modified": "2020-10-02T10:40:58.435Z", + "Learn/Common_questions/Upload_files_to_a_web_server": { + "modified": "2020-11-22T03:28:22.451Z", "contributors": [ - "lufesipe", - "incaDigital" + "kvojps" ] }, - "Aprender/HTML/Introducao_ao_HTML/The_head_metadata_in_HTML": { - "modified": "2020-07-16T22:23:22.939Z", + "Learn/Common_questions/Using_Github_pages": { + "modified": "2020-07-16T22:35:51.948Z", "contributors": [ - "Danilo", - "Magela", - "klisostom", - "leoc01", - "wcqueiroz", - "daliannyvieira", - "Luan4560", - "joaopaulogn.dev", - "RobMota", - "Gabriela-23", - "programando", - "mitlearning", - "stefanocbl", - "kenobll" + "Celio1234" ] }, - "Aprender/HTML/Multimedia_and_embedding": { - "modified": "2020-09-18T10:32:28.552Z", + "Learn/Common_questions/What_is_a_domain_name": { + "modified": "2020-07-16T22:35:44.455Z", "contributors": [ - "gcrz", - "MiscoTrisco", "wcqueiroz", - "finkenauer", - "MatheusKozaku" + "Amarildo", + "clstrni" ] }, - "Aprender/HTML/Multimedia_and_embedding/Adding_vector_graphics_to_the_Web": { - "modified": "2020-08-14T16:08:27.991Z", + "Learn/JavaScript/Asynchronous": { + "modified": "2020-08-22T17:58:38.750Z", "contributors": [ - "MarcosClaro" + "manoelbjr", + "Sheppy" ] }, - "Aprender/HTML/Multimedia_and_embedding/Images_in_HTML": { - "modified": "2020-07-16T22:24:47.423Z", + "Learn/JavaScript/Asynchronous/Promises": { + "modified": "2020-08-22T16:43:55.918Z", "contributors": [ - "cisojacobsen", - "LucasPereira", - "rafaelblink", - "brunopulis" + "manoelbjr", + "luan0ap" ] }, - "Aprender/HTML/Multimedia_and_embedding/Other_embedding_technologies": { - "modified": "2020-07-16T22:25:03.448Z", + "Learn/JavaScript/Asynchronous/Timeouts_and_intervals": { + "modified": "2020-07-16T22:33:21.635Z", "contributors": [ - "cisojacobsen", - "MatheusBorges", - "LucasPereira" + "vbarcellos", + "bellammuniz" ] }, - "Aprender/HTML/Multimedia_and_embedding/Responsive_images": { - "modified": "2020-07-16T22:24:37.186Z", + "Learn/JavaScript/First_steps": { + "modified": "2020-07-16T22:29:54.330Z", "contributors": [ - "gustavaum", - "davimh", - "rafaelcavalcante", - "BrunoThomaz" + "Magela", + "MattBizzo", + "alefesouza", + "linielson", + "rdeiana", + "chrisdavidmills" ] }, - "Aprender/HTML/Multimedia_and_embedding/Video_and_audio_content": { - "modified": "2020-07-16T22:24:55.358Z", + "Learn/JavaScript/First_steps/A_first_splash": { + "modified": "2020-08-28T16:05:03.838Z", "contributors": [ - "LucasPereira", - "LucasPrado" + "webfelipemaia", + "zKhiro", + "MattBizzo", + "rubenfaria", + "thiagolucio" ] }, - "Aprender/HTML/Tables": { - "modified": "2020-07-16T22:25:14.343Z", + "Learn/JavaScript/First_steps/Arrays": { + "modified": "2020-07-16T22:30:57.011Z", "contributors": [ - "nicolearagao", - "BeatrizCavallieri" + "izaqueJr", + "gabriel_cadu", + "VictorGom3s", + "BrunoThomaz" ] }, - "Aprender/HTML/Tables/Basics": { - "modified": "2020-11-17T04:01:03.837Z", + "Learn/JavaScript/First_steps/Strings": { + "modified": "2020-07-16T22:30:40.936Z", "contributors": [ - "SphinxKnight", - "aluizioneto", - "Caio_Rocha" + "lzhudson", + "BrunoThomaz" ] }, - "Aprender/HTML/como-fazer": { - "modified": "2020-07-16T22:22:30.419Z", + "Learn/JavaScript/First_steps/Useful_string_methods": { + "modified": "2020-07-16T22:30:49.411Z", "contributors": [ - "wcqueiroz", - "julio-elipse", - "slopesricardo" + "izaqueJr", + "Juliohub", + "VictorCPPlanas", + "greysonf", + "mwilson.oliveira", + "colares" ] }, - "Aprender/JavaScript": { - "modified": "2020-08-28T11:51:35.506Z", + "Learn/JavaScript/First_steps/What_went_wrong": { + "modified": "2020-07-16T22:30:35.893Z", "contributors": [ - "moukinchung", - "Chanpt", - "daniel-neiva", - "BeatrizCavallieri", - "leanfj", - "Takeshi-S", - "Abraham.G.", - "wcqueiroz", - "paulopompeu", - "CarlosFariass", - "leticiacampanharo", - "helton-mori-dev", - "SphinxKnight", - "gucaveira", - "aoc85", - "7aylors", - "gabrielrosa2004", - "byxande", - "amc97", - "Velasco", - "marcio-ti", - "Victorfm2167", - "diogoslima", - "deyvid0123" - ] - }, - "Aprender/JavaScript/Client-side_web_APIs": { - "modified": "2020-07-16T22:32:41.822Z", - "contributors": [ - "georgebueno77", - "helton-mori-dev", - "WellingtonFR", - "allanregess", - "Wendryl", - "andersoonluan" + "Ramon9825", + "lzhudson", + "VictorGom3s", + "MattBizzo", + "rubenfaria", + "francoforget", + "ReinaldoLuna" ] }, - "Aprender/JavaScript/Client-side_web_APIs/Client-side_storage": { - "modified": "2020-09-30T03:03:23.191Z", + "Learn/Server-side": { + "modified": "2020-07-16T22:36:01.419Z", "contributors": [ - "SphinxKnight", - "Paulo_Rezende" + "caveman-0", + "greysonf", + "chrisdavidmills" ] }, - "Aprender/JavaScript/Client-side_web_APIs/Introdução": { - "modified": "2020-11-04T14:49:24.547Z", + "Learn/Server-side/Django": { + "modified": "2020-08-25T19:47:59.806Z", "contributors": [ - "domuserk", - "nunes.rodrigo.dev", - "BeatrizCavallieri", - "GLuchtenberg", - "fpsaraiva", - "FernandaBernardo" + "glauconeto", + "victorruand", + "caveman-0", + "marcoxavier2005", + "julianofischer", + "rodrigowmendes", + "joanasouza", + "dougfeltrim", + "jozadaquebatista" ] }, - "Aprender/JavaScript/Elementos_construtivos": { - "modified": "2020-07-16T22:31:10.224Z", + "Learn/Server-side/Django/Admin_site": { + "modified": "2020-08-21T19:03:06.539Z", "contributors": [ - "Danilo", - "artphil", - "renansouza", - "psergiojr", - "tecnobr" + "ecoscom", + "jefersonsalvador", + "fossalex", + "theafien" ] }, - "Aprender/JavaScript/Elementos_construtivos/Build_your_own_function": { - "modified": "2020-07-20T16:29:20.448Z", + "Learn/Server-side/Django/Authentication": { + "modified": "2020-07-16T22:37:23.404Z", "contributors": [ - "eziotristao", - "gabriel_cadu", - "artphil", - "greysonf" + "ecoscom", + "fossalex" ] }, - "Aprender/JavaScript/Elementos_construtivos/Código_em_loop": { - "modified": "2020-07-16T22:31:21.519Z", + "Learn/Server-side/Django/Forms": { + "modified": "2020-07-16T22:37:33.125Z", "contributors": [ - "gabriel_cadu", - "lucas-av7", - "jess-silvano", - "recofka" + "ecoscom", + "fossalex", + "letuche" ] }, - "Aprender/JavaScript/Elementos_construtivos/Events": { - "modified": "2020-07-16T22:31:39.504Z", + "Learn/Server-side/Django/Generic_views": { + "modified": "2020-08-26T10:32:14.826Z", "contributors": [ - "suyfranca", - "PGama-Rodrigo", - "douglast2t", - "greysonf", - "VictorGom3s" + "ecoscom", + "fossalex" ] }, - "Aprender/JavaScript/Elementos_construtivos/Functions": { - "modified": "2020-07-16T22:31:26.363Z", + "Learn/Server-side/Django/Home_page": { + "modified": "2020-08-26T10:26:47.773Z", "contributors": [ - "artphil", - "samu101108" + "ecoscom", + "glauconeto", + "fossalex" ] }, - "Aprender/JavaScript/Elementos_construtivos/Image_gallery": { - "modified": "2020-07-16T22:31:44.008Z", + "Learn/Server-side/Django/Models": { + "modified": "2020-08-26T10:09:56.378Z", "contributors": [ - "greysonf" + "ecoscom", + "jefersonsalvador", + "Carine-Neris", + "fossalex", + "FRebeca", + "lucasjponce", + "montovaneli", + "lopespaz" ] }, - "Aprender/JavaScript/Elementos_construtivos/Return_values": { - "modified": "2020-07-16T22:31:34.447Z", + "Learn/Server-side/Django/Testing": { + "modified": "2020-07-16T22:37:38.133Z", "contributors": [ - "gabriel_cadu", - "Danilo", - "greysonf" + "ecoscom" ] }, - "Aprender/JavaScript/Elementos_construtivos/conditionals": { - "modified": "2020-11-20T11:18:47.143Z", + "Learn/Server-side/Django/skeleton_website": { + "modified": "2020-08-20T01:54:03.884Z", "contributors": [ - "Coronel-Marc", - "gabriel_cadu", - "euvanribeiro", - "greysonf", - "biakp", - "joficial", - "raphaeljq", - "francoforget", - "fenobalao" + "BraianF", + "jefersonsalvador", + "letuche", + "ViniciusMatias", + "lopespaz", + "faustobenini" ] }, - "Aprender/JavaScript/Howto": { - "modified": "2020-07-16T22:33:10.988Z", + "Learn/Server-side/Django/web_application_security": { + "modified": "2020-08-21T19:04:44.833Z", "contributors": [ - "edvoidcode", - "kabwto" + "ecoscom" ] }, - "Aprender/JavaScript/Objetos": { - "modified": "2020-07-16T22:31:52.228Z", + "Learn/Server-side/Express_Nodejs": { + "modified": "2020-07-16T22:37:54.607Z", "contributors": [ - "rafaelsantosjor", - "webfelipemaia", - "Tiagosb", - "claudiolcastro", - "carlos-rafael", - "juniorcaires" + "AAntoniazzi", + "ClemerJunior", + "fabiano.monte" ] }, - "Aprender/JavaScript/Objetos/Adding_bouncing_balls_features": { - "modified": "2020-07-16T22:32:35.532Z", + "Learn/Server-side/Express_Nodejs/Displaying_data": { + "modified": "2020-07-16T22:38:30.773Z", "contributors": [ - "greysonf" + "bivoigt" ] }, - "Aprender/JavaScript/Objetos/Básico": { - "modified": "2020-12-11T00:30:59.153Z", + "Learn/Server-side/Express_Nodejs/Displaying_data/flow_control_using_async": { + "modified": "2020-07-16T22:38:33.142Z", "contributors": [ - "iJacKP", - "clivelton", - "WellingtonFR", - "rafaelsantosjor", - "hmilena", - "webfelipemaia" + "caiollavos" ] }, - "Aprender/JavaScript/Objetos/Herança": { - "modified": "2020-07-16T22:32:15.784Z", + "Learn/Server-side/Express_Nodejs/Tutorial_local_library_website": { + "modified": "2020-07-16T22:38:16.508Z", "contributors": [ - "WellingtonFR", - "greysonf" + "ddanielcardoso", + "moronimotta" ] }, - "Aprender/JavaScript/Objetos/JSON": { - "modified": "2020-07-16T22:32:28.309Z", + "Learn/Server-side/Express_Nodejs/deployment": { + "modified": "2020-07-16T22:38:50.392Z", "contributors": [ - "euvanribeiro", - "WellingtonFR", - "mateus1siqueira", - "greysonf" + "gabrielfdg10", + "andersonse" ] }, - "Aprender/JavaScript/Objetos/Object-oriented_JS": { - "modified": "2020-07-16T22:32:07.136Z", + "Learn/Server-side/Express_Nodejs/mongoose": { + "modified": "2020-07-16T22:38:22.513Z", "contributors": [ - "rpizzolato", - "WellingtonFR", - "greysonf" + "maletta", + "TatiTheFreaK", + "arturlicks", + "Samuscosta" ] }, - "Aprender/JavaScript/Objetos/Object_building_practice": { - "modified": "2020-07-16T22:32:32.103Z", + "Learn/Server-side/Express_Nodejs/skeleton_website": { + "modified": "2020-07-16T22:38:05.698Z", "contributors": [ - "tonMoraes", - "greysonf" + "moronimotta" ] }, - "Aprender/JavaScript/Objetos/Object_prototypes": { - "modified": "2020-07-16T22:32:21.988Z", + "Learn/Server-side/First_steps": { + "modified": "2020-11-23T00:02:31.153Z", "contributors": [ - "WellingtonFR", - "DanStos", - "greysonf" + "kvojps", + "Magela", + "c1c3ru", + "kjerinic" ] }, - "Aprender/Learning_and_getting_help": { - "modified": "2020-07-16T22:40:49.138Z", + "Learn/Server-side/First_steps/Client-Server_overview": { + "modified": "2020-12-06T18:07:14.325Z", "contributors": [ - "GiovanniHD201E" + "duduindo", + "kvojps", + "MicaelFN" ] }, - "Aprender/Release_notes": { - "modified": "2020-10-15T20:54:28.940Z", + "Learn/Tools_and_testing/Client-side_JavaScript_frameworks": { + "modified": "2020-11-20T15:01:38.744Z", "contributors": [ - "3ltons" + "Marrior-dot", + "gevsantos", + "CodeDotJS" ] }, - "CSS/Usando_caixas_flexiveis_css": { - "modified": "2019-09-08T09:50:19.292Z", + "Learn/Tools_and_testing/Cross_browser_testing": { + "modified": "2020-07-16T22:39:00.890Z", "contributors": [ - "emaia", - "gabrielbarros28", - "FernandaBernardo", - "rvNN", - "trestini", - "afonsopacifer", - "brunoqueiros", - "deaballe" + "caiquesandrade", + "wbamberg", + "arai" ] }, - "Construindo_um_complemento": { - "modified": "2019-03-23T23:05:15.518Z", + "Learn/Tools_and_testing/Cross_browser_testing/Introduction": { + "modified": "2020-07-16T22:39:04.327Z", "contributors": [ - "rodrigopadula" + "jozadaquebatista" ] }, - "DOM": { - "modified": "2019-03-23T23:35:40.503Z", - "contributors": [ - "teoli" - ] - }, - "DOM/Referencia_do_DOM": { - "modified": "2019-07-12T13:54:33.473Z", + "MDN": { + "modified": "2020-02-19T18:02:47.459Z", "contributors": [ + "jswisher", + "SphinxKnight", "wcqueiroz", - "AlyoshaS", - "tuanny", - "arai", - "srsaude" + "wbamberg", + "gutoribeiro", + "Jeremie", + "-", + "PriscillaAlcalde", + "Sheppy" ] }, - "DOM/Referencia_do_DOM/Events": { - "modified": "2020-08-30T22:44:17.906Z", + "MDN/About": { + "modified": "2019-09-11T08:06:52.705Z", "contributors": [ - "bermarques" + "SphinxKnight", + "wbamberg", + "larimaza", + "luisfvieira", + "luc4smoreira", + "jswisher", + "joaopaulosama", + "leandroruel", + "Danilson_Veloso", + "-", + "morvanabonin", + "A.M.M.A." ] }, - "DOM/Referencia_do_DOM/Examples": { - "modified": "2019-03-23T22:11:58.983Z", + "MDN/Contribute": { + "modified": "2019-12-26T13:39:13.687Z", "contributors": [ - "virginiarcruz" + "maugravena", + "wcqueiroz", + "wbamberg", + "GPrimola", + "Aschlla", + "alexrohleder", + "-", + "rodrigopadula", + "marksabbath", + "Sheppy" ] }, - "DOM/Referencia_do_DOM/How_to_create_a_DOM_tree": { - "modified": "2019-03-23T22:11:56.223Z", + "MDN/Contribute/Feedback": { + "modified": "2020-09-30T17:52:17.404Z", "contributors": [ - "virginiarcruz" + "chrisdavidmills", + "jswisher", + "SphinxKnight", + "elenderg", + "wbamberg", + "leandroruel", + "GilvanFernandes" ] }, - "DOM/Referencia_do_DOM/Introdução": { - "modified": "2020-12-03T17:12:30.790Z", + "MDN/Contribute/Getting_started": { + "modified": "2020-09-30T17:15:19.127Z", "contributors": [ - "aotakeda", - "xKbryan", - "herculesgabriel", - "mfdj.1999", - "tomazcunha", - "andrekutianski", - "ramonfranklyn", - "onsistec" + "chrisdavidmills", + "wbamberg", + "haskellcamargo", + "mrmorais", + "-", + "takahan", + "annacruz", + "Fabiola" ] }, - "DOM/Referencia_do_DOM/Whitespace_in_the_DOM": { - "modified": "2019-03-18T21:38:03.775Z", + "MDN/Guidelines": { + "modified": "2020-09-30T15:31:17.173Z", "contributors": [ - "jpreuss", - "coloringa" + "chrisdavidmills", + "wcqueiroz", + "wbamberg", + "Sheppy" ] }, - "DragDrop": { - "modified": "2019-03-23T23:34:35.791Z", + "MDN/Structures": { + "modified": "2020-09-30T12:56:58.874Z", "contributors": [ - "drewp" + "chrisdavidmills", + "wbamberg", + "alipseight" ] }, - "DragDrop/Drag_and_Drop": { - "modified": "2019-12-03T23:38:01.288Z", + "MDN/Structures/Compatibility_tables": { + "modified": "2020-10-15T22:05:41.325Z", "contributors": [ - "CharlesEduardoSCBR", - "rodrigofazenda", - "cezaraugusto", - "saviski", - "jpalharini" + "chrisdavidmills", + "paulakfleck", + "MarcosNakamine", + "henriquebortoletti", + "Felipebros", + "PabloHarger", + "wbamberg", + "cautnew", + "rafaelcavalcante" ] }, - "DragDrop/Drag_and_Drop/Arrastar_e_soltar_arquivos": { - "modified": "2020-03-05T12:27:04.657Z", + "MDN/Structures/Macros": { + "modified": "2020-09-30T12:56:59.059Z", "contributors": [ - "NOOB_DISNEY" + "chrisdavidmills", + "wcqueiroz" ] }, - "Games": { - "modified": "2019-11-13T05:55:50.889Z", + "MDN/Tools": { + "modified": "2020-09-30T16:52:54.238Z", "contributors": [ - "SphinxKnight", - "Aschlla", + "chrisdavidmills", "wbamberg", - "allanthales", - "LucasPrado", - "quindai", - "dayanyrec", - "sidbalito", + "alipseight", "-", - "michaelws25" + "jswisher" ] }, - "Games/Anatomy": { - "modified": "2019-03-18T21:46:19.514Z", + "MDN/Tools/KumaScript": { + "modified": "2020-11-30T12:49:15.264Z", "contributors": [ - "kaluabentes", + "chrisdavidmills", "wbamberg", - "Emanuelpantoja" + "AndreDea" ] }, - "Games/Introduction": { - "modified": "2019-03-23T22:16:29.874Z", + "Mozilla": { + "modified": "2019-03-23T23:37:34.048Z", "contributors": [ - "wbamberg", - "LucasPrado", - "quindai" + "joselima", + "-", + "ethertank", + "ziyunfei" ] }, - "Games/Introduction_to_HTML5_Game_Gevelopment_(summary)": { - "modified": "2019-03-18T20:49:07.398Z", + "Mozilla/Add-ons": { + "modified": "2019-09-09T13:10:10.949Z", "contributors": [ - "G_Nascimento" + "SphinxKnight", + "Fernandolrs", + "luciolb", + "kaue", + "Doug_Fany", + "ThiagoEscarrone", + "EduardoRedressa", + "fabianosantos.net", + "-", + "janlima", + "jswisher" ] }, - "Games/Publishing_games": { - "modified": "2019-07-16T19:29:14.975Z", + "Mozilla/Add-ons/WebExtensions": { + "modified": "2019-09-04T15:18:11.465Z", "contributors": [ - "SubaruSama" + "brasmon8351", + "julio-elipse", + "MarceloGhelman", + "thiagopelizoni", + "jcjesus", + "Mostard", + "leanfj", + "lubarino", + "jlamim", + "wbamberg" ] }, - "Games/Techniques": { - "modified": "2019-01-16T21:47:44.488Z", + "Mozilla/Add-ons/WebExtensions/API": { + "modified": "2019-11-26T22:19:20.258Z", "contributors": [ "wbamberg", - "zerox347", - "ladybenko" + "Makyen" ] }, - "Games/Techniques/2D_collision_detection": { - "modified": "2020-07-04T08:12:21.880Z", + "Mozilla/Add-ons/WebExtensions/API/alarms": { + "modified": "2020-10-15T22:07:15.567Z", "contributors": [ - "erickcpassos", - "deyvidfk", - "Erickfgfg" + "wbamberg", + "thiagopelizoni" ] }, - "Games/Techniques/3D_on_the_web": { - "modified": "2019-03-18T20:56:23.810Z", + "Mozilla/Add-ons/WebExtensions/API/bookmarks": { + "modified": "2020-10-15T22:07:18.478Z", "contributors": [ - "ViniciusMatias" + "wbamberg", + "thiagopelizoni" ] }, - "Games/Techniques/Control_mechanisms": { - "modified": "2019-04-12T01:31:35.859Z" - }, - "Games/Tools": { - "modified": "2019-03-23T22:21:04.609Z", + "Mozilla/Add-ons/WebExtensions/API/browserAction": { + "modified": "2020-10-15T22:07:24.197Z", "contributors": [ "wbamberg", - "LincePotiguara" + "thiagopelizoni" ] }, - "Games/Tools/asm.js": { - "modified": "2019-01-17T01:24:47.932Z", + "Mozilla/Add-ons/WebExtensions/API/browserSettings": { + "modified": "2020-10-15T22:07:20.929Z", "contributors": [ "wbamberg", - "skwcontadores" + "thiagopelizoni" ] }, - "Games/Tutorials": { - "modified": "2020-04-12T15:58:10.944Z" - }, - "Games/Tutorials/2D_Breakout_game_pure_JavaScript": { - "modified": "2020-04-12T15:58:11.112Z", + "Mozilla/Add-ons/WebExtensions/API/browsingData": { + "modified": "2020-10-15T22:07:21.259Z", "contributors": [ - "JoeParrilla" + "thiagopelizoni" ] }, - "Games/Tutorials/2D_Breakout_game_pure_JavaScript/Move_the_ball": { - "modified": "2020-04-12T15:58:12.124Z", + "Mozilla/Add-ons/WebExtensions/API/clipboard": { + "modified": "2020-10-15T22:07:18.172Z", "contributors": [ - "liara987" + "thiagopelizoni" ] }, - "Glossario": { - "modified": "2020-10-07T11:13:14.110Z", + "Mozilla/Add-ons/WebExtensions/API/commands": { + "modified": "2020-10-15T22:07:21.541Z", "contributors": [ - "peterbe", - "SphinxKnight", - "wcqueiroz", "wbamberg", - "matheusdmm", - "-", - "gusleindecker" + "thiagopelizoni" ] }, - "Glossario/404": { - "modified": "2019-03-23T22:47:20.165Z", + "Mozilla/Add-ons/WebExtensions/API/contentScripts": { + "modified": "2020-10-15T22:07:22.642Z", "contributors": [ - "raduq" + "thiagopelizoni" ] }, - "Glossario/502": { - "modified": "2019-03-23T22:47:23.868Z", + "Mozilla/Add-ons/WebExtensions/API/contextualIdentities": { + "modified": "2020-10-15T21:58:40.272Z", "contributors": [ - "raduq" + "wbamberg", + "thiagopelizoni", + "eduardMariano" ] }, - "Glossario/AJAX": { - "modified": "2020-01-10T00:02:09.757Z", + "Mozilla/Add-ons/WebExtensions/API/cookies": { + "modified": "2020-10-15T22:07:19.571Z", "contributors": [ - "brunofrra", - "mariozuany", - "barrosval", - "rogeriomoraessp" + "wbamberg", + "thiagopelizoni" ] }, - "Glossario/API": { - "modified": "2019-10-20T21:41:36.383Z", + "Mozilla/Add-ons/WebExtensions/API/menus": { + "modified": "2020-10-15T22:28:27.733Z", "contributors": [ - "htmribeiro", - "raphaelhenrique", - "andrekutianski", - "raduq" + "Sam-Marx" ] }, - "Glossario/ASCII": { - "modified": "2020-08-07T10:40:43.821Z", + "Mozilla/Add-ons/WebExtensions/API/tabs": { + "modified": "2020-10-15T22:34:17.119Z", "contributors": [ - "rafhaelfitzpatrick", - "mak213k" + "Jonathan_Watt" ] }, - "Glossario/Abstração": { - "modified": "2019-03-23T22:35:53.964Z", + "Mozilla/Add-ons/WebExtensions/Browser_support_for_JavaScript_APIs": { + "modified": "2020-10-15T20:55:06.952Z", "contributors": [ - "jjmars" + "jaimemaretoli" ] }, - "Glossario/Acessibilidade": { - "modified": "2019-03-23T22:05:43.916Z", + "Mozilla/Add-ons/WebExtensions/Examples": { + "modified": "2019-03-18T21:03:20.319Z", "contributors": [ - "MarceloBRN" + "jefersonnavarro", + "thiagopelizoni", + "FelipeBergmann" ] }, - "Glossario/Adobe_Flash": { - "modified": "2019-03-18T21:44:03.570Z", + "Mozilla/Add-ons/WebExtensions/Intercept_HTTP_requests": { + "modified": "2019-03-18T21:01:56.380Z", "contributors": [ - "SaraJade" + "thiagopelizoni" ] }, - "Glossario/Algoritmo": { - "modified": "2019-01-17T02:26:12.294Z", + "Mozilla/Add-ons/WebExtensions/What_are_WebExtensions": { + "modified": "2019-03-18T21:05:24.593Z", "contributors": [ - "SaraJade" + "fthiagogv", + "Mostard" ] }, - "Glossario/Alpha": { - "modified": "2020-11-15T12:30:40.587Z", + "Mozilla/Add-ons/WebExtensions/manifest.json": { + "modified": "2020-10-15T21:55:09.220Z", "contributors": [ - "IsaqueDiniz" + "wbamberg" ] }, - "Glossario/Apple_Safari": { - "modified": "2019-03-18T21:43:59.859Z", + "Mozilla/Add-ons/WebExtensions/manifest.json/short_name": { + "modified": "2020-10-15T21:55:07.308Z", "contributors": [ - "SaraJade" + "wbamberg", + "gutoribeiro" ] }, - "Glossario/Argument": { - "modified": "2019-03-23T22:04:07.640Z", + "Mozilla/Add-ons/WebExtensions/manifest.json/web_accessible_resources": { + "modified": "2020-10-15T22:23:15.449Z", "contributors": [ - "apsychox", - "SaraJade", - "gabrielrosa2004" + "AdaiasMagdiel" ] }, - "Glossario/Arpanet": { - "modified": "2019-03-23T22:06:40.692Z", + "Mozilla/Add-ons/WebExtensions/user_interface": { + "modified": "2020-03-23T21:27:50.719Z", "contributors": [ - "SaraJade" + "chrisdavidmills" ] }, - "Glossario/Assincrono": { - "modified": "2019-03-18T21:43:52.623Z", + "Mozilla/Developer_guide": { + "modified": "2019-03-23T23:38:41.412Z", "contributors": [ - "SaraJade" + "chrisdavidmills", + "regisdiogo", + "josivansilva" ] }, - "Glossario/Atributo": { - "modified": "2019-05-30T03:05:20.743Z", + "Mozilla/Developer_guide/Mozilla_build_FAQ": { + "modified": "2019-03-23T23:30:00.484Z", "contributors": [ - "jorgeclesio", - "GoToLoop" + "chrisdavidmills", + "fscholz", + "tfsthiago11121" ] }, - "Glossario/Bandwidth": { - "modified": "2020-03-28T04:45:58.336Z", + "Mozilla/Firefox": { + "modified": "2020-01-18T14:01:54.191Z", "contributors": [ - "joelson.ejr" + "leela52452", + "SphinxKnight", + "wbamberg", + "rafael-junio", + "mrmorais", + "cezarcruz", + "-", + "chocoelho", + "fahadkalil" ] }, - "Glossario/BigInt": { - "modified": "2019-06-01T11:26:46.232Z", + "Mozilla/Firefox/Releases": { + "modified": "2019-01-16T20:18:57.986Z", "contributors": [ - "emersonbroga" + "wbamberg", + "-" ] }, - "Glossario/Booleano": { - "modified": "2019-03-23T23:02:25.617Z", + "Mozilla/Firefox/Releases/1.5": { + "modified": "2019-03-23T23:00:27.323Z", "contributors": [ - "eduardocezarinossp", - "ViniciusMachado", - "trestini" + "wbamberg", + "-" ] }, - "Glossario/CDN": { - "modified": "2019-01-16T22:59:44.431Z", + "Mozilla/Firefox/Releases/3": { + "modified": "2020-12-11T05:30:36.972Z", "contributors": [ - "Rickslayer" + "wbamberg" ] }, - "Glossario/CMS": { - "modified": "2019-03-23T22:31:12.002Z", + "Mozilla/Firefox/Releases/49": { + "modified": "2019-03-23T22:24:00.355Z", "contributors": [ - "Rickslayer" + "wbamberg", + "wdot789" ] }, - "Glossario/CORS": { - "modified": "2019-12-23T23:53:25.142Z", + "Mozilla/Firefox/Releases/50": { + "modified": "2019-03-18T21:11:50.773Z", "contributors": [ - "FernandoKGA" + "duduindo", + "wbamberg", + "jerfeson" ] }, - "Glossario/CRUD": { - "modified": "2020-12-05T13:04:05.864Z", + "Mozilla/Firefox/Releases/57": { + "modified": "2019-03-18T20:55:45.402Z", "contributors": [ - "IsaqueDiniz" + "duduindo", + "wbamberg", + "ialexsilva", + "marcoarw" ] }, - "Glossario/CSS": { - "modified": "2019-03-23T22:17:45.507Z", + "Mozilla/Firefox/Releases/65": { + "modified": "2019-03-18T21:21:43.693Z", "contributors": [ - "psergiojr" + "yellowag" ] }, - "Glossario/CSSOM": { - "modified": "2020-11-13T12:20:41.027Z", + "Tools": { + "modified": "2020-07-16T22:44:17.244Z", "contributors": [ - "IsaqueDiniz" + "vanteew29", + "SphinxKnight", + "rafaelsiza", + "wbamberg", + "redbob365", + "alipseight", + "LuccasBarbosa", + "-", + "_GabrielDuque", + "marinalimeira", + "eduardojmatos", + "jlamim", + "teoli", + "gutierri", + "nanardo", + "fabianosantos.net", + "AJCSantos", + "paulo007", + "bbenatti", + "fernando.karpinski", + "ronaldo-bonfim" ] }, - "Glossario/CSS_Selector": { - "modified": "2019-03-23T22:06:48.887Z", + "Tools/3D_View": { + "modified": "2020-07-16T22:34:25.511Z", "contributors": [ - "IsmaelEzequiel" + "italo-baciliere", + "wbamberg", + "Tomaz-Vieira", + "pablobfonseca" ] }, - "Glossario/CSS_pixel": { - "modified": "2020-11-14T14:30:11.858Z", + "Tools/Browser_Console": { + "modified": "2020-07-16T22:35:42.624Z", "contributors": [ - "IsaqueDiniz" + "wbamberg", + "Wallison_S.F", + "jlamim" ] }, - "Glossario/CSS_preprocessor": { - "modified": "2020-11-13T12:59:56.480Z", + "Tools/Debugger/How_to": { + "modified": "2020-07-16T22:35:08.214Z", "contributors": [ - "IsaqueDiniz" + "wbamberg" ] }, - "Glossario/Cabecalho_HTTP": { - "modified": "2019-12-23T23:53:58.987Z", + "Tools/DevToolsAPI": { + "modified": "2020-07-16T22:35:25.742Z", "contributors": [ - "FernandoKGA" + "wbamberg", + "NResultados" ] }, - "Glossario/Cache": { - "modified": "2020-08-20T08:30:54.843Z", + "Tools/Eyedropper": { + "modified": "2020-07-16T22:36:07.729Z", "contributors": [ - "joaomantovani", - "FernandoKGA" + "wbamberg", + "netoguimaraes" ] }, - "Glossario/Call_stack": { - "modified": "2019-08-25T21:21:29.113Z", + "Tools/Keyboard_shortcuts": { + "modified": "2020-07-16T22:35:49.510Z", "contributors": [ - "helton-mori-dev" + "wbamberg", + "fabianosantos.net", + "andredias", + "zerossB" ] }, - "Glossario/Callback_function": { - "modified": "2019-03-23T22:02:52.552Z", + "Tools/Memory": { + "modified": "2020-07-16T22:36:27.239Z", "contributors": [ - "MRND-DTR", - "MattBizzo" + "wbamberg", + "luizschinemann" ] }, - "Glossario/Caractere": { - "modified": "2019-03-18T21:46:30.079Z", + "Tools/Network_Monitor": { + "modified": "2020-07-16T22:35:30.854Z", "contributors": [ - "melostbr" + "jamrocha", + "wbamberg", + "fabianosantos.net", + "lisaldofjf", + "cleverson", + "Lokojbkf" ] }, - "Glossario/Chrome": { - "modified": "2019-03-23T22:32:20.365Z", + "Tools/Page_Inspector": { + "modified": "2020-07-16T22:34:29.304Z", "contributors": [ - "meldenne" + "wbamberg", + "GaPerez10", + "karen-evelyn", + "danielferreira.developer", + "teoli", + "pablobfonseca", + "maybe", + "nanardo", + "pfurtado", + "MarcoBruno" ] }, - "Glossario/Class": { - "modified": "2019-03-23T22:50:05.950Z", + "Tools/Page_Inspector/How_to": { + "modified": "2020-07-16T22:34:31.751Z", "contributors": [ - "victor-borges" + "wbamberg", + "sidgan" ] }, - "Glossario/Conversao_de_Tipo": { - "modified": "2019-03-18T21:32:31.465Z", + "Tools/Page_Inspector/How_to/Edit_CSS_filters": { + "modified": "2020-07-16T22:34:45.449Z", "contributors": [ - "aleexmuller" + "wbamberg", + "jgeovani" ] }, - "Glossario/DOM": { - "modified": "2019-03-23T23:10:39.579Z", + "Tools/Page_Inspector/How_to/Examine_and_edit_CSS": { + "modified": "2020-07-16T22:34:43.033Z", "contributors": [ - "GoToLoop", - "gabrielagabriel", - "panaggio" - ] - }, - "Glossario/Declaração": { - "modified": "2019-03-23T22:23:07.569Z", - "contributors": [ - "Franck_Moreira" + "wbamberg", + "wdot789", + "raphaellima8", + "jaimemaretoli", + "julianadfg" ] }, - "Glossario/Doctype": { - "modified": "2019-03-18T21:46:11.657Z", + "Tools/Page_Inspector/How_to/Examine_grid_layouts": { + "modified": "2020-07-16T22:34:47.464Z", "contributors": [ - "lucasbd" + "wbamberg", + "nobrewilk" ] }, - "Glossario/Domínio": { - "modified": "2019-03-18T21:36:28.595Z", + "Tools/Page_Inspector/How_to/Open_the_Inspector": { + "modified": "2020-07-16T22:34:32.967Z", "contributors": [ - "GPrimola" + "wbamberg", + "larimaza" ] }, - "Glossario/ECMA": { - "modified": "2019-03-23T22:30:25.897Z", + "Tools/Rulers": { + "modified": "2020-07-16T22:36:26.507Z", "contributors": [ - "GoToLoop" + "wbamberg", + "barddes", + "Jeremie", + "kazumi" ] }, - "Glossario/Elemento": { - "modified": "2020-08-23T14:35:41.260Z", + "Tools/Settings": { + "modified": "2020-07-16T22:36:35.275Z", "contributors": [ - "josewest700", - "wcqueiroz", - "luiszambon" + "wbamberg", + "jaimemaretoli", + "jhonatasrm", + "julianadfg" ] }, - "Glossario/Endereco_IP": { - "modified": "2019-03-18T21:44:09.753Z", + "Tools/Shader_Editor": { + "modified": "2020-07-16T22:35:54.762Z", "contributors": [ - "SaraJade" + "wbamberg", + "stephaniehobson", + "bassam", + "joselima", + "idenilson" ] }, - "Glossario/Endianness": { - "modified": "2019-03-18T21:33:18.048Z", + "Tools/Web_Console": { + "modified": "2020-07-16T22:34:06.990Z", "contributors": [ - "paulobruno", - "pauloantonelli" + "cautnew", + "wbamberg", + "DiegoTelles", + "javaroldo", + "danielferreira.developer", + "gmoraes", + "paulojackson42", + "teoli", + "kosikfl" ] }, - "Glossario/Entity_header": { - "modified": "2019-03-18T21:10:53.093Z", + "Tools/Web_Console/Helpers": { + "modified": "2020-07-16T22:34:12.817Z", "contributors": [ - "coloringa" + "wbamberg", + "akando" ] }, - "Glossario/Escopo": { - "modified": "2019-03-23T22:09:33.536Z", + "Tools/Web_Console/The_command_line_interpreter": { + "modified": "2020-07-16T22:34:19.266Z", "contributors": [ - "Fernandolrs" + "luizcowbtf" ] }, - "Glossario/Falsy": { - "modified": "2019-03-18T21:15:58.741Z", + "Tools/Working_with_iframes": { + "modified": "2020-07-16T22:36:12.025Z", "contributors": [ - "eduardocezarinossp", - "jeanonline" + "wbamberg", + "kausdev", + "Vinicius_Vieira" ] }, - "Glossario/Flex": { - "modified": "2019-03-18T20:42:53.641Z", + "Web": { + "modified": "2020-07-13T10:40:01.246Z", "contributors": [ - "helton-mori-dev" + "jose.elias.0703", + "jorgeclesio", + "ChristoPy", + "Munhoz", + "RenanBirck", + "BrendonFerreira", + "AlanCezarAraujo", + "-", + "PriscillaAlcalde", + "rbrandao", + "sheldonled", + "cezarcruz", + "rafaelsakurai", + "Sheppy" ] }, - "Glossario/Forbidden_header_name": { - "modified": "2020-01-18T00:05:07.612Z", + "Web/API": { + "modified": "2019-06-15T02:48:05.766Z", "contributors": [ - "FernandoKGA", - "darleizillmer" + "wcqueiroz", + "julio-elipse", + "MatheusCuba", + "KadirTopal", + "sprodrigues", + "teoli", + "panaggio", + "ethertank", + "srsaude", + "Sheppy" ] }, - "Glossario/Forbidden_response_header_name": { - "modified": "2019-03-18T21:26:05.371Z", + "Web/API/ANGLE_instanced_arrays": { + "modified": "2020-10-15T22:14:15.404Z", "contributors": [ - "darleizillmer" + "eliasmelgaco" ] }, - "Glossario/Funcao-First-class": { - "modified": "2019-03-18T21:32:51.242Z", + "Web/API/AbortSignal": { + "modified": "2020-10-15T22:03:40.637Z", "contributors": [ - "thiagosaife", - "emersonmdca" + "MatheusCuba" ] }, - "Glossario/Função": { - "modified": "2019-03-18T21:34:00.632Z", + "Web/API/AbortSignal/aborted": { + "modified": "2020-10-15T22:05:39.005Z", "contributors": [ - "apsychox" + "marcelorobson001" ] }, - "Glossario/Fuzzing": { - "modified": "2019-09-06T03:22:02.462Z", + "Web/API/AbstractWorker": { + "modified": "2019-03-23T23:11:23.809Z", "contributors": [ - "SphinxKnight", - "fscholz", - "ygormaximo" + "teoli", + "mklauck" ] }, - "Glossario/Gecko": { - "modified": "2019-12-23T23:52:37.656Z", + "Web/API/AbstractWorker/onerror": { + "modified": "2019-03-23T22:50:42.630Z", "contributors": [ - "FernandoKGA" + "daltonmenezes" ] }, - "Glossario/General_header": { - "modified": "2019-05-24T15:18:50.536Z", + "Web/API/Ambient_Light_Events": { + "modified": "2019-03-23T22:10:24.978Z", "contributors": [ - "Glmsnc" + "andre-mendes" ] }, - "Glossario/Global_object": { - "modified": "2019-03-18T21:40:17.626Z", + "Web/API/Animation": { + "modified": "2019-03-23T22:27:19.257Z", "contributors": [ - "ebragaparah" + "mrmorais", + "hbmuller", + "rachelnabors" ] }, - "Glossario/Grade": { - "modified": "2020-07-14T21:04:41.276Z", + "Web/API/Animation/cancel": { + "modified": "2019-03-23T22:32:30.370Z", "contributors": [ - "Dianakc" + "JohnLatties" ] }, - "Glossario/Grid_Areas": { - "modified": "2019-03-23T22:14:26.280Z", + "Web/API/Animation/currentTime": { + "modified": "2019-03-23T22:08:24.693Z", "contributors": [ - "kaiomarcio", - "heltonss" + "Schieck" ] }, - "Glossario/HSTS": { - "modified": "2019-03-18T21:26:13.963Z", + "Web/API/Animation/playState": { + "modified": "2019-03-23T22:08:37.256Z", "contributors": [ - "darleizillmer" + "Schieck" ] }, - "Glossario/HTML": { - "modified": "2019-03-23T22:22:10.633Z", + "Web/API/AnimationEvent": { + "modified": "2019-03-23T22:45:30.935Z", "contributors": [ - "psergiojr", - "rafaelcavalcante", - "barrosval" + "edu-ricardo", + "teoli", + "takahan" ] }, - "Glossario/HTTP": { - "modified": "2019-03-23T22:21:56.435Z", + "Web/API/AnimationEvent/AnimationEvent": { + "modified": "2019-03-23T22:45:31.301Z", "contributors": [ - "aretw0", - "barrosval" + "takahan" ] }, - "Glossario/HTTP_2": { - "modified": "2019-06-08T19:33:12.373Z", + "Web/API/AnimationEvent/animationName": { + "modified": "2019-03-23T22:45:37.004Z", "contributors": [ - "wcqueiroz" + "teoli", + "takahan" ] }, - "Glossario/Hoisting": { - "modified": "2020-01-23T16:47:05.779Z", + "Web/API/AnimationEvent/elapsedTime": { + "modified": "2019-03-23T22:45:36.142Z", "contributors": [ - "GuilhermePiovesan", - "rolandgnm" + "teoli", + "takahan" ] }, - "Glossario/IIFE": { - "modified": "2019-03-23T22:41:51.789Z", + "Web/API/AnimationEvent/initAnimationEvent": { + "modified": "2019-03-23T22:45:29.493Z", "contributors": [ - "daviccardoso", - "fbidu", - "MarcoRibeiro" + "teoli", + "takahan" ] }, - "Glossario/IPv4": { - "modified": "2019-03-18T21:44:10.032Z", + "Web/API/AnimationEvent/pseudoElement": { + "modified": "2019-03-23T22:45:35.200Z", "contributors": [ - "SaraJade" + "teoli", + "takahan" ] }, - "Glossario/IPv6": { - "modified": "2019-03-18T21:45:04.897Z", + "Web/API/Attr": { + "modified": "2019-03-23T23:11:31.038Z", "contributors": [ - "SaraJade" + "MatheusCuba", + "renansouza", + "teoli", + "mklauck" ] }, - "Glossario/IRC": { - "modified": "2019-06-03T01:34:33.650Z", + "Web/API/Attr/localName": { + "modified": "2019-03-23T22:18:49.389Z", "contributors": [ - "wcqueiroz" + "juniorgarcia" ] }, - "Glossario/ISO": { - "modified": "2019-08-19T01:24:15.027Z", + "Web/API/AudioContext": { + "modified": "2020-08-25T13:06:48.450Z", "contributors": [ - "KoffeeBunker" + "duduindo", + "italoadler", + "GPrimola", + "EduardoFerr", + "jpmedley" ] }, - "Glossario/Idempotente": { - "modified": "2019-09-01T01:44:12.557Z", + "Web/API/AudioNode": { + "modified": "2019-03-23T22:37:43.755Z", "contributors": [ - "FernandoKGA" + "gidenilson" ] }, - "Glossario/Identificador": { - "modified": "2019-03-23T22:28:41.179Z", + "Web/API/Background_Tasks_API": { + "modified": "2020-10-15T22:22:54.939Z", "contributors": [ - "apsychox", - "OrdepPedro", - "danilobarion1986" + "maatheusgouveia" ] }, - "Glossario/IndexedDB": { - "modified": "2019-03-23T22:30:14.736Z", + "Web/API/BatteryManager": { + "modified": "2019-03-23T23:18:25.418Z", "contributors": [ - "GoToLoop" + "teoli", + "eliezerb" ] }, - "Glossario/Internet": { - "modified": "2019-03-18T21:45:04.739Z", + "Web/API/BatteryManager/charging": { + "modified": "2019-03-23T23:18:26.621Z", "contributors": [ - "SaraJade" + "teoli", + "eliezerb" ] }, - "Glossario/JPEG": { - "modified": "2019-03-18T21:44:01.853Z", + "Web/API/BatteryManager/chargingTime": { + "modified": "2019-03-23T23:17:02.480Z", "contributors": [ - "SaraJade" + "teoli", + "eliezerb" ] }, - "Glossario/Jank": { - "modified": "2019-01-17T10:31:38.830Z", + "Web/API/BatteryManager/dischargingTime": { + "modified": "2019-03-23T23:16:57.249Z", "contributors": [ - "IgorGoncalves" + "teoli", + "eliezerb" ] }, - "Glossario/JavaScript": { - "modified": "2020-07-14T13:39:05.371Z", + "Web/API/BatteryManager/level": { + "modified": "2019-03-23T23:16:57.347Z", "contributors": [ - "jose.elias.0703", - "rbertoche", - "barrosval" + "teoli", + "eliezerb" ] }, - "Glossario/Key": { - "modified": "2019-03-23T22:02:49.869Z", + "Web/API/BatteryManager/onchargingchange": { + "modified": "2019-03-23T23:16:56.594Z", "contributors": [ - "Hikashii" + "teoli", + "eliezerb" ] }, - "Glossario/Linguagem_de_programação_dinâmica": { - "modified": "2020-07-02T21:45:18.003Z", + "Web/API/BatteryManager/onchargingtimechange": { + "modified": "2019-03-23T23:16:56.942Z", "contributors": [ - "raucer" + "teoli", + "eliezerb" ] }, - "Glossario/Metadata": { - "modified": "2019-11-05T19:38:53.604Z", + "Web/API/BatteryManager/onlevelchange": { + "modified": "2019-03-23T23:16:53.281Z", "contributors": [ - "klisostom" + "teoli", + "eliezerb" ] }, - "Glossario/Mozilla_Firefox": { - "modified": "2019-12-23T23:52:10.939Z", + "Web/API/BiquadFilterNode": { + "modified": "2020-10-15T22:02:35.671Z", "contributors": [ - "FernandoKGA" + "Jonathanifpe" ] }, - "Glossario/Mutavel": { - "modified": "2019-03-18T21:42:49.961Z", + "Web/API/Blob": { + "modified": "2020-10-15T21:31:54.891Z", "contributors": [ - "VitorHFLopes" + "CahMoraes", + "Flicksie", + "gabrielacaesar", + "jkdrangel", + "vandercijr", + "wancharle", + "raduq", + "Caique39", + "willianbriotto", + "teoli", + "jeffersoncardoso100" ] }, - "Glossario/Navegador": { - "modified": "2019-03-18T21:43:58.161Z", + "Web/API/Blob/Blob": { + "modified": "2020-10-15T22:09:55.306Z", "contributors": [ - "SaraJade" + "thiagosaife", + "TiagoOliveiraz" ] }, - "Glossario/Navegador_Opera": { - "modified": "2019-03-18T21:44:16.421Z", + "Web/API/Blob/size": { + "modified": "2020-10-15T22:13:56.876Z", "contributors": [ - "SaraJade" + "thiagosaife" ] }, - "Glossario/Node.js": { - "modified": "2019-03-23T22:30:20.248Z", + "Web/API/Blob/slice": { + "modified": "2019-03-18T21:46:37.104Z", "contributors": [ - "joelwallis", - "GoToLoop" + "Julio_Lira" ] }, - "Glossario/Nome_de_domínio": { - "modified": "2019-03-18T21:43:57.004Z", + "Web/API/Blob/type": { + "modified": "2020-10-15T22:13:55.601Z", "contributors": [ - "SaraJade" + "thiagosaife" ] }, - "Glossario/Nulo": { - "modified": "2019-03-23T23:02:20.116Z", + "Web/API/Body": { + "modified": "2020-10-15T22:30:31.056Z", "contributors": [ - "trestini" + "Wind1808" ] }, - "Glossario/Número": { - "modified": "2019-03-23T22:04:09.762Z", + "Web/API/Body/json": { + "modified": "2020-10-15T22:30:29.688Z", "contributors": [ - "gabrielrosa2004" + "tohdi1" ] }, - "Glossario/OOP": { - "modified": "2019-03-23T22:34:54.131Z", + "Web/API/BroadcastChannel": { + "modified": "2020-10-15T22:14:45.422Z", "contributors": [ - "raduq" + "Rondinelly" ] }, - "Glossario/OTA": { - "modified": "2019-03-23T22:30:21.110Z", + "Web/API/CSS": { + "modified": "2019-07-14T13:19:26.783Z", "contributors": [ - "GoToLoop" + "onsistec", + "teoli", + "takahan" ] }, - "Glossario/Objeto": { - "modified": "2019-03-23T22:46:59.570Z", + "Web/API/CSS_Object_Model": { + "modified": "2019-03-23T22:34:08.999Z", "contributors": [ - "raduq" + "allissondebrito" ] }, - "Glossario/OpenGL": { - "modified": "2019-03-18T21:45:06.071Z", + "Web/API/Cache": { + "modified": "2019-03-23T22:09:25.465Z", "contributors": [ - "fitojb", - "leandroleo2" + "khaosdoctor" ] }, - "Glossario/Operador": { - "modified": "2019-06-06T00:19:52.618Z", + "Web/API/CanvasRenderingContext2D": { + "modified": "2020-11-14T05:59:14.329Z", "contributors": [ - "wcqueiroz", - "rubenfaria" + "pedrinhofss", + "TalissonOliveira", + "ThiagOliveira26", + "elciodalosto", + "ioxua-os", + "marcio-ti", + "rudolfo" ] }, - "Glossario/Operando": { - "modified": "2019-03-23T22:04:38.960Z", + "Web/API/CanvasRenderingContext2D/arc": { + "modified": "2020-11-29T22:05:48.491Z", "contributors": [ - "rubenfaria" + "jfelipearaujo" ] }, - "Glossario/Origem": { - "modified": "2019-12-23T23:53:08.917Z", + "Web/API/CanvasRenderingContext2D/arcTo": { + "modified": "2020-10-15T22:10:00.175Z", "contributors": [ - "FernandoKGA" + "Leodma" ] }, - "Glossario/PHP": { - "modified": "2019-09-19T14:26:56.337Z", + "Web/API/CanvasRenderingContext2D/beginPath": { + "modified": "2019-03-23T22:18:53.160Z", "contributors": [ - "Lucas-Santos", - "jorgeclesio", - "Danilo_Santos" + "MarceloBRN" ] }, - "Glossario/Palavra-chave": { - "modified": "2020-08-25T13:00:01.177Z", + "Web/API/CanvasRenderingContext2D/clearRect": { + "modified": "2019-03-23T22:18:47.441Z", "contributors": [ - "duduindo", - "LeoCrespi" + "MarceloBRN" ] }, - "Glossario/Pixel": { - "modified": "2019-03-18T21:40:44.589Z", + "Web/API/CanvasRenderingContext2D/clip": { + "modified": "2019-03-23T22:26:54.054Z", "contributors": [ - "ingridmachado" + "Drako" ] }, - "Glossario/Polyfill": { - "modified": "2019-03-23T22:06:23.757Z", + "Web/API/CanvasRenderingContext2D/closePath": { + "modified": "2019-03-23T22:18:51.433Z", "contributors": [ - "vmellos", - "vgonsalez" + "MarceloBRN" ] }, - "Glossario/Port": { - "modified": "2019-03-23T22:24:11.899Z", + "Web/API/CanvasRenderingContext2D/fill": { + "modified": "2019-03-23T22:18:51.215Z", "contributors": [ - "mak213k" + "MarceloBRN" ] }, - "Glossario/Prefixos_vendor": { - "modified": "2019-03-23T22:29:28.726Z", + "Web/API/CanvasRenderingContext2D/fillRect": { + "modified": "2019-03-23T22:18:47.156Z", "contributors": [ - "UzumakiArtanis", - "angelorubin", - "deyvid0123" + "MarceloBRN" ] }, - "Glossario/Preflight_request": { - "modified": "2020-03-18T17:01:01.937Z", + "Web/API/CanvasRenderingContext2D/fillStyle": { + "modified": "2019-03-23T22:15:27.700Z", "contributors": [ - "leandroatavares", - "leandrokanis" + "MarceloBRN", + "sergiorg" ] }, - "Glossario/Primitivo": { - "modified": "2019-03-23T23:02:25.520Z", + "Web/API/CanvasRenderingContext2D/lineTo": { + "modified": "2019-03-23T22:18:50.928Z", "contributors": [ - "user2015", - "melostbr", - "trestini" + "MarceloBRN" ] }, - "Glossario/Programação_de_Computadores": { - "modified": "2019-03-23T22:36:02.574Z", + "Web/API/CanvasRenderingContext2D/moveTo": { + "modified": "2019-03-23T22:18:47.951Z", "contributors": [ - "jjmars" + "MarceloBRN" ] }, - "Glossario/Progressive_web_apps": { - "modified": "2020-11-29T08:12:45.879Z", + "Web/API/CanvasRenderingContext2D/quadraticCurveTo": { + "modified": "2019-03-18T21:42:53.744Z", "contributors": [ - "IsaqueDiniz" + "ollieestuff" ] }, - "Glossario/Protocolo": { - "modified": "2019-03-23T22:22:26.263Z", + "Web/API/CanvasRenderingContext2D/rect": { + "modified": "2019-03-18T21:43:19.793Z", "contributors": [ - "ViniciusMachado", - "melostbr" + "MarceloBRN" ] }, - "Glossario/Prototype": { - "modified": "2019-03-23T22:15:29.194Z", + "Web/API/CanvasRenderingContext2D/stroke": { + "modified": "2019-03-23T22:18:51.989Z", "contributors": [ - "andre-bahia" + "MarceloBRN" ] }, - "Glossario/Proxy_server": { - "modified": "2020-06-30T09:57:05.710Z", + "Web/API/CanvasRenderingContext2D/strokeRect": { + "modified": "2019-03-23T22:18:48.512Z", "contributors": [ - "lutzleonardo15", - "elvisguarda03" + "MarceloBRN" ] }, - "Glossario/Pseudo-class": { - "modified": "2019-03-23T22:22:16.368Z", + "Web/API/CharacterData": { + "modified": "2020-10-15T22:12:28.607Z", "contributors": [ - "LuanComputacao" + "marcos180212" ] }, - "Glossario/Pseudo-element": { - "modified": "2019-03-18T21:19:40.409Z", + "Web/API/ChildNode": { + "modified": "2020-10-15T21:55:14.252Z", "contributors": [ - "theuves" + "mateusvelleda", + "AlanSantos11", + "stevenwdv" ] }, - "Glossario/Python": { - "modified": "2019-03-23T22:21:19.519Z", + "Web/API/ChildNode/after": { + "modified": "2020-10-15T22:17:31.621Z", "contributors": [ - "ViniciusMachado" + "pedroguilhermelima" ] }, - "Glossario/REST": { - "modified": "2020-09-02T21:05:55.192Z", + "Web/API/ChildNode/remove": { + "modified": "2020-10-15T21:55:19.824Z", "contributors": [ - "fernandohtr" + "SphinxKnight", + "gutoribeiro" ] }, - "Glossario/Recursão": { - "modified": "2019-06-18T22:36:11.172Z", + "Web/API/ClipboardEvent": { + "modified": "2020-10-15T22:15:35.028Z", "contributors": [ - "deomorxsy", - "apsychox" + "duduindo", + "AnarcoPhysics" ] }, - "Glossario/Reflow": { - "modified": "2020-03-13T16:11:18.382Z", + "Web/API/CloseEvent": { + "modified": "2019-09-12T20:33:31.828Z", "contributors": [ - "EduardoDaSilva" + "marlonveiga-santos", + "rener_bz", + "dougKronos" ] }, - "Glossario/Request_header": { - "modified": "2019-03-18T21:25:47.888Z", + "Web/API/CloseEvent/CloseEvent": { + "modified": "2020-10-15T22:24:43.626Z", "contributors": [ - "Filipe-Souza" + "marlonveiga-santos" ] }, - "Glossario/Responsive_web_design": { - "modified": "2019-03-18T21:37:44.626Z", + "Web/API/Console": { + "modified": "2019-03-23T23:17:34.298Z", "contributors": [ - "coloringa" + "JorgeMadson", + "teoli", + "Webysther", + "khalid32", + "lfarroco" ] }, - "Glossario/Ruby": { - "modified": "2019-03-23T22:39:33.555Z", + "Web/API/Console/assert": { + "modified": "2019-03-23T22:25:22.069Z", "contributors": [ - "ygormaximo" + "mayronmedeiros" ] }, - "Glossario/SDP": { - "modified": "2020-11-24T03:27:06.272Z", + "Web/API/Console/clear": { + "modified": "2020-10-15T22:29:37.104Z", "contributors": [ - "guiseek" + "webfelipemaia" ] }, - "Glossario/SEO": { - "modified": "2019-03-23T22:28:40.636Z", + "Web/API/Console/count": { + "modified": "2019-03-23T22:16:10.687Z", "contributors": [ - "Aschlla" + "vspedr" ] }, - "Glossario/SGML": { - "modified": "2019-03-18T21:38:45.984Z", + "Web/API/Console/dir": { + "modified": "2019-03-23T22:50:36.909Z", "contributors": [ - "jorgeclesio" + "belsanpesou" ] }, - "Glossario/SVG": { - "modified": "2019-03-23T22:17:51.716Z", + "Web/API/Console/error": { + "modified": "2019-03-23T22:45:13.263Z", "contributors": [ - "coloringa", - "psergiojr" + "raduq" ] }, - "Glossario/Self-Executing_Anonymous_Function": { - "modified": "2019-03-18T21:24:13.352Z", + "Web/API/Console/info": { + "modified": "2019-03-23T22:29:13.618Z", "contributors": [ - "itumoraes" + "zaclummys", + "HugoOliveira" ] }, - "Glossario/Semantica": { - "modified": "2019-11-06T20:51:20.923Z", + "Web/API/Console/log": { + "modified": "2019-03-23T22:56:56.119Z", "contributors": [ - "klisostom", - "wcqueiroz" + "odahcam", + "Higo" ] }, - "Glossario/Servidor": { - "modified": "2019-03-23T22:47:28.024Z", + "Web/API/Console/table": { + "modified": "2020-10-15T22:16:14.686Z", "contributors": [ - "GoToLoop", - "raduq" + "elielsonbatista" ] }, - "Glossario/Sincrono": { - "modified": "2019-03-18T21:43:56.155Z", + "Web/API/Console/time": { + "modified": "2019-10-03T22:24:48.908Z", "contributors": [ - "SaraJade" + "gcacars" ] }, - "Glossario/Sloppy_mode": { - "modified": "2019-07-03T00:15:27.167Z", + "Web/API/Console/timeEnd": { + "modified": "2019-03-23T23:04:24.266Z", "contributors": [ - "opedropaes", - "marciooliveira" + "teoli", + "perrucho" ] }, - "Glossario/Stacking_context": { - "modified": "2019-03-23T22:09:15.293Z", + "Web/API/Console/timeStamp": { + "modified": "2019-10-03T22:25:43.901Z", "contributors": [ - "rener_bz" + "gcacars" ] }, - "Glossario/String": { - "modified": "2019-03-23T22:48:30.483Z", + "Web/API/Console/warn": { + "modified": "2019-03-18T21:45:25.881Z", "contributors": [ - "coloringa", - "reuel.jonathan" + "raduq" ] }, - "Glossario/Symbol": { - "modified": "2019-03-18T21:36:11.562Z", + "Web/API/Console_API": { + "modified": "2020-10-15T22:22:48.975Z", "contributors": [ - "RafaelAdao", - "trestini" + "luan0ap" ] }, - "Glossario/TCP": { - "modified": "2019-03-18T21:45:12.989Z", + "Web/API/Crypto": { + "modified": "2020-10-15T21:59:00.174Z", "contributors": [ - "SaraJade" + "Sipmann", + "Hikashii" ] }, - "Glossario/TLS": { - "modified": "2019-03-18T21:44:01.071Z", + "Web/API/Crypto/subtle": { + "modified": "2020-10-15T21:59:00.200Z", "contributors": [ - "SaraJade" + "fscholz", + "Hikashii" ] }, - "Glossario/Tag": { - "modified": "2019-06-14T07:53:04.390Z", + "Web/API/CryptoKey": { + "modified": "2019-03-23T22:02:50.915Z", "contributors": [ - "wcqueiroz", - "Renisson-Silva" + "Hikashii" ] }, - "Glossario/Three_js": { - "modified": "2019-03-18T21:44:29.352Z", + "Web/API/CustomElementRegistry": { + "modified": "2020-10-15T22:10:44.693Z", "contributors": [ - "lucaspontoexe" + "mtsgeneroso" ] }, - "Glossario/Tratando_Formulários_com_PHP": { - "modified": "2019-05-30T02:54:29.717Z", + "Web/API/DOMException": { + "modified": "2020-10-15T22:14:05.527Z", "contributors": [ - "jorgeclesio" + "hamadecd", + "viniciuspdasilva" ] }, - "Glossario/Truthy": { - "modified": "2019-03-23T22:44:49.553Z", + "Web/API/DOMImplementation": { + "modified": "2020-10-15T22:10:56.598Z", "contributors": [ - "cezaraugusto", - "jeanonline" + "connorshea" ] }, - "Glossario/URI": { - "modified": "2019-03-23T22:05:53.369Z", + "Web/API/DOMImplementation/createDocument": { + "modified": "2020-10-15T22:11:04.094Z", "contributors": [ - "pedropaulosuzuki" + "jeronimojr" ] }, - "Glossario/URL": { - "modified": "2019-03-23T22:17:47.485Z", + "Web/API/DOMString": { + "modified": "2019-03-23T22:03:59.387Z", "contributors": [ - "psergiojr" + "oirodolfo" ] }, - "Glossario/UTF-8": { - "modified": "2020-08-07T20:20:51.387Z", + "Web/API/DOMStringList": { + "modified": "2019-03-23T22:03:44.815Z", "contributors": [ - "rafhaelfitzpatrick" + "MaikeNegreiros" ] }, - "Glossario/UX": { - "modified": "2019-06-27T03:02:50.385Z", + "Web/API/DOMStringMap": { + "modified": "2019-05-02T19:22:48.801Z", "contributors": [ - "wcqueiroz" + "wbamberg", + "samir.araujo" ] }, - "Glossario/Valor": { - "modified": "2019-03-23T22:09:43.019Z", + "Web/API/DataTransfer": { + "modified": "2019-09-02T08:22:55.109Z", "contributors": [ - "melostbr", - "Fernandolrs" + "gugaburigo29", + "wbamberg", + "Murillo_Brandao" ] }, - "Glossario/Variável": { - "modified": "2019-03-23T22:04:07.138Z", + "Web/API/Document": { + "modified": "2019-07-14T14:49:00.357Z", "contributors": [ - "apsychox", - "melostbr", - "gabrielrosa2004" + "onsistec", + "defr4g", + "brevvi", + "otaviogui", + "aarrigo", + "rodrigocnascimento", + "GabrielAmazonas", + "Joao.JS", + "lionbtt", + "teoli" ] }, - "Glossario/Viewport": { - "modified": "2020-01-10T08:14:42.218Z", + "Web/API/Document/Document": { + "modified": "2019-07-17T13:05:53.557Z", "contributors": [ - "marlonveiga-santos" + "onsistec", + "pleshw" ] }, - "Glossario/W3C": { - "modified": "2020-01-10T00:07:54.607Z", + "Web/API/Document/URL": { + "modified": "2019-03-23T22:25:43.664Z", "contributors": [ - "brunofrra", - "GPrimola" + "littlecouto" ] }, - "Glossario/WHATWG": { - "modified": "2019-03-18T21:36:57.818Z", + "Web/API/Document/alinkColor": { + "modified": "2020-10-15T22:23:30.202Z", "contributors": [ - "GPrimola" + "g-malaconi", + "VictorhMalheiro" ] }, - "Glossario/WebSockets": { - "modified": "2019-03-18T21:30:41.662Z", + "Web/API/Document/anchors": { + "modified": "2019-03-23T22:10:28.887Z", "contributors": [ - "rbertoche" + "wbamberg", + "fernandosavio" ] }, - "Glossario/Wrapper": { - "modified": "2020-08-07T11:26:36.555Z", + "Web/API/Document/bgColor": { + "modified": "2019-03-18T20:59:10.676Z", "contributors": [ - "rafhaelfitzpatrick", - "Fernandolrs" + "SphinxKnight", + "henrywm" ] }, - "Glossario/XHR_(XMLHttpRequest)": { - "modified": "2019-04-26T09:39:50.976Z", + "Web/API/Document/body": { + "modified": "2019-03-23T22:49:43.056Z", "contributors": [ - "helton-mori-dev" + "josantana" ] }, - "Glossario/XML": { - "modified": "2019-03-23T22:17:58.150Z", + "Web/API/Document/characterSet": { + "modified": "2020-10-15T22:26:02.890Z", "contributors": [ - "psergiojr" + "g-malaconi" ] }, - "Glossario/array": { - "modified": "2019-06-22T20:19:15.594Z", + "Web/API/Document/close": { + "modified": "2019-03-23T22:05:22.094Z", "contributors": [ - "lucaslombardif", - "RNT17", - "gabrielagabriel", - "gusleindecker" + "henrywm" ] }, - "Glossario/arvore_de_acessibilidade": { - "modified": "2020-11-11T16:52:08.076Z", + "Web/API/Document/compatMode": { + "modified": "2019-03-18T20:59:09.892Z", "contributors": [ - "IsaqueDiniz" + "SphinxKnight", + "macalha" ] }, - "Glossario/caret": { - "modified": "2020-07-09T00:00:12.770Z", + "Web/API/Document/contentType": { + "modified": "2020-10-15T22:21:16.690Z", "contributors": [ - "ooVictorFranco" + "onsistec" ] }, - "Glossario/character_encoding": { - "modified": "2020-08-07T20:35:41.005Z", + "Web/API/Document/createElement": { + "modified": "2019-03-23T22:54:23.615Z", "contributors": [ - "rafhaelfitzpatrick" + "guilherme-adesouza", + "diogoreducino", + "teoli", + "nicholascamp" ] }, - "Glossario/conteiner_de_alinhamento": { - "modified": "2020-11-07T17:45:53.749Z", + "Web/API/Document/createElementNS": { + "modified": "2019-03-23T22:38:59.962Z", "contributors": [ - "IsaqueDiniz" + "LinuxPowerBR" ] }, - "Glossario/degradação_graciosa": { - "modified": "2020-09-22T20:12:45.099Z", + "Web/API/Document/currentScript": { + "modified": "2019-03-23T22:50:44.919Z", "contributors": [ - "BeatrizCavallieri", - "Dianakc" + "wbamberg", + "Mathmovic" ] }, - "Glossario/https": { - "modified": "2019-03-18T21:44:09.623Z", + "Web/API/Document/defaultView": { + "modified": "2019-03-23T22:45:13.537Z", "contributors": [ - "SaraJade" + "macalha" ] }, - "Glossario/jQuery": { - "modified": "2019-05-17T17:03:39.259Z", + "Web/API/Document/designMode": { + "modified": "2019-03-23T22:46:53.988Z", "contributors": [ - "ElsonMendes" + "caueamaral" ] }, - "Glossario/marcação": { - "modified": "2020-07-18T12:20:15.308Z", + "Web/API/Document/doctype": { + "modified": "2020-10-15T22:21:15.720Z", "contributors": [ - "jose.elias.0703" + "onsistec" ] }, - "Glossario/property": { - "modified": "2019-03-18T21:46:28.428Z", + "Web/API/Document/documentElement": { + "modified": "2019-03-23T22:50:37.447Z", "contributors": [ - "apsychox", - "melostbr" + "coloringa", + "belsanpesou" ] }, - "Glossario/property/CSS": { - "modified": "2019-03-18T21:46:38.697Z", + "Web/API/Document/documentURI": { + "modified": "2020-10-15T22:21:10.338Z", "contributors": [ - "melostbr" + "onsistec" ] }, - "Glossario/property/JavaScript": { - "modified": "2020-11-21T11:51:09.095Z", + "Web/API/Document/execCommand": { + "modified": "2020-10-15T22:28:17.705Z", "contributors": [ - "IsaqueDiniz" + "vladwoguerbezerra" ] }, - "Glossario/seguro": { - "modified": "2019-09-01T01:44:39.467Z", + "Web/API/Document/fullscreen": { + "modified": "2020-10-15T22:27:26.847Z", "contributors": [ - "FernandoKGA" + "Eliezer62" ] }, - "Glossario/topico_de_alinhamento": { - "modified": "2020-11-08T11:34:22.567Z", + "Web/API/Document/getElementById": { + "modified": "2019-09-15T13:18:53.343Z", "contributors": [ - "IsaqueDiniz" + "brasmon8351", + "hackerftsg", + "IcaroSantana", + "Filipe-Souza", + "eustabio_junior", + "teoli", + "khalid32", + "willian", + "YgorFranca" ] }, - "Glossario/undefined": { - "modified": "2019-03-23T22:47:22.150Z", + "Web/API/Document/getElementsByClassName": { + "modified": "2019-03-23T22:32:17.595Z", "contributors": [ - "raduq" + "fcard", + "lucasbento", + "marcelo.bastos" ] }, - "Glossario/webp": { - "modified": "2019-03-18T21:42:09.223Z", + "Web/API/Document/getElementsByName": { + "modified": "2020-10-15T22:22:47.482Z", "contributors": [ - "MarcosNakamine" + "KyryIx" ] }, - "Glossary/Block": { - "modified": "2019-03-18T21:20:53.271Z", + "Web/API/Document/getElementsByTagName": { + "modified": "2020-10-15T22:18:04.997Z", "contributors": [ - "Sheppy" + "JailsonAraujo" ] }, - "Glossary/Block/CSS": { - "modified": "2019-03-18T21:20:51.476Z", + "Web/API/Document/hasFocus": { + "modified": "2019-03-23T22:34:09.192Z", "contributors": [ - "hlays" + "renatoluna" ] }, - "HTML/Attributes": { - "modified": "2019-03-23T23:39:13.093Z", + "Web/API/Document/head": { + "modified": "2019-03-23T22:49:41.577Z", "contributors": [ - "MatCAlv", - "LeonardoPacheco", - "FelipeFonseca" + "josantana" ] }, - "HTML/Forms_in_HTML": { - "modified": "2019-03-23T23:38:57.820Z", + "Web/API/Document/height": { + "modified": "2019-03-23T22:04:29.295Z", "contributors": [ - "digovc", - "andrejunges", - "phenriqueleao" + "macalha" ] }, - "Hello_World_Rust": { - "modified": "2019-03-23T22:54:34.208Z", + "Web/API/Document/images": { + "modified": "2019-03-23T23:06:58.234Z", "contributors": [ - "IvomarS", - "molokdotc" + "teoli", + "JorgeRodrigues9" ] }, - "Instalando_Rust": { - "modified": "2019-03-23T22:54:43.463Z", + "Web/API/Document/implementation": { + "modified": "2019-03-18T21:16:40.902Z", "contributors": [ - "molokdotc" + "macalha" ] }, - "JSON": { - "modified": "2019-03-23T23:24:58.365Z", + "Web/API/Document/importNode": { + "modified": "2020-10-15T21:47:31.458Z", "contributors": [ - "teoli", - "estevamdf" + "fscholz", + "wbamberg", + "VitorVRS" ] }, - "Learn/Accessibility": { - "modified": "2020-09-28T22:33:19.289Z", + "Web/API/Document/keydown_event": { + "modified": "2019-04-15T09:18:45.968Z", "contributors": [ - "helton-mori-dev", - "hadleyel" + "irenesmith", + "manoelcampos" ] }, - "Learn/Accessibility/Acessibilidade_problemas": { - "modified": "2020-07-16T22:40:36.530Z", + "Web/API/Document/keypress_event": { + "modified": "2019-09-23T02:29:04.664Z", "contributors": [ - "luan0ap", - "msales" + "SphinxKnight", + "TiagoEmanuel", + "wbamberg", + "chrisdavidmills", + "JRodrigues13" ] }, - "Learn/Accessibility/CSS_e_JavaScript": { - "modified": "2020-07-16T22:40:18.608Z", + "Web/API/Document/keyup_event": { + "modified": "2019-04-18T03:51:22.396Z", "contributors": [ - "raphaelminacio" + "irenesmith", + "fscholz", + "thaynacoelho" ] }, - "Learn/Accessibility/HTML": { - "modified": "2020-07-16T22:40:14.200Z", + "Web/API/Document/location": { + "modified": "2019-03-23T22:22:06.393Z", "contributors": [ - "claubatista", - "msales", - "djagher" + "HugoBex" ] }, - "Learn/CSS/Building_blocks/Selectors": { - "modified": "2020-09-20T16:23:13.975Z", + "Web/API/Document/origin": { + "modified": "2020-10-15T22:14:43.600Z", "contributors": [ - "Dhiezon_Gois", - "chrisdavidmills" + "Rondinelly" ] }, - "Learn/CSS/Building_blocks/Selectors/Attribute_selectors": { - "modified": "2020-08-10T15:51:24.045Z", + "Web/API/Document/querySelector": { + "modified": "2019-08-15T13:21:36.389Z", "contributors": [ - "dsantana77" + "fernandosavio", + "teoli", + "AshfaqHossain", + "HenriqueSilverio" ] }, - "Learn/CSS/CSS_layout": { - "modified": "2020-07-31T21:27:32.805Z", + "Web/API/Document/querySelectorAll": { + "modified": "2019-03-23T23:35:24.346Z", "contributors": [ - "cyz", - "WesleyCristiano", - "peas", - "webfelipemaia", - "agathasilva28", - "Tiagosb", - "chrisdavidmills" + "maarysantos", + "fernandosavio", + "teoli", + "zapimaster" ] }, - "Learn/CSS/CSS_layout/Flexbox": { - "modified": "2020-07-16T22:26:55.364Z", + "Web/API/Document/readyState": { + "modified": "2019-08-15T13:11:06.674Z", "contributors": [ - "peas", - "GPrimola", - "magnonp" + "imnotvirus", + "macalha" ] }, - "Learn/CSS/CSS_layout/Fluxo_Normal": { - "modified": "2020-07-16T22:27:22.550Z", + "Web/API/Document/referrer": { + "modified": "2019-03-23T22:44:47.032Z", "contributors": [ - "GiovanniHD201E" + "alexandrefsans", + "TAGBrasil" ] }, - "Learn/CSS/CSS_layout/Intro_leiaute_CSS": { - "modified": "2020-07-16T22:27:07.240Z", + "Web/API/Document/scripts": { + "modified": "2019-03-23T23:14:44.682Z", "contributors": [ - "GiovanniHD201E" + "teoli", + "BrenoPolanski" ] }, - "Learn/CSS/CSS_layout/Layout_de_varias_colunas": { - "modified": "2020-07-16T22:27:11.776Z", + "Web/API/Document/write": { + "modified": "2020-10-29T21:41:43.539Z", "contributors": [ - "FabricioBernardes" + "PedroHen1", + "webfelipemaia" ] }, - "Learn/CSS/CSS_layout/Positioning": { - "modified": "2020-07-16T22:26:45.710Z", + "Web/API/Document/writeln": { + "modified": "2019-03-23T23:10:34.523Z", "contributors": [ - "GiovanniHD201E" + "teoli", + "jsx", + "Nathalino_Pacheco" ] }, - "Learn/CSS/CSS_layout/Responsive_Design": { - "modified": "2020-08-22T17:27:59.073Z", + "Web/API/DocumentFragment": { + "modified": "2020-06-18T15:03:01.638Z", "contributors": [ - "manoelbjr", - "crisleitaoguerra" + "moiteiro", + "haskellcamargo", + "teoli", + "felfiz" ] }, - "Learn/CSS/First_steps": { - "modified": "2020-09-21T13:39:03.225Z", + "Web/API/Element": { + "modified": "2019-03-18T21:08:52.187Z", "contributors": [ - "BeatrizCavallieri", - "josealisson95", - "dmchaves", - "gpdias", - "danielSramos", - "arthurssfreitas", - "felipekafuri", - "chrisdavidmills" + "fscholz", + "coloringa", + "fime", + "teoli" ] }, - "Learn/CSS/First_steps/Como_CSS_e_estruturado": { - "modified": "2020-11-07T13:04:16.800Z", + "Web/API/Element/animate": { + "modified": "2019-03-23T22:07:02.826Z", "contributors": [ - "sabertoletti32", - "JuniorUbarana", - "Edsonoguera", - "danfrsv", - "felipekafuri" + "evandrolacerda" ] }, - "Learn/CSS/First_steps/How_CSS_works": { - "modified": "2020-07-27T17:09:53.707Z", + "Web/API/Element/attributes": { + "modified": "2019-03-23T22:27:10.096Z", "contributors": [ - "warleyfdias", - "lancaluis", - "LuisFreitas1", - "Edsonoguera", - "danielcmelonio", - "cirogomes58" + "DiasNetoJ" ] }, - "Learn/CSS/First_steps/Iniciando": { - "modified": "2020-07-27T14:59:56.561Z", + "Web/API/Element/classList": { + "modified": "2019-03-23T22:21:03.577Z", "contributors": [ - "warleyfdias", - "klisostom" + "elnascimento", + "rafaelcavalcante", + "LucasRuy" ] }, - "Learn/CSS/First_steps/O_que_e_CSS": { - "modified": "2020-10-15T22:23:04.005Z", + "Web/API/Element/className": { + "modified": "2019-03-23T22:37:29.089Z", "contributors": [ - "klisostom" + "lucasmedina" ] }, - "Learn/CSS/First_steps/Using_your_new_knowledge": { - "modified": "2020-07-16T22:28:04.939Z", - "contributors": [ - "LuisFreitas1" + "Web/API/Element/click_event": { + "modified": "2019-03-23T22:00:01.063Z", + "contributors": [ + "irenesmith", + "rochucky", + "fscholz", + "diegocesar" ] }, - "Learn/CSS/Howto": { - "modified": "2020-07-16T22:25:43.674Z", + "Web/API/Element/closest": { + "modified": "2020-10-15T21:57:42.583Z", "contributors": [ - "chrisdavidmills" + "mateusvelleda", + "willamesoares" ] }, - "Learn/CSS/Howto/CSS_Perguntas_Frequentes": { - "modified": "2020-07-16T22:25:45.672Z", + "Web/API/Element/getAttribute": { + "modified": "2019-03-23T23:08:02.469Z", "contributors": [ - "JefersonOliveira90" + "brunoravanhani", + "teoli", + "gabrieltr" ] }, - "Learn/Common_questions": { - "modified": "2020-07-16T22:35:26.243Z", + "Web/API/Element/getBoundingClientRect": { + "modified": "2020-10-15T21:46:45.096Z", "contributors": [ - "ManoMartins", - "mrmorais", - "rudolfo" + "SphinxKnight", + "cezaraugusto", + "Daibushi" ] }, - "Learn/Common_questions/Como_a_internet_funciona": { - "modified": "2020-07-16T22:35:37.501Z", + "Web/API/Element/getElementsByClassName": { + "modified": "2020-10-15T22:29:44.232Z", "contributors": [ - "firenhite", - "wcqueiroz", - "danielbrai", - "barrosval", - "lhenriquenunes", - "mrmorais" + "leonardomaier" ] }, - "Learn/Common_questions/Como_configurar_um_servidor_de_testes_local": { - "modified": "2020-07-16T22:35:53.295Z", + "Web/API/Element/id": { + "modified": "2019-03-23T23:09:45.457Z", "contributors": [ - "RenanArques", - "wcqueiroz", - "SphinxKnight", - "linoveloso", - "vgabrielps", - "Edusar" + "brunoravanhani", + "teoli", + "khalid32", + "alexandrem" ] }, - "Learn/Common_questions/Como_voce_hospeda_seu_site_Google_App_Engine": { - "modified": "2020-07-16T22:35:52.368Z", + "Web/API/Element/innerHTML": { + "modified": "2020-07-14T14:51:24.487Z", "contributors": [ - "Felipe-GB", - "wcqueiroz" + "aquiles23", + "SphinxKnight", + "g-thome", + "n4rut0r31", + "fnsc.luis" ] }, - "Learn/Common_questions/O_que_são_hyperlinks": { - "modified": "2020-09-14T13:55:12.468Z", + "Web/API/Element/insertAdjacentHTML": { + "modified": "2019-03-23T22:50:34.232Z", "contributors": [ - "lathne" + "rafaelcavalcante", + "raphaelchaib", + "belsanpesou" ] }, - "Learn/Common_questions/Pages_sites_servers_and_search_engines": { - "modified": "2020-07-16T22:35:40.295Z", + "Web/API/Element/matches": { + "modified": "2019-03-23T22:20:51.438Z", "contributors": [ - "Magela", - "tavieto", - "brunoAlves", - "wcqueiroz", - "juliana-amoasei", - "danielbrai" + "jozadaquebatista" ] }, - "Learn/Common_questions/Pensando_antes_de_codificar": { - "modified": "2020-07-16T22:35:34.836Z", + "Web/API/Element/mousedown_event": { + "modified": "2019-04-30T14:20:11.230Z", "contributors": [ - "firenhite", - "wcqueiroz" + "wbamberg", + "irenesmith", + "KaykyB" ] }, - "Learn/Common_questions/Quanto_custa_fazer_algo_web": { - "modified": "2020-07-16T22:35:45.917Z", + "Web/API/Element/mouseenter_event": { + "modified": "2019-04-30T14:17:45.007Z", "contributors": [ - "wcqueiroz" + "wbamberg", + "irenesmith", + "fscholz", + "jppaschoal" ] }, - "Learn/Common_questions/Que_software_eu_preciso": { - "modified": "2020-07-16T22:35:33.538Z", + "Web/API/Element/mouseover_event": { + "modified": "2019-04-30T14:03:03.928Z", "contributors": [ - "sredoja" + "wbamberg", + "irenesmith", + "Bobson360" ] }, - "Learn/Common_questions/Upload_files_to_a_web_server": { - "modified": "2020-11-22T03:28:22.451Z", + "Web/API/Element/outerHTML": { + "modified": "2019-03-23T22:34:59.844Z", "contributors": [ - "kvojps" + "LucianoCardoso" ] }, - "Learn/Common_questions/Using_Github_pages": { - "modified": "2020-07-16T22:35:51.948Z", + "Web/API/Element/querySelector": { + "modified": "2019-03-23T23:02:11.163Z", "contributors": [ - "Celio1234" + "fernandoleal", + "teoli", + "tbai" ] }, - "Learn/Common_questions/What_is_a_domain_name": { - "modified": "2020-07-16T22:35:44.455Z", + "Web/API/Element/querySelectorAll": { + "modified": "2019-05-03T00:57:05.010Z", "contributors": [ - "wcqueiroz", - "Amarildo", - "clstrni" + "wbamberg", + "viniciusvms", + "teoli", + "LuizPanariello" ] }, - "Learn/Common_questions/ferramentas_de_desenvolvimento_do_navegador": { - "modified": "2020-07-16T22:35:47.861Z", + "Web/API/Element/removeAttribute": { + "modified": "2019-03-23T23:06:58.347Z", "contributors": [ - "gilmargn", - "italorangel", - "ocaccy", - "7aylors", - "rubenfaria" + "teoli", + "cel055" ] }, - "Learn/Common_questions/o_que_e_um_web_server": { - "modified": "2020-07-16T22:35:31.716Z", + "Web/API/Element/scrollIntoView": { + "modified": "2020-10-15T21:52:05.069Z", "contributors": [ - "wcqueiroz", - "thaishfmarques", - "erickandrade", - "lfpelison", - "kleinerbr", - "linielson" + "mateusvelleda", + "thiago890-3", + "mausim" ] }, - "Learn/JavaScript/Asynchronous": { - "modified": "2020-08-22T17:58:38.750Z", + "Web/API/Element/scrollLeft": { + "modified": "2020-10-15T21:46:51.554Z", "contributors": [ - "manoelbjr", - "Sheppy" + "djornada", + "SphinxKnight", + "eustabio_junior" ] }, - "Learn/JavaScript/Asynchronous/Conceitos": { - "modified": "2020-10-06T09:57:59.299Z", + "Web/API/Element/scrollTop": { + "modified": "2019-03-23T22:40:30.613Z", "contributors": [ - "joseluizmonteirojr", - "bellammuniz" + "samuelsilvadev", + "Alex-Alan-Nunes" ] }, - "Learn/JavaScript/Asynchronous/Escolhendo_abordagem_correta": { - "modified": "2020-10-15T22:33:23.228Z", + "Web/API/Element/scrollWidth": { + "modified": "2020-10-15T21:56:42.511Z", "contributors": [ - "manoelbjr" + "SphinxKnight", + "joaovinicius" ] }, - "Learn/JavaScript/Asynchronous/Introdução": { - "modified": "2020-07-16T22:33:17.985Z", + "Web/API/Element/setAttribute": { + "modified": "2019-03-23T22:31:48.961Z", "contributors": [ - "bellammuniz" + "rplaurindo" ] }, - "Learn/JavaScript/Asynchronous/Promises": { - "modified": "2020-08-22T16:43:55.918Z", + "Web/API/Element/setAttributeNS": { + "modified": "2019-03-23T22:21:30.240Z", "contributors": [ - "manoelbjr", - "luan0ap" + "edgardleal" ] }, - "Learn/JavaScript/Asynchronous/Timeouts_and_intervals": { - "modified": "2020-07-16T22:33:21.635Z", + "Web/API/Element/tagName": { + "modified": "2019-03-23T22:07:25.667Z", "contributors": [ - "vbarcellos", - "bellammuniz" + "VitorHFLopes" ] }, - "Learn/JavaScript/First_steps": { - "modified": "2020-07-16T22:29:54.330Z", + "Web/API/Element/touchstart_event": { + "modified": "2019-04-30T14:26:22.509Z", "contributors": [ - "Magela", - "MattBizzo", - "alefesouza", - "linielson", - "rdeiana", - "chrisdavidmills" + "wbamberg", + "irenesmith", + "fscholz", + "ZekDtonik" ] }, - "Learn/JavaScript/First_steps/A_first_splash": { - "modified": "2020-08-28T16:05:03.838Z", + "Web/API/Encoding_API": { + "modified": "2020-10-15T22:25:14.787Z", "contributors": [ - "webfelipemaia", - "zKhiro", - "MattBizzo", - "rubenfaria", - "thiagolucio" + "luan0ap" ] }, - "Learn/JavaScript/First_steps/Arrays": { - "modified": "2020-07-16T22:30:57.011Z", + "Web/API/Event": { + "modified": "2019-03-23T23:01:39.950Z", "contributors": [ - "izaqueJr", - "gabriel_cadu", - "VictorGom3s", - "BrunoThomaz" + "ralfting", + "gregori", + "juliocarneiro", + "fscholz" ] }, - "Learn/JavaScript/First_steps/Gerador_de_historias_bobas": { - "modified": "2020-07-16T22:31:02.876Z", + "Web/API/Event/Event": { + "modified": "2020-10-15T21:42:53.584Z", "contributors": [ - "gabriel_cadu", - "kaiqueprazeres", - "VictorGom3s", - "fenobalao", - "carlos-rafael" + "fscholz", + "juliocarneiro" ] }, - "Learn/JavaScript/First_steps/Matematica": { - "modified": "2020-07-16T22:30:27.765Z", + "Web/API/Event/currentTarget": { + "modified": "2019-03-18T21:42:03.631Z", "contributors": [ - "leonardogbxv", - "VictorCPPlanas", - "etc_william", - "BrunoBit", - "webfelipemaia", - "MattBizzo", - "rubenfaria" + "leom806", + "WederPachecoSilva" ] }, - "Learn/JavaScript/First_steps/O_que_e_JavaScript": { - "modified": "2020-08-28T14:30:44.945Z", + "Web/API/Event/defaultPrevented": { + "modified": "2019-03-23T22:53:50.174Z", "contributors": [ - "moukinchung", - "webfelipemaia", - "di3goCS", - "LuizEduS", - "fersouza90", - "Magela", - "lzhudson", - "rubenfaria", - "MattBizzo", - "BiancaAlves", - "thierryrenematos" + "Fabiolux" ] }, - "Learn/JavaScript/First_steps/Strings": { - "modified": "2020-07-16T22:30:40.936Z", + "Web/API/Event/initEvent": { + "modified": "2019-05-30T19:08:33.694Z", "contributors": [ - "lzhudson", - "BrunoThomaz" + "RoinujNosde", + "rodrigocnascimento" ] }, - "Learn/JavaScript/First_steps/Teste_suas_habilidades:_variaveis": { - "modified": "2020-07-18T16:26:39.168Z", + "Web/API/Event/isTrusted": { + "modified": "2020-10-15T22:15:35.212Z", "contributors": [ - "webfelipemaia" + "AnarcoPhysics" ] }, - "Learn/JavaScript/First_steps/Useful_string_methods": { - "modified": "2020-07-16T22:30:49.411Z", + "Web/API/Event/preventDefault": { + "modified": "2019-03-23T22:39:06.025Z", "contributors": [ - "izaqueJr", - "Juliohub", - "VictorCPPlanas", - "greysonf", - "mwilson.oliveira", - "colares" + "juliocarneiro" ] }, - "Learn/JavaScript/First_steps/Variáveis": { - "modified": "2020-07-18T12:10:35.369Z", + "Web/API/Event/srcElement": { + "modified": "2019-03-23T22:35:07.248Z", "contributors": [ - "webfelipemaia", - "Magela", - "lzhudson", - "MattBizzo", - "rubenfaria", - "fenobalao" + "macalha" ] }, - "Learn/JavaScript/First_steps/What_went_wrong": { - "modified": "2020-07-16T22:30:35.893Z", + "Web/API/Event/stopImmediatePropagation": { + "modified": "2019-03-18T20:45:36.763Z", "contributors": [ - "Ramon9825", - "lzhudson", - "VictorGom3s", - "MattBizzo", - "rubenfaria", - "francoforget", - "ReinaldoLuna" + "MarcioCorrea", + "caueamaral", + "junior201110" ] }, - "Learn/Server-side": { - "modified": "2020-07-16T22:36:01.419Z", + "Web/API/Event/stopPropagation": { + "modified": "2020-08-29T13:09:53.471Z", "contributors": [ - "caveman-0", - "greysonf", - "chrisdavidmills" + "geffbatista", + "diegolaquino", + "drigores", + "strael1", + "raul3k" ] }, - "Learn/Server-side/Django": { - "modified": "2020-08-25T19:47:59.806Z", + "Web/API/Event/target": { + "modified": "2020-11-05T02:57:14.382Z", "contributors": [ - "glauconeto", - "victorruand", - "caveman-0", - "marcoxavier2005", - "julianofischer", - "rodrigowmendes", - "joanasouza", - "dougfeltrim", - "jozadaquebatista" + "SphinxKnight", + "miguelbrn", + "LucasRuy" ] }, - "Learn/Server-side/Django/Admin_site": { - "modified": "2020-08-21T19:03:06.539Z", + "Web/API/Event/type": { + "modified": "2019-03-23T23:22:07.699Z", "contributors": [ - "ecoscom", - "jefersonsalvador", - "fossalex", - "theafien" + "teoli", + "mateuspv" ] }, - "Learn/Server-side/Django/Authentication": { - "modified": "2020-07-16T22:37:23.404Z", + "Web/API/EventListener": { + "modified": "2019-03-23T22:20:33.890Z", "contributors": [ - "ecoscom", - "fossalex" + "cezaraugusto" ] }, - "Learn/Server-side/Django/Forms": { - "modified": "2020-07-16T22:37:33.125Z", + "Web/API/EventSource": { + "modified": "2019-03-23T22:50:15.004Z", "contributors": [ - "ecoscom", - "fossalex", - "letuche" + "ronrother", + "Madalosso", + "leonardopandrade" ] }, - "Learn/Server-side/Django/Generic_views": { - "modified": "2020-08-26T10:32:14.826Z", + "Web/API/EventSource/EventSource": { + "modified": "2019-03-18T21:30:57.351Z", "contributors": [ - "ecoscom", - "fossalex" + "ronrother" ] }, - "Learn/Server-side/Django/Home_page": { - "modified": "2020-08-26T10:26:47.773Z", + "Web/API/EventSource/onerror": { + "modified": "2019-03-18T21:30:45.574Z", "contributors": [ - "ecoscom", - "glauconeto", - "fossalex" + "ronrother" ] }, - "Learn/Server-side/Django/Hospedagem": { - "modified": "2020-09-05T19:47:24.465Z", + "Web/API/EventTarget": { + "modified": "2019-03-23T23:16:55.717Z", "contributors": [ - "Ricardo_Ribeiro" + "victor_emanuel", + "teoli", + "khalid32", + "eliezerb" ] }, - "Learn/Server-side/Django/Introdução": { - "modified": "2020-09-05T19:15:55.942Z", + "Web/API/EventTarget/EventTarget": { + "modified": "2020-10-15T22:24:50.823Z", "contributors": [ - "rykarumstuler", - "ecoscom", - "edivandyeimes", - "kiabo", - "Guilhermeasper", - "caveman-0", - "lopespaz", - "Nordor1" + "marlonveiga-santos" ] }, - "Learn/Server-side/Django/Models": { - "modified": "2020-08-26T10:09:56.378Z", + "Web/API/EventTarget/dispatchEvent": { + "modified": "2019-03-18T21:17:11.648Z", "contributors": [ - "ecoscom", - "jefersonsalvador", - "Carine-Neris", - "fossalex", - "FRebeca", - "lucasjponce", - "montovaneli", - "lopespaz" + "angellica.araujo" ] }, - "Learn/Server-side/Django/Sessões": { - "modified": "2020-07-16T22:37:27.571Z", + "Web/API/EventTarget/removeEventListener": { + "modified": "2020-10-15T21:37:49.617Z", "contributors": [ - "ecoscom", - "tamiryspino", - "fossalex", - "brendonhc" + "mateusvelleda", + "angellica.araujo" ] }, - "Learn/Server-side/Django/Testing": { - "modified": "2020-07-16T22:37:38.133Z", + "Web/API/Fetch_API": { + "modified": "2020-10-15T21:42:57.080Z", "contributors": [ - "ecoscom" + "mateusvelleda", + "BrunoLucas", + "fapbatista", + "tcelestino" ] }, - "Learn/Server-side/Django/Tutorial_website_biblioteca_local": { - "modified": "2020-08-26T10:23:14.303Z", + "Web/API/Fetch_API/Basic_concepts": { + "modified": "2020-02-17T13:24:31.887Z", "contributors": [ - "ecoscom", - "caveman-0", - "ViniciusMatias", - "victordfb", - "lopespaz", - "naiieandrade" + "diezan", + "LincePotiguara" ] }, - "Learn/Server-side/Django/ambiente_de_desenvolvimento": { - "modified": "2020-08-26T10:15:03.041Z", + "Web/API/Fetch_API/Using_Fetch": { + "modified": "2020-10-15T21:51:06.123Z", "contributors": [ - "ecoscom", - "BraianF", - "ViniciusMatias" + "CharlesEduardoSCBR", + "PauloNFraga", + "rodrigost23", + "puppe1990", + "mateusvelleda", + "AndreRodriguesMelo", + "jeronimojr", + "JEricFarias", + "Italox", + "claudemirmendes", + "nelsonealves", + "dowgssss", + "FranciscoJunior", + "DanZeuss", + "rennerocha" ] }, - "Learn/Server-side/Django/skeleton_website": { - "modified": "2020-08-20T01:54:03.884Z", + "Web/API/File": { + "modified": "2019-03-23T23:11:40.315Z", "contributors": [ - "BraianF", - "jefersonsalvador", - "letuche", - "ViniciusMatias", - "lopespaz", - "faustobenini" + "ivanmrosa", + "teoli", + "Beterraba" ] }, - "Learn/Server-side/Django/web_application_security": { - "modified": "2020-08-21T19:04:44.833Z", + "Web/API/File/Using_files_from_web_applications": { + "modified": "2019-03-23T23:36:41.452Z", "contributors": [ - "ecoscom" + "chrisdavidmills", + "FelipeFonseca" ] }, - "Learn/Server-side/Express_Nodejs": { - "modified": "2020-07-16T22:37:54.607Z", + "Web/API/FileList": { + "modified": "2019-03-23T22:14:37.211Z", "contributors": [ - "AAntoniazzi", - "ClemerJunior", - "fabiano.monte" + "julianotcp" ] }, - "Learn/Server-side/Express_Nodejs/Displaying_data": { - "modified": "2020-07-16T22:38:30.773Z", + "Web/API/FileReader": { + "modified": "2019-03-18T20:49:40.766Z", "contributors": [ - "bivoigt" + "andersonmo", + "hugonmelo", + "ricardoferreirades", + "belsanpesou", + "rafaelcalpena", + "teoli", + "wbruno" ] }, - "Learn/Server-side/Express_Nodejs/Displaying_data/flow_control_using_async": { - "modified": "2020-07-16T22:38:33.142Z", + "Web/API/FileReader/FileReader": { + "modified": "2019-09-27T14:33:41.762Z", "contributors": [ - "caiollavos" + "junior-jornada", + "helton-mori-dev" ] }, - "Learn/Server-side/Express_Nodejs/Introdução": { - "modified": "2020-07-16T22:38:12.682Z", + "Web/API/FileReader/onload": { + "modified": "2019-12-24T01:07:36.177Z", "contributors": [ - "ddanielcardoso", - "ErialdoDFfreitas", - "luane-aquino", - "AAntoniazzi", - "andersonse", - "TecladistaProd" + "euvanribeiro", + "educhigon" ] }, - "Learn/Server-side/Express_Nodejs/Tutorial_local_library_website": { - "modified": "2020-07-16T22:38:16.508Z", + "Web/API/FileReader/readAsArrayBuffer": { + "modified": "2019-03-23T22:25:41.700Z", "contributors": [ - "ddanielcardoso", - "moronimotta" + "fabioleardini" ] }, - "Learn/Server-side/Express_Nodejs/ambiente_de_desenvolvimento": { - "modified": "2020-07-16T22:38:00.195Z", + "Web/API/FileReader/readAsBinaryString": { + "modified": "2019-03-23T22:27:28.165Z", "contributors": [ - "ddanielcardoso", - "AAntoniazzi", - "danilosetubal" + "teoli", + "Cyrkran" ] }, - "Learn/Server-side/Express_Nodejs/deployment": { - "modified": "2020-07-16T22:38:50.392Z", + "Web/API/FileReader/readAsDataURL": { + "modified": "2019-03-23T22:51:10.920Z", "contributors": [ - "gabrielfdg10", - "andersonse" + "W3SS", + "DiegoYungh" ] }, - "Learn/Server-side/Express_Nodejs/mongoose": { - "modified": "2020-07-16T22:38:22.513Z", + "Web/API/FileReader/readAsText": { + "modified": "2019-03-23T22:15:55.068Z", "contributors": [ - "maletta", - "TatiTheFreaK", - "arturlicks", - "Samuscosta" + "fellypsantos" ] }, - "Learn/Server-side/Express_Nodejs/skeleton_website": { - "modified": "2020-07-16T22:38:05.698Z", + "Web/API/FormData": { + "modified": "2019-03-23T23:08:47.831Z", "contributors": [ - "moronimotta" + "cautnew", + "CassianoD2", + "julianotcp", + "qixmiers", + "alexandresn", + "teoli", + "slackrichard" ] }, - "Learn/Server-side/First_steps": { - "modified": "2020-11-23T00:02:31.153Z", + "Web/API/FormData/FormData": { + "modified": "2019-03-23T22:15:46.234Z", "contributors": [ - "kvojps", - "Magela", - "c1c3ru", - "kjerinic" + "luislobo14rap", + "emersonlaurentino" ] }, - "Learn/Server-side/First_steps/Client-Server_overview": { - "modified": "2020-12-06T18:07:14.325Z", + "Web/API/FormData/append": { + "modified": "2019-03-23T22:36:07.939Z", "contributors": [ - "duduindo", - "kvojps", - "MicaelFN" + "Ascamp", + "rogerioac", + "DouglasValdo" ] }, - "Learn/Server-side/First_steps/Introdução": { - "modified": "2020-12-06T18:10:00.170Z", + "Web/API/FormData/delete": { + "modified": "2019-03-23T22:52:03.924Z", "contributors": [ - "duduindo", - "kvojps" + "DouglasValdo" ] }, - "Learn/Server-side/First_steps/Seguranca_site": { - "modified": "2020-07-16T22:36:29.289Z", + "Web/API/FormData/entries": { + "modified": "2020-10-15T22:22:54.323Z", "contributors": [ - "The-Physicist", - "wcqueiroz" + "abalioni" ] }, - "Learn/Tools_and_testing/Client-side_JavaScript_frameworks": { - "modified": "2020-11-20T15:01:38.744Z", + "Web/API/FormData/get": { + "modified": "2019-03-23T22:49:19.241Z", "contributors": [ - "Marrior-dot", - "gevsantos", - "CodeDotJS" + "antoniomquadrosfilho" ] }, - "Learn/Tools_and_testing/Client-side_JavaScript_frameworks/Comecando_com_React": { - "modified": "2020-10-29T12:43:23.860Z", + "Web/API/FormData/getAll": { + "modified": "2020-10-15T22:10:15.102Z", "contributors": [ - "pachicodes", - "Aleks", - "Ismael-Oliv", - "gilmargn", - "angelorubin", - "gsb6" + "enieber" ] }, - "Learn/Tools_and_testing/Client-side_JavaScript_frameworks/Vue_iniciando": { - "modified": "2020-07-16T22:39:49.009Z", + "Web/API/FormData/has": { + "modified": "2020-10-15T22:22:52.357Z", "contributors": [ - "fred_melo_07" + "abalioni" ] }, - "Learn/Tools_and_testing/Cross_browser_testing": { - "modified": "2020-07-16T22:39:00.890Z", + "Web/API/FormData/set": { + "modified": "2019-03-23T22:30:34.242Z", "contributors": [ - "caiquesandrade", - "wbamberg", - "arai" + "welingtonms" ] }, - "Learn/Tools_and_testing/Cross_browser_testing/Introduction": { - "modified": "2020-07-16T22:39:04.327Z", + "Web/API/FullscreenOptions": { + "modified": "2020-10-15T22:15:52.238Z", "contributors": [ - "jozadaquebatista" + "TecladistaProd" ] }, - "Localização": { - "modified": "2019-03-23T23:25:17.486Z", + "Web/API/Gamepad_API": { + "modified": "2020-10-15T22:23:34.951Z", "contributors": [ - "-", - "ronaldo-bonfim" + "IuriPires" ] }, - "MDN": { - "modified": "2020-02-19T18:02:47.459Z", + "Web/API/Geolocation": { + "modified": "2020-10-15T21:26:05.516Z", "contributors": [ - "jswisher", - "SphinxKnight", - "wcqueiroz", - "wbamberg", - "gutoribeiro", - "Jeremie", - "-", - "PriscillaAlcalde", - "Sheppy" + "Sipmann", + "eduardobrenn", + "Leodma", + "teoli", + "cirocosta" ] }, - "MDN/About": { - "modified": "2019-09-11T08:06:52.705Z", + "Web/API/Geolocation/clearWatch": { + "modified": "2020-10-15T22:15:59.752Z", "contributors": [ - "SphinxKnight", - "wbamberg", - "larimaza", - "luisfvieira", - "luc4smoreira", - "jswisher", - "joaopaulosama", - "leandroruel", - "Danilson_Veloso", - "-", - "morvanabonin", - "A.M.M.A." + "TecladistaProd" ] }, - "MDN/Comunidade": { - "modified": "2019-03-23T23:18:59.817Z", + "Web/API/Geolocation/getCurrentPosition": { + "modified": "2019-01-16T20:45:52.604Z", "contributors": [ - "sauloandrade", - "wbamberg", - "mrmorais", - "CNicola", - "camimq", - "-", - "Fabiola" + "Gutem", + "fscholz", + "robsonalvesbh" ] }, - "MDN/Comunidade/Trabalhando_em_comunidade": { - "modified": "2020-02-19T19:05:23.989Z", + "Web/API/Geolocation/watchPosition": { + "modified": "2019-03-23T22:50:20.143Z", "contributors": [ - "jswisher", - "wbamberg", - "MarceloBRN", - "Fernandolrs", - "mak213k", - "RenanBirck" + "Gutem" ] }, - "MDN/Comunidade/Whats_happening": { - "modified": "2019-03-23T23:00:32.486Z", + "Web/API/GeolocationCoordinates": { + "modified": "2019-12-10T09:35:08.897Z", "contributors": [ - "wbamberg", - "-" + "chrisdavidmills", + "eduardobrenn" ] }, - "MDN/Contribute": { - "modified": "2019-12-26T13:39:13.687Z", + "Web/API/GeolocationCoordinates/altitude": { + "modified": "2020-10-15T22:16:41.064Z", "contributors": [ - "maugravena", - "wcqueiroz", - "wbamberg", - "GPrimola", - "Aschlla", - "alexrohleder", - "-", - "rodrigopadula", - "marksabbath", - "Sheppy" + "chrisdavidmills", + "wallisonfelipe" ] }, - "MDN/Contribute/Collaboration_tactics": { - "modified": "2019-11-20T21:37:10.315Z", + "Web/API/GeolocationPosition": { + "modified": "2020-10-15T22:07:16.029Z", "contributors": [ - "wbamberg", - "angellica.araujo" + "chrisdavidmills", + "Sipmann", + "bbarreto" ] }, - "MDN/Contribute/Feedback": { - "modified": "2020-09-30T17:52:17.404Z", + "Web/API/GeolocationPosition/coords": { + "modified": "2019-12-10T11:04:44.065Z", "contributors": [ "chrisdavidmills", - "jswisher", - "SphinxKnight", - "elenderg", - "wbamberg", - "leandroruel", - "GilvanFernandes" + "bbarreto" ] }, - "MDN/Contribute/Getting_started": { - "modified": "2020-09-30T17:15:19.127Z", + "Web/API/GeolocationPositionError": { + "modified": "2019-12-10T10:45:27.387Z", "contributors": [ "chrisdavidmills", - "wbamberg", - "haskellcamargo", - "mrmorais", - "-", - "takahan", - "annacruz", - "Fabiola" + "nandotorres" ] }, - "MDN/Contribute/Processos": { - "modified": "2019-01-16T19:51:57.687Z", + "Web/API/GlobalEventHandlers": { + "modified": "2019-03-23T22:31:33.398Z", "contributors": [ - "wbamberg", - "-" + "teoli" ] }, - "MDN/Contribute/criando_e_editando_paginas": { - "modified": "2020-01-20T16:42:55.893Z", + "Web/API/GlobalEventHandlers/onabort": { + "modified": "2019-03-23T22:28:55.671Z", "contributors": [ - "mauJr", - "wbamberg", - "blue-bee", - "chrisdavidmills", - "chalix", - "LuccasBarbosa", - "juniorgarcia", - "rafaelcgstz", - "edu_jobs", - "A.M.M.A.", - "yelken" + "cezaraugusto" ] }, - "MDN/Contribute/guia": { - "modified": "2019-01-16T19:17:27.272Z", + "Web/API/GlobalEventHandlers/onblur": { + "modified": "2019-03-23T22:28:57.111Z", "contributors": [ - "wbamberg", - "-", - "angellica.araujo" + "cezaraugusto" ] }, - "MDN/Contribute/guia/Como-marcar-as-paginas-corretamente": { - "modified": "2019-03-18T21:15:59.373Z", + "Web/API/GlobalEventHandlers/onchange": { + "modified": "2019-03-23T22:28:49.180Z", "contributors": [ - "wbamberg", - "Aschlla", - "fcard", - "juniorgarcia", - "tkovs", - "fabianosantos.net" + "nathaliabruno", + "cezaraugusto" ] }, - "MDN/Contribute/guia/Converter_exemplos_codigo_para_ao_vivo": { - "modified": "2019-03-23T23:11:54.642Z", + "Web/API/GlobalEventHandlers/onclick": { + "modified": "2020-10-15T22:17:11.589Z", "contributors": [ - "wbamberg", - "gleidiin", - "isaelss", - "PTLozano", - "Ladeia" + "g-otn" ] }, - "MDN/Contribute/guia/Create_an_MDN_account": { - "modified": "2019-03-23T22:57:58.896Z", + "Web/API/GlobalEventHandlers/oncontextmenu": { + "modified": "2019-03-23T22:28:42.538Z", "contributors": [ - "eduardo.klein", - "wbamberg", - "jaimemaretoli", - "jokafla", - "123gvdblanche" + "cezaraugusto" ] }, - "MDN/Contribute/guia/Create_an_interactive_exercise_to_help_learning_the_web": { - "modified": "2019-11-06T11:43:24.278Z", + "Web/API/GlobalEventHandlers/onerror": { + "modified": "2019-03-23T22:31:39.576Z", "contributors": [ - "WellingtonFR", - "wbamberg", - "arthur2323" + "mantovani" ] }, - "MDN/Contribute/guia/Create_an_interactive_exercise_to_help_learning_the_web/distant_example": { - "modified": "2019-01-17T10:48:33.130Z", + "Web/API/GlobalEventHandlers/onfocus": { + "modified": "2019-03-23T22:26:20.214Z", "contributors": [ - "wbamberg", - "arthur2323" + "tmoraes" ] }, - "MDN/Contribute/guia/Do_a_technical_review": { - "modified": "2019-03-23T23:03:05.824Z", + "Web/API/GlobalEventHandlers/onkeyup": { + "modified": "2020-10-15T22:03:53.967Z", "contributors": [ - "wbamberg", - "luisfvieira", - "Gilbertosilvax1", - "takahan", - "-" + "Sipmann", + "kinkurek" ] }, - "MDN/Contribute/guia/Do_an_editorial_review": { - "modified": "2020-09-17T12:48:11.904Z", + "Web/API/GlobalEventHandlers/onload": { + "modified": "2019-03-23T22:21:10.943Z", "contributors": [ - "PauloNFraga", - "wbamberg", - "Gregory", - "o2over", - "pauloaug", - "Gilbertosilvax1", - "KadirTopal", - "sprodrigues", - "-", - "takahan" + "jeanonline" ] }, - "MDN/Contribute/guia/Escreva_um_artigo_para_ajudar_aprender_sobre_a_Web": { - "modified": "2020-02-28T22:24:45.284Z", + "Web/API/GlobalEventHandlers/onlostpointercapture": { + "modified": "2020-10-15T22:22:03.373Z", "contributors": [ - "wbamberg", - "BrunoThomaz" + "mdeamf" ] }, - "MDN/Contribute/guia/Set_the_summary_for_a_page": { - "modified": "2019-03-23T23:03:38.091Z", + "Web/API/GlobalEventHandlers/onscroll": { + "modified": "2020-10-15T22:23:08.144Z", "contributors": [ - "wbamberg", - "Gilbertosilvax1", - "fabiobasso", - "-", - "EduardoRedressa" + "marlonveiga-santos", + "Antonio.Carvalho" ] }, - "MDN/Contribute/guia/Tag_JavaScript_pages": { - "modified": "2019-01-16T21:06:45.074Z", + "Web/API/HTMLCanvasElement": { + "modified": "2019-03-23T22:03:54.461Z", "contributors": [ - "wbamberg", - "Gilbertosilvax1", - "marcionitao", - "rafamaxber" + "zbjornson" ] }, - "MDN/Editor": { - "modified": "2020-09-30T15:43:15.561Z", + "Web/API/HTMLCanvasElement/getContext": { + "modified": "2019-03-23T22:03:59.683Z", "contributors": [ - "chrisdavidmills", - "wbamberg", - "-", - "teoli", - "BrKaosh", - "Lindonj1" + "Bigous", + "raffaeldantass" ] }, - "MDN/Editor/Basics": { - "modified": "2020-09-30T15:43:15.730Z", + "Web/API/HTMLCanvasElement/height": { + "modified": "2020-10-15T22:02:34.563Z", "contributors": [ - "chrisdavidmills", - "soarescamila" + "valdeirpsr" ] }, - "MDN/Guidelines": { - "modified": "2020-09-30T15:31:17.173Z", + "Web/API/HTMLCanvasElement/toDataURL": { + "modified": "2020-10-15T22:02:37.180Z", "contributors": [ - "chrisdavidmills", - "wcqueiroz", - "wbamberg", - "Sheppy" + "pererinha", + "valdeirpsr" ] }, - "MDN/Guidelines/Style_guide": { - "modified": "2020-09-30T15:31:17.845Z", + "Web/API/HTMLCollection": { + "modified": "2019-03-23T22:53:46.166Z", "contributors": [ - "chrisdavidmills", - "jswisher", - "Carlos_Mir_de_Souza", - "helton-mori-dev", - "CodexZombie", - "wbamberg", - "RobMota", - "-" + "Papaxibe" ] }, - "MDN/Kuma": { - "modified": "2019-09-09T15:53:42.526Z", + "Web/API/HTMLContentElement": { + "modified": "2019-03-23T22:20:56.663Z", "contributors": [ - "SphinxKnight", - "wbamberg", - "richellyitalo" + "mak213k" ] }, - "MDN/Paineis": { - "modified": "2019-06-06T00:53:15.090Z", + "Web/API/HTMLContentElement/getDistributedNodes": { + "modified": "2019-03-23T22:21:10.713Z", "contributors": [ - "wcqueiroz" + "mak213k" ] }, - "MDN/Structures": { - "modified": "2020-09-30T12:56:58.874Z", + "Web/API/HTMLDivElement": { + "modified": "2019-03-23T22:50:39.476Z", "contributors": [ - "chrisdavidmills", - "wbamberg", - "alipseight" + "oirodolfo", + "belsanpesou" ] }, - "MDN/Structures/Compatibility_tables": { - "modified": "2020-10-15T22:05:41.325Z", + "Web/API/HTMLElement": { + "modified": "2019-03-23T22:40:10.318Z", "contributors": [ - "chrisdavidmills", - "paulakfleck", - "MarcosNakamine", - "henriquebortoletti", - "Felipebros", - "PabloHarger", - "wbamberg", - "cautnew", - "rafaelcavalcante" + "wanderson-webdev", + "fscholz" ] }, - "MDN/Structures/Macros": { - "modified": "2020-09-30T12:56:59.059Z", + "Web/API/HTMLElement/click": { + "modified": "2019-03-23T22:40:11.186Z", "contributors": [ - "chrisdavidmills", - "wcqueiroz" + "brunopulis", + "LisandroTSilva" ] }, - "MDN/Tools": { - "modified": "2020-09-30T16:52:54.238Z", + "Web/API/HTMLElement/contentEditable": { + "modified": "2019-03-23T22:24:22.391Z", "contributors": [ - "chrisdavidmills", - "wbamberg", - "alipseight", - "-", - "jswisher" + "Fernandolrs", + "brunopulis" ] }, - "MDN/Tools/KumaScript": { - "modified": "2020-11-30T12:49:15.264Z", + "Web/API/HTMLElement/contextMenu": { + "modified": "2020-10-15T22:26:34.894Z", "contributors": [ - "chrisdavidmills", - "wbamberg", - "AndreDea" + "arthurssfreitas" ] }, - "MDN/Tools/KumaScript/Solucionando_problemas_de_erros_de_KumaScript": { - "modified": "2020-09-30T16:52:54.520Z", + "Web/API/HTMLElement/lang": { + "modified": "2019-03-23T22:24:27.501Z", "contributors": [ - "chrisdavidmills", - "wbamberg", - "GPrimola" + "brunopulis" ] }, - "MDN/Tools/Page_regeneration": { - "modified": "2020-09-30T16:52:54.361Z", + "Web/API/HTMLElement/offsetHeight": { + "modified": "2019-03-18T20:58:59.560Z", "contributors": [ - "chrisdavidmills", - "wbamberg", - "-", - "juniorgarcia" + "SphinxKnight", + "kiaratto" ] }, - "Mozilla": { - "modified": "2019-03-23T23:37:34.048Z", + "Web/API/HTMLElement/offsetLeft": { + "modified": "2019-03-18T20:59:09.678Z", "contributors": [ - "joselima", - "-", - "ethertank", - "ziyunfei" + "SphinxKnight", + "alinemorelli" ] }, - "Mozilla/Add-ons": { - "modified": "2019-09-09T13:10:10.949Z", + "Web/API/HTMLElement/offsetParent": { + "modified": "2020-10-15T21:46:48.347Z", "contributors": [ "SphinxKnight", - "Fernandolrs", - "luciolb", - "kaue", - "Doug_Fany", - "ThiagoEscarrone", - "EduardoRedressa", - "fabianosantos.net", - "-", - "janlima", - "jswisher" + "eustabio_junior" ] }, - "Mozilla/Add-ons/WebExtensions": { - "modified": "2019-09-04T15:18:11.465Z", + "Web/API/HTMLElement/offsetTop": { + "modified": "2020-10-15T21:49:48.848Z", "contributors": [ - "brasmon8351", - "julio-elipse", - "MarceloGhelman", - "thiagopelizoni", - "jcjesus", - "Mostard", - "leanfj", - "lubarino", - "jlamim", - "wbamberg" + "SphinxKnight", + "j.bruni", + "alinemorelli" ] }, - "Mozilla/Add-ons/WebExtensions/API": { - "modified": "2019-11-26T22:19:20.258Z", + "Web/API/HTMLElement/offsetWidth": { + "modified": "2020-10-15T21:54:49.481Z", "contributors": [ - "wbamberg", - "Makyen" + "SphinxKnight", + "gsoldateli" ] }, - "Mozilla/Add-ons/WebExtensions/API/alarms": { - "modified": "2020-10-15T22:07:15.567Z", + "Web/API/HTMLInputElement": { + "modified": "2020-08-07T01:52:15.111Z", "contributors": [ - "wbamberg", - "thiagopelizoni" + "VictorRabelo", + "CaitlinWeb" ] }, - "Mozilla/Add-ons/WebExtensions/API/bookmarks": { - "modified": "2020-10-15T22:07:18.478Z", + "Web/API/HTMLInputElement/select": { + "modified": "2019-03-23T22:32:02.717Z", "contributors": [ - "wbamberg", - "thiagopelizoni" + "sirgallifrey" ] }, - "Mozilla/Add-ons/WebExtensions/API/browserAction": { - "modified": "2020-10-15T22:07:24.197Z", + "Web/API/HTMLInputElement/setSelectionRange": { + "modified": "2019-03-23T22:05:50.440Z", "contributors": [ - "wbamberg", - "thiagopelizoni" + "gulima" ] }, - "Mozilla/Add-ons/WebExtensions/API/browserSettings": { - "modified": "2020-10-15T22:07:20.929Z", + "Web/API/HTMLOptionElement": { + "modified": "2020-10-15T22:22:43.860Z" + }, + "Web/API/HTMLOptionElement/Option": { + "modified": "2019-09-07T19:12:47.492Z", "contributors": [ - "wbamberg", - "thiagopelizoni" + "Rogerio-Viana" ] }, - "Mozilla/Add-ons/WebExtensions/API/browsingData": { - "modified": "2020-10-15T22:07:21.259Z", + "Web/API/HTMLSelectElement": { + "modified": "2019-03-18T21:38:12.809Z", "contributors": [ - "thiagopelizoni" + "Speich" ] }, - "Mozilla/Add-ons/WebExtensions/API/clipboard": { - "modified": "2020-10-15T22:07:18.172Z", + "Web/API/HTMLSelectElement/checkValidity": { + "modified": "2019-03-18T21:38:22.714Z", "contributors": [ - "thiagopelizoni" + "marceloogeda" ] }, - "Mozilla/Add-ons/WebExtensions/API/commands": { - "modified": "2020-10-15T22:07:21.541Z", + "Web/API/HTMLShadowElement": { + "modified": "2020-10-15T21:52:05.842Z", "contributors": [ - "wbamberg", - "thiagopelizoni" + "Sipmann", + "mak213k" ] }, - "Mozilla/Add-ons/WebExtensions/API/contentScripts": { - "modified": "2020-10-15T22:07:22.642Z", + "Web/API/HTMLSpanElement": { + "modified": "2020-10-15T22:22:56.970Z", "contributors": [ - "thiagopelizoni" + "CleberL" ] }, - "Mozilla/Add-ons/WebExtensions/API/contextualIdentities": { - "modified": "2020-10-15T21:58:40.272Z", + "Web/API/History": { + "modified": "2020-10-15T22:11:45.385Z", "contributors": [ - "wbamberg", - "thiagopelizoni", - "eduardMariano" + "duduindo", + "Renancp01" ] }, - "Mozilla/Add-ons/WebExtensions/API/cookies": { - "modified": "2020-10-15T22:07:19.571Z", + "Web/API/History_API": { + "modified": "2019-03-18T21:10:42.375Z", "contributors": [ - "wbamberg", - "thiagopelizoni" + "CaioCosta", + "rodgerpaulo", + "william-costa", + "bsunderhus", + "sistematico" ] }, - "Mozilla/Add-ons/WebExtensions/API/menus": { - "modified": "2020-10-15T22:28:27.733Z", + "Web/API/IDBCursor": { + "modified": "2019-03-23T22:48:07.804Z", "contributors": [ - "Sam-Marx" + "zerossB" ] }, - "Mozilla/Add-ons/WebExtensions/API/tabs": { - "modified": "2020-10-15T22:34:17.119Z", + "Web/API/IDBFactory": { + "modified": "2019-03-23T22:10:18.775Z", "contributors": [ - "Jonathan_Watt" + "falecomoantonio" ] }, - "Mozilla/Add-ons/WebExtensions/API/tema": { - "modified": "2020-10-15T22:16:55.245Z", + "Web/API/ImageCapture": { + "modified": "2020-10-15T22:28:50.119Z", "contributors": [ - "Aschlla" + "LucasRuy" ] }, - "Mozilla/Add-ons/WebExtensions/Anatomia_de_uma_WebExtension": { - "modified": "2019-09-29T21:36:50.619Z", + "Web/API/IndexedDB_API": { + "modified": "2020-05-11T15:56:57.963Z", "contributors": [ - "AdaiasMagdiel", - "jefersonnavarro", - "samuel.abreu", - "lubarino", - "jlamim" + "nstseek", + "chrisdavidmills", + "MOB-atheist", + "zenithpolar", + "guilhermemar", + "IgorGoncalves", + "cirocosta" ] }, - "Mozilla/Add-ons/WebExtensions/Browser_support_for_JavaScript_APIs": { - "modified": "2020-10-15T20:55:06.952Z", + "Web/API/IndexedDB_API/Basic_Concepts_Behind_IndexedDB": { + "modified": "2020-01-13T04:48:43.968Z", "contributors": [ - "jaimemaretoli" + "chrisdavidmills", + "wbamberg", + "jppaschoal", + "camilaavilarinho", + "guilhermemar", + "IgorGoncalves" ] }, - "Mozilla/Add-ons/WebExtensions/Empacotando_e_instalando": { - "modified": "2019-03-18T21:15:50.836Z", + "Web/API/KeyboardEvent": { + "modified": "2019-03-18T21:09:09.329Z", "contributors": [ - "lubarino" + "fscholz", + "wbamberg", + "fernandosouza", + "Grohden", + "waglero" ] }, - "Mozilla/Add-ons/WebExtensions/Examples": { - "modified": "2019-03-18T21:03:20.319Z", + "Web/API/Location": { + "modified": "2020-08-19T00:11:30.219Z", "contributors": [ - "jefersonnavarro", - "thiagopelizoni", - "FelipeBergmann" + "pabrrs", + "trGalho" ] }, - "Mozilla/Add-ons/WebExtensions/Intercept_HTTP_requests": { - "modified": "2019-03-18T21:01:56.380Z", + "Web/API/Location/assign": { + "modified": "2019-03-18T21:41:56.186Z", "contributors": [ - "thiagopelizoni" + "Rhubenni_Telesco" ] }, - "Mozilla/Add-ons/WebExtensions/O_que_vem_a_seguir_": { - "modified": "2019-03-18T21:01:38.952Z", + "Web/API/Location/reload": { + "modified": "2019-03-23T22:30:11.123Z", "contributors": [ - "jefersonnavarro" + "fcard", + "alexrohleder" ] }, - "Mozilla/Add-ons/WebExtensions/Passo-a-Passo": { - "modified": "2019-12-28T20:44:44.265Z", + "Web/API/Location/search": { + "modified": "2020-10-15T22:29:57.299Z", "contributors": [ - "euvanribeiro", - "rodolfo.ghiggi", - "jefersonnavarro", - "WiataganPaz", - "Mostard", - "lubarino" + "AlanCezarAraujo" ] }, - "Mozilla/Add-ons/WebExtensions/What_are_WebExtensions": { - "modified": "2019-03-18T21:05:24.593Z", + "Web/API/MediaDevices": { + "modified": "2019-03-18T21:43:19.059Z", "contributors": [ - "fthiagogv", - "Mostard" + "helitonmartins" ] }, - "Mozilla/Add-ons/WebExtensions/manifest.json": { - "modified": "2020-10-15T21:55:09.220Z", + "Web/API/MediaStreamTrack": { + "modified": "2019-03-23T22:53:44.701Z", "contributors": [ - "wbamberg" + "lucasolivier" ] }, - "Mozilla/Add-ons/WebExtensions/manifest.json/permissões": { - "modified": "2020-10-15T22:03:55.675Z", + "Web/API/MessageChannel": { + "modified": "2019-03-18T21:44:58.784Z", "contributors": [ - "wbamberg", - "MarceloGhelman", - "Weslei" + "fadonascimento" ] }, - "Mozilla/Add-ons/WebExtensions/manifest.json/short_name": { - "modified": "2020-10-15T21:55:07.308Z", + "Web/API/MessagePort": { + "modified": "2020-10-15T22:26:27.296Z", "contributors": [ - "wbamberg", - "gutoribeiro" + "bershanskiy" ] }, - "Mozilla/Add-ons/WebExtensions/manifest.json/web_accessible_resources": { - "modified": "2020-10-15T22:23:15.449Z", + "Web/API/MessagePort/postMessage": { + "modified": "2020-10-15T22:26:29.157Z", "contributors": [ - "AdaiasMagdiel" + "jhserodio" ] }, - "Mozilla/Add-ons/WebExtensions/pre-requisitos": { - "modified": "2019-03-23T22:48:17.751Z", + "Web/API/MouseEvent": { + "modified": "2020-09-27T23:19:33.221Z", "contributors": [ - "IgorOFC", - "jlamim" + "marcio1002", + "vapier" ] }, - "Mozilla/Add-ons/WebExtensions/sua_primeira_WebExtension": { - "modified": "2019-03-18T21:05:56.580Z", + "Web/API/MouseEvent/clientX": { + "modified": "2019-03-23T22:06:38.718Z", "contributors": [ - "lubarino", - "Mostard", - "andregarzia" + "bernardosze" ] }, - "Mozilla/Add-ons/WebExtensions/user_interface": { - "modified": "2020-03-23T21:27:50.719Z", + "Web/API/MouseEvent/clientY": { + "modified": "2020-10-15T22:29:11.740Z", "contributors": [ - "chrisdavidmills" + "GuilhermeSND" ] }, - "Mozilla/Add-ons/WebExtensions/user_interface/Itens_do_menu_de_contexto": { - "modified": "2020-03-23T22:11:58.441Z", + "Web/API/MutationObserver": { + "modified": "2020-10-15T21:33:46.490Z", "contributors": [ - "Sam-Marx" + "mateusvelleda", + "alexanmtz", + "diegolw" ] }, - "Mozilla/Developer_guide": { - "modified": "2019-03-23T23:38:41.412Z", + "Web/API/Navigation_timing_API": { + "modified": "2019-03-23T22:50:45.488Z", "contributors": [ - "chrisdavidmills", - "regisdiogo", - "josivansilva" + "MarcelMorais", + "Gutem" ] }, - "Mozilla/Developer_guide/Codigo_Fonte": { - "modified": "2019-03-23T23:36:39.907Z", + "Web/API/Navigator": { + "modified": "2019-03-23T23:01:42.784Z", "contributors": [ - "chrisdavidmills", - "jntesteves" + "wbamberg", + "teoli" ] }, - "Mozilla/Developer_guide/Mozilla_build_FAQ": { - "modified": "2019-03-23T23:30:00.484Z", + "Web/API/Navigator/battery": { + "modified": "2019-03-23T23:16:59.785Z", "contributors": [ - "chrisdavidmills", - "fscholz", - "tfsthiago11121" + "teoli", + "jsx", + "eliezerb" ] }, - "Mozilla/Firefox": { - "modified": "2020-01-18T14:01:54.191Z", + "Web/API/Navigator/cookieEnabled": { + "modified": "2020-10-15T22:13:23.552Z", "contributors": [ - "leela52452", - "SphinxKnight", - "wbamberg", - "rafael-junio", - "mrmorais", - "cezarcruz", - "-", - "chocoelho", - "fahadkalil" + "macalha" ] }, - "Mozilla/Firefox/Novas_funcionalidades": { - "modified": "2019-01-17T00:25:13.965Z", + "Web/API/Navigator/deviceMemory": { + "modified": "2020-10-15T22:12:37.929Z", "contributors": [ - "wbamberg", - "marcio-ti" + "macalha" ] }, - "Mozilla/Firefox/Releases": { - "modified": "2019-01-16T20:18:57.986Z", + "Web/API/Navigator/geolocation": { + "modified": "2020-10-15T21:47:10.975Z", "contributors": [ - "wbamberg", - "-" + "mateusvelleda", + "michaelycus" ] }, - "Mozilla/Firefox/Releases/1.5": { - "modified": "2019-03-23T23:00:27.323Z", + "Web/API/Navigator/getUserMedia": { + "modified": "2019-03-23T23:30:19.364Z", "contributors": [ - "wbamberg", - "-" + "viktorRock", + "fscholz", + "srsaude" ] }, - "Mozilla/Firefox/Releases/3": { - "modified": "2020-12-11T05:30:36.972Z", + "Web/API/Navigator/share": { + "modified": "2020-10-15T22:27:50.572Z", "contributors": [ - "wbamberg" + "LucasRuy" ] }, - "Mozilla/Firefox/Releases/3/Zoom_de_página_inteira": { - "modified": "2019-03-18T21:29:46.640Z", + "Web/API/NavigatorID": { + "modified": "2019-03-23T23:01:42.494Z", "contributors": [ - "Hv60T" + "teoli" ] }, - "Mozilla/Firefox/Releases/49": { - "modified": "2019-03-23T22:24:00.355Z", + "Web/API/NavigatorID/platform": { + "modified": "2020-10-15T21:27:41.688Z", "contributors": [ - "wbamberg", - "wdot789" + "GarkGarcia", + "teoli", + "khalid32", + "eliezerb" ] }, - "Mozilla/Firefox/Releases/50": { - "modified": "2019-03-18T21:11:50.773Z", + "Web/API/NavigatorID/userAgent": { + "modified": "2020-10-15T21:58:19.578Z", "contributors": [ - "duduindo", - "wbamberg", - "jerfeson" + "GarkGarcia", + "thedjmarcelo" ] }, - "Mozilla/Firefox/Releases/57": { - "modified": "2019-03-18T20:55:45.402Z", + "Web/API/NavigatorLanguage": { + "modified": "2019-03-23T22:03:53.998Z", "contributors": [ - "duduindo", - "wbamberg", - "ialexsilva", - "marcoarw" + "teoli" ] }, - "Mozilla/Firefox/Releases/65": { - "modified": "2019-03-18T21:21:43.693Z", + "Web/API/NavigatorLanguage/language": { + "modified": "2019-03-23T22:03:54.652Z", "contributors": [ - "yellowag" + "klzns" ] }, - "Projeto:Como_ajudar_com_MDN": { - "modified": "2019-03-23T23:38:18.895Z", + "Web/API/NavigatorOnLine": { + "modified": "2019-03-23T22:02:07.133Z", "contributors": [ - "hlays", - "wbamberg", - "teoli", - "jaydson", - "jswisher" + "marciioluucas", + "chrisdavidmills" ] }, - "Sections_and_Outlines_of_an_HTML5_document": { - "modified": "2020-10-07T01:45:20.737Z", + "Web/API/NavigatorOnLine/Online_and_offline_events": { + "modified": "2019-03-23T23:39:13.247Z", "contributors": [ - "leandroembu", - "Lucas_Inacio", - "davimdantas", - "SaggitariusA", - "webennes", - "edercampelo", - "IgorGoncalves", - "dann", - "netoguimaraes", - "Stutz.D", - "eduardodx", - "AluisioASG" + "chrisdavidmills", + "claudiareginadasilvacorrea", + "jpalharini" ] }, - "The_XSLT_JavaScript_Interface_in_Gecko": { - "modified": "2019-03-23T23:03:42.725Z", + "Web/API/NavigatorOnLine/onLine": { + "modified": "2020-10-15T22:15:18.142Z", "contributors": [ - "ethertank" + "renatoluna" ] }, - "The_XSLT_JavaScript_Interface_in_Gecko/Advanced_Example": { - "modified": "2019-03-23T23:03:40.500Z", + "Web/API/NavigatorPlugins": { + "modified": "2020-10-15T22:19:29.947Z", "contributors": [ - "EduardoRedressa" + "Fernandolrs" ] }, - "Tools": { - "modified": "2020-07-16T22:44:17.244Z", + "Web/API/NavigatorPlugins/javaEnabled": { + "modified": "2020-10-15T22:19:29.661Z", "contributors": [ - "vanteew29", - "SphinxKnight", - "rafaelsiza", - "wbamberg", - "redbob365", - "alipseight", - "LuccasBarbosa", - "-", - "_GabrielDuque", - "marinalimeira", - "eduardojmatos", - "jlamim", + "Fernandolrs" + ] + }, + "Web/API/Node": { + "modified": "2019-03-23T23:30:08.400Z", + "contributors": [ + "marimeireles", + "oirodolfo", "teoli", - "gutierri", - "nanardo", - "fabianosantos.net", - "AJCSantos", - "paulo007", - "bbenatti", - "fernando.karpinski", - "ronaldo-bonfim" + "khalid32", + "srsaude" ] }, - "Tools/3D_View": { - "modified": "2020-07-16T22:34:25.511Z", + "Web/API/Node/appendChild": { + "modified": "2019-03-23T23:22:30.959Z", "contributors": [ - "italo-baciliere", - "wbamberg", - "Tomaz-Vieira", - "pablobfonseca" + "teoli", + "khalid32", + "srsaude" ] }, - "Tools/Add-ons": { - "modified": "2020-07-16T22:36:23.640Z", + "Web/API/Node/baseURI": { + "modified": "2019-03-23T22:40:41.805Z", "contributors": [ - "wbamberg", - "mak213k", - "DiegoTelles" + "cammarin", + "Josue-Bastos" ] }, - "Tools/Add-ons/DOM_Inspector_Pt-Br": { - "modified": "2020-07-16T22:36:24.634Z", + "Web/API/Node/childNodes": { + "modified": "2019-03-23T23:07:10.128Z", "contributors": [ - "wbamberg", - "DiegoTelles" + "teoli", + "fegemo" ] }, - "Tools/Browser_Console": { - "modified": "2020-07-16T22:35:42.624Z", + "Web/API/Node/cloneNode": { + "modified": "2019-03-23T22:48:59.947Z", "contributors": [ - "wbamberg", - "Wallison_S.F", - "jlamim" + "Gutemberg" ] }, - "Tools/CSS_Coverage": { - "modified": "2019-03-23T22:21:34.758Z", + "Web/API/Node/contains": { + "modified": "2019-03-23T23:21:21.502Z", "contributors": [ - "wbamberg", - "mak213k" + "teoli", + "AshfaqHossain", + "carlosbg" ] }, - "Tools/Debugger/How_to": { - "modified": "2020-07-16T22:35:08.214Z", + "Web/API/Node/firstChild": { + "modified": "2019-03-23T22:49:01.978Z", "contributors": [ - "wbamberg" + "Gutemberg" ] }, - "Tools/Debugger/How_to/Examine,_modify,_and_watch_variables": { - "modified": "2020-07-16T22:35:13.183Z", + "Web/API/Node/insertBefore": { + "modified": "2019-03-18T20:54:40.356Z", "contributors": [ - "wbamberg", - "mak213k" + "greysonf", + "debone", + "teoli", + "khalid32", + "reniesiqueira" ] }, - "Tools/Debugger_(before_Firefox_52)": { - "modified": "2019-03-23T22:21:37.545Z", + "Web/API/Node/isConnected": { + "modified": "2020-10-15T22:32:18.058Z", "contributors": [ - "wbamberg" + "dev-danilosilva" ] }, - "Tools/Debugger_(before_Firefox_52)/Disable_breakpoints": { - "modified": "2019-03-23T22:21:41.910Z", + "Web/API/Node/lastChild": { + "modified": "2019-03-23T22:40:51.317Z", "contributors": [ - "wbamberg", - "mak213k" + "Gutemberg" ] }, - "Tools/Depurador": { - "modified": "2020-07-30T07:50:39.719Z", + "Web/API/Node/nextSibling": { + "modified": "2019-03-23T23:22:09.728Z", "contributors": [ - "LeandroVCastro", - "wbamberg", - "flavioms7", - "LincePotiguara", - "vitorcardoso", - "Danilson_Veloso", - "GilvanFernandes", - "JAugusto", - "maybe", - "Radicalzinho", "teoli", - "IvomarS" + "khalid32", + "reniesiqueira" ] }, - "Tools/Depurador/Set_a_logpoint": { - "modified": "2020-07-16T22:35:20.440Z", + "Web/API/Node/parentNode": { + "modified": "2019-03-23T22:40:47.017Z", "contributors": [ - "luan0ap" + "michelsouza", + "Gutemberg" ] }, - "Tools/Depuração_Remota": { - "modified": "2020-07-16T22:35:37.857Z", + "Web/API/Node/previousSibling": { + "modified": "2019-03-23T23:14:20.558Z", "contributors": [ "wbamberg", - "marciowb", - "nanardo", - "glacywhite", - "Giovane", - "MarcoRovida" + "teoli", + "jsx", + "cesarwbr" ] }, - "Tools/DevToolsAPI": { - "modified": "2020-07-16T22:35:25.742Z", + "Web/API/Node/removeChild": { + "modified": "2019-03-23T23:30:06.977Z", "contributors": [ - "wbamberg", - "NResultados" + "teoli", + "khalid32", + "srsaude" ] }, - "Tools/Editor_de_Estilos": { - "modified": "2020-07-16T22:35:00.708Z", + "Web/API/Node/replaceChild": { + "modified": "2019-03-23T23:12:27.414Z", "contributors": [ - "wbamberg", - "MurilloLima", - "maybe", - "bbenatti" + "paulocmoreno", + "teoli", + "khalid32", + "matheuslc" ] }, - "Tools/Eyedropper": { - "modified": "2020-07-16T22:36:07.729Z", + "Web/API/Node/textContent": { + "modified": "2020-10-15T22:19:54.189Z", "contributors": [ - "wbamberg", - "netoguimaraes" + "EduardoDaSilva", + "marlonveiga-santos" ] }, - "Tools/Inspetor_de_Armazenamento": { - "modified": "2020-07-16T22:36:10.142Z", + "Web/API/NodeFilter": { + "modified": "2019-03-23T22:03:52.772Z", "contributors": [ - "erlongs", - "wbamberg", - "danieltex" + "oirodolfo" ] }, - "Tools/Keyboard_shortcuts": { - "modified": "2020-07-16T22:35:49.510Z", + "Web/API/NodeList": { + "modified": "2020-10-15T21:55:05.252Z", "contributors": [ - "wbamberg", - "fabianosantos.net", - "andredias", - "zerossB" + "Sipmann", + "caueamaral", + "fernandosavio" ] }, - "Tools/Medir_uma_porcao_da_pagina": { - "modified": "2020-07-16T22:36:39.043Z", + "Web/API/NotificationAction": { + "modified": "2020-10-15T22:22:52.083Z", "contributors": [ - "marlonveiga-santos" + "jowks" ] }, - "Tools/Memory": { - "modified": "2020-07-16T22:36:27.239Z", + "Web/API/OfflineAudioContext": { + "modified": "2020-10-15T22:02:59.025Z", "contributors": [ - "wbamberg", - "luizschinemann" + "EduardoFerr" ] }, - "Tools/Modo_Design_Adaptavel": { - "modified": "2020-07-16T22:35:22.122Z", + "Web/API/Page_Visibility_API": { + "modified": "2019-03-23T22:34:14.511Z", "contributors": [ - "cristiano-soares", - "wbamberg", - "jsx", - "teoli", - "EvertonPortela" + "renatoluna" ] }, - "Tools/Network_Monitor": { - "modified": "2020-07-16T22:35:30.854Z", + "Web/API/ParentNode": { + "modified": "2019-03-23T22:19:41.961Z", "contributors": [ - "jamrocha", - "wbamberg", - "fabianosantos.net", - "lisaldofjf", - "cleverson", - "Lokojbkf" + "jpmedley" ] }, - "Tools/Notas_de_lancamento": { - "modified": "2020-07-16T22:35:56.858Z", + "Web/API/ParentNode/childElementCount": { + "modified": "2020-10-15T22:28:04.061Z", "contributors": [ - "wbamberg", - "fabianosantos.net", - "-" + "leofalcao10" ] }, - "Tools/Page_Inspector": { - "modified": "2020-07-16T22:34:29.304Z", + "Web/API/ParentNode/children": { + "modified": "2019-03-23T22:19:42.340Z", "contributors": [ - "wbamberg", - "GaPerez10", - "karen-evelyn", - "danielferreira.developer", - "teoli", - "pablobfonseca", - "maybe", - "nanardo", - "pfurtado", - "MarcoBruno" + "rafaelcavalcante" ] }, - "Tools/Page_Inspector/How_to": { - "modified": "2020-07-16T22:34:31.751Z", + "Web/API/ParentNode/querySelector": { + "modified": "2020-10-15T22:23:27.840Z", "contributors": [ - "wbamberg", - "sidgan" + "VictorhMalheiro" ] }, - "Tools/Page_Inspector/How_to/Edit_CSS_filters": { - "modified": "2020-07-16T22:34:45.449Z", + "Web/API/Path2D": { + "modified": "2020-10-15T22:06:13.090Z", "contributors": [ - "wbamberg", - "jgeovani" + "dayvitSiqueira" ] }, - "Tools/Page_Inspector/How_to/Examinando_eventos_escuta": { - "modified": "2020-07-16T22:34:35.841Z", + "Web/API/Performance": { + "modified": "2020-10-15T21:54:03.274Z", "contributors": [ - "wbamberg", - "fabianosantos.net" + "fscholz", + "jpmedley" ] }, - "Tools/Page_Inspector/How_to/Examine_and_edit_CSS": { - "modified": "2020-07-16T22:34:43.033Z", + "Web/API/Performance/now": { + "modified": "2019-03-18T20:49:36.800Z", "contributors": [ - "wbamberg", - "wdot789", - "raphaellima8", - "jaimemaretoli", - "julianadfg" + "helton-mori-dev", + "gabrieltobi" ] }, - "Tools/Page_Inspector/How_to/Examine_grid_layouts": { - "modified": "2020-07-16T22:34:47.464Z", + "Web/API/Performance/toJSON": { + "modified": "2020-10-15T21:54:01.565Z", "contributors": [ - "wbamberg", - "nobrewilk" + "fscholz", + "gabrieltobi" ] }, - "Tools/Page_Inspector/How_to/Open_the_Inspector": { - "modified": "2020-07-16T22:34:32.967Z", + "Web/API/PositionOptions": { + "modified": "2019-03-23T22:47:40.708Z", "contributors": [ - "wbamberg", - "larimaza" + "victorkurauchi" ] }, - "Tools/Page_Inspector/How_to/Trabalho_Com_Animaçoes": { - "modified": "2020-07-16T22:34:36.936Z", + "Web/API/ProcessingInstruction": { + "modified": "2019-03-18T21:38:06.302Z", "contributors": [ - "wbamberg", - "o2over" + "coloringa" ] }, - "Tools/Rulers": { - "modified": "2020-07-16T22:36:26.507Z", + "Web/API/PushManager": { + "modified": "2019-03-18T21:44:59.987Z", "contributors": [ - "wbamberg", - "barddes", - "Jeremie", - "kazumi" + "GPrimola", + "M4ttscx" ] }, - "Tools/Settings": { - "modified": "2020-07-16T22:36:35.275Z", + "Web/API/RTCCertificate": { + "modified": "2020-10-15T22:22:00.681Z", "contributors": [ - "wbamberg", - "jaimemaretoli", - "jhonatasrm", - "julianadfg" + "hsulipe" ] }, - "Tools/Shader_Editor": { - "modified": "2020-07-16T22:35:54.762Z", + "Web/API/RTCDataChannel": { + "modified": "2019-03-23T22:05:58.861Z", "contributors": [ - "wbamberg", - "stephaniehobson", - "bassam", - "joselima", - "idenilson" + "Lavyk" ] }, - "Tools/Simulador_Firefox_OS_1.1": { - "modified": "2020-07-16T22:35:58.114Z", + "Web/API/RTCIceTransport": { + "modified": "2020-10-15T22:22:02.457Z", "contributors": [ - "wbamberg", - "faelpinho" + "hsulipe" ] }, - "Tools/Web_Console": { - "modified": "2020-07-16T22:34:06.990Z", + "Web/API/RTCPeerConnection": { + "modified": "2020-10-15T22:18:53.156Z", "contributors": [ - "cautnew", - "wbamberg", - "DiegoTelles", - "javaroldo", - "danielferreira.developer", - "gmoraes", - "paulojackson42", - "teoli", - "kosikfl" + "Leonardocezar", + "matheuschimelli", + "labforcode" ] }, - "Tools/Web_Console/Helpers": { - "modified": "2020-07-16T22:34:12.817Z", + "Web/API/RTCPeerConnection/connectionState": { + "modified": "2020-10-15T22:25:43.424Z", "contributors": [ - "wbamberg", - "akando" + "Mellogab" ] }, - "Tools/Web_Console/Opening_the_Web_Console": { - "modified": "2020-07-16T22:34:17.352Z", + "Web/API/Request": { + "modified": "2020-10-15T22:02:39.204Z", "contributors": [ - "josimaraLima", - "cautnew" + "valdeirpsr" ] }, - "Tools/Web_Console/The_command_line_interpreter": { - "modified": "2020-07-16T22:34:19.266Z", + "Web/API/Request/Request": { + "modified": "2020-10-15T22:15:05.741Z", "contributors": [ - "luizcowbtf" + "duduindo", + "fininhors" ] }, - "Tools/Working_with_iframes": { - "modified": "2020-07-16T22:36:12.025Z", + "Web/API/Response": { + "modified": "2020-10-15T22:09:39.986Z", "contributors": [ - "wbamberg", - "kausdev", - "Vinicius_Vieira" + "paulo9mv", + "leandroruel", + "jeovazero" ] }, - "Tools/atuação": { - "modified": "2020-07-16T22:36:13.436Z", + "Web/API/SVGAElement": { + "modified": "2020-10-15T22:03:03.797Z", "contributors": [ - "wbamberg", - "IgorGoncalves", - "ricardolima89", - "gilton", - "samuelpontes" + "Shadowlast14" ] }, - "Using_geolocation": { - "modified": "2019-03-23T23:36:21.393Z", + "Web/API/SVGAnimateTransformElement": { + "modified": "2020-10-16T17:55:44.269Z", "contributors": [ - "rafaelcavalcante", - "paulo-raoni", - "ted_k", - "michaelycus", - "ronaldo.ap.abreu", - "emilianocarvalho" + "felipepaz" ] }, - "Web": { - "modified": "2020-07-13T10:40:01.246Z", + "Web/API/Sensor": { + "modified": "2020-10-15T22:32:16.467Z", "contributors": [ - "jose.elias.0703", - "jorgeclesio", - "ChristoPy", - "Munhoz", - "RenanBirck", - "BrendonFerreira", - "AlanCezarAraujo", - "-", - "PriscillaAlcalde", - "rbrandao", - "sheldonled", - "cezarcruz", - "rafaelsakurai", - "Sheppy" + "jpmedley" ] }, - "Web/API": { - "modified": "2019-06-15T02:48:05.766Z", + "Web/API/Server-sent_events": { + "modified": "2020-06-16T11:34:37.745Z", "contributors": [ - "wcqueiroz", - "julio-elipse", - "MatheusCuba", - "KadirTopal", - "sprodrigues", - "teoli", - "panaggio", - "ethertank", - "srsaude", - "Sheppy" + "alattalatta" ] }, - "Web/API/ANGLE_instanced_arrays": { - "modified": "2020-10-15T22:14:15.404Z", + "Web/API/Server-sent_events/Using_server-sent_events": { + "modified": "2020-10-15T22:30:47.227Z", "contributors": [ - "eliasmelgaco" + "LucasPereira" ] }, - "Web/API/API_Push": { - "modified": "2019-03-23T22:39:02.907Z", + "Web/API/ServiceWorkerContainer": { + "modified": "2019-03-18T20:53:05.893Z", "contributors": [ - "rodrigoalexandresc", - "fahadkalil", - "rmunhoz" + "Gustavo_Armoa", + "jpmedley" ] }, - "Web/API/API_Push/Best_Practices": { - "modified": "2020-05-23T16:17:14.549Z", + "Web/API/ServiceWorkerContainer/register": { + "modified": "2019-03-23T22:05:54.667Z", "contributors": [ - "brunoartc" + "wallacemaxters" ] }, - "Web/API/API_Web_Audio": { - "modified": "2019-03-18T20:58:41.484Z", + "Web/API/ServiceWorkerGlobalScope": { + "modified": "2020-10-15T22:18:38.860Z", "contributors": [ - "SphinxKnight", - "italoadler", - "GleisonLuis", - "MichelAlonso", - "gidenilson", - "Sheppy", - "DavidWalsh", - "rbrandao", - "taltk9", - "teoli", - "unreleasedmix" + "fscholz" ] }, - "Web/API/API_Web_Audio/Sintetizador_simples": { - "modified": "2020-09-29T13:36:38.578Z", + "Web/API/ServiceWorkerGlobalScope/clients": { + "modified": "2020-10-15T22:18:38.711Z", "contributors": [ - "Trek" + "rafaelcavalcante" ] }, - "Web/API/API_de_Desempenho": { - "modified": "2020-04-24T14:27:05.156Z", + "Web/API/Service_Worker_API": { + "modified": "2019-03-23T22:20:45.840Z", "contributors": [ - "rbertoche" + "alcidesqueiroz", + "dicarlosdesign" ] }, - "Web/API/AbortSignal": { - "modified": "2020-10-15T22:03:40.637Z", + "Web/API/Service_Worker_API/Using_Service_Workers": { + "modified": "2020-07-29T08:44:07.257Z", "contributors": [ - "MatheusCuba" + "edusantana", + "rfdeoliveira", + "marciocamargo", + "italoportinho", + "Lucasktrindade" ] }, - "Web/API/AbortSignal/aborted": { - "modified": "2020-10-15T22:05:39.005Z", + "Web/API/SharedWorker": { + "modified": "2019-03-23T22:10:27.798Z", "contributors": [ - "marcelorobson001" + "chrisdavidmills" ] }, - "Web/API/AbstractWorker": { - "modified": "2019-03-23T23:11:23.809Z", + "Web/API/SharedWorker/port": { + "modified": "2019-03-23T22:10:34.513Z", "contributors": [ - "teoli", - "mklauck" + "Schrammel" ] }, - "Web/API/AbstractWorker/onerror": { - "modified": "2019-03-23T22:50:42.630Z", + "Web/API/SpeechGrammar": { + "modified": "2020-10-15T22:17:17.231Z", "contributors": [ - "daltonmenezes" + "rafaelvanat" ] }, - "Web/API/Ambient_Light_Events": { - "modified": "2019-03-23T22:10:24.978Z", + "Web/API/SpeechSynthesis": { + "modified": "2019-03-23T22:02:23.080Z", "contributors": [ - "andre-mendes" + "_marciojrtorres" ] }, - "Web/API/Animation": { - "modified": "2019-03-23T22:27:19.257Z", + "Web/API/SpeechSynthesisUtterance": { + "modified": "2019-03-23T22:25:09.613Z", "contributors": [ - "mrmorais", - "hbmuller", - "rachelnabors" + "chrisdavidmills" ] }, - "Web/API/Animation/cancel": { - "modified": "2019-03-23T22:32:30.370Z", + "Web/API/SpeechSynthesisUtterance/voice": { + "modified": "2019-03-23T22:25:16.059Z", "contributors": [ - "JohnLatties" + "niltoncsr" ] }, - "Web/API/Animation/currentTime": { - "modified": "2019-03-23T22:08:24.693Z", + "Web/API/Storage": { + "modified": "2020-10-15T21:38:56.944Z", "contributors": [ - "Schieck" + "Sipmann", + "Auugustocesar", + "andrekutianski", + "Sebastianz" ] }, - "Web/API/Animation/playState": { - "modified": "2019-03-23T22:08:37.256Z", + "Web/API/Storage/clear": { + "modified": "2019-03-23T22:22:06.554Z", "contributors": [ - "Schieck" + "nicolastarzia" ] }, - "Web/API/AnimationEvent": { - "modified": "2019-03-23T22:45:30.935Z", + "Web/API/Storage/getItem": { + "modified": "2020-10-15T21:46:36.499Z", "contributors": [ - "edu-ricardo", - "teoli", - "takahan" + "mateusvelleda", + "victormaestri", + "carol-caires" ] }, - "Web/API/AnimationEvent/AnimationEvent": { - "modified": "2019-03-23T22:45:31.301Z", + "Web/API/Storage/key": { + "modified": "2020-10-15T22:22:54.532Z", "contributors": [ - "takahan" + "andalvalmeida" ] }, - "Web/API/AnimationEvent/animationName": { - "modified": "2019-03-23T22:45:37.004Z", + "Web/API/Storage/length": { + "modified": "2019-03-18T21:39:13.697Z", "contributors": [ - "teoli", - "takahan" + "bfabbri" ] }, - "Web/API/AnimationEvent/elapsedTime": { - "modified": "2019-03-23T22:45:36.142Z", + "Web/API/Storage/removeItem": { + "modified": "2019-03-23T22:26:49.057Z", "contributors": [ - "teoli", - "takahan" + "eduardogomesv" ] }, - "Web/API/AnimationEvent/initAnimationEvent": { - "modified": "2019-03-23T22:45:29.493Z", + "Web/API/Storage/setItem": { + "modified": "2019-03-23T22:47:38.418Z", "contributors": [ - "teoli", - "takahan" + "larodiel" ] }, - "Web/API/AnimationEvent/pseudoElement": { - "modified": "2019-03-23T22:45:35.200Z", + "Web/API/StorageManager": { + "modified": "2020-10-15T22:19:33.863Z", "contributors": [ - "teoli", - "takahan" + "Rondinelly" ] }, - "Web/API/Attr": { - "modified": "2019-03-23T23:11:31.038Z", + "Web/API/Streams_API": { + "modified": "2020-10-15T22:07:15.490Z", "contributors": [ - "MatheusCuba", - "renansouza", - "teoli", - "mklauck" + "NandoRFS", + "chrisdavidmills" ] }, - "Web/API/Attr/localName": { - "modified": "2019-03-23T22:18:49.389Z", + "Web/API/Streams_API/Concepts": { + "modified": "2019-03-18T21:30:10.010Z", "contributors": [ - "juniorgarcia" + "thiagopelizoni" ] }, - "Web/API/AudioContext": { - "modified": "2020-08-25T13:06:48.450Z", + "Web/API/SubtleCrypto": { + "modified": "2020-10-15T21:58:59.814Z", "contributors": [ - "duduindo", - "italoadler", - "GPrimola", - "EduardoFerr", - "jpmedley" + "fscholz", + "Hikashii", + "prebytes" ] }, - "Web/API/AudioContext/currentTime": { - "modified": "2019-03-23T22:31:21.913Z", + "Web/API/SubtleCrypto/GenerateKey": { + "modified": "2019-03-23T22:02:52.131Z", "contributors": [ - "deyvid0123" + "Hikashii" ] }, - "Web/API/AudioNode": { - "modified": "2019-03-23T22:37:43.755Z", + "Web/API/SubtleCrypto/deriveKey": { + "modified": "2019-03-23T22:02:44.403Z", "contributors": [ - "gidenilson" + "Hikashii" ] }, - "Web/API/Background_Tasks_API": { - "modified": "2020-10-15T22:22:54.939Z", + "Web/API/SubtleCrypto/importKey": { + "modified": "2019-03-23T22:02:45.337Z", "contributors": [ - "maatheusgouveia" + "Hikashii" ] }, - "Web/API/BatteryManager": { - "modified": "2019-03-23T23:18:25.418Z", + "Web/API/URL": { + "modified": "2020-10-15T21:33:01.700Z", "contributors": [ - "teoli", - "eliezerb" + "mateusvelleda", + "teoli" ] }, - "Web/API/BatteryManager/charging": { - "modified": "2019-03-23T23:18:26.621Z", + "Web/API/URL/createObjectURl": { + "modified": "2020-10-15T21:23:35.850Z", "contributors": [ + "fscholz", "teoli", - "eliezerb" + "srsaude" ] }, - "Web/API/BatteryManager/chargingTime": { - "modified": "2019-03-23T23:17:02.480Z", + "Web/API/URL/revokeObjectURL": { + "modified": "2019-03-23T22:23:24.178Z", "contributors": [ - "teoli", - "eliezerb" + "emmanueldaher" ] }, - "Web/API/BatteryManager/dischargingTime": { - "modified": "2019-03-23T23:16:57.249Z", + "Web/API/URL/searchParams": { + "modified": "2020-10-15T22:02:37.369Z", "contributors": [ - "teoli", - "eliezerb" + "mateusvelleda", + "marabesi" ] }, - "Web/API/BatteryManager/level": { - "modified": "2019-03-23T23:16:57.347Z", + "Web/API/URLSearchParams": { + "modified": "2019-03-23T22:18:19.994Z", "contributors": [ - "teoli", - "eliezerb" + "marcelobonatto" ] }, - "Web/API/BatteryManager/onchargingchange": { - "modified": "2019-03-23T23:16:56.594Z", + "Web/API/URLSearchParams/get": { + "modified": "2019-03-18T21:33:42.386Z", "contributors": [ - "teoli", - "eliezerb" + "DanieleCastilho" ] }, - "Web/API/BatteryManager/onchargingtimechange": { - "modified": "2019-03-23T23:16:56.942Z", + "Web/API/URLSearchParams/values": { + "modified": "2019-03-18T21:33:34.299Z", "contributors": [ - "teoli", - "eliezerb" + "DanieleCastilho" ] }, - "Web/API/BatteryManager/ondischargintimechange": { - "modified": "2019-03-23T23:16:54.139Z", + "Web/API/ValidityState": { + "modified": "2020-10-15T22:08:46.419Z", "contributors": [ - "teoli", - "eliezerb" + "Zavarock" ] }, - "Web/API/BatteryManager/onlevelchange": { - "modified": "2019-03-23T23:16:53.281Z", + "Web/API/WebGL_API": { + "modified": "2019-04-05T15:51:08.757Z", "contributors": [ + "MarceloBRN", + "julio-elipse", + "fscholz", "teoli", - "eliezerb" + "fvargaspf@gmail.com" ] }, - "Web/API/BiquadFilterNode": { - "modified": "2020-10-15T22:02:35.671Z", + "Web/API/WebGL_API/Tutorial": { + "modified": "2019-03-23T22:48:58.032Z", "contributors": [ - "Jonathanifpe" + "fscholz" ] }, - "Web/API/Blob": { - "modified": "2020-10-15T21:31:54.891Z", + "Web/API/WebGL_API/Tutorial/Getting_started_with_WebGL": { + "modified": "2019-03-23T22:43:23.994Z", "contributors": [ - "CahMoraes", - "Flicksie", - "gabrielacaesar", - "jkdrangel", - "vandercijr", - "wancharle", - "raduq", - "Caique39", - "willianbriotto", - "teoli", - "jeffersoncardoso100" + "etc_william", + "Nathipg", + "MarceloBRN" ] }, - "Web/API/Blob/Blob": { - "modified": "2020-10-15T22:09:55.306Z", + "Web/API/WebRTC_API": { + "modified": "2020-02-27T08:49:05.980Z", "contributors": [ - "thiagosaife", - "TiagoOliveiraz" + "iankressin", + "aledebarba", + "pedro-surf", + "Sheppy" ] }, - "Web/API/Blob/size": { - "modified": "2020-10-15T22:13:56.876Z", + "Web/API/WebRTC_API/Protocols": { + "modified": "2020-12-04T03:01:14.311Z", "contributors": [ - "thiagosaife" + "guiseek" ] }, - "Web/API/Blob/slice": { - "modified": "2019-03-18T21:46:37.104Z", + "Web/API/WebSocket": { + "modified": "2019-03-23T22:25:02.860Z", "contributors": [ - "Julio_Lira" + "Fernandolrs", + "mak213k", + "mshmeirelles" ] }, - "Web/API/Blob/type": { - "modified": "2020-10-15T22:13:55.601Z", + "Web/API/WebVR_API": { + "modified": "2019-03-23T22:13:23.567Z", "contributors": [ - "thiagosaife" + "Fernandolrs", + "kausdev" ] }, - "Web/API/Body": { - "modified": "2020-10-15T22:30:31.056Z", + "Web/API/WebVR_API/Using_the_WebVR_API": { + "modified": "2020-04-03T23:13:18.030Z", "contributors": [ - "Wind1808" + "Cleide724" ] }, - "Web/API/Body/json": { - "modified": "2020-10-15T22:30:29.688Z", + "Web/API/Web_Animations_API": { + "modified": "2020-09-26T01:35:21.265Z", "contributors": [ - "tohdi1" + "mfuji09" ] }, - "Web/API/BroadcastChannel": { - "modified": "2020-10-15T22:14:45.422Z", + "Web/API/Web_Crypto_API": { + "modified": "2019-03-23T22:16:32.658Z", "contributors": [ - "Rondinelly" + "GPrimola", + "Hikashii", + "cristof" ] }, - "Web/API/CSS": { - "modified": "2019-07-14T13:19:26.783Z", + "Web/API/Web_Workers_API": { + "modified": "2019-04-07T16:56:48.451Z", "contributors": [ - "onsistec", - "teoli", - "takahan" + "MatLinkM", + "leonardosnt", + "jika", + "devmessias" ] }, - "Web/API/CSS_Object_Model": { - "modified": "2019-03-23T22:34:08.999Z", + "Web/API/Window": { + "modified": "2020-07-28T17:31:29.548Z", "contributors": [ - "allissondebrito" + "maleskena", + "vinibudd", + "naotenhologin", + "danielferreira.developer", + "haskellcamargo", + "teoli", + "panaggio" ] }, - "Web/API/Cache": { - "modified": "2019-03-23T22:09:25.465Z", + "Web/API/Window/alert": { + "modified": "2020-03-30T12:44:24.443Z", "contributors": [ - "khaosdoctor" + "raulnunesodre", + "teoli", + "alexandrem" ] }, - "Web/API/CanvasRenderingContext2D": { - "modified": "2020-11-14T05:59:14.329Z", + "Web/API/Window/applicationCache": { + "modified": "2019-03-23T22:51:36.521Z", "contributors": [ - "pedrinhofss", - "TalissonOliveira", - "ThiagOliveira26", - "elciodalosto", - "ioxua-os", - "marcio-ti", - "rudolfo" + "haskellcamargo" ] }, - "Web/API/CanvasRenderingContext2D/arc": { - "modified": "2020-11-29T22:05:48.491Z", + "Web/API/Window/closed": { + "modified": "2019-03-18T20:58:51.070Z", "contributors": [ - "jfelipearaujo" + "SphinxKnight", + "haskellcamargo" ] }, - "Web/API/CanvasRenderingContext2D/arcTo": { - "modified": "2020-10-15T22:10:00.175Z", + "Web/API/Window/confirm": { + "modified": "2019-03-23T22:53:06.274Z", "contributors": [ - "Leodma" + "AlyoshaS", + "marcoaraujojunior", + "fabreu" ] }, - "Web/API/CanvasRenderingContext2D/beginPath": { - "modified": "2019-03-23T22:18:53.160Z", + "Web/API/Window/crypto": { + "modified": "2019-03-23T22:12:19.817Z", "contributors": [ - "MarceloBRN" + "Hikashii", + "AlexandreBarros" ] }, - "Web/API/CanvasRenderingContext2D/clearRect": { - "modified": "2019-03-23T22:18:47.441Z", + "Web/API/Window/document": { + "modified": "2019-03-23T22:49:44.918Z", "contributors": [ - "MarceloBRN" + "diogobenica", + "LucasRamos" ] }, - "Web/API/CanvasRenderingContext2D/clip": { - "modified": "2019-03-23T22:26:54.054Z", + "Web/API/Window/event": { + "modified": "2019-03-23T22:34:58.265Z", "contributors": [ - "Drako" + "macalha" ] }, - "Web/API/CanvasRenderingContext2D/closePath": { - "modified": "2019-03-23T22:18:51.433Z", + "Web/API/Window/fullScreen": { + "modified": "2019-03-23T22:50:57.657Z", "contributors": [ - "MarceloBRN" + "macalha" ] }, - "Web/API/CanvasRenderingContext2D/fill": { - "modified": "2019-03-23T22:18:51.215Z", + "Web/API/Window/getSelection": { + "modified": "2019-03-23T22:22:20.343Z", "contributors": [ - "MarceloBRN" + "pedroqueiroz94", + "fernandosouza" ] }, - "Web/API/CanvasRenderingContext2D/fillRect": { - "modified": "2019-03-23T22:18:47.156Z", + "Web/API/Window/history": { + "modified": "2019-03-23T22:21:53.007Z", "contributors": [ - "MarceloBRN" + "Drycoder027" ] }, - "Web/API/CanvasRenderingContext2D/fillStyle": { - "modified": "2019-03-23T22:15:27.700Z", + "Web/API/Window/innerHeight": { + "modified": "2019-03-23T22:07:12.963Z", "contributors": [ - "MarceloBRN", - "sergiorg" + "thedjmarcelo" ] }, - "Web/API/CanvasRenderingContext2D/lineTo": { - "modified": "2019-03-23T22:18:50.928Z", + "Web/API/Window/length": { + "modified": "2019-03-23T22:45:02.985Z", "contributors": [ - "MarceloBRN" + "diogobenica" ] }, - "Web/API/CanvasRenderingContext2D/moveTo": { - "modified": "2019-03-23T22:18:47.951Z", + "Web/API/Window/location": { + "modified": "2019-03-23T22:44:54.419Z", "contributors": [ - "MarceloBRN" + "AntLouiz", + "brunoeduardo" ] }, - "Web/API/CanvasRenderingContext2D/quadraticCurveTo": { - "modified": "2019-03-18T21:42:53.744Z", + "Web/API/Window/matchMedia": { + "modified": "2019-03-23T22:25:52.785Z", "contributors": [ - "ollieestuff" + "MarcosNakamine" ] }, - "Web/API/CanvasRenderingContext2D/rect": { - "modified": "2019-03-18T21:43:19.793Z", + "Web/API/Window/navigator": { + "modified": "2019-03-23T23:16:57.470Z", "contributors": [ - "MarceloBRN" + "teoli", + "eliezerb" ] }, - "Web/API/CanvasRenderingContext2D/stroke": { - "modified": "2019-03-23T22:18:51.989Z", + "Web/API/Window/ondevicelight": { + "modified": "2019-03-23T22:08:54.681Z", "contributors": [ - "MarceloBRN" + "rener_bz" ] }, - "Web/API/CanvasRenderingContext2D/strokeRect": { - "modified": "2019-03-23T22:18:48.512Z", + "Web/API/Window/openDialog": { + "modified": "2019-03-23T23:04:23.875Z", "contributors": [ - "MarceloBRN" + "saulodecarlo", + "teoli", + "perrucho" ] }, - "Web/API/CharacterData": { - "modified": "2020-10-15T22:12:28.607Z", + "Web/API/Window/performance": { + "modified": "2019-03-23T22:44:28.136Z", "contributors": [ - "marcos180212" + "augustoclaro" ] }, - "Web/API/ChildNode": { - "modified": "2020-10-15T21:55:14.252Z", + "Web/API/Window/popstate_event": { + "modified": "2019-04-26T08:34:23.645Z", "contributors": [ - "mateusvelleda", - "AlanSantos11", - "stevenwdv" + "chrisdavidmills", + "irenesmith", + "RQuadros", + "fscholz", + "brunoeduardo" ] }, - "Web/API/ChildNode/after": { - "modified": "2020-10-15T22:17:31.621Z", + "Web/API/Window/print": { + "modified": "2020-10-15T21:47:11.931Z", "contributors": [ - "pedroguilhermelima" + "alvarocjunq", + "macalha", + "Auugustocesar" ] }, - "Web/API/ChildNode/remove": { - "modified": "2020-10-15T21:55:19.824Z", + "Web/API/Window/prompt": { + "modified": "2019-03-23T22:57:04.834Z", "contributors": [ - "SphinxKnight", - "gutoribeiro" + "mahenrique", + "fnsc.luis" ] }, - "Web/API/ClipboardEvent": { - "modified": "2020-10-15T22:15:35.028Z", + "Web/API/Window/requestAnimationFrame": { + "modified": "2020-10-15T21:50:51.013Z", "contributors": [ - "duduindo", - "AnarcoPhysics" + "mateusvelleda", + "NoiSyBoY", + "hiperesp", + "sambrmg", + "calaca" ] }, - "Web/API/CloseEvent": { - "modified": "2019-09-12T20:33:31.828Z", + "Web/API/Window/requestIdleCallback": { + "modified": "2020-11-03T11:18:19.041Z", "contributors": [ - "marlonveiga-santos", - "rener_bz", - "dougKronos" + "luan0ap" ] }, - "Web/API/CloseEvent/CloseEvent": { - "modified": "2020-10-15T22:24:43.626Z", + "Web/API/Window/resize_event": { + "modified": "2019-04-30T14:03:51.758Z", "contributors": [ - "marlonveiga-santos" + "wbamberg", + "chrisdavidmills", + "irenesmith", + "sergio_orugian" ] }, - "Web/API/Console": { - "modified": "2019-03-23T23:17:34.298Z", + "Web/API/Window/scroll": { + "modified": "2019-03-23T22:13:21.030Z", "contributors": [ - "JorgeMadson", - "teoli", - "Webysther", - "khalid32", - "lfarroco" + "diego-c" ] }, - "Web/API/Console/assert": { - "modified": "2019-03-23T22:25:22.069Z", + "Web/API/Window/scrollBy": { + "modified": "2019-03-18T21:42:36.427Z", "contributors": [ - "mayronmedeiros" + "TecladistaProd" ] }, - "Web/API/Console/clear": { - "modified": "2020-10-15T22:29:37.104Z", + "Web/API/Window/scrollByPages": { + "modified": "2019-03-23T22:23:22.523Z", "contributors": [ - "webfelipemaia" + "LucasRuy" ] }, - "Web/API/Console/count": { - "modified": "2019-03-23T22:16:10.687Z", + "Web/API/Window/scrollTo": { + "modified": "2019-03-23T22:45:04.416Z", "contributors": [ - "vspedr" + "diogobenica" ] }, - "Web/API/Console/dir": { - "modified": "2019-03-23T22:50:36.909Z", + "Web/API/Window/scrollY": { + "modified": "2020-10-15T21:48:53.869Z", "contributors": [ - "belsanpesou" + "mateusvelleda", + "Jerffersonferreira" ] }, - "Web/API/Console/error": { - "modified": "2019-03-23T22:45:13.263Z", + "Web/API/Window/sessionStorage": { + "modified": "2019-08-02T11:53:58.107Z", "contributors": [ - "raduq" + "leila", + "haskellcamargo", + "PTLozano", + "Fulanodigital" ] }, - "Web/API/Console/info": { - "modified": "2019-03-23T22:29:13.618Z", + "Web/API/Window/setCursor": { + "modified": "2019-03-23T22:50:55.979Z", "contributors": [ - "zaclummys", - "HugoOliveira" + "macalha" ] }, - "Web/API/Console/log": { - "modified": "2019-03-23T22:56:56.119Z", + "Web/API/Window/setImmediate": { + "modified": "2019-03-23T22:04:49.012Z", "contributors": [ - "odahcam", - "Higo" + "jika" ] }, - "Web/API/Console/table": { - "modified": "2020-10-15T22:16:14.686Z", + "Web/API/WindowEventHandlers": { + "modified": "2020-03-01T23:25:36.916Z", "contributors": [ - "elielsonbatista" + "kudnx", + "teoli" ] }, - "Web/API/Console/time": { - "modified": "2019-10-03T22:24:48.908Z", + "Web/API/WindowEventHandlers/onhashchange": { + "modified": "2019-03-23T22:56:05.373Z", "contributors": [ - "gcacars" + "cleydsonjr", + "abensur" ] }, - "Web/API/Console/timeEnd": { - "modified": "2019-03-23T23:04:24.266Z", + "Web/API/WindowEventHandlers/onpopstate": { + "modified": "2019-03-23T22:46:07.205Z", "contributors": [ - "teoli", - "perrucho" + "brunoeduardo" ] }, - "Web/API/Console/timeStamp": { - "modified": "2019-10-03T22:25:43.901Z", + "Web/API/WindowEventHandlers/onstorage": { + "modified": "2019-03-23T22:03:39.969Z", "contributors": [ - "gcacars" + "GPrimola", + "gustavoverasmorais" ] }, - "Web/API/Console/warn": { - "modified": "2019-03-18T21:45:25.881Z", + "Web/API/WindowOrWorkerGlobalScope": { + "modified": "2019-03-23T22:06:16.824Z", "contributors": [ - "raduq" + "angelorubin", + "Bzbarsky" ] }, - "Web/API/Console_API": { - "modified": "2020-10-15T22:22:48.975Z", + "Web/API/WindowOrWorkerGlobalScope/fetch": { + "modified": "2019-03-23T22:06:21.567Z", "contributors": [ - "luan0ap" + "dowgssss" ] }, - "Web/API/Crypto": { - "modified": "2020-10-15T21:59:00.174Z", + "Web/API/WindowOrWorkerGlobalScope/setInterval": { + "modified": "2020-10-15T22:16:56.864Z", "contributors": [ - "Sipmann", - "Hikashii" + "luan0ap" ] }, - "Web/API/Crypto/subtle": { - "modified": "2020-10-15T21:59:00.200Z", + "Web/API/Worker": { + "modified": "2020-10-28T22:21:09.210Z", "contributors": [ - "fscholz", - "Hikashii" + "oliveiracaue", + "filipemarins", + "gxovano" ] }, - "Web/API/CryptoKey": { - "modified": "2019-03-23T22:02:50.915Z", + "Web/API/XMLDocument": { + "modified": "2020-10-15T22:12:36.526Z", "contributors": [ - "Hikashii" + "ExE-Boss", + "msilvaj" ] }, - "Web/API/CryptoKey/algorithm": { - "modified": "2019-03-23T22:02:41.629Z", + "Web/API/XMLDocument/async": { + "modified": "2019-04-24T21:10:36.508Z", "contributors": [ - "Hikashii" + "ExE-Boss", + "edurodriguesdias" ] }, - "Web/API/CryptoKey/extractable": { - "modified": "2019-03-23T22:02:42.520Z", + "Web/API/XMLHttpRequest": { + "modified": "2019-05-02T20:01:13.466Z", "contributors": [ - "Hikashii" + "wbamberg", + "anhaabaete", + "halkliff", + "brunoczim", + "andrekutianski", + "DaniloDev", + "wdoering", + "rogeriomoraessp", + "teoli", + "fusionchess" ] }, - "Web/API/CryptoKey/type": { - "modified": "2019-03-23T22:02:48.076Z", + "Web/API/XMLHttpRequest/abort": { + "modified": "2019-03-23T22:16:54.432Z", "contributors": [ - "Hikashii" + "gustavobeavis" ] }, - "Web/API/CryptoKey/usages": { - "modified": "2019-03-23T22:02:45.135Z", + "Web/API/XMLHttpRequest/onreadystatechange": { + "modified": "2019-03-23T22:16:58.340Z", "contributors": [ - "Hikashii" + "brunoczim", + "gustavobeavis" ] }, - "Web/API/CustomElementRegistry": { - "modified": "2020-10-15T22:10:44.693Z", + "Web/API/XMLHttpRequest/open": { + "modified": "2020-10-15T22:03:41.298Z", "contributors": [ - "mtsgeneroso" + "halkliff", + "mauromattos00" ] }, - "Web/API/DOMException": { - "modified": "2020-10-15T22:14:05.527Z", + "Web/API/XMLHttpRequest/readyState": { + "modified": "2019-05-15T10:26:01.821Z", "contributors": [ - "hamadecd", - "viniciuspdasilva" + "eduardovivi", + "gustavobeavis" ] }, - "Web/API/DOMImplementation": { - "modified": "2020-10-15T22:10:56.598Z", + "Web/API/XMLHttpRequest/send": { + "modified": "2020-10-15T22:05:47.894Z", "contributors": [ - "connorshea" + "duduindo", + "EduardoFerr" ] }, - "Web/API/DOMImplementation/createDocument": { - "modified": "2020-10-15T22:11:04.094Z", + "Web/API/XMLHttpRequest/setRequestHeader": { + "modified": "2020-10-15T22:18:51.386Z", "contributors": [ - "jeronimojr" + "devlhm" ] }, - "Web/API/DOMString": { - "modified": "2019-03-23T22:03:59.387Z", + "Web/API/XMLHttpRequest/timeout": { + "modified": "2019-03-23T22:27:06.677Z", "contributors": [ - "oirodolfo" + "trestini" ] }, - "Web/API/DOMStringList": { - "modified": "2019-03-23T22:03:44.815Z", + "Web/Accessibility/ARIA": { + "modified": "2020-05-04T12:03:49.162Z", "contributors": [ - "MaikeNegreiros" + "BeatrizCavallieri", + "rener_bz", + "Aschlla", + "meche", + "chrisdavidmills" ] }, - "Web/API/DOMStringMap": { - "modified": "2019-05-02T19:22:48.801Z", + "Web/Accessibility/ARIA/ARIA_Guides": { + "modified": "2019-03-23T22:05:06.841Z", "contributors": [ - "wbamberg", - "samir.araujo" + "mak213k" ] }, - "Web/API/DataTransfer": { - "modified": "2019-09-02T08:22:55.109Z", + "Web/Accessibility/ARIA/ARIA_Techniques": { + "modified": "2020-08-05T20:31:43.497Z", "contributors": [ - "gugaburigo29", - "wbamberg", - "Murillo_Brandao" + "alisson-suzigan", + "Sheppy" ] }, - "Web/API/DeviceAcceleration": { - "modified": "2019-03-23T22:09:29.028Z", + "Web/Accessibility/ARIA/ARIA_Techniques/Using_the_aria-describedby_attribute": { + "modified": "2020-01-24T10:16:14.859Z", "contributors": [ - "Fernandolrs" + "BiancaPereira" ] }, - "Web/API/DeviceRotationRate": { - "modified": "2019-03-23T22:09:26.114Z", + "Web/Accessibility/ARIA/ARIA_Techniques/Using_the_aria-label_attribute": { + "modified": "2020-12-10T12:36:57.074Z", "contributors": [ - "Fernandolrs" + "filipetorres", + "duduindo", + "NeoOrion" ] }, - "Web/API/Document": { - "modified": "2019-07-14T14:49:00.357Z", + "Web/Accessibility/ARIA/ARIA_Test_Cases": { + "modified": "2019-03-23T23:03:31.037Z", "contributors": [ - "onsistec", - "defr4g", - "brevvi", - "otaviogui", - "aarrigo", - "rodrigocnascimento", - "GabrielAmazonas", - "Joao.JS", - "lionbtt", - "teoli" + "hannahlere" ] }, - "Web/API/Document/Document": { - "modified": "2019-07-17T13:05:53.557Z", + "Web/Accessibility/ARIA/Roles": { + "modified": "2020-09-18T19:22:52.644Z", "contributors": [ - "onsistec", - "pleshw" + "Painatalman", + "rafaelcavalcante" ] }, - "Web/API/Document/ElementoRegistrado": { - "modified": "2019-03-23T22:20:55.282Z", + "Web/Accessibility/ARIA/Web_applications_and_ARIA_FAQ": { + "modified": "2019-03-23T22:27:11.984Z", "contributors": [ - "rener_bz", - "mak213k" + "Aschlla" ] }, - "Web/API/Document/URL": { - "modified": "2019-03-23T22:25:43.664Z", + "Web/Accessibility/ARIA/forms": { + "modified": "2019-03-23T22:29:43.271Z", "contributors": [ - "littlecouto" + "Aschlla", + "caio.rrs" ] }, - "Web/API/Document/activeElement": { - "modified": "2019-03-23T22:24:43.471Z", + "Web/Accessibility/ARIA/forms/Multipart_labels": { + "modified": "2019-03-23T22:27:34.088Z", "contributors": [ - "wbamberg", - "fscholz", - "fernandosavio", - "DiegoYungh" + "Aschlla" ] }, - "Web/API/Document/alinkColor": { - "modified": "2020-10-15T22:23:30.202Z", + "Web/Accessibility/ARIA/forms/alerts": { + "modified": "2019-09-09T08:04:08.002Z", "contributors": [ - "g-malaconi", - "VictorhMalheiro" + "brunopulis" ] }, - "Web/API/Document/anchors": { - "modified": "2019-03-23T22:10:28.887Z", + "Web/Accessibility/ARIA/widgets": { + "modified": "2019-01-16T23:07:41.279Z", "contributors": [ - "wbamberg", - "fernandosavio" + "julianosilvaa" ] }, - "Web/API/Document/bgColor": { - "modified": "2019-03-18T20:59:10.676Z", + "Web/CSS": { + "modified": "2019-12-23T19:24:02.129Z", "contributors": [ + "euvanribeiro", "SphinxKnight", - "henrywm" + "dekxside", + "julio-elipse", + "phenriqueleao", + "GPrimola", + "arthur2323", + "rafaelcavalcante", + "DiegoBRodrigues", + "fcard", + "KikenCris", + "teoli", + "MatCAlv", + "rodrigopadula", + "Estevaosoberano", + "angelorubin", + "fvargaspf@gmail.com", + "gabrielima" ] }, - "Web/API/Document/body": { - "modified": "2019-03-23T22:49:43.056Z", + "Web/CSS/--*": { + "modified": "2019-03-23T22:04:16.687Z", "contributors": [ - "josantana" + "filipetorres" ] }, - "Web/API/Document/characterSet": { - "modified": "2020-10-15T22:26:02.890Z", + "Web/CSS/-moz-context-properties": { + "modified": "2020-10-15T22:12:51.330Z", "contributors": [ - "g-malaconi" + "dekxside" ] }, - "Web/API/Document/close": { - "modified": "2019-03-23T22:05:22.094Z", + "Web/CSS/-webkit-overflow-scrolling": { + "modified": "2019-03-23T22:49:05.514Z", "contributors": [ - "henrywm" + "teoli", + "otaviogui", + "rafaelcavalcante", + "fcard", + "alexanmtz" ] }, - "Web/API/Document/compatMode": { - "modified": "2019-03-18T20:59:09.892Z", + "Web/CSS/-webkit-text-security": { + "modified": "2020-07-18T11:21:00.057Z", "contributors": [ - "SphinxKnight", - "macalha" + "alexalannunes" ] }, - "Web/API/Document/contentType": { - "modified": "2020-10-15T22:21:16.690Z", + "Web/CSS/::after": { + "modified": "2020-05-04T13:44:31.713Z", "contributors": [ - "onsistec" + "chrisdavidmills", + "KadirTopal", + "flunardelli", + "filipetorres", + "MarcosFerrao" ] }, - "Web/API/Document/createElement": { - "modified": "2019-03-23T22:54:23.615Z", + "Web/CSS/::backdrop": { + "modified": "2019-03-23T22:31:06.861Z", "contributors": [ - "guilherme-adesouza", - "diogoreducino", - "teoli", - "nicholascamp" + "tfvictorino" ] }, - "Web/API/Document/createElementNS": { - "modified": "2019-03-23T22:38:59.962Z", + "Web/CSS/::before": { + "modified": "2020-02-14T13:16:11.838Z", "contributors": [ - "LinuxPowerBR" + "melissatvs", + "TecladistaProd", + "marcioleandro" ] }, - "Web/API/Document/currentScript": { - "modified": "2019-03-23T22:50:44.919Z", + "Web/CSS/::first-letter": { + "modified": "2020-07-28T16:37:37.904Z", "contributors": [ - "wbamberg", - "Mathmovic" + "anhaabaete", + "isckosta" ] }, - "Web/API/Document/defaultView": { - "modified": "2019-03-23T22:45:13.537Z", + "Web/CSS/::first-line": { + "modified": "2020-10-15T22:32:28.103Z", "contributors": [ - "macalha" + "Camila-Isabela" ] }, - "Web/API/Document/designMode": { - "modified": "2019-03-23T22:46:53.988Z", + "Web/CSS/::selection": { + "modified": "2020-10-15T22:30:47.166Z", "contributors": [ - "caueamaral" + "euwilliamgoncalves" ] }, - "Web/API/Document/doctype": { - "modified": "2020-10-15T22:21:15.720Z", + "Web/CSS/:active": { + "modified": "2019-08-30T22:31:02.665Z", "contributors": [ - "onsistec" + "MarsA_", + "duduindo", + "Arlon", + "SKO" ] }, - "Web/API/Document/documentElement": { - "modified": "2019-03-23T22:50:37.447Z", + "Web/CSS/:blank": { + "modified": "2020-10-15T22:17:45.679Z", "contributors": [ - "coloringa", - "belsanpesou" + "charlesjamil" ] }, - "Web/API/Document/documentURI": { - "modified": "2020-10-15T22:21:10.338Z", + "Web/CSS/:checked": { + "modified": "2019-10-11T18:34:15.162Z", "contributors": [ - "onsistec" + "escattone", + "teoli", + "brunoeduardo" ] }, - "Web/API/Document/elementFromPoint": { - "modified": "2019-03-23T22:29:17.399Z", + "Web/CSS/:disabled": { + "modified": "2020-10-15T22:16:22.245Z", "contributors": [ - "cezaraugusto" + "Arlon" ] }, - "Web/API/Document/execCommand": { - "modified": "2020-10-15T22:28:17.705Z", + "Web/CSS/:empty": { + "modified": "2020-10-15T22:06:17.744Z", "contributors": [ - "vladwoguerbezerra" + "Arlon", + "liddack" ] }, - "Web/API/Document/fullscreen": { - "modified": "2020-10-15T22:27:26.847Z", + "Web/CSS/:enabled": { + "modified": "2020-10-15T22:16:22.794Z", "contributors": [ - "Eliezer62" + "Arlon" ] }, - "Web/API/Document/getElementById": { - "modified": "2019-09-15T13:18:53.343Z", + "Web/CSS/:first-child": { + "modified": "2019-03-23T23:02:20.033Z", "contributors": [ - "brasmon8351", - "hackerftsg", - "IcaroSantana", - "Filipe-Souza", - "eustabio_junior", - "teoli", - "khalid32", - "willian", - "YgorFranca" + "romulojales" ] }, - "Web/API/Document/getElementsByClassName": { - "modified": "2019-03-23T22:32:17.595Z", + "Web/CSS/:first-of-type": { + "modified": "2019-03-23T23:05:09.903Z", "contributors": [ - "fcard", - "lucasbento", - "marcelo.bastos" + "MarcosNakamine", + "dbiazioli" ] }, - "Web/API/Document/getElementsByName": { - "modified": "2020-10-15T22:22:47.482Z", + "Web/CSS/:focus": { + "modified": "2020-06-28T21:30:07.756Z", "contributors": [ - "KyryIx" + "Rovaron", + "LeoRiether", + "tfvictorino" ] }, - "Web/API/Document/getElementsByTagName": { - "modified": "2020-10-15T22:18:04.997Z", + "Web/CSS/:focus-within": { + "modified": "2020-10-15T22:14:20.305Z", "contributors": [ - "JailsonAraujo" + "leandroruel" ] }, - "Web/API/Document/getSelection": { - "modified": "2019-03-23T22:54:15.369Z", + "Web/CSS/:fullscreen": { + "modified": "2020-10-15T22:32:42.198Z", "contributors": [ - "expalmer" + "Slandrade" ] }, - "Web/API/Document/hasFocus": { - "modified": "2019-03-23T22:34:09.192Z", + "Web/CSS/:hover": { + "modified": "2019-03-23T22:52:37.038Z", "contributors": [ - "renatoluna" + "tfvictorino", + "brunoeduardo" ] }, - "Web/API/Document/head": { - "modified": "2019-03-23T22:49:41.577Z", + "Web/CSS/:invalid": { + "modified": "2020-10-15T21:58:33.546Z", "contributors": [ - "josantana" + "fscholz", + "valdeirpsr", + "dulcetti" ] }, - "Web/API/Document/height": { - "modified": "2019-03-23T22:04:29.295Z", + "Web/CSS/:last-child": { + "modified": "2019-03-23T22:53:17.390Z", "contributors": [ - "macalha" + "brunoeduardo" ] }, - "Web/API/Document/images": { - "modified": "2019-03-23T23:06:58.234Z", + "Web/CSS/:last-of-type": { + "modified": "2019-03-23T22:36:29.640Z", "contributors": [ - "teoli", - "JorgeRodrigues9" + "mnoronhas" ] }, - "Web/API/Document/implementation": { - "modified": "2019-03-18T21:16:40.902Z", + "Web/CSS/:link": { + "modified": "2019-03-23T23:02:10.016Z", "contributors": [ - "macalha" + "zamariolajr", + "juanopegoretti" ] }, - "Web/API/Document/importNode": { - "modified": "2020-10-15T21:47:31.458Z", + "Web/CSS/:not": { + "modified": "2020-10-15T21:43:20.480Z", "contributors": [ - "fscholz", - "wbamberg", - "VitorVRS" + "mateusvelleda", + "fcard", + "ribeiroevandro" ] }, - "Web/API/Document/keydown_event": { - "modified": "2019-04-15T09:18:45.968Z", + "Web/CSS/:nth-child": { + "modified": "2020-10-15T21:47:55.336Z", "contributors": [ - "irenesmith", - "manoelcampos" + "liddack", + "welitonderesende", + "ricardoferreirades", + "cynthiapereira", + "alexfqc" ] }, - "Web/API/Document/keypress_event": { - "modified": "2019-09-23T02:29:04.664Z", + "Web/CSS/:nth-last-child": { + "modified": "2019-04-23T11:30:59.891Z", "contributors": [ - "SphinxKnight", - "TiagoEmanuel", - "wbamberg", - "chrisdavidmills", - "JRodrigues13" + "larimaza" ] }, - "Web/API/Document/keyup_event": { - "modified": "2019-04-18T03:51:22.396Z", + "Web/CSS/:nth-of-type": { + "modified": "2019-03-23T22:01:39.698Z", "contributors": [ - "irenesmith", - "fscholz", - "thaynacoelho" + "evandrosevergnini" ] }, - "Web/API/Document/location": { - "modified": "2019-03-23T22:22:06.393Z", + "Web/CSS/:only-child": { + "modified": "2019-03-18T21:46:51.835Z", "contributors": [ - "HugoBex" + "larimaza" ] }, - "Web/API/Document/origin": { - "modified": "2020-10-15T22:14:43.600Z", + "Web/CSS/:only-of-type": { + "modified": "2020-03-18T12:33:14.783Z", "contributors": [ - "Rondinelly" + "eziotristao", + "guylhermetabosa" ] }, - "Web/API/Document/querySelector": { - "modified": "2019-08-15T13:21:36.389Z", + "Web/CSS/:optional": { + "modified": "2020-10-15T22:12:29.409Z", "contributors": [ - "fernandosavio", - "teoli", - "AshfaqHossain", - "HenriqueSilverio" + "Arlon", + "filipe-machado" ] }, - "Web/API/Document/querySelectorAll": { - "modified": "2019-03-23T23:35:24.346Z", + "Web/CSS/:out-of-range": { + "modified": "2020-10-15T22:28:44.918Z", "contributors": [ - "maarysantos", - "fernandosavio", - "teoli", - "zapimaster" + "JeffersonCAMarinho" ] }, - "Web/API/Document/readyState": { - "modified": "2019-08-15T13:11:06.674Z", + "Web/CSS/:read-write": { + "modified": "2020-10-15T22:31:33.681Z", "contributors": [ - "imnotvirus", - "macalha" + "ooVictorFranco" ] }, - "Web/API/Document/referrer": { - "modified": "2019-03-23T22:44:47.032Z", + "Web/CSS/:required": { + "modified": "2020-10-15T22:12:28.337Z", "contributors": [ - "alexandrefsans", - "TAGBrasil" + "filipe-machado" ] }, - "Web/API/Document/scripts": { - "modified": "2019-03-23T23:14:44.682Z", + "Web/CSS/:root": { + "modified": "2020-07-03T20:00:54.694Z", "contributors": [ - "teoli", - "BrenoPolanski" + "gstfnsk", + "saspnet", + "rafaelnery", + "lucasaugustin" ] }, - "Web/API/Document/write": { - "modified": "2020-10-29T21:41:43.539Z", + "Web/CSS/:target": { + "modified": "2020-10-15T22:32:25.651Z", "contributors": [ - "PedroHen1", - "webfelipemaia" + "joaocdfarias" ] }, - "Web/API/Document/writeln": { - "modified": "2019-03-23T23:10:34.523Z", + "Web/CSS/:valid": { + "modified": "2020-10-15T22:02:35.011Z", "contributors": [ - "teoli", - "jsx", - "Nathalino_Pacheco" + "valdeirpsr" ] }, - "Web/API/DocumentFragment": { - "modified": "2020-06-18T15:03:01.638Z", + "Web/CSS/:visited": { + "modified": "2020-10-15T22:11:21.146Z", "contributors": [ - "moiteiro", - "haskellcamargo", - "teoli", - "felfiz" + "duduindo", + "UnrealLion" ] }, - "Web/API/Element": { - "modified": "2019-03-18T21:08:52.187Z", + "Web/CSS/@charset": { + "modified": "2019-03-23T23:00:24.432Z", "contributors": [ + "Guillaume-Heras", "fscholz", - "coloringa", - "fime", - "teoli" + "lucascaprio" ] }, - "Web/API/Element/accessKey": { - "modified": "2019-03-23T22:27:15.059Z", + "Web/CSS/@font-face": { + "modified": "2020-10-15T22:19:20.814Z", "contributors": [ - "DiasNetoJ" + "fininhors", + "jorgeclesio" ] }, - "Web/API/Element/addEventListener": { - "modified": "2019-03-23T23:35:46.468Z", + "Web/CSS/@import": { + "modified": "2019-03-23T22:35:28.440Z", "contributors": [ - "SphinxKnight", - "LesleyAndreza", - "wbamberg", - "cautnew", - "teoli", - "guipremonsa" + "uzielweb", + "deyvid0123", + "philippesilva" ] }, - "Web/API/Element/animate": { - "modified": "2019-03-23T22:07:02.826Z", + "Web/CSS/@keyframes": { + "modified": "2019-03-23T22:05:43.167Z", "contributors": [ - "evandrolacerda" + "ganovais" ] }, - "Web/API/Element/attributes": { - "modified": "2019-03-23T22:27:10.096Z", + "Web/CSS/@media": { + "modified": "2020-05-17T15:47:13.849Z", "contributors": [ - "DiasNetoJ" + "filipegutemberg", + "kkkasio", + "chrisdavidmills" ] }, - "Web/API/Element/classList": { - "modified": "2019-03-23T22:21:03.577Z", + "Web/CSS/@media/aspect-ratio": { + "modified": "2020-10-15T22:26:11.457Z", "contributors": [ - "elnascimento", - "rafaelcavalcante", - "LucasRuy" + "marlonveiga-santos" ] }, - "Web/API/Element/className": { - "modified": "2019-03-23T22:37:29.089Z", + "Web/CSS/@media/display-mode": { + "modified": "2019-03-23T22:07:00.849Z", "contributors": [ - "lucasmedina" + "GPrimola", + "Fernandolrs", + "deusmar" ] }, - "Web/API/Element/click_event": { - "modified": "2019-03-23T22:00:01.063Z", + "Web/CSS/@media/prefers-color-scheme": { + "modified": "2020-10-15T22:28:45.846Z", "contributors": [ - "irenesmith", - "rochucky", - "fscholz", - "diegocesar" + "ftonato" ] }, - "Web/API/Element/closest": { - "modified": "2020-10-15T21:57:42.583Z", + "Web/CSS/@page": { + "modified": "2019-03-23T23:33:46.393Z", "contributors": [ - "mateusvelleda", - "willamesoares" - ] - }, - "Web/API/Element/getAttribute": { - "modified": "2019-03-23T23:08:02.469Z", + "Sebastianz", + "Prinz_Rana", + "fscholz", + "teoli", + "Estevaosoberano" + ] + }, + "Web/CSS/At-rule": { + "modified": "2019-03-23T23:39:11.306Z", "contributors": [ - "brunoravanhani", "teoli", - "gabrieltr" + "fernando", + "rodrigopadula" ] }, - "Web/API/Element/getBoundingClientRect": { - "modified": "2020-10-15T21:46:45.096Z", + "Web/CSS/CSS_Animations": { + "modified": "2019-03-23T22:43:49.326Z", "contributors": [ - "SphinxKnight", - "cezaraugusto", - "Daibushi" + "teoli" ] }, - "Web/API/Element/getElementsByClassName": { - "modified": "2020-10-15T22:29:44.232Z", + "Web/CSS/CSS_Animations/Detecting_CSS_animation_support": { + "modified": "2019-03-18T21:31:28.635Z", "contributors": [ - "leonardomaier" + "wbamberg", + "eyglys" ] }, - "Web/API/Element/id": { - "modified": "2019-03-23T23:09:45.457Z", + "Web/CSS/CSS_Animations/Tips": { + "modified": "2019-03-23T22:11:17.827Z", "contributors": [ - "brunoravanhani", - "teoli", - "khalid32", - "alexandrem" + "dime2lo" ] }, - "Web/API/Element/innerHTML": { - "modified": "2020-07-14T14:51:24.487Z", + "Web/CSS/CSS_Basic_User_Interface": { + "modified": "2019-03-18T20:54:10.559Z", "contributors": [ - "aquiles23", - "SphinxKnight", - "g-thome", - "n4rut0r31", - "fnsc.luis" + "Rondinelly" ] }, - "Web/API/Element/insertAdjacentHTML": { - "modified": "2019-03-23T22:50:34.232Z", + "Web/CSS/CSS_Box_Model": { + "modified": "2020-05-08T21:54:24.656Z", "contributors": [ - "rafaelcavalcante", - "raphaelchaib", - "belsanpesou" + "ZurcLeo", + "Sebastianz" ] }, - "Web/API/Element/matches": { - "modified": "2019-03-23T22:20:51.438Z", + "Web/CSS/CSS_Columns": { + "modified": "2019-03-23T22:43:56.221Z", "contributors": [ - "jozadaquebatista" + "Sebastianz" ] }, - "Web/API/Element/mousedown_event": { - "modified": "2019-04-30T14:20:11.230Z", + "Web/CSS/CSS_Display": { + "modified": "2020-10-15T22:22:39.686Z", "contributors": [ - "wbamberg", - "irenesmith", - "KaykyB" + "brasmon8351" ] }, - "Web/API/Element/mouseenter_event": { - "modified": "2019-04-30T14:17:45.007Z", + "Web/CSS/CSS_Flexible_Box_Layout": { + "modified": "2019-03-23T22:39:02.047Z", "contributors": [ - "wbamberg", - "irenesmith", - "fscholz", - "jppaschoal" + "wwwjsw" ] }, - "Web/API/Element/mouseover_event": { - "modified": "2019-04-30T14:03:03.928Z", + "Web/CSS/CSS_Flexible_Box_Layout/Aligning_Items_in_a_Flex_Container": { + "modified": "2020-05-30T17:57:20.170Z", "contributors": [ - "wbamberg", - "irenesmith", - "Bobson360" + "louisberns", + "lucas_severo", + "RobsonMariana" ] }, - "Web/API/Element/name": { - "modified": "2019-03-23T22:18:12.202Z", + "Web/CSS/CSS_Flexible_Box_Layout/Ordering_Flex_Items": { + "modified": "2020-06-16T16:39:10.201Z", "contributors": [ - "RafaelGiordanno" + "MarcosNakamine" ] }, - "Web/API/Element/outerHTML": { - "modified": "2019-03-23T22:34:59.844Z", + "Web/CSS/CSS_Flexible_Box_Layout/Typical_Use_Cases_of_Flexbox": { + "modified": "2020-11-08T18:33:11.137Z", "contributors": [ - "LucianoCardoso" + "Eduardo-Santos" ] }, - "Web/API/Element/querySelector": { - "modified": "2019-03-23T23:02:11.163Z", + "Web/CSS/CSS_Grid_Layout": { + "modified": "2020-11-17T10:35:18.965Z", "contributors": [ - "fernandoleal", - "teoli", - "tbai" + "leandro2", + "Camila-Isabela", + "btd1337", + "alessandroHenrique", + "davioliveiira", + "Maujor" ] }, - "Web/API/Element/querySelectorAll": { - "modified": "2019-05-03T00:57:05.010Z", + "Web/CSS/CSS_Grid_Layout/Basic_Concepts_of_Grid_Layout": { + "modified": "2019-10-10T16:31:58.386Z", "contributors": [ - "wbamberg", - "viniciusvms", - "teoli", - "LuizPanariello" + "petrikuzman", + "EdilsonSilva", + "felipecesr", + "marcosdourado", + "salomes", + "cslaviero", + "Nichtdeutsch", + "hernanimattos", + "Wanderleymuniz", + "magnonp", + "MatheusNtg", + "simoneas02", + "thiago-hs", + "FernandaBernardo", + "guigrecco", + "Maujor" ] }, - "Web/API/Element/removeAttribute": { - "modified": "2019-03-23T23:06:58.347Z", + "Web/CSS/CSS_Grid_Layout/Relationship_of_Grid_Layout": { + "modified": "2019-03-18T21:30:25.562Z", "contributors": [ - "teoli", - "cel055" + "lzerror" ] }, - "Web/API/Element/scrollIntoView": { - "modified": "2020-10-15T21:52:05.069Z", + "Web/CSS/CSS_Images": { + "modified": "2019-03-18T21:39:59.884Z", "contributors": [ - "mateusvelleda", - "thiago890-3", - "mausim" + "mfluehr" ] }, - "Web/API/Element/scrollLeft": { - "modified": "2020-10-15T21:46:51.554Z", + "Web/CSS/CSS_Lists_and_Counters": { + "modified": "2019-03-23T22:45:37.305Z", "contributors": [ - "djornada", - "SphinxKnight", - "eustabio_junior" + "teoli" ] }, - "Web/API/Element/scrollTop": { - "modified": "2019-03-23T22:40:30.613Z", + "Web/CSS/CSS_Lists_and_Counters/Using_CSS_counters": { + "modified": "2020-08-20T10:01:26.706Z", "contributors": [ - "samuelsilvadev", - "Alex-Alan-Nunes" + "felipecesr", + "cris-luz-07", + "jorgeclesio" ] }, - "Web/API/Element/scrollWidth": { - "modified": "2020-10-15T21:56:42.511Z", + "Web/CSS/CSS_Positioning": { + "modified": "2019-07-23T07:58:20.044Z", "contributors": [ "SphinxKnight", - "joaovinicius" + "e-laura", + "davidhbrown" ] }, - "Web/API/Element/setAttribute": { - "modified": "2019-03-23T22:31:48.961Z", + "Web/CSS/CSS_Transforms": { + "modified": "2019-03-23T22:44:44.279Z", "contributors": [ - "rplaurindo" + "Sebastianz", + "jorgeclesio" ] }, - "Web/API/Element/setAttributeNS": { - "modified": "2019-03-23T22:21:30.240Z", + "Web/CSS/CSS_Transforms/Using_CSS_transforms": { + "modified": "2019-03-23T23:39:05.696Z", "contributors": [ - "edgardleal" + "luketevl", + "fscholz", + "jorgeclesio", + "francineemilia" ] }, - "Web/API/Element/tagName": { - "modified": "2019-03-23T22:07:25.667Z", + "Web/CSS/CSS_Transitions": { + "modified": "2019-05-23T03:24:59.191Z", "contributors": [ - "VitorHFLopes" + "SphinxKnight", + "phyominoo" ] }, - "Web/API/Element/touchstart_event": { - "modified": "2019-04-30T14:26:22.509Z", + "Web/CSS/CSS_Transitions/Using_CSS_transitions": { + "modified": "2020-02-24T11:14:13.720Z", "contributors": [ - "wbamberg", - "irenesmith", - "fscholz", - "ZekDtonik" + "EdeiltonSO", + "Clecio013" ] }, - "Web/API/Encoding_API": { - "modified": "2020-10-15T22:25:14.787Z", + "Web/CSS/Class_selectors": { + "modified": "2020-11-20T21:23:14.555Z", "contributors": [ - "luan0ap" + "hellofanny", + "felipeteixeirams" ] }, - "Web/API/Event": { - "modified": "2019-03-23T23:01:39.950Z", + "Web/CSS/Descendant_combinator": { + "modified": "2020-10-15T22:27:46.661Z", "contributors": [ - "ralfting", - "gregori", - "juliocarneiro", - "fscholz" + "maxsixth" ] }, - "Web/API/Event/Comparativo_entre_Event_Targets": { - "modified": "2019-11-03T21:25:56.066Z", + "Web/CSS/General_sibling_combinator": { + "modified": "2019-03-23T22:12:07.654Z", "contributors": [ - "rayonnunes" + "ExE-Boss", + "dineiar", + "interaminense" ] }, - "Web/API/Event/Event": { - "modified": "2020-10-15T21:42:53.584Z", + "Web/CSS/ID_selectors": { + "modified": "2019-03-23T22:30:10.383Z", "contributors": [ - "fscholz", - "juliocarneiro" + "fcard" ] }, - "Web/API/Event/currentTarget": { - "modified": "2019-03-18T21:42:03.631Z", + "Web/CSS/Layout_cookbook": { + "modified": "2019-07-01T02:49:26.802Z", "contributors": [ - "leom806", - "WederPachecoSilva" + "SphinxKnight", + "sourodrigodesigner", + "jorgeclesio" ] }, - "Web/API/Event/defaultPrevented": { - "modified": "2019-03-23T22:53:50.174Z", + "Web/CSS/Layout_cookbook/Breadcrumb_Navigation": { + "modified": "2020-10-15T22:25:57.757Z", "contributors": [ - "Fabiolux" + "andre-vinicius" ] }, - "Web/API/Event/initEvent": { - "modified": "2019-05-30T19:08:33.694Z", + "Web/CSS/Layout_cookbook/Media_objects": { + "modified": "2020-10-15T22:30:53.182Z", "contributors": [ - "RoinujNosde", - "rodrigocnascimento" + "SONSERVICE" ] }, - "Web/API/Event/isTrusted": { - "modified": "2020-10-15T22:15:35.212Z", + "Web/CSS/Media_Queries": { + "modified": "2019-03-23T22:21:43.734Z", "contributors": [ - "AnarcoPhysics" + "dinaldojr" ] }, - "Web/API/Event/preventDefault": { - "modified": "2019-03-23T22:39:06.025Z", + "Web/CSS/Microsoft_Extensions": { + "modified": "2020-08-25T13:14:49.650Z", "contributors": [ - "juliocarneiro" + "duduindo", + "mcastanhola" ] }, - "Web/API/Event/srcElement": { - "modified": "2019-03-23T22:35:07.248Z", + "Web/CSS/Pseudo-classes": { + "modified": "2020-07-03T20:22:36.539Z", "contributors": [ - "macalha" + "gstfnsk", + "Lukff", + "brunoeduardo" ] }, - "Web/API/Event/stopImmediatePropagation": { - "modified": "2019-03-18T20:45:36.763Z", + "Web/CSS/Shorthand_properties": { + "modified": "2019-03-23T22:15:16.832Z", "contributors": [ - "MarcioCorrea", - "caueamaral", - "junior201110" + "rubenmarcus" ] }, - "Web/API/Event/stopPropagation": { - "modified": "2020-08-29T13:09:53.471Z", + "Web/CSS/Specificity": { + "modified": "2019-12-19T17:59:37.262Z", "contributors": [ - "geffbatista", - "diegolaquino", - "drigores", - "strael1", - "raul3k" + "AdamsEric", + "Carli", + "tfvictorino", + "teoli", + "fvargaspf@gmail.com" ] }, - "Web/API/Event/target": { - "modified": "2020-11-05T02:57:14.382Z", + "Web/CSS/Tools": { + "modified": "2019-03-23T23:07:41.210Z", "contributors": [ - "SphinxKnight", - "miguelbrn", - "LucasRuy" + "hlays", + "velvel53" ] }, - "Web/API/Event/type": { - "modified": "2019-03-23T23:22:07.699Z", + "Web/CSS/Type_selectors": { + "modified": "2020-10-15T22:32:30.449Z", "contributors": [ - "teoli", - "mateuspv" + "cyz" ] }, - "Web/API/EventListener": { - "modified": "2019-03-23T22:20:33.890Z", + "Web/CSS/Using_CSS_custom_properties": { + "modified": "2020-10-15T21:28:55.244Z", "contributors": [ - "cezaraugusto" + "SphinxKnight", + "MagicalStrangeQuark", + "chrisdavidmills", + "TecladistaProd", + "matheus.raduan", + "wellviana", + "eltonmesquita" ] }, - "Web/API/EventSource": { - "modified": "2019-03-23T22:50:15.004Z", + "Web/CSS/align-content": { + "modified": "2020-10-15T22:32:42.150Z", "contributors": [ - "ronrother", - "Madalosso", - "leonardopandrade" + "Filipe" ] }, - "Web/API/EventSource/EventSource": { - "modified": "2019-03-18T21:30:57.351Z", + "Web/CSS/align-items": { + "modified": "2020-10-15T22:12:31.546Z", "contributors": [ - "ronrother" + "rbuzatto" ] }, - "Web/API/EventSource/onerror": { - "modified": "2019-03-18T21:30:45.574Z", + "Web/CSS/align-self": { + "modified": "2020-10-15T22:12:37.957Z", "contributors": [ - "ronrother" + "rbuzatto" ] }, - "Web/API/EventTarget": { - "modified": "2019-03-23T23:16:55.717Z", + "Web/CSS/animation": { + "modified": "2020-10-15T21:29:59.258Z", "contributors": [ - "victor_emanuel", + "Canturilsnaik", + "MarcosNakamine", + "mrstork", "teoli", - "khalid32", - "eliezerb" + "Sebastianz", + "mateusleon" ] }, - "Web/API/EventTarget/EventTarget": { - "modified": "2020-10-15T22:24:50.823Z", + "Web/CSS/animation-delay": { + "modified": "2019-03-23T22:05:35.414Z", "contributors": [ - "marlonveiga-santos" + "francisquete" ] }, - "Web/API/EventTarget/dispatchEvent": { - "modified": "2019-03-18T21:17:11.648Z", + "Web/CSS/animation-fill-mode": { + "modified": "2020-10-19T07:57:27.073Z", "contributors": [ - "angellica.araujo" + "SphinxKnight", + "DSousa21", + "MarcosNakamine", + "daliannyvieira" ] }, - "Web/API/EventTarget/removeEventListener": { - "modified": "2020-10-15T21:37:49.617Z", + "Web/CSS/attr()": { + "modified": "2020-11-04T08:51:55.092Z", "contributors": [ - "mateusvelleda", - "angellica.araujo" + "chrisdavidmills", + "SphinxKnight", + "GPrimola", + "igorParanhos" ] }, - "Web/API/Fetch_API": { - "modified": "2020-10-15T21:42:57.080Z", + "Web/CSS/backdrop-filter": { + "modified": "2020-10-15T22:24:05.999Z", "contributors": [ - "mateusvelleda", - "BrunoLucas", - "fapbatista", - "tcelestino" + "liddack" ] }, - "Web/API/Fetch_API/Basic_concepts": { - "modified": "2020-02-17T13:24:31.887Z", + "Web/CSS/backface-visibility": { + "modified": "2019-03-23T22:43:08.854Z", "contributors": [ - "diezan", - "LincePotiguara" + "maugravena", + "teoli", + "alexanmtz" ] }, - "Web/API/Fetch_API/Using_Fetch": { - "modified": "2020-10-15T21:51:06.123Z", + "Web/CSS/background": { + "modified": "2020-10-15T21:46:31.679Z", "contributors": [ - "CharlesEduardoSCBR", - "PauloNFraga", - "rodrigost23", - "puppe1990", - "mateusvelleda", - "AndreRodriguesMelo", - "jeronimojr", - "JEricFarias", - "Italox", - "claudemirmendes", - "nelsonealves", - "dowgssss", - "FranciscoJunior", - "DanZeuss", - "rennerocha" + "felipeolliveira", + "brunoaugustosilva", + "fscholz", + "macalha", + "luanmuniz", + "joaogsantos" ] }, - "Web/API/Fetch_API/Uso_de_busca_Cross-global": { - "modified": "2019-03-18T20:48:56.041Z", + "Web/CSS/background-attachment": { + "modified": "2019-03-23T22:27:58.885Z", "contributors": [ - "matluz" + "alexfqc" ] }, - "Web/API/File": { - "modified": "2019-03-23T23:11:40.315Z", + "Web/CSS/background-blend-mode": { + "modified": "2019-03-23T22:09:16.123Z", "contributors": [ - "ivanmrosa", - "teoli", - "Beterraba" + "tadeubarbosa" ] }, - "Web/API/File/Using_files_from_web_applications": { - "modified": "2019-03-23T23:36:41.452Z", + "Web/CSS/background-clip": { + "modified": "2020-01-24T03:37:24.518Z", "contributors": [ - "chrisdavidmills", - "FelipeFonseca" + "marlonveiga-santos", + "CarlosHMoreira", + "fscholz", + "Sebastianz", + "filipewl" ] }, - "Web/API/FileList": { - "modified": "2019-03-23T22:14:37.211Z", + "Web/CSS/background-color": { + "modified": "2020-10-15T22:34:37.855Z", "contributors": [ - "julianotcp" + "keitoliveira" ] }, - "Web/API/FileReader": { - "modified": "2019-03-18T20:49:40.766Z", + "Web/CSS/background-origin": { + "modified": "2020-10-15T22:04:40.110Z", "contributors": [ - "andersonmo", - "hugonmelo", - "ricardoferreirades", - "belsanpesou", - "rafaelcalpena", - "teoli", - "wbruno" + "brunoaugustosilva" ] }, - "Web/API/FileReader/FileReader": { - "modified": "2019-09-27T14:33:41.762Z", + "Web/CSS/background-position": { + "modified": "2020-10-15T22:04:40.552Z", "contributors": [ - "junior-jornada", - "helton-mori-dev" + "gustavaum", + "brunoaugustosilva" ] }, - "Web/API/FileReader/onload": { - "modified": "2019-12-24T01:07:36.177Z", + "Web/CSS/background-size": { + "modified": "2020-10-15T21:56:47.129Z", "contributors": [ - "euvanribeiro", - "educhigon" + "pedrothome1" ] }, - "Web/API/FileReader/readAsArrayBuffer": { - "modified": "2019-03-23T22:25:41.700Z", + "Web/CSS/blend-mode": { + "modified": "2020-10-15T22:20:02.938Z", "contributors": [ - "fabioleardini" + "aledebarba" ] }, - "Web/API/FileReader/readAsBinaryString": { - "modified": "2019-03-23T22:27:28.165Z", + "Web/CSS/block-size": { + "modified": "2020-10-15T22:14:03.242Z", "contributors": [ - "teoli", - "Cyrkran" + "ViniciusMatias" ] }, - "Web/API/FileReader/readAsDataURL": { - "modified": "2019-03-23T22:51:10.920Z", + "Web/CSS/border-left": { + "modified": "2019-03-23T22:39:02.522Z", "contributors": [ - "W3SS", - "DiegoYungh" + "juliocarneiro" ] }, - "Web/API/FileReader/readAsText": { - "modified": "2019-03-23T22:15:55.068Z", + "Web/CSS/border-left-color": { + "modified": "2020-10-15T22:29:25.259Z", "contributors": [ - "fellypsantos" + "victorferreira.s0307" ] }, - "Web/API/FormData": { - "modified": "2019-03-23T23:08:47.831Z", + "Web/CSS/border-radius": { + "modified": "2019-03-23T22:27:40.423Z", "contributors": [ - "cautnew", - "CassianoD2", - "julianotcp", - "qixmiers", - "alexandresn", - "teoli", - "slackrichard" + "Jerffersonferreira" ] }, - "Web/API/FormData/FormData": { - "modified": "2019-03-23T22:15:46.234Z", + "Web/CSS/box-shadow": { + "modified": "2020-07-02T14:18:07.328Z", "contributors": [ - "luislobo14rap", - "emersonlaurentino" + "Alynva", + "juliosampaio", + "alexNeto" ] }, - "Web/API/FormData/append": { - "modified": "2019-03-23T22:36:07.939Z", + "Web/CSS/box-sizing": { + "modified": "2020-10-15T21:31:51.696Z", "contributors": [ - "Ascamp", - "rogerioac", - "DouglasValdo" + "lucasinoue", + "SphinxKnight", + "LeonardoBrizolla", + "hdvianna", + "ThaleSelaht", + "SJW", + "esaramago", + "geovannikun", + "ekbaumgarten", + "morvanabonin" ] }, - "Web/API/FormData/delete": { - "modified": "2019-03-23T22:52:03.924Z", + "Web/CSS/break-after": { + "modified": "2020-10-15T22:23:12.517Z", "contributors": [ - "DouglasValdo" + "renatobalbino" ] }, - "Web/API/FormData/entries": { - "modified": "2020-10-15T22:22:54.323Z", + "Web/CSS/calc()": { + "modified": "2020-11-04T09:08:50.767Z", "contributors": [ - "abalioni" + "chrisdavidmills", + "Anonymous", + "CahMoraes", + "alexalannunes", + "oxesoft", + "rubensdemelo" ] }, - "Web/API/FormData/get": { - "modified": "2019-03-23T22:49:19.241Z", + "Web/CSS/clear": { + "modified": "2020-10-15T22:11:39.449Z", "contributors": [ - "antoniomquadrosfilho" + "leovene" ] }, - "Web/API/FormData/getAll": { - "modified": "2020-10-15T22:10:15.102Z", + "Web/CSS/color": { + "modified": "2020-10-15T22:11:21.255Z", "contributors": [ - "enieber" + "UnrealLion" ] }, - "Web/API/FormData/has": { - "modified": "2020-10-15T22:22:52.357Z", + "Web/CSS/color_value": { + "modified": "2019-03-23T22:15:53.386Z", "contributors": [ - "abalioni" + "Dianakc" ] }, - "Web/API/FormData/set": { - "modified": "2019-03-23T22:30:34.242Z", + "Web/CSS/contain": { + "modified": "2019-03-18T21:38:58.826Z", "contributors": [ - "welingtonms" + "leandroruel" ] }, - "Web/API/FullscreenOptions": { - "modified": "2020-10-15T22:15:52.238Z", + "Web/CSS/content": { + "modified": "2019-03-23T22:32:40.444Z", "contributors": [ - "TecladistaProd" + "fernando", + "SphinxKnight" ] }, - "Web/API/Gamepad_API": { - "modified": "2020-10-15T22:23:34.951Z", + "Web/CSS/cursor": { + "modified": "2020-11-26T03:13:44.205Z", "contributors": [ - "IuriPires" + "SphinxKnight", + "uendelzilda123", + "filipetorres", + "Jerffersonferreira" ] }, - "Web/API/Geolocation": { - "modified": "2020-10-15T21:26:05.516Z", + "Web/CSS/display": { + "modified": "2019-10-10T16:54:40.995Z", "contributors": [ - "Sipmann", - "eduardobrenn", - "Leodma", + "JosOe", + "brasmon8351", + "thiagoreis", + "wbamberg", + "chiarmar", + "rramosBR", + "gabrielsixel", + "jorgeclesio", + "Sebastianz", + "KikenCris", "teoli", - "cirocosta" + "fnsc.luis" ] }, - "Web/API/Geolocation/clearWatch": { - "modified": "2020-10-15T22:15:59.752Z", + "Web/CSS/display-box": { + "modified": "2020-10-15T22:22:38.389Z", "contributors": [ - "TecladistaProd" + "brasmon8351" ] }, - "Web/API/Geolocation/getCurrentPosition": { - "modified": "2019-01-16T20:45:52.604Z", + "Web/CSS/display-inside": { + "modified": "2020-10-15T22:22:39.103Z", "contributors": [ - "Gutem", - "fscholz", - "robsonalvesbh" + "brasmon8351" ] }, - "Web/API/Geolocation/watchPosition": { - "modified": "2019-03-23T22:50:20.143Z", + "Web/CSS/display-internal": { + "modified": "2020-10-15T22:22:38.638Z", "contributors": [ - "Gutem" + "brasmon8351" ] }, - "Web/API/GeolocationCoordinates": { - "modified": "2019-12-10T09:35:08.897Z", + "Web/CSS/display-legacy": { + "modified": "2020-10-15T22:22:39.608Z", "contributors": [ - "chrisdavidmills", - "eduardobrenn" + "brasmon8351" ] }, - "Web/API/GeolocationCoordinates/altitude": { - "modified": "2020-10-15T22:16:41.064Z", + "Web/CSS/display-listitem": { + "modified": "2020-10-15T22:22:38.303Z", "contributors": [ - "chrisdavidmills", - "wallisonfelipe" + "brasmon8351" ] }, - "Web/API/GeolocationPosition": { - "modified": "2020-10-15T22:07:16.029Z", + "Web/CSS/display-outside": { + "modified": "2020-10-15T22:22:38.175Z", "contributors": [ - "chrisdavidmills", - "Sipmann", - "bbarreto" + "brasmon8351" ] }, - "Web/API/GeolocationPosition/coords": { - "modified": "2019-12-10T11:04:44.065Z", + "Web/CSS/element()": { + "modified": "2020-11-10T11:06:23.872Z", "contributors": [ "chrisdavidmills", - "bbarreto" + "JonatasAmaral" ] }, - "Web/API/GeolocationPositionError": { - "modified": "2019-12-10T10:45:27.387Z", + "Web/CSS/env()": { + "modified": "2020-11-10T11:11:50.127Z", "contributors": [ "chrisdavidmills", - "nandotorres" + "Rondinelly" ] }, - "Web/API/GlobalEventHandlers": { - "modified": "2019-03-23T22:31:33.398Z", + "Web/CSS/filter-function": { + "modified": "2019-03-18T21:46:25.511Z", "contributors": [ - "teoli" + "mfluehr" ] }, - "Web/API/GlobalEventHandlers/onabort": { - "modified": "2019-03-23T22:28:55.671Z", + "Web/CSS/filter-function/grayscale()": { + "modified": "2020-11-10T11:19:23.773Z", "contributors": [ - "cezaraugusto" + "chrisdavidmills", + "BrunaGil" ] }, - "Web/API/GlobalEventHandlers/onblur": { - "modified": "2019-03-23T22:28:57.111Z", + "Web/CSS/filter-function/opacity()": { + "modified": "2020-11-16T09:08:08.691Z", "contributors": [ - "cezaraugusto" + "chrisdavidmills", + "larimaza" ] }, - "Web/API/GlobalEventHandlers/onchange": { - "modified": "2019-03-23T22:28:49.180Z", + "Web/CSS/filter-function/sepia()": { + "modified": "2020-11-30T10:24:47.934Z", "contributors": [ - "nathaliabruno", - "cezaraugusto" + "chrisdavidmills", + "larimaza" ] }, - "Web/API/GlobalEventHandlers/onclick": { - "modified": "2020-10-15T22:17:11.589Z", + "Web/CSS/flex": { + "modified": "2020-11-09T02:37:31.343Z", "contributors": [ - "g-otn" + "luciano.ar6", + "helton-mori-dev", + "carlosvasconcelosjr" ] }, - "Web/API/GlobalEventHandlers/oncontextmenu": { - "modified": "2019-03-23T22:28:42.538Z", + "Web/CSS/flex-direction": { + "modified": "2020-10-15T22:22:57.753Z", "contributors": [ - "cezaraugusto" + "SphinxKnight", + "Gleisson_Neves", + "MarsA_", + "mhayk" ] }, - "Web/API/GlobalEventHandlers/onerror": { - "modified": "2019-03-23T22:31:39.576Z", + "Web/CSS/flex-flow": { + "modified": "2020-10-15T21:47:43.877Z", "contributors": [ - "mantovani" + "liddack", + "LeandroPS" ] }, - "Web/API/GlobalEventHandlers/onfocus": { - "modified": "2019-03-23T22:26:20.214Z", + "Web/CSS/flex-wrap": { + "modified": "2020-11-29T18:54:20.472Z", "contributors": [ - "tmoraes" + "Marcosnto", + "Gleisson_Neves" ] }, - "Web/API/GlobalEventHandlers/onkeyup": { - "modified": "2020-10-15T22:03:53.967Z", + "Web/CSS/float": { + "modified": "2019-03-23T22:20:46.403Z", "contributors": [ - "Sipmann", - "kinkurek" + "biracruz" ] }, - "Web/API/GlobalEventHandlers/onload": { - "modified": "2019-03-23T22:21:10.943Z", + "Web/CSS/font-family": { + "modified": "2019-10-03T18:27:37.350Z", "contributors": [ - "jeanonline" + "kmoreiradesigner", + "Ronkiro", + "fscholz", + "Sebastianz", + "bubui" ] }, - "Web/API/GlobalEventHandlers/onlostpointercapture": { - "modified": "2020-10-15T22:22:03.373Z", + "Web/CSS/font-feature-settings": { + "modified": "2020-12-07T08:17:07.091Z", "contributors": [ - "mdeamf" + "Strapazzon", + "yagosrocha" ] }, - "Web/API/GlobalEventHandlers/onscroll": { - "modified": "2020-10-15T22:23:08.144Z", + "Web/CSS/font-kerning": { + "modified": "2019-03-23T22:09:10.848Z", "contributors": [ - "marlonveiga-santos", - "Antonio.Carvalho" + "rener_bz" ] }, - "Web/API/HTMLCanvasElement": { - "modified": "2019-03-23T22:03:54.461Z", + "Web/CSS/font-size": { + "modified": "2020-10-15T22:19:23.993Z", "contributors": [ - "zbjornson" + "MatheusBorges", + "jorgeclesio" ] }, - "Web/API/HTMLCanvasElement/getContext": { - "modified": "2019-03-23T22:03:59.683Z", + "Web/CSS/font-variation-settings": { + "modified": "2020-10-15T22:24:06.969Z", "contributors": [ - "Bigous", - "raffaeldantass" + "GuilhermePiovesan" ] }, - "Web/API/HTMLCanvasElement/height": { - "modified": "2020-10-15T22:02:34.563Z", + "Web/CSS/font-weight": { + "modified": "2019-03-23T22:49:03.645Z", "contributors": [ - "valdeirpsr" + "SphinxKnight", + "fscholz", + "Sebastianz", + "ppedruzzi" ] }, - "Web/API/HTMLCanvasElement/toDataURL": { - "modified": "2020-10-15T22:02:37.180Z", + "Web/CSS/grid": { + "modified": "2020-10-15T22:11:03.246Z", "contributors": [ - "pererinha", - "valdeirpsr" + "eniocsj" ] }, - "Web/API/HTMLCollection": { - "modified": "2019-03-23T22:53:46.166Z", + "Web/CSS/grid-auto-flow": { + "modified": "2020-10-15T22:01:03.947Z", "contributors": [ - "Papaxibe" + "thiagommoreira" ] }, - "Web/API/HTMLContentElement": { - "modified": "2019-03-23T22:20:56.663Z", + "Web/CSS/grid-template-columns": { + "modified": "2020-10-15T21:55:28.296Z", "contributors": [ - "mak213k" + "asm95", + "fscholz", + "kazaku16" ] }, - "Web/API/HTMLContentElement/Seletor": { - "modified": "2019-03-23T22:20:59.150Z", + "Web/CSS/grid-template-rows": { + "modified": "2020-10-15T22:05:37.787Z", "contributors": [ - "mak213k" + "marcosdourado" ] }, - "Web/API/HTMLContentElement/getDistributedNodes": { - "modified": "2019-03-23T22:21:10.713Z", + "Web/CSS/height": { + "modified": "2019-03-23T23:09:19.423Z", "contributors": [ - "mak213k" + "mrcehlo", + "mrstork", + "SphinxKnight", + "Sebastianz", + "marcosyoshihiro" ] }, - "Web/API/HTMLDivElement": { - "modified": "2019-03-23T22:50:39.476Z", + "Web/CSS/image-set()": { + "modified": "2020-11-16T08:53:55.560Z", "contributors": [ - "oirodolfo", - "belsanpesou" + "chrisdavidmills", + "leandroruel" ] }, - "Web/API/HTMLElement": { - "modified": "2019-03-23T22:40:10.318Z", + "Web/CSS/inheritance": { + "modified": "2019-03-23T22:30:06.400Z", "contributors": [ - "wanderson-webdev", - "fscholz" + "fcard" ] }, - "Web/API/HTMLElement/blur": { - "modified": "2020-10-15T22:12:54.970Z", + "Web/CSS/initial": { + "modified": "2020-10-15T22:26:34.680Z", "contributors": [ - "salgueiroso" + "marlonveiga-santos" ] }, - "Web/API/HTMLElement/click": { - "modified": "2019-03-23T22:40:11.186Z", + "Web/CSS/inline-size": { + "modified": "2020-10-15T22:06:25.990Z", "contributors": [ - "brunopulis", - "LisandroTSilva" + "zKhiro" ] }, - "Web/API/HTMLElement/contentEditable": { - "modified": "2019-03-23T22:24:22.391Z", + "Web/CSS/isolation": { + "modified": "2019-06-05T21:56:02.812Z", "contributors": [ - "Fernandolrs", - "brunopulis" + "ni-reis", + "rener_bz" ] }, - "Web/API/HTMLElement/contextMenu": { - "modified": "2020-10-15T22:26:34.894Z", + "Web/CSS/letter-spacing": { + "modified": "2020-10-15T22:02:19.098Z", "contributors": [ - "arthurssfreitas" + "V1n1c1us" ] }, - "Web/API/HTMLElement/dataset": { - "modified": "2020-10-15T21:46:41.594Z", + "Web/CSS/line-break": { + "modified": "2020-10-15T21:48:42.616Z", "contributors": [ - "lago.aaron", - "Fernandolrs", - "Sipmann", - "emanueloliveira" + "SphinxKnight", + "Kappyh", + "helitonmartins", + "phenriqueleao", + "alexandresn" ] }, - "Web/API/HTMLElement/focus": { - "modified": "2019-03-23T22:24:13.859Z", + "Web/CSS/margin": { + "modified": "2020-10-15T22:00:45.937Z", "contributors": [ - "erikseyti", - "brunopulis" + "felima2017" ] }, - "Web/API/HTMLElement/lang": { - "modified": "2019-03-23T22:24:27.501Z", + "Web/CSS/margin-bottom": { + "modified": "2020-10-15T22:18:51.440Z", "contributors": [ - "brunopulis" + "Clecio013" ] }, - "Web/API/HTMLElement/offsetHeight": { - "modified": "2019-03-18T20:58:59.560Z", + "Web/CSS/margin-top": { + "modified": "2019-03-23T22:48:06.569Z", "contributors": [ - "SphinxKnight", - "kiaratto" + "Sebastianz", + "dlepera" ] }, - "Web/API/HTMLElement/offsetLeft": { - "modified": "2019-03-18T20:59:09.678Z", + "Web/CSS/max-width": { + "modified": "2020-10-30T00:27:30.942Z", "contributors": [ - "SphinxKnight", - "alinemorelli" + "mipan-zuzuzu-zuzuzum", + "gustavofrezzz", + "zKhiro" ] }, - "Web/API/HTMLElement/offsetParent": { - "modified": "2020-10-15T21:46:48.347Z", + "Web/CSS/min-height": { + "modified": "2019-03-23T23:03:57.511Z", "contributors": [ - "SphinxKnight", - "eustabio_junior" + "JulianoPadilha", + "Sebastianz", + "LeonardoMax" ] }, - "Web/API/HTMLElement/offsetTop": { - "modified": "2020-10-15T21:49:48.848Z", + "Web/CSS/mix-blend-mode": { + "modified": "2019-03-23T22:47:35.984Z", "contributors": [ - "SphinxKnight", - "j.bruni", - "alinemorelli" + "mrstork", + "Sebastianz", + "afonsoalban" ] }, - "Web/API/HTMLElement/offsetWidth": { - "modified": "2020-10-15T21:54:49.481Z", + "Web/CSS/number": { + "modified": "2020-10-15T22:25:43.785Z", "contributors": [ - "SphinxKnight", - "gsoldateli" + "euvanribeiro" ] }, - "Web/API/HTMLInputElement": { - "modified": "2020-08-07T01:52:15.111Z", + "Web/CSS/object-fit": { + "modified": "2019-09-09T10:42:42.040Z", "contributors": [ - "VictorRabelo", - "CaitlinWeb" + "mhayk", + "Sebastianz", + "brunolimawd" ] }, - "Web/API/HTMLInputElement/select": { - "modified": "2019-03-23T22:32:02.717Z", + "Web/CSS/offset": { + "modified": "2019-03-23T22:09:22.407Z", "contributors": [ - "sirgallifrey" + "alisson-suzigan", + "Schieck" ] }, - "Web/API/HTMLInputElement/setSelectionRange": { - "modified": "2019-03-23T22:05:50.440Z", + "Web/CSS/opacity": { + "modified": "2019-09-03T00:02:11.829Z", "contributors": [ - "gulima" + "hierror" ] }, - "Web/API/HTMLOptionElement": { - "modified": "2020-10-15T22:22:43.860Z" + "Web/CSS/outline": { + "modified": "2019-03-23T22:29:17.217Z", + "contributors": [ + "MaurilioNovais" + ] }, - "Web/API/HTMLOptionElement/Option": { - "modified": "2019-09-07T19:12:47.492Z", + "Web/CSS/overflow": { + "modified": "2019-03-23T23:35:08.837Z", "contributors": [ - "Rogerio-Viana" + "haskellcamargo", + "teoli", + "KikenCris", + "Sheppy", + "diogotito", + "Francis" ] }, - "Web/API/HTMLSelectElement": { - "modified": "2019-03-18T21:38:12.809Z", + "Web/CSS/padding": { + "modified": "2019-03-23T22:10:23.184Z", "contributors": [ - "Speich" + "aantonello" ] }, - "Web/API/HTMLSelectElement/checkValidity": { - "modified": "2019-03-18T21:38:22.714Z", + "Web/CSS/padding-left": { + "modified": "2019-03-23T23:05:03.904Z", "contributors": [ - "marceloogeda" + "Sebastianz", + "Prinz_Rana", + "fscholz", + "SKO" ] }, - "Web/API/HTMLShadowElement": { - "modified": "2020-10-15T21:52:05.842Z", + "Web/CSS/page-break-before": { + "modified": "2020-10-15T22:23:32.559Z", "contributors": [ - "Sipmann", - "mak213k" + "EdsonLI" ] }, - "Web/API/HTMLSpanElement": { - "modified": "2020-10-15T22:22:56.970Z", + "Web/CSS/pointer-events": { + "modified": "2019-10-10T16:54:43.656Z", "contributors": [ - "CleberL" + "Sebastianz", + "brunoeduardo" ] }, - "Web/API/History": { - "modified": "2020-10-15T22:11:45.385Z", + "Web/CSS/position": { + "modified": "2020-11-12T16:32:21.055Z", "contributors": [ - "duduindo", - "Renancp01" + "joao-alberto", + "talles.makoto" ] }, - "Web/API/History_API": { - "modified": "2019-03-18T21:10:42.375Z", + "Web/CSS/radial-gradient()": { + "modified": "2020-11-18T14:42:38.700Z", "contributors": [ - "CaioCosta", - "rodgerpaulo", - "william-costa", - "bsunderhus", - "sistematico" + "chrisdavidmills", + "Sebastianz", + "mrstork", + "srsaude" ] }, - "Web/API/History_API/Exemplo": { - "modified": "2019-03-18T21:40:08.609Z", + "Web/CSS/repeating-linear-gradient()": { + "modified": "2020-11-18T14:46:15.881Z", "contributors": [ - "oidanieljunior" + "chrisdavidmills", + "Sebastianz", + "prayash", + "teoli", + "Erick_Ribeiro" ] }, - "Web/API/IDBCursor": { - "modified": "2019-03-23T22:48:07.804Z", + "Web/CSS/ruby-align": { + "modified": "2019-03-23T22:39:36.583Z", "contributors": [ - "zerossB" + "ygormaximo" ] }, - "Web/API/IDBFactory": { - "modified": "2019-03-23T22:10:18.775Z", + "Web/CSS/scroll-behavior": { + "modified": "2019-03-23T22:05:52.763Z", "contributors": [ - "falecomoantonio" + "otaviogui", + "ogawaryu" ] }, - "Web/API/ImageCapture": { - "modified": "2020-10-15T22:28:50.119Z", + "Web/CSS/scrollbar-color": { + "modified": "2020-10-15T22:15:14.505Z", "contributors": [ - "LucasRuy" + "helton-mori-dev" ] }, - "Web/API/IndexedDB_API": { - "modified": "2020-05-11T15:56:57.963Z", + "Web/CSS/text-align": { + "modified": "2020-09-13T12:38:14.000Z", "contributors": [ - "nstseek", - "chrisdavidmills", - "MOB-atheist", - "zenithpolar", - "guilhermemar", - "IgorGoncalves", - "cirocosta" + "hicksf", + "CinatitBR", + "FernandaBernardo", + "ronysilvati" ] }, - "Web/API/IndexedDB_API/Basic_Concepts_Behind_IndexedDB": { - "modified": "2020-01-13T04:48:43.968Z", + "Web/CSS/text-decoration": { + "modified": "2019-03-23T22:35:55.748Z", "contributors": [ - "chrisdavidmills", - "wbamberg", - "jppaschoal", - "camilaavilarinho", - "guilhermemar", - "IgorGoncalves" + "gabiduarte" ] }, - "Web/API/IndexedDB_API/Usando_IndexedDB": { - "modified": "2020-01-13T04:48:43.522Z", + "Web/CSS/text-decoration-style": { + "modified": "2019-03-23T22:34:47.555Z", "contributors": [ - "chrisdavidmills", - "guilhermemar", - "IgorGoncalves", - "gustavo-veiga", - "sheldonled" + "miller.augusto" ] }, - "Web/API/KeyboardEvent": { - "modified": "2019-03-18T21:09:09.329Z", + "Web/CSS/text-overflow": { + "modified": "2019-03-23T23:32:14.078Z", "contributors": [ - "fscholz", - "wbamberg", - "fernandosouza", - "Grohden", - "waglero" + "Krenair", + "Sebastianz", + "miller.augusto", + "teoli", + "recoverjp@gmail.com" ] }, - "Web/API/Location": { - "modified": "2020-08-19T00:11:30.219Z", + "Web/CSS/text-rendering": { + "modified": "2019-03-23T23:36:15.210Z", "contributors": [ - "pabrrs", - "trGalho" + "mateusmeyer", + "fscholz", + "teoli", + "marioluan", + "lmiranda" ] }, - "Web/API/Location/assign": { - "modified": "2019-03-18T21:41:56.186Z", + "Web/CSS/text-shadow": { + "modified": "2019-03-23T22:50:26.761Z", "contributors": [ - "Rhubenni_Telesco" + "vspereira", + "luis.kaufmann.silva", + "Sebastianz", + "philippesilva" ] }, - "Web/API/Location/reload": { - "modified": "2019-03-23T22:30:11.123Z", + "Web/CSS/text-transform": { + "modified": "2020-10-15T22:00:36.908Z", "contributors": [ - "fcard", - "alexrohleder" + "FernandaBernardo" ] }, - "Web/API/Location/search": { - "modified": "2020-10-15T22:29:57.299Z", + "Web/CSS/time": { + "modified": "2020-10-15T22:25:42.997Z", "contributors": [ - "AlanCezarAraujo" + "euvanribeiro" ] }, - "Web/API/MediaDevices": { - "modified": "2019-03-18T21:43:19.059Z", + "Web/CSS/touch-action": { + "modified": "2020-10-15T21:58:13.110Z", "contributors": [ - "helitonmartins" + "leandrofsp" ] }, - "Web/API/MediaStreamTrack": { - "modified": "2019-03-23T22:53:44.701Z", + "Web/CSS/transform": { + "modified": "2019-03-23T23:38:43.751Z", "contributors": [ - "lucasolivier" + "Sebastianz", + "fscholz", + "teoli", + "rafael.modos" ] }, - "Web/API/MessageChannel": { - "modified": "2019-03-18T21:44:58.784Z", + "Web/CSS/transform-function": { + "modified": "2019-03-23T22:03:42.541Z", "contributors": [ - "fadonascimento" + "mfluehr" ] }, - "Web/API/MessagePort": { - "modified": "2020-10-15T22:26:27.296Z", + "Web/CSS/transform-function/matrix()": { + "modified": "2020-11-16T09:00:13.847Z", "contributors": [ - "bershanskiy" + "chrisdavidmills", + "MarcosNakamine" ] }, - "Web/API/MessagePort/postMessage": { - "modified": "2020-10-15T22:26:29.157Z", + "Web/CSS/transform-function/perspective()": { + "modified": "2020-11-16T09:10:49.924Z", "contributors": [ - "jhserodio" + "chrisdavidmills", + "larimaza" ] }, - "Web/API/MouseEvent": { - "modified": "2020-09-27T23:19:33.221Z", + "Web/CSS/transform-function/rotate()": { + "modified": "2020-11-19T16:06:09.849Z", "contributors": [ - "marcio1002", - "vapier" + "chrisdavidmills", + "YurePereira" ] }, - "Web/API/MouseEvent/clientX": { - "modified": "2019-03-23T22:06:38.718Z", + "Web/CSS/transform-function/rotate3d()": { + "modified": "2020-11-19T16:07:35.157Z", "contributors": [ - "bernardosze" + "chrisdavidmills", + "larimaza" ] }, - "Web/API/MouseEvent/clientY": { - "modified": "2020-10-15T22:29:11.740Z", + "Web/CSS/transform-function/scale()": { + "modified": "2020-11-30T10:15:54.148Z", "contributors": [ - "GuilhermeSND" + "chrisdavidmills", + "larimaza" ] }, - "Web/API/MutationObserver": { - "modified": "2020-10-15T21:33:46.490Z", + "Web/CSS/transform-function/translate()": { + "modified": "2020-11-30T10:30:42.247Z", "contributors": [ - "mateusvelleda", - "alexanmtz", - "diegolw" + "chrisdavidmills", + "duduindo", + "Dianakc", + "MarcosNakamine", + "brunoeduardo" ] }, - "Web/API/Navigation_timing_API": { - "modified": "2019-03-23T22:50:45.488Z", + "Web/CSS/transform-style": { + "modified": "2020-10-15T22:29:54.621Z", "contributors": [ - "MarcelMorais", - "Gutem" + "joaopedroaats" ] }, - "Web/API/Navigator": { - "modified": "2019-03-23T23:01:42.784Z", + "Web/CSS/transition": { + "modified": "2020-05-17T21:28:19.368Z", "contributors": [ - "wbamberg", - "teoli" + "bruno-cr", + "hbmuller" ] }, - "Web/API/Navigator/battery": { - "modified": "2019-03-23T23:16:59.785Z", + "Web/CSS/transition-delay": { + "modified": "2020-10-15T22:25:42.611Z", "contributors": [ - "teoli", - "jsx", - "eliezerb" + "euvanribeiro" ] }, - "Web/API/Navigator/cookieEnabled": { - "modified": "2020-10-15T22:13:23.552Z", + "Web/CSS/transition-timing-function": { + "modified": "2019-03-23T22:09:51.499Z", "contributors": [ - "macalha" + "welitonderesende" ] }, - "Web/API/Navigator/deviceMemory": { - "modified": "2020-10-15T22:12:37.929Z", + "Web/CSS/var()": { + "modified": "2020-11-04T09:10:42.127Z", "contributors": [ - "macalha" + "chrisdavidmills", + "filipetorres" ] }, - "Web/API/Navigator/geolocation": { - "modified": "2020-10-15T21:47:10.975Z", + "Web/CSS/vertical-align": { + "modified": "2019-06-19T18:03:19.393Z", "contributors": [ - "mateusvelleda", - "michaelycus" + "douglast2t", + "guifrrs", + "ronysilvati" ] }, - "Web/API/Navigator/getUserMedia": { - "modified": "2019-03-23T23:30:19.364Z", + "Web/CSS/visibility": { + "modified": "2020-10-15T21:59:53.930Z", "contributors": [ - "viktorRock", - "fscholz", - "srsaude" + "brunopulis" ] }, - "Web/API/Navigator/share": { - "modified": "2020-10-15T22:27:50.572Z", + "Web/CSS/white-space": { + "modified": "2020-10-15T21:33:46.098Z", "contributors": [ - "LucasRuy" + "mtsgeneroso", + "maurojs10", + "fscholz", + "Sebastianz", + "rafaellyra" ] }, - "Web/API/NavigatorID": { - "modified": "2019-03-23T23:01:42.494Z", + "Web/CSS/width": { + "modified": "2019-03-23T22:25:51.390Z", "contributors": [ - "teoli" + "DiegoBRodrigues" ] }, - "Web/API/NavigatorID/platform": { - "modified": "2020-10-15T21:27:41.688Z", + "Web/CSS/will-change": { + "modified": "2019-10-12T17:58:25.195Z", "contributors": [ - "GarkGarcia", - "teoli", - "khalid32", - "eliezerb" + "K3yboard", + "jlozovei", + "raphaguasta", + "Jerffersonferreira" ] }, - "Web/API/NavigatorID/userAgent": { - "modified": "2020-10-15T21:58:19.578Z", + "Web/CSS/word-break": { + "modified": "2020-10-15T21:41:36.303Z", "contributors": [ - "GarkGarcia", - "thedjmarcelo" + "srsaude", + "teoli", + "anderson-fachini" ] }, - "Web/API/NavigatorLanguage": { - "modified": "2019-03-23T22:03:53.998Z", + "Web/CSS/writing-mode": { + "modified": "2019-03-23T22:01:39.192Z", "contributors": [ - "teoli" + "jessuircleydson" ] }, - "Web/API/NavigatorLanguage/language": { - "modified": "2019-03-23T22:03:54.652Z", + "Web/Demos_of_open_web_technologies": { + "modified": "2020-09-04T06:28:02.627Z", "contributors": [ - "klzns" + "gustavoSoriano", + "angelorubin", + "arthur2323" ] }, - "Web/API/NavigatorOnLine": { - "modified": "2019-03-23T22:02:07.133Z", + "Web/Events": { + "modified": "2019-08-20T18:23:47.517Z", "contributors": [ - "marciioluucas", - "chrisdavidmills" + "helton-mori-dev", + "ayrtton", + "Marnei-Cardoso", + "wbamberg", + "LeandroMaxNatal", + "susanasilva", + "jpmedley" ] }, - "Web/API/NavigatorOnLine/Online_and_offline_events": { - "modified": "2019-03-23T23:39:13.247Z", + "Web/Guide": { + "modified": "2020-10-30T13:31:43.101Z", "contributors": [ - "chrisdavidmills", - "claudiareginadasilvacorrea", - "jpalharini" + "manoelbjr", + "brasmon8351", + "wcqueiroz", + "alanreisb", + "LucianoHanna", + "javaroldo", + "nagaozen", + "Danilson_Veloso", + "alexandresn", + "leonardocoelho", + "joaumg", + "luizmassa", + "sheldonled", + "Sheppy" ] }, - "Web/API/NavigatorOnLine/onLine": { - "modified": "2020-10-15T22:15:18.142Z", + "Web/Guide/AJAX": { + "modified": "2019-04-26T09:51:09.814Z", "contributors": [ - "renatoluna" + "helton-mori-dev", + "chrisdavidmills", + "Wanderleymuniz", + "flaviomicheletti", + "gigantebsb", + "PedroFelipe" ] }, - "Web/API/NavigatorPlugins": { - "modified": "2020-10-15T22:19:29.947Z", + "Web/Guide/AJAX/Getting_Started": { + "modified": "2019-03-23T23:09:35.656Z", "contributors": [ - "Fernandolrs" + "chrisdavidmills", + "darnosls", + "DiogoFontes", + "renatogalvones", + "devLopez", + "flaviomicheletti", + "Alakazam", + "xanfox", + "robinsonsantos" ] }, - "Web/API/NavigatorPlugins/javaEnabled": { - "modified": "2020-10-15T22:19:29.661Z", + "Web/Guide/API": { + "modified": "2019-09-11T09:42:23.112Z", "contributors": [ - "Fernandolrs" + "SphinxKnight", + "Sheppy" ] }, - "Web/API/Node": { - "modified": "2019-03-23T23:30:08.400Z", + "Web/Guide/Events": { + "modified": "2019-03-23T23:21:12.584Z", "contributors": [ - "marimeireles", - "oirodolfo", - "teoli", - "khalid32", - "srsaude" + "Sheppy" ] }, - "Web/API/Node/Entendendo_o_uso_do_método_AppendChild-javascript": { - "modified": "2019-03-23T22:40:45.924Z", + "Web/Guide/Events/Event_handlers": { + "modified": "2020-08-06T11:00:19.146Z", "contributors": [ - "Josue-Bastos" + "eziotristao" ] }, - "Web/API/Node/appendChild": { - "modified": "2019-03-23T23:22:30.959Z", + "Web/Guide/Events/Mutation_events": { + "modified": "2019-03-23T22:59:51.382Z", "contributors": [ - "teoli", - "khalid32", - "srsaude" + "diegolw" ] }, - "Web/API/Node/baseURI": { - "modified": "2019-03-23T22:40:41.805Z", + "Web/Guide/Events/Overview_of_Events_and_Handlers": { + "modified": "2020-09-28T23:35:22.348Z", "contributors": [ - "cammarin", - "Josue-Bastos" + "helton-mori-dev" ] }, - "Web/API/Node/childNodes": { - "modified": "2019-03-23T23:07:10.128Z", + "Web/Guide/Mobile": { + "modified": "2020-04-05T18:24:36.523Z", "contributors": [ - "teoli", - "fegemo" + "guidiasz", + "michelsouza" ] }, - "Web/API/Node/cloneNode": { - "modified": "2019-03-23T22:48:59.947Z", + "Web/Guide/Performance": { + "modified": "2019-03-18T20:49:01.451Z", "contributors": [ - "Gutemberg" + "ssamuel645", + "KelviDalmazo" ] }, - "Web/API/Node/contains": { - "modified": "2019-03-23T23:21:21.502Z", + "Web/Guide/Printing": { + "modified": "2020-08-18T10:16:18.081Z", "contributors": [ - "teoli", - "AshfaqHossain", - "carlosbg" + "Eder_Duarte", + "maatheusgouveia" ] }, - "Web/API/Node/firstChild": { - "modified": "2019-03-23T22:49:01.978Z", + "Web/HTML": { + "modified": "2019-09-10T15:24:16.025Z", "contributors": [ - "Gutemberg" + "SphinxKnight", + "brasmon8351", + "wcqueiroz", + "jorgeclesio", + "Rech", + "diegobarcelar", + "julio-elipse", + "BrunaGil", + "ferro-br", + "phenriqueleao", + "andalvalmeida", + "rubensdemelo", + "samuelbzrra", + "Carlos_Mir_de_Souza", + "marciioluucas", + "dariogabriel113", + "renato_oliveira", + "Schieck", + "fabianosantos.net", + "Victorfm2167", + "jwhitlock", + "RenanBirck", + "KadirTopal", + "rafaelsouza", + "LuccasBarbosa", + "ptcmariano", + "IvomarS", + "Cleiveson", + "ronaldoamaral", + "hostlionhospedarsites", + "rafiuske", + "blueridanus", + "srsaude", + "mklauck", + "MatCAlv", + "alispivak-demo", + "eufaloserio", + "dancasttro", + "mcpelegrin" ] }, - "Web/API/Node/innerText": { - "modified": "2019-03-18T21:15:34.228Z", + "Web/HTML/Applying_color": { + "modified": "2019-03-18T21:43:53.570Z", "contributors": [ - "cammarin" + "larimaza" ] }, - "Web/API/Node/insertBefore": { - "modified": "2019-03-18T20:54:40.356Z", + "Web/HTML/Element": { + "modified": "2020-10-20T02:01:24.831Z", "contributors": [ - "greysonf", - "debone", + "SphinxKnight", + "marcus.simei", + "jrborbars", + "fcard", + "afonsopacifer", + "antoniojnr", "teoli", - "khalid32", - "reniesiqueira" + "luizmassa", + "robsonds", + "LeonardoPacheco", + "hsteffano" ] }, - "Web/API/Node/isConnected": { - "modified": "2020-10-15T22:32:18.058Z", + "Web/HTML/Element/Audio": { + "modified": "2019-03-23T23:39:06.591Z", "contributors": [ - "dev-danilosilva" + "wbamberg", + "Gregory", + "teoli", + "mateus.m.luna", + "LeonardoPacheco" ] }, - "Web/API/Node/lastChild": { - "modified": "2019-03-23T22:40:51.317Z", + "Web/HTML/Element/Heading_Elements": { + "modified": "2020-11-22T18:16:21.735Z", "contributors": [ - "Gutemberg" + "TohoSeiwa", + "wcqueiroz", + "Ikebhering", + "IanRamosC", + "ViniFG" ] }, - "Web/API/Node/nextSibling": { - "modified": "2019-03-23T23:22:09.728Z", + "Web/HTML/Element/Input": { + "modified": "2019-03-23T23:19:19.777Z", "contributors": [ + "Disjuntores", + "srsaude", "teoli", - "khalid32", - "reniesiqueira" + "joaobarbosa" ] }, - "Web/API/Node/parentNode": { - "modified": "2019-03-23T22:40:47.017Z", + "Web/HTML/Element/Input/button": { + "modified": "2020-10-15T22:27:35.557Z", "contributors": [ - "michelsouza", - "Gutemberg" + "Eliezer62" ] }, - "Web/API/Node/previousSibling": { - "modified": "2019-03-23T23:14:20.558Z", + "Web/HTML/Element/Input/checkbox": { + "modified": "2020-10-15T22:07:27.923Z", "contributors": [ - "wbamberg", - "teoli", - "jsx", - "cesarwbr" + "gustavando", + "trandreluis", + "anok", + "rafaeltaro", + "SphinxKnight", + "creis" ] }, - "Web/API/Node/removeChild": { - "modified": "2019-03-23T23:30:06.977Z", + "Web/HTML/Element/Input/password": { + "modified": "2020-10-15T22:06:49.756Z", "contributors": [ - "teoli", - "khalid32", - "srsaude" + "liddack" ] }, - "Web/API/Node/replaceChild": { - "modified": "2019-03-23T23:12:27.414Z", + "Web/HTML/Element/Input/range": { + "modified": "2019-03-18T20:57:11.406Z", "contributors": [ - "paulocmoreno", - "teoli", - "khalid32", - "matheuslc" + "SphinxKnight", + "g-thome", + "Humberto", + "TecladistaProd" ] }, - "Web/API/Node/textContent": { - "modified": "2020-10-15T22:19:54.189Z", + "Web/HTML/Element/Input/time": { + "modified": "2020-10-15T22:07:24.929Z", "contributors": [ - "EduardoDaSilva", - "marlonveiga-santos" + "liddack" ] }, - "Web/API/NodeFilter": { - "modified": "2019-03-23T22:03:52.772Z", + "Web/HTML/Element/Output": { + "modified": "2020-10-15T21:19:50.384Z", "contributors": [ - "oirodolfo" + "wbamberg", + "wallacemaxters", + "GPrimola", + "teoli", + "LeonardoPacheco", + "mateus.m.luna" ] }, - "Web/API/NodeList": { - "modified": "2020-10-15T21:55:05.252Z", + "Web/HTML/Element/Source": { + "modified": "2019-03-23T23:39:09.351Z", "contributors": [ - "Sipmann", - "caueamaral", - "fernandosavio" + "Rahmon", + "teoli", + "LeonardoPacheco" ] }, - "Web/API/NotificationAction": { - "modified": "2020-10-15T22:22:52.083Z", + "Web/HTML/Element/Video": { + "modified": "2019-03-23T23:39:11.809Z", "contributors": [ - "jowks" + "wbamberg", + "KaykyB", + "Fernandolrs", + "rafaelcavalcante", + "teoli", + "LeonardoPacheco" ] }, - "Web/API/OfflineAudioContext": { - "modified": "2020-10-15T22:02:59.025Z", + "Web/HTML/Element/a": { + "modified": "2020-10-15T21:21:57.553Z", "contributors": [ - "EduardoFerr" + "Marrior-dot", + "BeatrizCavallieri", + "GabrielleGuida", + "gilmargn", + "MarcosNakamine", + "GPrimola", + "antoniojnr", + "teoli", + "marcoex", + "Graffitti", + "thiagoharry", + "vagnerleitte", + "fnsc.luis" ] }, - "Web/API/Page_Visibility_API": { - "modified": "2019-03-23T22:34:14.511Z", + "Web/HTML/Element/abbr": { + "modified": "2020-10-15T21:24:34.973Z", "contributors": [ - "renatoluna" + "GPrimola", + "fscholz", + "teoli", + "thiagoharry", + "alexfigueiredo" ] }, - "Web/API/ParentNode": { - "modified": "2019-03-23T22:19:41.961Z", + "Web/HTML/Element/acronym": { + "modified": "2020-10-15T21:24:47.267Z", "contributors": [ - "jpmedley" + "GPrimola", + "teoli", + "thiagoharry" ] }, - "Web/API/ParentNode/childElementCount": { - "modified": "2020-10-15T22:28:04.061Z", + "Web/HTML/Element/address": { + "modified": "2019-03-23T23:26:26.807Z", "contributors": [ - "leofalcao10" + "coloringa", + "alisson-suzigan", + "teoli", + "thiagoharry" ] }, - "Web/API/ParentNode/children": { - "modified": "2019-03-23T22:19:42.340Z", + "Web/HTML/Element/applet": { + "modified": "2019-03-23T23:09:08.718Z", "contributors": [ - "rafaelcavalcante" + "marcosyoshihiro" ] }, - "Web/API/ParentNode/querySelector": { - "modified": "2020-10-15T22:23:27.840Z", + "Web/HTML/Element/area": { + "modified": "2019-03-23T23:15:00.929Z", "contributors": [ - "VictorhMalheiro" + "Gregory", + "jgborges", + "teoli", + "Haroldohc" ] }, - "Web/API/Path2D": { - "modified": "2020-10-15T22:06:13.090Z", + "Web/HTML/Element/article": { + "modified": "2019-03-23T23:36:23.011Z", "contributors": [ - "dayvitSiqueira" + "wbamberg", + "Jerffersonferreira", + "teoli", + "robsonds" ] }, - "Web/API/Performance": { - "modified": "2020-10-15T21:54:03.274Z", + "Web/HTML/Element/aside": { + "modified": "2020-10-15T21:23:20.646Z", "contributors": [ - "fscholz", - "jpmedley" + "wbamberg", + "GPrimola", + "srsaude", + "teoli", + "Linc0" ] }, - "Web/API/Performance/now": { - "modified": "2019-03-18T20:49:36.800Z", + "Web/HTML/Element/b": { + "modified": "2019-03-23T23:08:37.937Z", "contributors": [ - "helton-mori-dev", - "gabrieltobi" + "teoli", + "luizmassa" ] }, - "Web/API/Performance/toJSON": { - "modified": "2020-10-15T21:54:01.565Z", + "Web/HTML/Element/base": { + "modified": "2019-03-18T20:35:07.314Z", "contributors": [ - "fscholz", - "gabrieltobi" + "teodoz", + "rogeriopradoj", + "luizmassa", + "WagnerBeethoven" ] }, - "Web/API/PositionOptions": { - "modified": "2019-03-23T22:47:40.708Z", + "Web/HTML/Element/bdi": { + "modified": "2019-03-23T22:55:51.883Z", "contributors": [ - "victorkurauchi" + "Gregory", + "cid360", + "jgborges" ] }, - "Web/API/ProcessingInstruction": { - "modified": "2019-03-18T21:38:06.302Z", + "Web/HTML/Element/bdo": { + "modified": "2020-10-15T21:58:57.805Z", "contributors": [ - "coloringa" + "tiagofranca" ] }, - "Web/API/PushManager": { - "modified": "2019-03-18T21:44:59.987Z", + "Web/HTML/Element/big": { + "modified": "2020-10-15T22:19:28.136Z", "contributors": [ - "GPrimola", - "M4ttscx" + "jorgeclesio" ] }, - "Web/API/RTCCertificate": { - "modified": "2020-10-15T22:22:00.681Z", + "Web/HTML/Element/blink": { + "modified": "2019-03-23T22:51:55.020Z", "contributors": [ - "hsulipe" + "TatiTheFreaK", + "ti201501", + "macalha" ] }, - "Web/API/RTCDataChannel": { - "modified": "2019-03-23T22:05:58.861Z", + "Web/HTML/Element/blockquote": { + "modified": "2019-03-23T22:54:49.360Z", "contributors": [ - "Lavyk" + "rafaelff", + "Barbosado", + "teoli" ] }, - "Web/API/RTCIceTransport": { - "modified": "2020-10-15T22:22:02.457Z", + "Web/HTML/Element/body": { + "modified": "2020-06-19T20:58:40.238Z", "contributors": [ - "hsulipe" + "samuelmelo203", + "Clecio013", + "fbilinski", + "Ronicley", + "netoguimaraes" ] }, - "Web/API/RTCPeerConnection": { - "modified": "2020-10-15T22:18:53.156Z", + "Web/HTML/Element/br": { + "modified": "2019-03-23T22:30:12.009Z", "contributors": [ - "Leonardocezar", - "matheuschimelli", - "labforcode" + "LucasGagno" ] }, - "Web/API/RTCPeerConnection/connectionState": { - "modified": "2020-10-15T22:25:43.424Z", + "Web/HTML/Element/button": { + "modified": "2020-01-06T10:39:09.221Z", "contributors": [ - "Mellogab" + "pahbloo", + "Painatalman", + "ilariojunior", + "gulima", + "Cloves23", + "03-04-85" ] }, - "Web/API/RandomSource": { - "modified": "2019-03-23T22:43:17.216Z", + "Web/HTML/Element/canvas": { + "modified": "2019-03-23T23:39:11.475Z", "contributors": [ - "Hikashii", - "Jeremie" + "wbamberg", + "jorgematheus", + "MarceloBRN", + "teoli", + "jpalharini" ] }, - "Web/API/RandomSource/getRandomValues": { - "modified": "2019-05-25T15:24:30.476Z", + "Web/HTML/Element/caption": { + "modified": "2019-05-24T13:28:15.271Z", "contributors": [ - "dowgssss", - "Gutem" - ] - }, - "Web/API/Request": { - "modified": "2020-10-15T22:02:39.204Z", - "contributors": [ - "valdeirpsr" + "duduindo", + "Ca_uai", + "ooredroxoo" ] }, - "Web/API/Request/Request": { - "modified": "2020-10-15T22:15:05.741Z", + "Web/HTML/Element/center": { + "modified": "2020-10-15T22:19:26.722Z", "contributors": [ - "duduindo", - "fininhors" + "RapozaoBR", + "joaomatco213", + "jorgeclesio" ] }, - "Web/API/Response": { - "modified": "2020-10-15T22:09:39.986Z", + "Web/HTML/Element/cite": { + "modified": "2020-06-24T20:47:35.913Z", "contributors": [ - "paulo9mv", - "leandroruel", - "jeovazero" + "RaphaelBRodrigues", + "rodrigocode4", + "rafaelblink" ] }, - "Web/API/SVGAElement": { - "modified": "2020-10-15T22:03:03.797Z", + "Web/HTML/Element/code": { + "modified": "2020-10-15T22:20:52.767Z", "contributors": [ - "Shadowlast14" + "BrunoSoaresGaldino" ] }, - "Web/API/SVGAElement/SVGAlement.target": { - "modified": "2019-03-18T21:38:17.281Z", + "Web/HTML/Element/col": { + "modified": "2020-10-15T21:58:57.355Z", "contributors": [ - "Shadowlast14" + "erikseyti" ] }, - "Web/API/SVGAnimateTransformElement": { - "modified": "2020-10-16T17:55:44.269Z", + "Web/HTML/Element/data": { + "modified": "2019-03-23T23:15:11.615Z", "contributors": [ - "felipepaz" + "teoli", + "Haroldohc" ] }, - "Web/API/Seleção": { - "modified": "2020-10-15T22:13:16.385Z", + "Web/HTML/Element/datalist": { + "modified": "2020-07-24T12:07:37.628Z", "contributors": [ - "adrianowead" + "mfranzke", + "wbamberg", + "teoli", + "LeonardoPacheco" ] }, - "Web/API/Sensor": { - "modified": "2020-10-15T22:32:16.467Z", + "Web/HTML/Element/dd": { + "modified": "2020-10-15T22:03:52.136Z", "contributors": [ - "jpmedley" + "GutuGaluppo", + "GPrimola" ] }, - "Web/API/Server-sent_events": { - "modified": "2020-06-16T11:34:37.745Z", + "Web/HTML/Element/del": { + "modified": "2019-03-23T23:05:32.110Z", "contributors": [ - "alattalatta" + "minduka" ] }, - "Web/API/Server-sent_events/Using_server-sent_events": { - "modified": "2020-10-15T22:30:47.227Z", + "Web/HTML/Element/details": { + "modified": "2019-03-23T23:38:58.865Z", "contributors": [ - "LucasPereira" + "wbamberg", + "teoli", + "LeonardoPacheco" ] }, - "Web/API/ServiceWorkerContainer": { - "modified": "2019-03-18T20:53:05.893Z", + "Web/HTML/Element/dfn": { + "modified": "2019-03-23T23:15:43.009Z", "contributors": [ - "Gustavo_Armoa", - "jpmedley" + "teoli", + "eduardojmatos" ] }, - "Web/API/ServiceWorkerContainer/register": { - "modified": "2019-03-23T22:05:54.667Z", + "Web/HTML/Element/dialog": { + "modified": "2020-10-15T22:00:30.887Z", "contributors": [ - "wallacemaxters" + "euvanribeiro", + "Genildo_Lopes", + "marceloch2", + "chicojunior" ] }, - "Web/API/ServiceWorkerGlobalScope": { - "modified": "2020-10-15T22:18:38.860Z", + "Web/HTML/Element/dir": { + "modified": "2020-10-15T22:14:38.248Z", "contributors": [ - "fscholz" + "Mateusstslino" ] }, - "Web/API/ServiceWorkerGlobalScope/clients": { - "modified": "2020-10-15T22:18:38.711Z", + "Web/HTML/Element/div": { + "modified": "2019-03-23T23:09:09.627Z", "contributors": [ - "rafaelcavalcante" + "caioferrarezi", + "Marius2112", + "SubaruSama", + "lucrp", + "leleofg", + "marcosyoshihiro" ] }, - "Web/API/Service_Worker_API": { - "modified": "2019-03-23T22:20:45.840Z", + "Web/HTML/Element/dl": { + "modified": "2020-10-15T21:20:22.549Z", "contributors": [ - "alcidesqueiroz", - "dicarlosdesign" + "GPrimola", + "niltoncsr", + "fellyph", + "pkelbert", + "teoli", + "ken210" ] }, - "Web/API/Service_Worker_API/Using_Service_Workers": { - "modified": "2020-07-29T08:44:07.257Z", + "Web/HTML/Element/dt": { + "modified": "2019-03-23T22:48:59.353Z", "contributors": [ - "edusantana", - "rfdeoliveira", - "marciocamargo", - "italoportinho", - "Lucasktrindade" + "Jerffersonferreira", + "vtmx" ] }, - "Web/API/SharedWorker": { - "modified": "2019-03-23T22:10:27.798Z", + "Web/HTML/Element/em": { + "modified": "2020-10-15T22:00:30.429Z", "contributors": [ - "chrisdavidmills" + "rodrigocode4", + "SaggitariusA" ] }, - "Web/API/SharedWorker/port": { - "modified": "2019-03-23T22:10:34.513Z", + "Web/HTML/Element/embed": { + "modified": "2020-01-23T00:06:41.612Z", "contributors": [ - "Schrammel" + "LucasPereira", + "GPrimola", + "Tonihtml" ] }, - "Web/API/SpeechGrammar": { - "modified": "2020-10-15T22:17:17.231Z", + "Web/HTML/Element/fieldset": { + "modified": "2019-03-18T20:42:56.564Z", "contributors": [ - "rafaelvanat" + "peas", + "otavioaquino", + "brunoalv-s", + "wmerussi", + "Gregory", + "LucasGagno" ] }, - "Web/API/SpeechSynthesis": { - "modified": "2019-03-23T22:02:23.080Z", + "Web/HTML/Element/figcaption": { + "modified": "2020-10-15T22:34:28.797Z", "contributors": [ - "_marciojrtorres" + "hicksf" ] }, - "Web/API/SpeechSynthesisUtterance": { - "modified": "2019-03-23T22:25:09.613Z", + "Web/HTML/Element/footer": { + "modified": "2019-03-23T23:36:28.026Z", "contributors": [ - "chrisdavidmills" + "wbamberg", + "teoli", + "robsonds", + "ethertank" ] }, - "Web/API/SpeechSynthesisUtterance/voice": { - "modified": "2019-03-23T22:25:16.059Z", + "Web/HTML/Element/form": { + "modified": "2019-05-30T02:15:09.926Z", "contributors": [ - "niltoncsr" + "jorgeclesio", + "teoli", + "perrucho" ] }, - "Web/API/Storage": { - "modified": "2020-10-15T21:38:56.944Z", + "Web/HTML/Element/head": { + "modified": "2019-03-23T22:21:23.704Z", "contributors": [ - "Sipmann", - "Auugustocesar", - "andrekutianski", - "Sebastianz" + "mak213k" ] }, - "Web/API/Storage/clear": { - "modified": "2019-03-23T22:22:06.554Z", + "Web/HTML/Element/header": { + "modified": "2019-03-23T23:33:25.477Z", "contributors": [ - "nicolastarzia" + "ilariojunior", + "wbamberg", + "GPrimola", + "Humberto", + "teoli", + "regisdiogo" ] }, - "Web/API/Storage/getItem": { - "modified": "2020-10-15T21:46:36.499Z", + "Web/HTML/Element/hgroup": { + "modified": "2020-10-15T21:40:04.892Z", "contributors": [ - "mateusvelleda", - "victormaestri", - "carol-caires" + "printf-ana", + "Vitor-droid", + "Maujor", + "gabrielmelo" ] }, - "Web/API/Storage/key": { - "modified": "2020-10-15T22:22:54.532Z", + "Web/HTML/Element/hr": { + "modified": "2019-03-23T23:00:09.683Z", "contributors": [ - "andalvalmeida" + "brunoqueiros" ] }, - "Web/API/Storage/length": { - "modified": "2019-03-18T21:39:13.697Z", + "Web/HTML/Element/html": { + "modified": "2019-03-23T23:33:25.274Z", "contributors": [ - "bfabbri" + "GPrimola", + "teoli", + "irvinggomes" ] }, - "Web/API/Storage/removeItem": { - "modified": "2019-03-23T22:26:49.057Z", + "Web/HTML/Element/i": { + "modified": "2019-03-23T22:12:56.021Z", "contributors": [ - "eduardogomesv" + "rafaelcavalcante", + "sscaetite" ] }, - "Web/API/Storage/setItem": { - "modified": "2019-03-23T22:47:38.418Z", + "Web/HTML/Element/iframe": { + "modified": "2020-10-15T21:30:21.333Z", "contributors": [ - "larodiel" + "fscholz", + "wbamberg", + "RenanBirck", + "jgborges", + "marcosyoshihiro" ] }, - "Web/API/StorageManager": { - "modified": "2020-10-15T22:19:33.863Z", + "Web/HTML/Element/img": { + "modified": "2020-07-23T17:09:01.419Z", "contributors": [ - "Rondinelly" + "jrom99", + "ilariojunior", + "Wesley-181", + "dodireis", + "Jessica7", + "andrekutianski", + "jorgeclesio", + "marcosyoshihiro" ] }, - "Web/API/Streams_API": { - "modified": "2020-10-15T22:07:15.490Z", + "Web/HTML/Element/ins": { + "modified": "2019-03-23T23:15:01.095Z", "contributors": [ - "NandoRFS", - "chrisdavidmills" + "teoli", + "Haroldohc" ] }, - "Web/API/Streams_API/Concepts": { - "modified": "2019-03-18T21:30:10.010Z", + "Web/HTML/Element/label": { + "modified": "2019-09-13T15:44:10.344Z", "contributors": [ - "thiagopelizoni" + "Edionay", + "jyrodrigues", + "DavidL_Santos", + "teoli", + "Nathalino_Pacheco" ] }, - "Web/API/SubtleCrypto": { - "modified": "2020-10-15T21:58:59.814Z", + "Web/HTML/Element/legend": { + "modified": "2019-03-23T22:59:55.952Z", "contributors": [ - "fscholz", - "Hikashii", - "prebytes" + "hbmuller" ] }, - "Web/API/SubtleCrypto/GenerateKey": { - "modified": "2019-03-23T22:02:52.131Z", + "Web/HTML/Element/li": { + "modified": "2019-03-23T23:14:25.501Z", "contributors": [ - "Hikashii" + "Aschlla", + "flpms" ] }, - "Web/API/SubtleCrypto/deriveKey": { - "modified": "2019-03-23T22:02:44.403Z", + "Web/HTML/Element/link": { + "modified": "2019-03-23T22:55:34.683Z", "contributors": [ - "Hikashii" + "FahMont", + "Cloves23", + "teoli", + "tabytaa", + "jgborges" ] }, - "Web/API/SubtleCrypto/importKey": { - "modified": "2019-03-23T22:02:45.337Z", + "Web/HTML/Element/main": { + "modified": "2019-03-23T23:03:43.266Z", "contributors": [ - "Hikashii" + "leandroruel", + "afonsopacifer" ] }, - "Web/API/URL": { - "modified": "2020-10-15T21:33:01.700Z", + "Web/HTML/Element/map": { + "modified": "2019-03-23T23:14:59.765Z", "contributors": [ - "mateusvelleda", - "teoli" + "marcelobonatto", + "teoli", + "Haroldohc" ] }, - "Web/API/URL/createObjectURl": { - "modified": "2020-10-15T21:23:35.850Z", + "Web/HTML/Element/mark": { + "modified": "2020-10-15T21:25:22.825Z", "contributors": [ - "fscholz", + "wbamberg", + "GPrimola", "teoli", - "srsaude" + "fellyph" ] }, - "Web/API/URL/revokeObjectURL": { - "modified": "2019-03-23T22:23:24.178Z", + "Web/HTML/Element/marquee": { + "modified": "2019-03-23T23:05:53.169Z", "contributors": [ - "emmanueldaher" + "Synaxis", + "luis-vmjr", + "luhluzinha123", + "Fernandolrs", + "Grohden", + "KaykyB", + "mcand" ] }, - "Web/API/URL/searchParams": { - "modified": "2020-10-15T22:02:37.369Z", + "Web/HTML/Element/meta": { + "modified": "2019-03-18T20:58:16.076Z", "contributors": [ - "mateusvelleda", - "marabesi" + "Expablo", + "Joaohfer", + "adnamavlis", + "Gabriela-23", + "rotirotirafa", + "programacaocriativa" ] }, - "Web/API/URLSearchParams": { - "modified": "2019-03-23T22:18:19.994Z", + "Web/HTML/Element/meter": { + "modified": "2020-10-15T21:19:31.461Z", "contributors": [ - "marcelobonatto" + "fscholz", + "wbamberg", + "teoli", + "arthurpf", + "viniciuspires", + "fellyph", + "LeonardoPacheco" ] }, - "Web/API/URLSearchParams/get": { - "modified": "2019-03-18T21:33:42.386Z", + "Web/HTML/Element/nav": { + "modified": "2019-03-23T23:39:09.069Z", "contributors": [ - "DanieleCastilho" + "wbamberg", + "GPrimola", + "teoli", + "mazulo", + "AluisioASG" ] }, - "Web/API/URLSearchParams/values": { - "modified": "2019-03-18T21:33:34.299Z", + "Web/HTML/Element/nobr": { + "modified": "2019-03-23T23:02:27.507Z", "contributors": [ - "DanieleCastilho" + "acdcjunior" ] }, - "Web/API/ValidityState": { - "modified": "2020-10-15T22:08:46.419Z", + "Web/HTML/Element/noscript": { + "modified": "2019-03-18T20:54:14.839Z", "contributors": [ - "Zavarock" + "aryldo", + "jdruk", + "RobertoRodrigues" ] }, - "Web/API/WebGL_API": { - "modified": "2019-04-05T15:51:08.757Z", + "Web/HTML/Element/ol": { + "modified": "2019-03-23T23:00:24.283Z", "contributors": [ - "MarceloBRN", - "julio-elipse", - "fscholz", - "teoli", - "fvargaspf@gmail.com" + "Aschlla", + "Jerffersonferreira", + "jnrbo" ] }, - "Web/API/WebGL_API/Tutorial": { - "modified": "2019-03-23T22:48:58.032Z", + "Web/HTML/Element/optgroup": { + "modified": "2019-03-23T23:15:59.381Z", "contributors": [ - "fscholz" + "teoli", + "MichelW" ] }, - "Web/API/WebGL_API/Tutorial/Adicionando_conteudo_2D_a_um_contexto_WebGL": { - "modified": "2019-03-23T22:43:19.265Z", + "Web/HTML/Element/option": { + "modified": "2019-03-23T23:08:11.548Z", "contributors": [ - "Nathipg", - "francopan" + "srsaude", + "masimao" ] }, - "Web/API/WebGL_API/Tutorial/Getting_started_with_WebGL": { - "modified": "2019-03-23T22:43:23.994Z", + "Web/HTML/Element/p": { + "modified": "2020-10-15T21:30:09.624Z", "contributors": [ - "etc_william", - "Nathipg", - "MarceloBRN" + "warkentien2", + "RobMota", + "Ikebhering", + "jorgeclesio", + "marcosyoshihiro" ] }, - "Web/API/WebRTC_API": { - "modified": "2020-02-27T08:49:05.980Z", + "Web/HTML/Element/picture": { + "modified": "2019-03-23T22:14:52.966Z", "contributors": [ - "iankressin", - "aledebarba", - "pedro-surf", - "Sheppy" + "lionzo", + "luisfvieira", + "gepetobio", + "Fernandolrs", + "jtec-info" ] }, - "Web/API/WebRTC_API/Protocols": { - "modified": "2020-12-04T03:01:14.311Z", + "Web/HTML/Element/pre": { + "modified": "2019-03-23T22:49:38.308Z", "contributors": [ - "guiseek" + "brunoaugustosilva", + "rai200890" ] }, - "Web/API/WebRTC_API/Simples_RTCDataChannel_amostra": { - "modified": "2019-03-23T22:09:18.720Z", + "Web/HTML/Element/progress": { + "modified": "2020-10-15T21:19:22.513Z", "contributors": [ "fscholz", "wbamberg", - "Gurigraphics" + "teoli", + "Athos" ] }, - "Web/API/WebSocket": { - "modified": "2019-03-23T22:25:02.860Z", + "Web/HTML/Element/q": { + "modified": "2020-10-15T21:53:18.961Z", "contributors": [ - "Fernandolrs", - "mak213k", - "mshmeirelles" + "fscholz", + "murillomartins" ] }, - "Web/API/WebVR_API": { - "modified": "2019-03-23T22:13:23.567Z", + "Web/HTML/Element/rt": { + "modified": "2019-03-23T23:14:59.910Z", "contributors": [ - "Fernandolrs", - "kausdev" + "teoli", + "Haroldohc" ] }, - "Web/API/WebVR_API/Using_the_WebVR_API": { - "modified": "2020-04-03T23:13:18.030Z", + "Web/HTML/Element/ruby": { + "modified": "2019-03-23T23:15:11.786Z", "contributors": [ - "Cleide724" + "ygormaximo", + "teoli", + "Haroldohc" ] }, - "Web/API/Web_Animations_API": { - "modified": "2020-09-26T01:35:21.265Z", + "Web/HTML/Element/s": { + "modified": "2020-10-15T22:24:14.325Z", "contributors": [ - "mfuji09" + "Rogerio-Viana" ] }, - "Web/API/Web_Animations_API/Usando_a_Web_Animations_API": { - "modified": "2020-09-26T01:35:23.652Z", + "Web/HTML/Element/script": { + "modified": "2020-09-11T10:57:54.213Z", "contributors": [ - "rafaelpradella" + "Aldrei", + "icaromh", + "wellington1993", + "Cloves23", + "kvnol" ] }, - "Web/API/Web_Crypto_API": { - "modified": "2019-03-23T22:16:32.658Z", + "Web/HTML/Element/section": { + "modified": "2019-12-14T08:16:21.902Z", "contributors": [ - "GPrimola", - "Hikashii", - "cristof" + "lcsdeveloper", + "soter19", + "digoribeiro", + "wbamberg", + "ArturGuedes", + "alisson-suzigan", + "dann", + "brunoeduardo", + "leosilva-rs", + "teoli", + "mazulo" ] }, - "Web/API/Web_Storage_API_pt_br": { - "modified": "2019-09-19T15:22:07.557Z", + "Web/HTML/Element/select": { + "modified": "2019-03-23T23:10:25.032Z", "contributors": [ - "elenderg", - "wcqueiroz", - "Mathmovic" + "srsaude", + "danilovaz" ] }, - "Web/API/Web_Storage_API_pt_br/Using_the_Web_Storage_API": { - "modified": "2019-03-18T21:45:09.650Z", - "contributors": [ - "liddack", - "nilocoelhojunior" - ] - }, - "Web/API/Web_Workers_API": { - "modified": "2019-04-07T16:56:48.451Z", + "Web/HTML/Element/span": { + "modified": "2020-10-15T21:22:22.723Z", "contributors": [ - "MatLinkM", - "leonardosnt", - "jika", - "devmessias" + "almeidaalex", + "GPrimola", + "teoli", + "vagnerleitte" ] }, - "Web/API/Window": { - "modified": "2020-07-28T17:31:29.548Z", + "Web/HTML/Element/strong": { + "modified": "2020-04-01T13:41:40.583Z", "contributors": [ - "maleskena", - "vinibudd", - "naotenhologin", - "danielferreira.developer", - "haskellcamargo", - "teoli", - "panaggio" + "hcnunes", + "Luan-Michel", + "wcqueiroz", + "helton-mori-dev", + "brandelli", + "fvaladares", + "Felipebros", + "israeljunior", + "Eric-Madureira" ] }, - "Web/API/Window/URL": { - "modified": "2019-03-23T22:04:44.414Z", + "Web/HTML/Element/style": { + "modified": "2019-03-23T23:03:07.094Z", "contributors": [ - "jika" + "jvitor222", + "jgborges" ] }, - "Web/API/Window/Window.localStorage": { - "modified": "2019-03-18T21:09:45.741Z", + "Web/HTML/Element/summary": { + "modified": "2019-03-23T23:39:14.453Z", "contributors": [ - "yandiro", - "wwwjsw", - "jjmars" + "wbamberg", + "andrekutianski", + "IgorGoncalves", + "teoli", + "LeonardoPacheco" ] }, - "Web/API/Window/alert": { - "modified": "2020-03-30T12:44:24.443Z", + "Web/HTML/Element/table": { + "modified": "2019-03-23T23:19:11.495Z", "contributors": [ - "raulnunesodre", + "lucasjmatias", "teoli", - "alexandrem" + "pfurtado" ] }, - "Web/API/Window/applicationCache": { - "modified": "2019-03-23T22:51:36.521Z", + "Web/HTML/Element/template": { + "modified": "2019-03-23T22:28:18.497Z", "contributors": [ - "haskellcamargo" + "josuecintra", + "claudiolcastro", + "raphaguasta" ] }, - "Web/API/Window/closed": { - "modified": "2019-03-18T20:58:51.070Z", + "Web/HTML/Element/textarea": { + "modified": "2020-10-15T22:08:16.624Z", "contributors": [ - "SphinxKnight", - "haskellcamargo" + "brasmon8351", + "Leodma", + "RicardoLovatel" ] }, - "Web/API/Window/confirm": { - "modified": "2019-03-23T22:53:06.274Z", + "Web/HTML/Element/tfoot": { + "modified": "2020-10-15T22:22:00.242Z", "contributors": [ - "AlyoshaS", - "marcoaraujojunior", - "fabreu" + "chucky515" ] }, - "Web/API/Window/crypto": { - "modified": "2019-03-23T22:12:19.817Z", + "Web/HTML/Element/th": { + "modified": "2020-10-15T22:28:54.791Z", "contributors": [ - "Hikashii", - "AlexandreBarros" + "VitorBrreto", + "Rogerio-Viana" ] }, - "Web/API/Window/document": { - "modified": "2019-03-23T22:49:44.918Z", + "Web/HTML/Element/time": { + "modified": "2019-03-23T23:34:52.239Z", "contributors": [ - "diogobenica", - "LucasRamos" + "wbamberg", + "guilhermeHenryk", + "AlanCezarAraujo", + "teoli", + "fnsc.luis" ] }, - "Web/API/Window/event": { - "modified": "2019-03-23T22:34:58.265Z", + "Web/HTML/Element/title": { + "modified": "2020-10-15T21:30:07.882Z", "contributors": [ - "macalha" + "jpreuss", + "RobMota", + "antoniojnr", + "marcosyoshihiro" ] }, - "Web/API/Window/fullScreen": { - "modified": "2019-03-23T22:50:57.657Z", + "Web/HTML/Element/track": { + "modified": "2020-10-15T22:13:43.726Z", "contributors": [ - "macalha" + "Auugustocesar" ] }, - "Web/API/Window/getSelection": { - "modified": "2019-03-23T22:22:20.343Z", + "Web/HTML/Element/ul": { + "modified": "2019-03-23T22:26:34.814Z", "contributors": [ - "pedroqueiroz94", - "fernandosouza" + "Aschlla" ] }, - "Web/API/Window/history": { - "modified": "2019-03-23T22:21:53.007Z", + "Web/HTML/Element/var": { + "modified": "2019-03-23T22:44:24.198Z", "contributors": [ - "Drycoder027" + "perrucho" ] }, - "Web/API/Window/innerHeight": { - "modified": "2019-03-23T22:07:12.963Z", + "Web/HTML/Element/wbr": { + "modified": "2019-03-23T23:15:00.705Z", "contributors": [ - "thedjmarcelo" + "wbamberg", + "SphinxKnight", + "josielrocha", + "teoli", + "Haroldohc" ] }, - "Web/API/Window/length": { - "modified": "2019-03-23T22:45:02.985Z", + "Web/HTML/Global_attributes": { + "modified": "2019-03-23T22:29:49.023Z", "contributors": [ - "diogobenica" + "GPrimola", + "UelioNobre", + "andrekutianski", + "teoli" ] }, - "Web/API/Window/location": { - "modified": "2019-03-23T22:44:54.419Z", + "Web/HTML/Global_attributes/accesskey": { + "modified": "2020-10-15T22:22:48.066Z", "contributors": [ - "AntLouiz", - "brunoeduardo" + "jovair", + "brunopulis" ] }, - "Web/API/Window/matchMedia": { - "modified": "2019-03-23T22:25:52.785Z", + "Web/HTML/Global_attributes/autocapitalize": { + "modified": "2020-10-15T22:30:46.263Z", "contributors": [ - "MarcosNakamine" + "klayton" ] }, - "Web/API/Window/navigator": { - "modified": "2019-03-23T23:16:57.470Z", + "Web/HTML/Global_attributes/class": { + "modified": "2019-03-23T22:29:54.038Z", "contributors": [ - "teoli", - "eliezerb" + "fcard" ] }, - "Web/API/Window/ondevicelight": { - "modified": "2019-03-23T22:08:54.681Z", + "Web/HTML/Global_attributes/contenteditable": { + "modified": "2020-10-15T22:31:33.906Z", "contributors": [ - "rener_bz" + "ooVictorFranco" ] }, - "Web/API/Window/onscroll": { - "modified": "2019-03-23T23:31:45.467Z", + "Web/HTML/Global_attributes/data-*": { + "modified": "2019-03-23T22:16:25.954Z", "contributors": [ - "teoli", - "khalid32", - "Leeehandro" + "linconkusunoki", + "julianopoveda" ] }, - "Web/API/Window/openDialog": { - "modified": "2019-03-23T23:04:23.875Z", + "Web/HTML/Global_attributes/hidden": { + "modified": "2020-11-23T09:20:48.582Z", "contributors": [ - "saulodecarlo", - "teoli", - "perrucho" + "gustavando", + "eduardovivi", + "gulima", + "sheldonled" ] }, - "Web/API/Window/performance": { - "modified": "2019-03-23T22:44:28.136Z", + "Web/HTML/Global_attributes/id": { + "modified": "2019-03-18T20:38:37.479Z", "contributors": [ - "augustoclaro" + "digoribeiro", + "cristianofromagio" ] }, - "Web/API/Window/popstate_event": { - "modified": "2019-04-26T08:34:23.645Z", + "Web/HTML/Global_attributes/itemprop": { + "modified": "2019-03-23T22:05:54.045Z", "contributors": [ - "chrisdavidmills", - "irenesmith", - "RQuadros", - "fscholz", - "brunoeduardo" + "lucashe1997" ] }, - "Web/API/Window/print": { - "modified": "2020-10-15T21:47:11.931Z", + "Web/HTML/Global_attributes/lang": { + "modified": "2020-10-15T22:14:08.418Z", "contributors": [ - "alvarocjunq", - "macalha", - "Auugustocesar" + "ViniciusMatias" ] }, - "Web/API/Window/prompt": { - "modified": "2019-03-23T22:57:04.834Z", + "Web/HTML/Global_attributes/tabindex": { + "modified": "2020-05-19T09:39:36.399Z", "contributors": [ - "mahenrique", - "fnsc.luis" + "lucasecdb", + "cristianofromagio" ] }, - "Web/API/Window/requestAnimationFrame": { - "modified": "2020-10-15T21:50:51.013Z", + "Web/HTML/Global_attributes/title": { + "modified": "2019-03-23T22:08:26.903Z", "contributors": [ - "mateusvelleda", - "NoiSyBoY", - "hiperesp", - "sambrmg", - "calaca" + "alisson-suzigan" ] }, - "Web/API/Window/requestIdleCallback": { - "modified": "2020-11-03T11:18:19.041Z", + "Web/HTML/Preloading_content": { + "modified": "2020-10-15T22:14:26.980Z", "contributors": [ - "luan0ap" + "BeatrizCavallieri", + "w4rlooc", + "duduindo", + "philgruneich", + "tuliocribeiro", + "Expablo" ] }, - "Web/API/Window/resize_event": { - "modified": "2019-04-30T14:03:51.758Z", + "Web/HTML/Quirks_Mode_and_Standards_Mode": { + "modified": "2019-03-23T23:05:38.681Z", "contributors": [ - "wbamberg", "chrisdavidmills", - "irenesmith", - "sergio_orugian" + "criskubiaki", + "luisOtavio", + "macalha" ] }, - "Web/API/Window/scroll": { - "modified": "2019-03-23T22:13:21.030Z", + "Web/HTML/Using_the_application_cache": { + "modified": "2019-03-23T23:33:12.384Z", "contributors": [ - "diego-c" + "Etrusco", + "isaiasBR", + "bruno-vaz", + "Jerffersonferreira", + "fabianosantos.net", + "wmsbill", + "rogeriomoraessp", + "teoli", + "ethertank", + "netfuzzer123" ] }, - "Web/API/Window/scrollBy": { - "modified": "2019-03-18T21:42:36.427Z", + "Web/HTTP": { + "modified": "2020-09-23T19:42:27.917Z", "contributors": [ - "TecladistaProd" + "viniciusfinger", + "Rech", + "julio-elipse", + "0limpi0", + "Schieck", + "andrekutianski", + "jeanonline", + "akwaryo", + "megaday", + "Anonymous" ] }, - "Web/API/Window/scrollByPages": { - "modified": "2019-03-23T22:23:22.523Z", + "Web/HTTP/Authentication": { + "modified": "2019-03-18T20:54:05.177Z", "contributors": [ - "LucasRuy" + "ViniciusMatias" ] }, - "Web/API/Window/scrollTo": { - "modified": "2019-03-23T22:45:04.416Z", + "Web/HTTP/CORS/Errors": { + "modified": "2019-03-18T21:20:00.561Z", "contributors": [ - "diogobenica" + "nchevobbe" ] }, - "Web/API/Window/scrollY": { - "modified": "2020-10-15T21:48:53.869Z", + "Web/HTTP/CORS/Errors/CORSDidNotSucceed": { + "modified": "2020-07-16T19:35:30.072Z", "contributors": [ - "mateusvelleda", - "Jerffersonferreira" + "uilmo.carneiro", + "giovana-morais" ] }, - "Web/API/Window/sessionStorage": { - "modified": "2019-08-02T11:53:58.107Z", + "Web/HTTP/CORS/Errors/CORSMissingAllowOrigin": { + "modified": "2019-08-15T10:13:47.925Z", "contributors": [ - "leila", - "haskellcamargo", - "PTLozano", - "Fulanodigital" + "tinogomes" ] }, - "Web/API/Window/setCursor": { - "modified": "2019-03-23T22:50:55.979Z", + "Web/HTTP/CORS/Errors/CORSNotSupportingCredentials": { + "modified": "2020-11-04T12:36:34.140Z", "contributors": [ - "macalha" + "matruskan" ] }, - "Web/API/Window/setImmediate": { - "modified": "2019-03-23T22:04:49.012Z", + "Web/HTTP/CORS/Errors/CORSRequestNotHttp": { + "modified": "2020-07-24T12:02:11.941Z", "contributors": [ - "jika" + "aguiar02", + "gabrielalves96" ] }, - "Web/API/WindowBase64": { - "modified": "2019-03-23T22:33:40.909Z", + "Web/HTTP/CSP": { + "modified": "2020-10-20T08:49:00.342Z", "contributors": [ - "teoli" + "lucasrenod", + "cafweb", + "macalha", + "rosemberglpi", + "hllrsr", + "jwhitlock", + "pedrotcaraujo", + "meldenne" ] }, - "Web/API/WindowBase64/atob": { - "modified": "2020-10-15T21:46:04.009Z", + "Web/HTTP/Content_negotiation": { + "modified": "2019-10-26T16:55:23.137Z", "contributors": [ - "mateusvelleda", - "joaoricardo_rm" + "felipelube", + "Jürgen Jeka" ] }, - "Web/API/WindowEventHandlers": { - "modified": "2020-03-01T23:25:36.916Z", + "Web/HTTP/Content_negotiation/List_of_default_Accept_values": { + "modified": "2019-06-29T15:45:26.059Z", "contributors": [ - "kudnx", - "teoli" + "rafaelff" ] }, - "Web/API/WindowEventHandlers/onhashchange": { - "modified": "2019-03-23T22:56:05.373Z", + "Web/HTTP/Cookies": { + "modified": "2020-05-19T15:14:13.958Z", "contributors": [ - "cleydsonjr", - "abensur" + "eestein", + "helton-mori-dev", + "julio-elipse", + "gabcs07" ] }, - "Web/API/WindowEventHandlers/onpopstate": { - "modified": "2019-03-23T22:46:07.205Z", + "Web/HTTP/Feature_Policy": { + "modified": "2020-10-15T22:32:05.540Z", "contributors": [ - "brunoeduardo" + "mfuji09" ] }, - "Web/API/WindowEventHandlers/onstorage": { - "modified": "2019-03-23T22:03:39.969Z", + "Web/HTTP/Feature_Policy/Using_Feature_Policy": { + "modified": "2020-07-20T20:48:22.250Z", "contributors": [ - "GPrimola", - "gustavoverasmorais" + "FernandoKGA" ] }, - "Web/API/WindowOrWorkerGlobalScope": { - "modified": "2019-03-23T22:06:16.824Z", + "Web/HTTP/Headers": { + "modified": "2020-08-02T21:34:50.722Z", "contributors": [ - "angelorubin", - "Bzbarsky" + "gutoribeiro", + "davidalves1", + "eziotristao", + "helton-mori-dev", + "secato", + "pedroberbel", + "GPrimola", + "luiz787", + "Lazz", + "yagoazedias", + "fscholz", + "andrekutianski" ] }, - "Web/API/WindowOrWorkerGlobalScope/fetch": { - "modified": "2019-03-23T22:06:21.567Z", + "Web/HTTP/Headers/Accept": { + "modified": "2020-10-15T22:26:07.441Z", "contributors": [ - "dowgssss" + "FernandoKGA" ] }, - "Web/API/WindowOrWorkerGlobalScope/setInterval": { - "modified": "2020-10-15T22:16:56.864Z", + "Web/HTTP/Headers/Accept-CH": { + "modified": "2020-10-15T22:26:08.419Z", "contributors": [ - "luan0ap" + "FernandoKGA" ] }, - "Web/API/WindowTimers": { - "modified": "2019-03-23T23:01:45.978Z", + "Web/HTTP/Headers/Accept-CH-Lifetime": { + "modified": "2020-10-15T22:26:09.466Z", "contributors": [ - "teoli" + "FernandoKGA" ] }, - "Web/API/WindowTimers/clearTimeout": { - "modified": "2020-10-15T21:31:54.685Z", + "Web/HTTP/Headers/Accept-Charset": { + "modified": "2020-10-15T22:26:09.572Z", "contributors": [ - "GarkGarcia", - "teoli", - "Willkuns" + "FernandoKGA" ] }, - "Web/API/Worker": { - "modified": "2020-10-28T22:21:09.210Z", + "Web/HTTP/Headers/Accept-Encoding": { + "modified": "2020-10-15T22:26:26.705Z", "contributors": [ - "oliveiracaue", - "filipemarins", - "gxovano" + "FernandoKGA" ] }, - "Web/API/XMLDocument": { - "modified": "2020-10-15T22:12:36.526Z", + "Web/HTTP/Headers/Accept-Language": { + "modified": "2020-10-15T22:21:08.686Z", "contributors": [ - "ExE-Boss", - "msilvaj" + "kibutzzz" ] }, - "Web/API/XMLDocument/async": { - "modified": "2019-04-24T21:10:36.508Z", + "Web/HTTP/Headers/Accept-Patch": { + "modified": "2020-10-15T22:26:27.309Z", "contributors": [ - "ExE-Boss", - "edurodriguesdias" + "FernandoKGA" ] }, - "Web/API/XMLHttpRequest": { - "modified": "2019-05-02T20:01:13.466Z", + "Web/HTTP/Headers/Accept-Ranges": { + "modified": "2020-10-15T22:26:36.739Z", "contributors": [ - "wbamberg", - "anhaabaete", - "halkliff", - "brunoczim", - "andrekutianski", - "DaniloDev", - "wdoering", - "rogeriomoraessp", - "teoli", - "fusionchess" + "FernandoKGA" ] }, - "Web/API/XMLHttpRequest/Requisicoes_sincronas_e_assincronas": { - "modified": "2019-03-18T20:53:32.225Z", + "Web/HTTP/Headers/Access-Control-Allow-Credentials": { + "modified": "2020-10-15T22:26:50.350Z", "contributors": [ - "helton-mori-dev", - "Laercio89", - "erickfaraujo", - "filipecalasans", - "melostbr" + "FernandoKGA" ] }, - "Web/API/XMLHttpRequest/Usando_XMLHttpRequest": { - "modified": "2019-03-23T23:31:13.941Z", + "Web/HTTP/Headers/Access-Control-Allow-Headers": { + "modified": "2020-10-15T22:26:53.489Z", "contributors": [ - "JosOe", - "yuhzador", - "glaudiston", - "flaviomicheletti", - "RodrigoMarques", - "vitornogueira", - "teoli", - "MarcoBruno", - "vagnerleitte" + "FernandoKGA" ] }, - "Web/API/XMLHttpRequest/abort": { - "modified": "2019-03-23T22:16:54.432Z", + "Web/HTTP/Headers/Access-Control-Allow-Methods": { + "modified": "2020-10-15T22:26:56.233Z", "contributors": [ - "gustavobeavis" + "FernandoKGA" ] }, - "Web/API/XMLHttpRequest/onreadystatechange": { - "modified": "2019-03-23T22:16:58.340Z", + "Web/HTTP/Headers/Access-Control-Allow-Origin": { + "modified": "2020-10-15T22:02:18.454Z", "contributors": [ - "brunoczim", - "gustavobeavis" + "francinysalles", + "jkdrangel" ] }, - "Web/API/XMLHttpRequest/open": { - "modified": "2020-10-15T22:03:41.298Z", + "Web/HTTP/Headers/Access-Control-Expose-Headers": { + "modified": "2020-10-15T22:27:11.135Z", "contributors": [ - "halkliff", - "mauromattos00" + "FernandoKGA" ] }, - "Web/API/XMLHttpRequest/readyState": { - "modified": "2019-05-15T10:26:01.821Z", + "Web/HTTP/Headers/Access-Control-Max-Age": { + "modified": "2020-10-15T22:27:11.158Z", "contributors": [ - "eduardovivi", - "gustavobeavis" + "FernandoKGA" ] }, - "Web/API/XMLHttpRequest/send": { - "modified": "2020-10-15T22:05:47.894Z", + "Web/HTTP/Headers/Access-Control-Request-Headers": { + "modified": "2020-10-15T22:07:42.625Z", "contributors": [ - "duduindo", - "EduardoFerr" + "EversonRRMoura" ] }, - "Web/API/XMLHttpRequest/setRequestHeader": { - "modified": "2020-10-15T22:18:51.386Z", + "Web/HTTP/Headers/Access-Control-Request-Method": { + "modified": "2020-10-15T22:27:11.209Z", "contributors": [ - "devlhm" + "FernandoKGA" ] }, - "Web/API/XMLHttpRequest/timeout": { - "modified": "2019-03-23T22:27:06.677Z", + "Web/HTTP/Headers/Age": { + "modified": "2020-10-15T22:07:25.015Z", "contributors": [ - "trestini" + "jamrocha" ] }, - "Web/API/notificacoes": { - "modified": "2020-11-27T03:23:53.561Z", + "Web/HTTP/Headers/Allow": { + "modified": "2020-02-11T10:36:24.890Z", "contributors": [ - "SphinxKnight", - "Lukazovic", - "maatheusgouveia", - "HugoRibeiro", - "AlvaroAlves", - "teoli", - "salomaosnff" + "FernandoKGA" ] }, - "Web/Accessibility/ARIA": { - "modified": "2020-05-04T12:03:49.162Z", + "Web/HTTP/Headers/Alt-Svc": { + "modified": "2020-10-15T22:27:23.038Z", "contributors": [ - "BeatrizCavallieri", - "rener_bz", - "Aschlla", - "meche", - "chrisdavidmills" + "FernandoKGA" ] }, - "Web/Accessibility/ARIA/ARIA_Guides": { - "modified": "2019-03-23T22:05:06.841Z", + "Web/HTTP/Headers/Authorization": { + "modified": "2020-02-15T01:32:30.446Z", "contributors": [ - "mak213k" + "FernandoKGA" ] }, - "Web/Accessibility/ARIA/ARIA_Techniques": { - "modified": "2020-08-05T20:31:43.497Z", + "Web/HTTP/Headers/Cache-Control": { + "modified": "2020-10-22T20:01:06.178Z", "contributors": [ - "alisson-suzigan", - "Sheppy" + "rogeriodegoiania", + "jamrocha" ] }, - "Web/Accessibility/ARIA/ARIA_Techniques/Usando_o_atributo_aria-labelledby": { - "modified": "2019-03-23T23:02:11.347Z", + "Web/HTTP/Headers/Clear-Site-Data": { + "modified": "2020-10-15T22:27:31.884Z", "contributors": [ - "eduardojmatos" + "FernandoKGA" ] }, - "Web/Accessibility/ARIA/ARIA_Techniques/Usando_o_atributo_aria-required": { - "modified": "2019-03-18T21:46:23.148Z", + "Web/HTTP/Headers/Content-Disposition": { + "modified": "2020-10-15T22:27:55.693Z", "contributors": [ - "ivanoliveira" + "eduardocruz", + "FernandoKGA" ] }, - "Web/Accessibility/ARIA/ARIA_Techniques/Usando_o_slider_role": { - "modified": "2019-03-23T22:16:26.114Z", + "Web/HTTP/Headers/Content-Encoding": { + "modified": "2020-10-15T22:27:52.523Z", "contributors": [ - "rener_bz" + "FernandoKGA" ] }, - "Web/Accessibility/ARIA/ARIA_Techniques/Using_the_aria-describedby_attribute": { - "modified": "2020-01-24T10:16:14.859Z", + "Web/HTTP/Headers/Content-Language": { + "modified": "2020-10-15T22:14:20.024Z", "contributors": [ - "BiancaPereira" + "coloringa" ] }, - "Web/Accessibility/ARIA/ARIA_Techniques/Using_the_aria-label_attribute": { - "modified": "2020-12-10T12:36:57.074Z", + "Web/HTTP/Headers/Content-Length": { + "modified": "2020-10-15T22:09:26.720Z", "contributors": [ - "filipetorres", - "duduindo", - "NeoOrion" + "jamrocha" ] }, - "Web/Accessibility/ARIA/ARIA_Techniques/Utilizando_o_alert_role": { - "modified": "2019-03-23T22:50:52.511Z", + "Web/HTTP/Headers/Content-Location": { + "modified": "2020-10-15T22:25:41.262Z", "contributors": [ - "Aschlla", - "iCynthia" + "FernandoKGA" ] }, - "Web/Accessibility/ARIA/ARIA_Test_Cases": { - "modified": "2019-03-23T23:03:31.037Z", + "Web/HTTP/Headers/Content-Range": { + "modified": "2020-10-15T22:29:25.800Z", "contributors": [ - "hannahlere" + "FernandoKGA" ] }, - "Web/Accessibility/ARIA/Guia_para_implementar_o_leitor_de_tela_ARIA": { - "modified": "2019-03-23T22:29:38.626Z", + "Web/HTTP/Headers/Content-Security-Policy": { + "modified": "2020-10-15T22:29:29.169Z", "contributors": [ - "caio.rrs" + "FernandoKGA" ] }, - "Web/Accessibility/ARIA/Roles": { - "modified": "2020-09-18T19:22:52.644Z", + "Web/HTTP/Headers/Content-Security-Policy-Report-Only": { + "modified": "2020-10-15T22:31:19.501Z", "contributors": [ - "Painatalman", - "rafaelcavalcante" + "FernandoKGA" ] }, - "Web/Accessibility/ARIA/Web_applications_and_ARIA_FAQ": { - "modified": "2019-03-23T22:27:11.984Z", + "Web/HTTP/Headers/Content-Type": { + "modified": "2020-10-15T21:55:31.773Z", "contributors": [ - "Aschlla" + "khaosdoctor" ] }, - "Web/Accessibility/ARIA/forms": { - "modified": "2019-03-23T22:29:43.271Z", + "Web/HTTP/Headers/Cookie": { + "modified": "2020-10-15T22:29:26.513Z", "contributors": [ - "Aschlla", - "caio.rrs" + "FernandoKGA" ] }, - "Web/Accessibility/ARIA/forms/Dicas_básicas_de_form": { - "modified": "2019-03-23T22:29:41.083Z", + "Web/HTTP/Headers/Cookie2": { + "modified": "2020-10-15T22:29:27.166Z", "contributors": [ - "rener_bz", - "Fernandolrs", - "caio.rrs" + "FernandoKGA" ] }, - "Web/Accessibility/ARIA/forms/Multipart_labels": { - "modified": "2019-03-23T22:27:34.088Z", + "Web/HTTP/Headers/Cross-Origin-Resource-Policy": { + "modified": "2020-10-15T22:29:30.347Z", "contributors": [ - "Aschlla" + "FernandoKGA" ] }, - "Web/Accessibility/ARIA/forms/alerts": { - "modified": "2019-09-09T08:04:08.002Z", + "Web/HTTP/Headers/DNT": { + "modified": "2020-10-15T22:29:39.511Z", "contributors": [ - "brunopulis" + "FernandoKGA" ] }, - "Web/Accessibility/ARIA/widgets": { - "modified": "2019-01-16T23:07:41.279Z", + "Web/HTTP/Headers/DPR": { + "modified": "2020-10-15T22:29:39.224Z", "contributors": [ - "julianosilvaa" + "FernandoKGA" ] }, - "Web/Accessibility/ARIA/widgets/Visão_geral": { - "modified": "2019-03-23T22:29:34.759Z", + "Web/HTTP/Headers/Date": { + "modified": "2020-10-15T22:31:16.510Z", "contributors": [ - "Aschlla", - "caio.rrs" + "FernandoKGA" ] }, - "Web/Acessibilidade": { - "modified": "2019-09-09T14:18:55.700Z", + "Web/HTTP/Headers/Device-Memory": { + "modified": "2020-10-15T22:31:19.616Z", "contributors": [ - "SphinxKnight", - "julio-elipse", - "marciioluucas", - "Aschlla", - "takahan", - "IanRamosC", - "rodrigopadula" + "FernandoKGA" ] }, - "Web/Acessibilidade/Accessibilidade_para_plataforma_movel": { - "modified": "2019-03-18T21:15:58.279Z", + "Web/HTTP/Headers/Digest": { + "modified": "2020-10-15T22:31:16.637Z", "contributors": [ - "nathaliabruno", - "takahan" + "FernandoKGA" ] }, - "Web/Acessibilidade/An_overview_of_accessible_web_applications_and_widgets": { - "modified": "2019-03-23T22:27:46.873Z", + "Web/HTTP/Headers/ETag": { + "modified": "2020-10-15T22:31:10.148Z", "contributors": [ - "Aschlla" + "deniscapeto", + "augustowebd.mozilla", + "MoraisG" ] }, - "Web/Acessibilidade/Desenvolvimento_Web": { - "modified": "2019-03-23T22:45:20.334Z", + "Web/HTTP/Headers/Early-Data": { + "modified": "2020-10-15T22:31:17.142Z", "contributors": [ - "Aschlla", - "takahan" + "FernandoKGA" ] }, - "Web/Acessibilidade/Entendendo_WCAG": { - "modified": "2019-06-04T11:18:03.017Z", + "Web/HTTP/Headers/Expect": { + "modified": "2020-10-15T22:31:20.718Z", "contributors": [ - "Rondinelly" + "FernandoKGA" ] }, - "Web/Acessibilidade/Entendendo_WCAG/Keyboard": { - "modified": "2020-05-04T20:14:49.956Z", + "Web/HTTP/Headers/Expect-CT": { + "modified": "2020-10-15T22:31:22.739Z", "contributors": [ - "viviccamargo88" + "FernandoKGA" ] }, - "Web/Acessibilidade/Problemas_com_JAWS_no_Firefox": { - "modified": "2019-03-23T22:45:26.552Z", + "Web/HTTP/Headers/Expires": { + "modified": "2020-10-15T22:07:21.086Z", "contributors": [ - "takahan" + "SphinxKnight", + "jamrocha" ] }, - "Web/CSS": { - "modified": "2019-12-23T19:24:02.129Z", + "Web/HTTP/Headers/Feature-Policy": { + "modified": "2020-10-15T22:32:03.095Z", "contributors": [ - "euvanribeiro", - "SphinxKnight", - "dekxside", - "julio-elipse", - "phenriqueleao", - "GPrimola", - "arthur2323", - "rafaelcavalcante", - "DiegoBRodrigues", - "fcard", - "KikenCris", - "teoli", - "MatCAlv", - "rodrigopadula", - "Estevaosoberano", - "angelorubin", - "fvargaspf@gmail.com", - "gabrielima" + "FernandoKGA" ] }, - "Web/CSS/--*": { - "modified": "2019-03-23T22:04:16.687Z", + "Web/HTTP/Headers/Forwarded": { + "modified": "2020-10-15T22:31:19.681Z", "contributors": [ - "filipetorres" + "FernandoKGA" ] }, - "Web/CSS/-moz-box-ordinal-group": { - "modified": "2019-03-18T21:20:02.652Z", + "Web/HTTP/Headers/From": { + "modified": "2020-10-15T22:31:17.738Z", "contributors": [ - "dekxside" + "FernandoKGA" ] }, - "Web/CSS/-moz-cell": { - "modified": "2019-03-18T21:15:19.786Z", + "Web/HTTP/Headers/Host": { + "modified": "2020-10-15T21:56:25.368Z", "contributors": [ - "dekxside" + "cesarvn2010" ] }, - "Web/CSS/-moz-context-properties": { - "modified": "2020-10-15T22:12:51.330Z", + "Web/HTTP/Headers/If-Match": { + "modified": "2020-10-15T22:31:31.434Z", "contributors": [ - "dekxside" + "FernandoKGA" ] }, - "Web/CSS/-webkit-overflow-scrolling": { - "modified": "2019-03-23T22:49:05.514Z", + "Web/HTTP/Headers/If-Modified-Since": { + "modified": "2020-10-15T21:56:17.428Z", "contributors": [ - "teoli", - "otaviogui", - "rafaelcavalcante", - "fcard", - "alexanmtz" + "WaGjUb" ] }, - "Web/CSS/-webkit-text-security": { - "modified": "2020-07-18T11:21:00.057Z", + "Web/HTTP/Headers/If-None-Match": { + "modified": "2020-10-15T22:31:32.703Z", "contributors": [ - "alexalannunes" + "FernandoKGA" ] }, - "Web/CSS/::after": { - "modified": "2020-05-04T13:44:31.713Z", + "Web/HTTP/Headers/If-Range": { + "modified": "2020-10-15T22:31:33.474Z", "contributors": [ - "chrisdavidmills", - "KadirTopal", - "flunardelli", - "filipetorres", - "MarcosFerrao" + "FernandoKGA" ] }, - "Web/CSS/::backdrop": { - "modified": "2019-03-23T22:31:06.861Z", + "Web/HTTP/Headers/If-Unmodified-Since": { + "modified": "2020-10-15T22:05:25.445Z", "contributors": [ - "tfvictorino" + "gnuns", + "francinysalles" ] }, - "Web/CSS/::before": { - "modified": "2020-02-14T13:16:11.838Z", + "Web/HTTP/Headers/Keep-Alive": { + "modified": "2020-10-15T22:18:39.285Z", "contributors": [ - "melissatvs", - "TecladistaProd", - "marcioleandro" + "pedrochaves", + "luan0ap" ] }, - "Web/CSS/::first-letter": { - "modified": "2020-07-28T16:37:37.904Z", + "Web/HTTP/Headers/Large-Allocation": { + "modified": "2020-10-15T22:31:49.734Z", "contributors": [ - "anhaabaete", - "isckosta" + "FernandoKGA" ] }, - "Web/CSS/::first-line": { - "modified": "2020-10-15T22:32:28.103Z", + "Web/HTTP/Headers/Last-Modified": { + "modified": "2020-10-15T21:56:35.716Z", "contributors": [ - "Camila-Isabela" + "cesarvn2010" ] }, - "Web/CSS/::selection": { - "modified": "2020-10-15T22:30:47.166Z", + "Web/HTTP/Headers/Link": { + "modified": "2020-10-15T22:31:34.762Z", "contributors": [ - "euwilliamgoncalves" + "FernandoKGA" ] }, - "Web/CSS/:active": { - "modified": "2019-08-30T22:31:02.665Z", + "Web/HTTP/Headers/NEL": { + "modified": "2020-07-08T20:29:31.709Z", "contributors": [ - "MarsA_", - "duduindo", - "Arlon", - "SKO" + "FernandoKGA" ] }, - "Web/CSS/:blank": { - "modified": "2020-10-15T22:17:45.679Z", + "Web/HTTP/Headers/Origin": { + "modified": "2020-10-15T22:31:35.312Z", "contributors": [ - "charlesjamil" + "FernandoKGA" ] }, - "Web/CSS/:checked": { - "modified": "2019-10-11T18:34:15.162Z", + "Web/HTTP/Headers/Pragma": { + "modified": "2020-10-15T22:31:35.228Z", "contributors": [ - "escattone", - "teoli", - "brunoeduardo" + "FernandoKGA" ] }, - "Web/CSS/:disabled": { - "modified": "2020-10-15T22:16:22.245Z", + "Web/HTTP/Headers/Proxy-Authenticate": { + "modified": "2020-10-15T22:31:36.533Z", "contributors": [ - "Arlon" + "FernandoKGA" ] }, - "Web/CSS/:empty": { - "modified": "2020-10-15T22:06:17.744Z", + "Web/HTTP/Headers/Proxy-Authorization": { + "modified": "2020-07-09T11:07:07.810Z", "contributors": [ - "Arlon", - "liddack" + "FernandoKGA" ] }, - "Web/CSS/:enabled": { - "modified": "2020-10-15T22:16:22.794Z", + "Web/HTTP/Headers/Public-Key-Pins": { + "modified": "2020-10-15T22:31:35.978Z", "contributors": [ - "Arlon" + "FernandoKGA" ] }, - "Web/CSS/:first-child": { - "modified": "2019-03-23T23:02:20.033Z", + "Web/HTTP/Headers/Public-Key-Pins-Report-Only": { + "modified": "2020-10-15T22:31:47.341Z", "contributors": [ - "romulojales" + "FernandoKGA" ] }, - "Web/CSS/:first-of-type": { - "modified": "2019-03-23T23:05:09.903Z", + "Web/HTTP/Headers/Range": { + "modified": "2020-10-15T22:31:38.126Z", "contributors": [ - "MarcosNakamine", - "dbiazioli" + "FernandoKGA" ] }, - "Web/CSS/:focus": { - "modified": "2020-06-28T21:30:07.756Z", + "Web/HTTP/Headers/Referer": { + "modified": "2020-10-15T22:26:06.843Z", "contributors": [ - "Rovaron", - "LeoRiether", - "tfvictorino" + "FernandoKGA" ] }, - "Web/CSS/:focus-within": { - "modified": "2020-10-15T22:14:20.305Z", + "Web/HTTP/Headers/Referrer-Policy": { + "modified": "2020-10-15T22:31:38.598Z", "contributors": [ - "leandroruel" + "kenchen12", + "FernandoKGA" ] }, - "Web/CSS/:fullscreen": { - "modified": "2020-10-15T22:32:42.198Z", + "Web/HTTP/Headers/Retry-After": { + "modified": "2020-10-15T21:58:41.599Z", "contributors": [ - "Slandrade" + "dgadelha" ] }, - "Web/CSS/:hover": { - "modified": "2019-03-23T22:52:37.038Z", + "Web/HTTP/Headers/Save-Data": { + "modified": "2020-10-15T22:31:38.329Z", "contributors": [ - "tfvictorino", - "brunoeduardo" + "FernandoKGA" ] }, - "Web/CSS/:invalid": { - "modified": "2020-10-15T21:58:33.546Z", + "Web/HTTP/Headers/Sec-Fetch-Site": { + "modified": "2020-10-15T22:34:11.157Z", "contributors": [ - "fscholz", - "valdeirpsr", - "dulcetti" + "MatheusNtg" ] }, - "Web/CSS/:last-child": { - "modified": "2019-03-23T22:53:17.390Z", + "Web/HTTP/Headers/Server": { + "modified": "2020-10-15T22:07:06.159Z", "contributors": [ - "brunoeduardo" + "francinysalles" ] }, - "Web/CSS/:last-of-type": { - "modified": "2019-03-23T22:36:29.640Z", + "Web/HTTP/Headers/Server-Timing": { + "modified": "2020-10-15T22:31:38.528Z", "contributors": [ - "mnoronhas" + "FernandoKGA" ] }, - "Web/CSS/:link": { - "modified": "2019-03-23T23:02:10.016Z", + "Web/HTTP/Headers/Set-Cookie": { + "modified": "2020-10-15T21:56:19.509Z", "contributors": [ - "zamariolajr", - "juanopegoretti" + "claudiombsilva", + "thiagorock22", + "WaGjUb" ] }, - "Web/CSS/:not": { - "modified": "2020-10-15T21:43:20.480Z", + "Web/HTTP/Headers/Set-Cookie/SameSite": { + "modified": "2020-10-15T22:31:49.288Z", "contributors": [ - "mateusvelleda", - "fcard", - "ribeiroevandro" + "ooVictorFranco" ] }, - "Web/CSS/:nth-child": { - "modified": "2020-10-15T21:47:55.336Z", + "Web/HTTP/Headers/Set-Cookie2": { + "modified": "2020-10-15T22:31:37.734Z", "contributors": [ - "liddack", - "welitonderesende", - "ricardoferreirades", - "cynthiapereira", - "alexfqc" + "FernandoKGA" ] }, - "Web/CSS/:nth-last-child": { - "modified": "2019-04-23T11:30:59.891Z", + "Web/HTTP/Headers/SourceMap": { + "modified": "2020-10-15T22:20:50.501Z", "contributors": [ - "larimaza" + "ogeidexe" ] }, - "Web/CSS/:nth-of-type": { - "modified": "2019-03-23T22:01:39.698Z", + "Web/HTTP/Headers/Strict-Transport-Security": { + "modified": "2020-10-15T22:09:01.413Z", "contributors": [ - "evandrosevergnini" + "darleizillmer" ] }, - "Web/CSS/:only-child": { - "modified": "2019-03-18T21:46:51.835Z", + "Web/HTTP/Headers/TE": { + "modified": "2020-10-15T22:31:39.430Z", "contributors": [ - "larimaza" + "FernandoKGA" ] }, - "Web/CSS/:only-of-type": { - "modified": "2020-03-18T12:33:14.783Z", + "Web/HTTP/Headers/Timing-Allow-Origin": { + "modified": "2020-10-15T22:31:39.349Z", "contributors": [ - "eziotristao", - "guylhermetabosa" + "FernandoKGA" ] }, - "Web/CSS/:optional": { - "modified": "2020-10-15T22:12:29.409Z", + "Web/HTTP/Headers/Tk": { + "modified": "2020-10-15T22:31:39.173Z", "contributors": [ - "Arlon", - "filipe-machado" + "FernandoKGA" ] }, - "Web/CSS/:out-of-range": { - "modified": "2020-10-15T22:28:44.918Z", + "Web/HTTP/Headers/Trailer": { + "modified": "2020-10-15T22:31:40.917Z", "contributors": [ - "JeffersonCAMarinho" + "FernandoKGA" ] }, - "Web/CSS/:read-write": { - "modified": "2020-10-15T22:31:33.681Z", + "Web/HTTP/Headers/Transfer-Encoding": { + "modified": "2020-10-15T22:31:41.759Z", "contributors": [ - "ooVictorFranco" + "FernandoKGA" ] }, - "Web/CSS/:required": { - "modified": "2020-10-15T22:12:28.337Z", + "Web/HTTP/Headers/Upgrade-Insecure-Requests": { + "modified": "2020-10-15T22:05:25.350Z", "contributors": [ - "filipe-machado" + "francinysalles" ] }, - "Web/CSS/:root": { - "modified": "2020-07-03T20:00:54.694Z", + "Web/HTTP/Headers/User-Agent": { + "modified": "2020-10-15T22:31:39.984Z", "contributors": [ - "gstfnsk", - "saspnet", - "rafaelnery", - "lucasaugustin" + "FernandoKGA" ] }, - "Web/CSS/:target": { - "modified": "2020-10-15T22:32:25.651Z", + "Web/HTTP/Headers/Vary": { + "modified": "2020-10-15T22:31:40.954Z", "contributors": [ - "joaocdfarias" + "FernandoKGA" ] }, - "Web/CSS/:valid": { - "modified": "2020-10-15T22:02:35.011Z", + "Web/HTTP/Headers/Via": { + "modified": "2020-10-15T22:31:40.512Z", "contributors": [ - "valdeirpsr" + "FernandoKGA" ] }, - "Web/CSS/:visited": { - "modified": "2020-10-15T22:11:21.146Z", + "Web/HTTP/Headers/WWW-Authenticate": { + "modified": "2020-10-15T22:07:55.835Z", "contributors": [ - "duduindo", - "UnrealLion" + "FernandoKGA", + "bmansur" ] }, - "Web/CSS/@charset": { - "modified": "2019-03-23T23:00:24.432Z", + "Web/HTTP/Headers/Want-Digest": { + "modified": "2020-10-15T22:31:40.550Z", "contributors": [ - "Guillaume-Heras", - "fscholz", - "lucascaprio" + "FernandoKGA" ] }, - "Web/CSS/@font-face": { - "modified": "2020-10-15T22:19:20.814Z", + "Web/HTTP/Headers/Warning": { + "modified": "2020-10-15T22:31:39.879Z", "contributors": [ - "fininhors", - "jorgeclesio" + "FernandoKGA" ] }, - "Web/CSS/@import": { - "modified": "2019-03-23T22:35:28.440Z", + "Web/HTTP/Headers/X-Content-Type-Options": { + "modified": "2020-10-15T21:55:34.398Z", "contributors": [ - "uzielweb", - "deyvid0123", - "philippesilva" + "khaosdoctor" ] }, - "Web/CSS/@keyframes": { - "modified": "2019-03-23T22:05:43.167Z", + "Web/HTTP/Headers/X-DNS-Prefetch-Control": { + "modified": "2020-10-15T22:11:22.598Z", "contributors": [ - "ganovais" + "LucasKluge" ] }, - "Web/CSS/@media": { - "modified": "2020-05-17T15:47:13.849Z", + "Web/HTTP/Headers/X-Forwarded-For": { + "modified": "2020-10-15T22:31:44.027Z", "contributors": [ - "filipegutemberg", - "kkkasio", - "chrisdavidmills" + "FernandoKGA" ] }, - "Web/CSS/@media/aspect-ratio": { - "modified": "2020-10-15T22:26:11.457Z", + "Web/HTTP/Headers/X-Forwarded-Host": { + "modified": "2020-10-15T22:31:44.446Z", "contributors": [ - "marlonveiga-santos" + "FernandoKGA" ] }, - "Web/CSS/@media/display-mode": { - "modified": "2019-03-23T22:07:00.849Z", + "Web/HTTP/Headers/X-Forwarded-Proto": { + "modified": "2020-10-15T22:31:43.726Z", "contributors": [ - "GPrimola", - "Fernandolrs", - "deusmar" + "FernandoKGA" ] }, - "Web/CSS/@media/prefers-color-scheme": { - "modified": "2020-10-15T22:28:45.846Z", + "Web/HTTP/Headers/X-Frame-Options": { + "modified": "2020-10-15T22:31:47.974Z", "contributors": [ - "ftonato" + "FernandoKGA" ] }, - "Web/CSS/@page": { - "modified": "2019-03-23T23:33:46.393Z", + "Web/HTTP/Headers/X-XSS-Protection": { + "modified": "2020-10-15T22:31:47.343Z", "contributors": [ - "Sebastianz", - "Prinz_Rana", - "fscholz", - "teoli", - "Estevaosoberano" + "FernandoKGA" ] }, - "Web/CSS/At-rule": { - "modified": "2019-03-23T23:39:11.306Z", + "Web/HTTP/Methods": { + "modified": "2020-10-15T21:51:11.621Z", "contributors": [ - "teoli", - "fernando", - "rodrigopadula" + "julio-elipse", + "fplucas", + "thiagosgarcia", + "superdiegonunes", + "andrekutianski", + "helcorin" ] }, - "Web/CSS/CSS_Animations": { - "modified": "2019-03-23T22:43:49.326Z", + "Web/HTTP/Methods/CONNECT": { + "modified": "2020-10-15T21:58:22.687Z", "contributors": [ - "teoli" + "marciioluucas" ] }, - "Web/CSS/CSS_Animations/Detecting_CSS_animation_support": { - "modified": "2019-03-18T21:31:28.635Z", + "Web/HTTP/Methods/DELETE": { + "modified": "2020-10-15T21:58:32.285Z", "contributors": [ - "wbamberg", - "eyglys" + "calexandrepcjr", + "flgmjr", + "almeidaalex", + "marciioluucas" ] }, - "Web/CSS/CSS_Animations/Tips": { - "modified": "2019-03-23T22:11:17.827Z", + "Web/HTTP/Methods/GET": { + "modified": "2020-10-15T21:51:45.627Z", "contributors": [ - "dime2lo" + "krisfertig", + "marciioluucas", + "andrekutianski" ] }, - "Web/CSS/CSS_Animations/Usando_animações_CSS": { - "modified": "2019-03-23T23:39:07.702Z", + "Web/HTTP/Methods/HEAD": { + "modified": "2020-10-15T22:14:53.554Z", "contributors": [ - "gabrielclaudino", - "Fernandolrs", - "dime2lo", - "cris-luz-07", - "SphinxKnight", - "teoli", - "gustavoaraujo", - "cauecidade", - "francisco.hansen" + "ViniciusMatias" ] }, - "Web/CSS/CSS_Background_and_Borders": { - "modified": "2019-03-23T22:44:11.690Z", + "Web/HTTP/Methods/OPTIONS": { + "modified": "2020-10-15T21:56:04.830Z", "contributors": [ - "teoli" + "impadalko", + "Mega85" ] }, - "Web/CSS/CSS_Background_and_Borders/Using_CSS_multiple_backgrounds": { - "modified": "2019-03-23T23:39:08.214Z", + "Web/HTTP/Methods/PATCH": { + "modified": "2020-03-26T15:24:48.895Z", "contributors": [ - "teoli", - "Aleuck" + "joão.ramires", + "GustavoOS" ] }, - "Web/CSS/CSS_Basic_User_Interface": { - "modified": "2019-03-18T20:54:10.559Z", + "Web/HTTP/Methods/POST": { + "modified": "2020-10-15T22:12:56.254Z", "contributors": [ - "Rondinelly" + "caukazama", + "thiagojc89", + "krisfertig" ] }, - "Web/CSS/CSS_Box_Model": { - "modified": "2020-05-08T21:54:24.656Z", + "Web/HTTP/Methods/PUT": { + "modified": "2020-10-15T22:14:53.561Z", "contributors": [ - "ZurcLeo", - "Sebastianz" + "ViniciusMatias" ] }, - "Web/CSS/CSS_Box_Model/margin_collapsing": { - "modified": "2019-03-23T22:09:32.434Z", + "Web/HTTP/Methods/TRACE": { + "modified": "2020-10-15T22:04:21.753Z", "contributors": [ - "marcosdourado", - "Fernandolrs" + "solfier", + "fabio-r-souza" ] }, - "Web/CSS/CSS_Colors/seletor_de_cores": { - "modified": "2020-07-01T01:27:34.385Z", + "Web/HTTP/Overview": { + "modified": "2020-09-23T20:02:12.544Z", "contributors": [ - "gstfnsk", - "Andrya", - "SphinxKnight", - "gpaschoal", - "wcqueiroz", - "cbosco" + "viniciusfinger", + "K4mek", + "gustavoluchi", + "bruno_scatena", + "viniciusbds", + "julio-elipse", + "GPrimola", + "SubaruSama", + "CarlosAlbertoSzygalski", + "renatodantas", + "holdonmax" ] }, - "Web/CSS/CSS_Columns": { - "modified": "2019-03-23T22:43:56.221Z", + "Web/HTTP/Session": { + "modified": "2019-03-18T21:38:28.348Z", "contributors": [ - "Sebastianz" + "krisfertig", + "zscaiosi" ] }, - "Web/CSS/CSS_Display": { - "modified": "2020-10-15T22:22:39.686Z", + "Web/HTTP/Status": { + "modified": "2020-09-30T05:44:50.985Z", "contributors": [ - "brasmon8351" + "nunezgarcia548", + "José_Santana", + "macalha", + "pedrochaves", + "PauloItalo17", + "jamrocha", + "atiladelcanton", + "MarcosRocha", + "Felipeandradee", + "AlexandreVelloso", + "zenithpolar", + "alexandresn", + "raduq", + "Igor_Araujo", + "MateusGabi", + "Jens.B" ] }, - "Web/CSS/CSS_Flexible_Box_Layout": { - "modified": "2019-03-23T22:39:02.047Z", + "Web/HTTP/Status/100": { + "modified": "2020-10-15T22:08:25.420Z", "contributors": [ - "wwwjsw" + "ferfabricio" ] }, - "Web/CSS/CSS_Flexible_Box_Layout/Aligning_Items_in_a_Flex_Container": { - "modified": "2020-05-30T17:57:20.170Z", + "Web/HTTP/Status/101": { + "modified": "2019-08-30T14:26:22.601Z", "contributors": [ - "louisberns", - "lucas_severo", - "RobsonMariana" + "GMBarragam" ] }, - "Web/CSS/CSS_Flexible_Box_Layout/Conceitos_Basicos_do_Flexbox": { - "modified": "2020-04-13T01:15:45.668Z", + "Web/HTTP/Status/103": { + "modified": "2020-10-15T22:26:01.901Z", "contributors": [ - "carlosaffrc", - "SONSERVICE", - "davieduardo94", - "colares" + "FernandoKGA" ] }, - "Web/CSS/CSS_Flexible_Box_Layout/Ordering_Flex_Items": { - "modified": "2020-06-16T16:39:10.201Z", + "Web/HTTP/Status/200": { + "modified": "2020-10-15T21:55:04.602Z", "contributors": [ - "MarcosNakamine" + "macalha", + "raduq", + "jackiecard" ] }, - "Web/CSS/CSS_Flexible_Box_Layout/Typical_Use_Cases_of_Flexbox": { - "modified": "2020-11-08T18:33:11.137Z", + "Web/HTTP/Status/201": { + "modified": "2020-10-15T21:59:06.317Z", "contributors": [ - "Eduardo-Santos" + "raduq", + "akanagusku", + "tchaguitos" ] }, - "Web/CSS/CSS_Grid_Layout": { - "modified": "2020-11-17T10:35:18.965Z", + "Web/HTTP/Status/202": { + "modified": "2019-12-24T03:35:51.332Z", "contributors": [ - "leandro2", - "Camila-Isabela", - "btd1337", - "alessandroHenrique", - "davioliveiira", - "Maujor" + "euvanribeiro", + "FernandoKGA" ] }, - "Web/CSS/CSS_Grid_Layout/Basic_Concepts_of_Grid_Layout": { - "modified": "2019-10-10T16:31:58.386Z", - "contributors": [ - "petrikuzman", - "EdilsonSilva", - "felipecesr", - "marcosdourado", - "salomes", - "cslaviero", - "Nichtdeutsch", - "hernanimattos", - "Wanderleymuniz", - "magnonp", - "MatheusNtg", - "simoneas02", - "thiago-hs", - "FernandaBernardo", - "guigrecco", - "Maujor" - ] - }, - "Web/CSS/CSS_Grid_Layout/Relationship_of_Grid_Layout": { - "modified": "2019-03-18T21:30:25.562Z", + "Web/HTTP/Status/203": { + "modified": "2019-03-18T21:27:54.664Z", "contributors": [ - "lzerror" + "ferfabricio" ] }, - "Web/CSS/CSS_Images": { - "modified": "2019-03-18T21:39:59.884Z", + "Web/HTTP/Status/204": { + "modified": "2020-10-15T21:58:52.674Z", "contributors": [ - "mfluehr" + "macalha", + "fhecorrea", + "salomaosnff" ] }, - "Web/CSS/CSS_Images/Implementando_sprites_de_imagens_em_CSS": { - "modified": "2019-03-18T21:40:05.241Z", + "Web/HTTP/Status/205": { + "modified": "2019-12-23T21:44:23.232Z", "contributors": [ - "williamxavierdecastro" + "doougui", + "allansli", + "navarro" ] }, - "Web/CSS/CSS_Lists_and_Counters": { - "modified": "2019-03-23T22:45:37.305Z", + "Web/HTTP/Status/206": { + "modified": "2020-10-15T22:25:54.629Z", "contributors": [ - "teoli" + "FernandoKGA" ] }, - "Web/CSS/CSS_Lists_and_Counters/Using_CSS_counters": { - "modified": "2020-08-20T10:01:26.706Z", + "Web/HTTP/Status/300": { + "modified": "2019-12-27T11:18:36.624Z", "contributors": [ - "felipecesr", - "cris-luz-07", - "jorgeclesio" + "FernandoKGA" ] }, - "Web/CSS/CSS_Positioning": { - "modified": "2019-07-23T07:58:20.044Z", + "Web/HTTP/Status/301": { + "modified": "2020-10-15T22:24:18.785Z", "contributors": [ - "SphinxKnight", - "e-laura", - "davidhbrown" + "FernandoKGA" ] }, - "Web/CSS/CSS_Reference": { - "modified": "2019-09-24T18:20:32.922Z", + "Web/HTTP/Status/302": { + "modified": "2020-10-15T22:10:28.043Z", "contributors": [ - "duduindo", - "julio-elipse", - "fernahh", - "teoli", - "ethertank", - "rodrigopadula" + "FernandoKGA", + "raduq", + "CGReinhold" ] }, - "Web/CSS/CSS_Tipos": { - "modified": "2019-03-18T21:41:31.457Z", + "Web/HTTP/Status/303": { + "modified": "2020-10-15T22:04:22.978Z", "contributors": [ - "brunoeduardo" + "marcelobonatto" ] }, - "Web/CSS/CSS_Transforms": { - "modified": "2019-03-23T22:44:44.279Z", + "Web/HTTP/Status/304": { + "modified": "2020-10-15T22:00:19.115Z", "contributors": [ - "Sebastianz", - "jorgeclesio" + "macalha", + "bartolomeu.gusella" ] }, - "Web/CSS/CSS_Transforms/Using_CSS_transforms": { - "modified": "2019-03-23T23:39:05.696Z", + "Web/HTTP/Status/307": { + "modified": "2020-10-15T22:11:27.802Z", "contributors": [ - "luketevl", - "fscholz", - "jorgeclesio", - "francineemilia" + "dancamboim", + "CGReinhold" ] }, - "Web/CSS/CSS_Transitions": { - "modified": "2019-05-23T03:24:59.191Z", + "Web/HTTP/Status/308": { + "modified": "2020-10-15T22:25:15.141Z", "contributors": [ - "SphinxKnight", - "phyominoo" + "FernandoKGA" ] }, - "Web/CSS/CSS_Transitions/Using_CSS_transitions": { - "modified": "2020-02-24T11:14:13.720Z", + "Web/HTTP/Status/400": { + "modified": "2020-10-01T08:48:37.177Z", "contributors": [ - "EdeiltonSO", - "Clecio013" + "kendalbaba8", + "hmgoncalves", + "glasswalk3r", + "sergioflores-j" ] }, - "Web/CSS/Class_selectors": { - "modified": "2020-11-20T21:23:14.555Z", + "Web/HTTP/Status/401": { + "modified": "2020-12-01T19:39:24.191Z", "contributors": [ - "hellofanny", - "felipeteixeirams" + "caio-gi25-me", + "izabelvidal", + "macalha", + "bmansur", + "carlosmarx" ] }, - "Web/CSS/Comentário": { - "modified": "2019-03-23T22:09:23.562Z", + "Web/HTTP/Status/402": { + "modified": "2020-10-15T22:25:28.519Z", "contributors": [ - "Fernandolrs" + "FernandoKGA", + "RaulDeMelo" ] }, - "Web/CSS/Descendant_combinator": { - "modified": "2020-10-15T22:27:46.661Z", + "Web/HTTP/Status/403": { + "modified": "2020-10-15T21:56:18.319Z", "contributors": [ - "maxsixth" + "macalha", + "carlosmarx" ] }, - "Web/CSS/Elemento_substituido": { - "modified": "2019-03-23T22:09:21.528Z", + "Web/HTTP/Status/404": { + "modified": "2020-10-15T21:57:08.819Z", "contributors": [ - "Fernandolrs" + "pedropaulosuzuki" ] }, - "Web/CSS/General_sibling_combinator": { - "modified": "2019-03-23T22:12:07.654Z", + "Web/HTTP/Status/405": { + "modified": "2019-03-18T21:09:45.460Z", "contributors": [ - "ExE-Boss", - "dineiar", - "interaminense" + "dathin67" ] }, - "Web/CSS/Getting_Started": { - "modified": "2019-03-23T23:39:06.753Z", + "Web/HTTP/Status/406": { + "modified": "2020-10-15T22:25:54.038Z", "contributors": [ - "julio-elipse", - "agathasilva28", - "Hudson_Lima", - "teoli", - "ethertank", - "netfuzzer55", - "eduardocastro" + "FernandoKGA" ] }, - "Web/CSS/Getting_Started/Cascading_and_inheritance": { - "modified": "2019-03-23T22:55:03.103Z", + "Web/HTTP/Status/407": { + "modified": "2020-10-15T22:14:55.526Z", "contributors": [ - "agathasilva28", - "RafaelRNunes", - "Gregory", - "dhaack" + "ViniciusMatias" ] }, - "Web/CSS/Getting_Started/Como_CSS_funciona": { - "modified": "2019-03-23T22:58:47.568Z", + "Web/HTTP/Status/408": { + "modified": "2019-08-20T21:08:30.185Z", "contributors": [ - "RafaelRNunes", - "Gregory", - "Hudson_Lima" + "macalha", + "lucasrenod", + "SphinxKnight", + "11808s8", + "alanlucian" ] }, - "Web/CSS/Getting_Started/JavaScript": { - "modified": "2019-03-23T23:28:40.266Z", + "Web/HTTP/Status/409": { + "modified": "2020-10-12T18:38:04.385Z", "contributors": [ - "teoli", - "nah_luquiari" + "enriquerenebr", + "macalha", + "augustowebd.mozilla", + "wilsonferro" ] }, - "Web/CSS/Getting_Started/Lists": { - "modified": "2019-03-23T22:45:33.735Z", + "Web/HTTP/Status/410": { + "modified": "2020-10-15T22:09:41.751Z", "contributors": [ - "Gregory", - "teoli", - "jorgeclesio" + "macalha" ] }, - "Web/CSS/Getting_Started/Oque_é_CSS": { - "modified": "2019-03-23T23:29:17.129Z", + "Web/HTTP/Status/411": { + "modified": "2019-03-18T21:25:46.143Z", "contributors": [ - "agathasilva28", - "rogeralbinoi", - "teoli", - "nickollas.coelho" + "jamrocha" ] }, - "Web/CSS/Getting_Started/Porque_usar_CSS": { - "modified": "2019-03-23T22:59:16.068Z", + "Web/HTTP/Status/412": { + "modified": "2020-10-15T22:26:08.284Z", "contributors": [ - "rogeralbinoi" + "FernandoKGA" ] }, - "Web/CSS/Getting_Started/Seletores": { - "modified": "2019-11-18T18:22:11.556Z", + "Web/HTTP/Status/413": { + "modified": "2019-08-30T13:19:23.971Z", "contributors": [ - "Ericsson-Araujo", - "onsistec", - "dehmirandac2", - "c0elha", - "RafaelRNunes", - "Gregory", - "macarena", - "agathasilva28" + "GMBarragam" ] }, - "Web/CSS/ID_selectors": { - "modified": "2019-03-23T22:30:10.383Z", + "Web/HTTP/Status/414": { + "modified": "2019-03-23T22:05:49.854Z", "contributors": [ - "fcard" + "pedropaulosuzuki" ] }, - "Web/CSS/Layout_cookbook": { - "modified": "2019-07-01T02:49:26.802Z", + "Web/HTTP/Status/415": { + "modified": "2019-03-23T22:08:19.304Z", "contributors": [ - "SphinxKnight", - "sourodrigodesigner", - "jorgeclesio" + "VitorHFLopes" ] }, - "Web/CSS/Layout_cookbook/Breadcrumb_Navigation": { - "modified": "2020-10-15T22:25:57.757Z", + "Web/HTTP/Status/416": { + "modified": "2020-10-15T22:26:05.801Z", "contributors": [ - "andre-vinicius" + "FernandoKGA" ] }, - "Web/CSS/Layout_cookbook/Media_objects": { - "modified": "2020-10-15T22:30:53.182Z", + "Web/HTTP/Status/417": { + "modified": "2019-09-11T14:11:12.818Z", "contributors": [ - "SONSERVICE" + "Rogerio-Viana", + "raduq" ] }, - "Web/CSS/Media_Queries": { - "modified": "2019-03-23T22:21:43.734Z", + "Web/HTTP/Status/418": { + "modified": "2020-10-15T22:09:34.458Z", "contributors": [ - "dinaldojr" + "raduq", + "macalha" ] }, - "Web/CSS/Microsoft_Extensions": { - "modified": "2020-08-25T13:14:49.650Z", - "contributors": [ - "duduindo", - "mcastanhola" - ] - }, - "Web/CSS/Modelo_Visual": { - "modified": "2019-03-23T22:09:22.823Z", + "Web/HTTP/Status/422": { + "modified": "2019-05-17T09:52:53.330Z", "contributors": [ - "Fernandolrs" + "raduq" ] }, - "Web/CSS/Modelo_layout": { - "modified": "2019-03-23T22:09:32.757Z", + "Web/HTTP/Status/425": { + "modified": "2020-10-15T22:18:43.120Z", "contributors": [ - "lcchueri", - "Fernandolrs" + "raduq" ] }, - "Web/CSS/Privacidade_e_o_seletor_:visited": { - "modified": "2019-04-15T23:34:22.131Z", + "Web/HTTP/Status/426": { + "modified": "2019-05-17T09:28:05.733Z", "contributors": [ - "tadeubarbosa" + "raduq" ] }, - "Web/CSS/Pseudo-classes": { - "modified": "2020-07-03T20:22:36.539Z", + "Web/HTTP/Status/428": { + "modified": "2019-05-17T09:48:01.976Z", "contributors": [ - "gstfnsk", - "Lukff", - "brunoeduardo" + "raduq" ] }, - "Web/CSS/Pseudo-elementos": { - "modified": "2020-07-03T20:21:08.594Z", + "Web/HTTP/Status/429": { + "modified": "2019-03-23T22:11:06.523Z", "contributors": [ - "gstfnsk", - "Arlon", - "Lukff", - "brunoeduardo" + "matheuscorreia", + "MilesGitGud" ] }, - "Web/CSS/Seletor_de_atributos": { - "modified": "2020-10-15T22:02:16.544Z", + "Web/HTTP/Status/431": { + "modified": "2020-01-05T14:49:44.248Z", "contributors": [ - "EvertonTomalok" + "FernandoKGA" ] }, - "Web/CSS/Seletor_universal": { - "modified": "2020-10-15T22:18:51.680Z", + "Web/HTTP/Status/451": { + "modified": "2020-10-15T22:09:34.570Z", "contributors": [ - "synga" + "macalha" ] }, - "Web/CSS/Seletores_CSS": { - "modified": "2019-03-22T08:21:56.189Z", + "Web/HTTP/Status/500": { + "modified": "2020-10-15T22:06:42.031Z", "contributors": [ - "Arlon", - "Lukff", - "kelvyncosta" + "omauriciomaciel", + "francinysalles" ] }, - "Web/CSS/Shorthand_properties": { - "modified": "2019-03-23T22:15:16.832Z", + "Web/HTTP/Status/501": { + "modified": "2020-10-15T22:17:52.081Z", "contributors": [ - "rubenmarcus" + "lucianoac", + "raduq" ] }, - "Web/CSS/Sintexe_valor": { - "modified": "2019-03-23T22:09:28.440Z", + "Web/HTTP/Status/502": { + "modified": "2020-10-15T22:20:07.323Z", "contributors": [ - "Fernandolrs" + "moraesdam" ] }, - "Web/CSS/Specificity": { - "modified": "2019-12-19T17:59:37.262Z", + "Web/HTTP/Status/503": { + "modified": "2020-10-15T22:09:37.984Z", "contributors": [ - "AdamsEric", - "Carli", - "tfvictorino", - "teoli", - "fvargaspf@gmail.com" + "nunezgarcia548", + "macalha" ] }, - "Web/CSS/Tools": { - "modified": "2019-03-23T23:07:41.210Z", + "Web/HTTP/Status/504": { + "modified": "2020-10-15T21:58:42.777Z", "contributors": [ - "hlays", - "velvel53" + "Rogerio-Viana", + "caiobrentano" ] }, - "Web/CSS/Tools/Border-image_generator": { - "modified": "2019-05-06T10:31:39.391Z", + "Web/HTTP/Status/505": { + "modified": "2019-03-18T21:25:04.554Z", "contributors": [ - "leodeJESUS", - "Torto" + "macalha" ] }, - "Web/CSS/Tools/Border-radius_generator": { - "modified": "2019-03-23T23:07:37.174Z", + "Web/HTTP/Status/506": { + "modified": "2020-01-05T13:08:39.666Z", "contributors": [ - "Torto" + "FernandoKGA" ] }, - "Web/CSS/Type_selectors": { - "modified": "2020-10-15T22:32:30.449Z", + "Web/HTTP/Status/507": { + "modified": "2019-12-27T11:31:39.081Z", "contributors": [ - "cyz" + "FernandoKGA" ] }, - "Web/CSS/Using_CSS_custom_properties": { - "modified": "2020-10-15T21:28:55.244Z", + "Web/HTTP/Status/508": { + "modified": "2019-09-10T09:19:50.989Z", "contributors": [ - "SphinxKnight", - "MagicalStrangeQuark", - "chrisdavidmills", - "TecladistaProd", - "matheus.raduan", - "wellviana", - "eltonmesquita" + "lucianoac" ] }, - "Web/CSS/Valor_atual": { - "modified": "2019-03-23T22:09:29.249Z", + "Web/HTTP/Status/510": { + "modified": "2020-01-05T13:00:04.462Z", "contributors": [ - "Fernandolrs" + "FernandoKGA" ] }, - "Web/CSS/Valor_resolvido": { - "modified": "2019-03-23T22:09:21.295Z", + "Web/HTTP/Status/511": { + "modified": "2019-10-29T08:55:24.737Z", "contributors": [ - "Fernandolrs" + "niknicius" ] }, - "Web/CSS/Valor_usado": { - "modified": "2019-03-23T22:09:30.061Z", + "Web/JavaScript": { + "modified": "2020-10-08T23:48:25.254Z", "contributors": [ - "Fernandolrs" + "ricardo.passos.cr", + "SphinxKnight", + "julio-elipse", + "natth42", + "renoirsousa", + "andregarzia", + "marcelomelofreitas", + "KennyMack", + "haskellcamargo", + "Franck_Moreira", + "danielmelogpi", + "gcacars", + "ti.marcosdias", + "teoli", + "viniciusdacal", + "Lutchia", + "paulociecomp", + "mauricio.araldi", + "marinalimeira", + "ThiagoCase", + "helderdarocha", + "rodrigopadula", + "jswisher", + "netfuzzer33", + "jaydson", + "tauame" ] }, - "Web/CSS/align-content": { - "modified": "2020-10-15T22:32:42.150Z", + "Web/JavaScript/A_re-introduction_to_JavaScript": { + "modified": "2020-05-27T17:14:30.277Z", "contributors": [ - "Filipe" + "ruanpetterson", + "nailtonvieira", + "michaelycus", + "mateus.mlo", + "jhbalestrin", + "Sheppy", + "TiagoWinehouse", + "victorwpbastos", + "ruda", + "ti.marcosdias", + "fredericksilva", + "Scr1pt3r", + "trestini", + "ThiagoMatos", + "angelorubin", + "jlcarvalho", + "TheBorba", + "teoli", + "gtcarlos", + "arthur.luiz" ] }, - "Web/CSS/align-items": { - "modified": "2020-10-15T22:12:31.546Z", + "Web/JavaScript/About_JavaScript": { + "modified": "2020-03-12T19:38:41.483Z", "contributors": [ - "rbuzatto" + "fcard", + "teoli", + "kuni71" ] }, - "Web/CSS/align-self": { - "modified": "2020-10-15T22:12:37.957Z", + "Web/JavaScript/Data_structures": { + "modified": "2020-08-07T10:04:07.537Z", "contributors": [ - "rbuzatto" + "rafhaelfitzpatrick", + "GuilhermePiovesan", + "luizamunk", + "larafelix", + "gabrielbarros28", + "BrunoThomaz", + "renansouza", + "rafaelcavalcante", + "HelderSi", + "wendellpereira", + "dmop", + "wesleycoder", + "WederPachecoSilva", + "Domicio", + "teoli", + "jagascript" ] }, - "Web/CSS/animation": { - "modified": "2020-10-15T21:29:59.258Z", + "Web/JavaScript/Equality_comparisons_and_sameness": { + "modified": "2020-03-12T19:41:26.724Z", "contributors": [ - "Canturilsnaik", - "MarcosNakamine", - "mrstork", - "teoli", - "Sebastianz", - "mateusleon" + "babieste", + "VictorGom3s", + "phillipnunes", + "alinedmelo", + "alexandresn" ] }, - "Web/CSS/animation-delay": { - "modified": "2019-03-23T22:05:35.414Z", + "Web/JavaScript/EventLoop": { + "modified": "2020-03-12T19:41:03.578Z", "contributors": [ - "francisquete" + "GuilhermePiovesan", + "Rondinelly", + "oirodolfo", + "ruda", + "jaimeschettini", + "Felipe_Baravieira" ] }, - "Web/CSS/animation-fill-mode": { - "modified": "2020-10-19T07:57:27.073Z", + "Web/JavaScript/Guide": { + "modified": "2020-03-12T19:37:56.671Z", "contributors": [ "SphinxKnight", - "DSousa21", - "MarcosNakamine", - "daliannyvieira" + "Franck_Moreira", + "Danilson_Veloso", + "MarceloBRN", + "felipetesc", + "evertonmss", + "carlospereira9372", + "teoli", + "regisdiogo", + "ethertank" ] }, - "Web/CSS/attr()": { - "modified": "2020-11-04T08:51:55.092Z", - "contributors": [ - "chrisdavidmills", - "SphinxKnight", - "GPrimola", - "igorParanhos" - ] - }, - "Web/CSS/backdrop-filter": { - "modified": "2020-10-15T22:24:05.999Z", + "Web/JavaScript/Guide/Expressions_and_Operators": { + "modified": "2020-11-13T16:04:53.998Z", "contributors": [ - "liddack" + "bragaus", + "webfelipemaia", + "dowgssss", + "Franck_Moreira", + "gustavo8555", + "odisseumau", + "MarceloBRN", + "pkelbert", + "teoli", + "atilafassina" ] }, - "Web/CSS/backface-visibility": { - "modified": "2019-03-23T22:43:08.854Z", + "Web/JavaScript/Guide/Indexed_collections": { + "modified": "2020-12-11T14:17:55.678Z", "contributors": [ - "maugravena", - "teoli", - "alexanmtz" + "bragaus", + "felima2017", + "hctsantos", + "jppcel", + "thiagosaife", + "doomsterinc", + "felipetesc" ] }, - "Web/CSS/background": { - "modified": "2020-10-15T21:46:31.679Z", + "Web/JavaScript/Guide/Introduction": { + "modified": "2020-03-12T19:41:02.913Z", "contributors": [ - "felipeolliveira", - "brunoaugustosilva", - "fscholz", - "macalha", - "luanmuniz", - "joaogsantos" + "LucasGabrielSI", + "luc4smoreira", + "ledebour", + "mahenrique", + "Franck_Moreira", + "Danilson_Veloso", + "frcnetto", + "joaomarcoslopes", + "carolinne", + "gomez", + "melostbr", + "PedroTorresMaschio" ] }, - "Web/CSS/background-attachment": { - "modified": "2019-03-23T22:27:58.885Z", + "Web/JavaScript/Guide/Keyed_collections": { + "modified": "2020-03-12T19:44:28.942Z", "contributors": [ - "alexfqc" + "jaimemaretoli", + "raphaellima8" ] }, - "Web/CSS/background-blend-mode": { - "modified": "2019-03-23T22:09:16.123Z", + "Web/JavaScript/Guide/Meta_programming": { + "modified": "2020-07-06T21:45:33.616Z", "contributors": [ - "tadeubarbosa" + "brasmon8351", + "lcelso", + "Darksoulsong", + "WagnerSilveira", + "evertonmss" ] }, - "Web/CSS/background-clip": { - "modified": "2020-01-24T03:37:24.518Z", + "Web/JavaScript/Guide/Regular_Expressions": { + "modified": "2020-11-20T11:07:29.286Z", "contributors": [ - "marlonveiga-santos", - "CarlosHMoreira", - "fscholz", - "Sebastianz", - "filipewl" + "bragaus", + "leonardogs0919", + "PedroIgnacio", + "luisfvieira", + "rodrigocode4", + "Twodio", + "niltonslf", + "labforcode", + "gutuler", + "GabrielAlvez", + "Tiagosb", + "JardelUiliam", + "Feijor", + "fininhors", + "Franck_Moreira", + "pauloaug", + "programadorthi", + "odisseumau", + "edupsousa", + "teoli", + "marciotoledo", + "ethertank", + "danielpsrj" ] }, - "Web/CSS/background-color": { - "modified": "2020-10-15T22:34:37.855Z", + "Web/JavaScript/JavaScript_technologies_overview": { + "modified": "2019-05-10T14:34:34.570Z", "contributors": [ - "keitoliveira" + "SaggitariusA", + "jessicamorim42", + "angelorubin", + "caioabe", + "marcio-ti", + "IanRamosC", + "teoli", + "cleitongalvao", + "treax" ] }, - "Web/CSS/background-origin": { - "modified": "2020-10-15T22:04:40.110Z", + "Web/JavaScript/Language_Resources": { + "modified": "2020-03-12T19:43:20.868Z", "contributors": [ - "brunoaugustosilva" + "christophergomes", + "Danilson_Veloso" ] }, - "Web/CSS/background-position": { - "modified": "2020-10-15T22:04:40.552Z", + "Web/JavaScript/Memory_Management": { + "modified": "2020-03-12T19:40:29.251Z", "contributors": [ - "gustavaum", - "brunoaugustosilva" + "silvaw", + "LincePotiguara", + "gcacars", + "AlanCezarAraujo" ] }, - "Web/CSS/background-size": { - "modified": "2020-10-15T21:56:47.129Z", + "Web/JavaScript/Reference": { + "modified": "2019-03-23T23:33:55.653Z", "contributors": [ - "pedrothome1" + "Gutemberg", + "teoli", + "ggviana", + "ethertank" ] }, - "Web/CSS/blend-mode": { - "modified": "2020-10-15T22:20:02.938Z", + "Web/JavaScript/Reference/About": { + "modified": "2020-03-12T19:38:32.625Z", "contributors": [ - "aledebarba" + "alissonbovenzo", + "teoli", + "ggviana" ] }, - "Web/CSS/block-size": { - "modified": "2020-10-15T22:14:03.242Z", + "Web/JavaScript/Reference/Classes": { + "modified": "2020-10-15T21:39:06.651Z", "contributors": [ - "ViniciusMatias" + "henriquegeremia", + "Danilo", + "28Rasc", + "crisleitaoguerra", + "lesimoes", + "stephanogiuseppe", + "fscholz", + "TiagoDanin", + "rodrigocode4", + "JhonnathaAndrade", + "SphinxKnight", + "brunozache", + "danilosetubal", + "thiagolimaa", + "lucasclazer", + "lmcarreiro", + "flavio-jr", + "shuminyang", + "juloko", + "lourencoccc", + "Arashk", + "deadkff01", + "davidcorbetta", + "ldoamaral", + "ti.marcosdias", + "ThiagoSchetini", + "felipetesc", + "haskellcamargo", + "jonicas" ] }, - "Web/CSS/border-left": { - "modified": "2019-03-23T22:39:02.522Z", + "Web/JavaScript/Reference/Classes/constructor": { + "modified": "2020-10-21T08:28:05.769Z", "contributors": [ - "juliocarneiro" + "DaMaGi", + "deadkff01", + "ThiagoSchetini" ] }, - "Web/CSS/border-left-color": { - "modified": "2020-10-15T22:29:25.259Z", + "Web/JavaScript/Reference/Classes/extends": { + "modified": "2020-10-15T21:39:13.563Z", "contributors": [ - "victorferreira.s0307" + "fscholz", + "SphinxKnight", + "raduq" ] }, - "Web/CSS/border-radius": { - "modified": "2019-03-23T22:27:40.423Z", + "Web/JavaScript/Reference/Classes/static": { + "modified": "2020-10-15T21:39:09.808Z", "contributors": [ - "Jerffersonferreira" + "joaopedroaats", + "helton-mori-dev", + "fscholz", + "SphinxKnight", + "leticiacostadias", + "diegofernandez", + "kdex", + "raduq" ] }, - "Web/CSS/box-shadow": { - "modified": "2020-07-02T14:18:07.328Z", + "Web/JavaScript/Reference/Deprecated_and_obsolete_features": { + "modified": "2020-03-12T19:44:38.541Z", "contributors": [ - "Alynva", - "juliosampaio", - "alexNeto" + "Gabrieleiro", + "houstondapaz", + "gabrielppeixoto", + "raduq" ] }, - "Web/CSS/box-sizing": { - "modified": "2020-10-15T21:31:51.696Z", + "Web/JavaScript/Reference/Errors": { + "modified": "2020-03-12T19:44:14.768Z", "contributors": [ - "lucasinoue", - "SphinxKnight", - "LeonardoBrizolla", - "hdvianna", - "ThaleSelaht", - "SJW", - "esaramago", - "geovannikun", - "ekbaumgarten", - "morvanabonin" + "gutoribeiro", + "fscholz" ] }, - "Web/CSS/box_model": { - "modified": "2019-03-23T22:50:51.930Z", + "Web/JavaScript/Reference/Errors/Cant_access_lexical_declaration_before_init": { + "modified": "2020-03-12T19:49:26.166Z", "contributors": [ - "ekbaumgarten" + "ViniciusMatias" ] }, - "Web/CSS/break-after": { - "modified": "2020-10-15T22:23:12.517Z", + "Web/JavaScript/Reference/Errors/Cant_access_property": { + "modified": "2020-03-12T19:48:10.197Z", "contributors": [ - "renatobalbino" + "igormmatos" ] }, - "Web/CSS/calc()": { - "modified": "2020-11-04T09:08:50.767Z", + "Web/JavaScript/Reference/Errors/For-each-in_loops_are_deprecated": { + "modified": "2020-03-12T19:46:42.577Z", "contributors": [ - "chrisdavidmills", - "Anonymous", - "CahMoraes", - "alexalannunes", - "oxesoft", - "rubensdemelo" + "thiagosaife" ] }, - "Web/CSS/clear": { - "modified": "2020-10-15T22:11:39.449Z", + "Web/JavaScript/Reference/Errors/Illegal_character": { + "modified": "2020-03-12T19:47:11.284Z", "contributors": [ - "leovene" + "tomascco", + "Docinho" ] }, - "Web/CSS/color": { - "modified": "2020-10-15T22:11:21.255Z", + "Web/JavaScript/Reference/Errors/Invalid_array_length": { + "modified": "2020-03-12T19:48:00.493Z", "contributors": [ - "UnrealLion" + "thiagosaife" ] }, - "Web/CSS/color_value": { - "modified": "2019-03-23T22:15:53.386Z", + "Web/JavaScript/Reference/Errors/Invalid_assignment_left-hand_side": { + "modified": "2020-03-12T19:47:13.957Z", "contributors": [ - "Dianakc" + "Maycoooonm" ] }, - "Web/CSS/contain": { - "modified": "2019-03-18T21:38:58.826Z", + "Web/JavaScript/Reference/Errors/Invalid_const_assignment": { + "modified": "2020-03-12T19:49:08.927Z", "contributors": [ - "leandroruel" + "Lennoard" ] }, - "Web/CSS/content": { - "modified": "2019-03-23T22:32:40.444Z", + "Web/JavaScript/Reference/Errors/Invalid_date": { + "modified": "2020-03-12T19:47:58.766Z", "contributors": [ - "fernando", - "SphinxKnight" + "thiagosaife" ] }, - "Web/CSS/cursor": { - "modified": "2020-11-26T03:13:44.205Z", + "Web/JavaScript/Reference/Errors/JSON_bad_parse": { + "modified": "2020-03-12T19:48:06.055Z", "contributors": [ - "SphinxKnight", - "uendelzilda123", - "filipetorres", - "Jerffersonferreira" + "JonatasFAlves" ] }, - "Web/CSS/display": { - "modified": "2019-10-10T16:54:40.995Z", + "Web/JavaScript/Reference/Errors/Missing_colon_after_property_id": { + "modified": "2020-03-12T19:46:39.740Z", "contributors": [ - "JosOe", - "brasmon8351", - "thiagoreis", - "wbamberg", - "chiarmar", - "rramosBR", - "gabrielsixel", - "jorgeclesio", - "Sebastianz", - "KikenCris", - "teoli", - "fnsc.luis" + "CristianoLima" ] }, - "Web/CSS/display-box": { - "modified": "2020-10-15T22:22:38.389Z", + "Web/JavaScript/Reference/Errors/Missing_curly_after_function_body": { + "modified": "2020-06-11T07:31:16.349Z", "contributors": [ - "brasmon8351" + "EnzoLeCarvalho" ] }, - "Web/CSS/display-inside": { - "modified": "2020-10-15T22:22:39.103Z", + "Web/JavaScript/Reference/Errors/Missing_formal_parameter": { + "modified": "2020-03-12T19:46:52.360Z", "contributors": [ - "brasmon8351" + "danielmalves" ] }, - "Web/CSS/display-internal": { - "modified": "2020-10-15T22:22:38.638Z", + "Web/JavaScript/Reference/Errors/Missing_semicolon_before_statement": { + "modified": "2020-04-24T18:53:47.335Z", "contributors": [ - "brasmon8351" + "JoaoSantos65", + "bruncs", + "rubenfaria" ] }, - "Web/CSS/display-legacy": { - "modified": "2020-10-15T22:22:39.608Z", + "Web/JavaScript/Reference/Errors/Negative_repetition_count": { + "modified": "2020-03-12T19:49:26.923Z", "contributors": [ - "brasmon8351" + "ViniciusMatias" ] }, - "Web/CSS/display-listitem": { - "modified": "2020-10-15T22:22:38.303Z", + "Web/JavaScript/Reference/Errors/No_variable_name": { + "modified": "2020-03-12T19:47:33.508Z", "contributors": [ - "brasmon8351" + "danemmanuel" ] }, - "Web/CSS/display-outside": { - "modified": "2020-10-15T22:22:38.175Z", + "Web/JavaScript/Reference/Errors/Not_a_codepoint": { + "modified": "2020-03-12T19:49:24.646Z", "contributors": [ - "brasmon8351" + "ViniciusMatias" ] }, - "Web/CSS/element()": { - "modified": "2020-11-10T11:06:23.872Z", + "Web/JavaScript/Reference/Errors/Not_a_function": { + "modified": "2020-03-12T19:46:51.395Z", "contributors": [ - "chrisdavidmills", - "JonatasAmaral" + "vanessa-ariel", + "VictorGom3s", + "mvieira-kpmg", + "lucianoac", + "rubenfaria" ] }, - "Web/CSS/env()": { - "modified": "2020-11-10T11:11:50.127Z", + "Web/JavaScript/Reference/Errors/Precision_range": { + "modified": "2020-04-17T23:39:16.233Z", "contributors": [ - "chrisdavidmills", - "Rondinelly" + "ViniciusMatias" ] }, - "Web/CSS/filter-function": { - "modified": "2019-03-18T21:46:25.511Z", + "Web/JavaScript/Reference/Errors/Property_access_denied": { + "modified": "2020-03-12T19:48:57.838Z", "contributors": [ - "mfluehr" + "luan0ap" ] }, - "Web/CSS/filter-function/grayscale()": { - "modified": "2020-11-10T11:19:23.773Z", + "Web/JavaScript/Reference/Errors/Read-only": { + "modified": "2020-03-12T19:47:21.681Z", "contributors": [ - "chrisdavidmills", - "BrunaGil" + "VitorHFLopes" ] }, - "Web/CSS/filter-function/opacity()": { - "modified": "2020-11-16T09:08:08.691Z", + "Web/JavaScript/Reference/Errors/Redeclared_parameter": { + "modified": "2020-03-12T19:49:14.206Z", "contributors": [ - "chrisdavidmills", - "larimaza" + "leobarros" ] }, - "Web/CSS/filter-function/sepia()": { - "modified": "2020-11-30T10:24:47.934Z", + "Web/JavaScript/Reference/Errors/Stmt_after_return": { + "modified": "2020-03-12T19:44:07.787Z", "contributors": [ - "chrisdavidmills", - "larimaza" + "gidaltilopes", + "raduq" ] }, - "Web/CSS/flex": { - "modified": "2020-11-09T02:37:31.343Z", + "Web/JavaScript/Reference/Errors/Too_much_recursion": { + "modified": "2020-03-12T19:49:13.727Z", "contributors": [ - "luciano.ar6", - "helton-mori-dev", - "carlosvasconcelosjr" + "umpierrefp" ] }, - "Web/CSS/flex-direction": { - "modified": "2020-10-15T22:22:57.753Z", + "Web/JavaScript/Reference/Errors/Undeclared_var": { + "modified": "2020-03-12T19:44:41.988Z", "contributors": [ - "SphinxKnight", - "Gleisson_Neves", - "MarsA_", - "mhayk" + "tmoraes" ] }, - "Web/CSS/flex-flow": { - "modified": "2020-10-15T21:47:43.877Z", + "Web/JavaScript/Reference/Errors/Undefined_prop": { + "modified": "2020-03-12T19:49:23.239Z", "contributors": [ - "liddack", - "LeandroPS" + "ViniciusMatias" ] }, - "Web/CSS/flex-wrap": { - "modified": "2020-11-29T18:54:20.472Z", + "Web/JavaScript/Reference/Errors/Unexpected_token": { + "modified": "2020-03-12T19:46:47.848Z", "contributors": [ - "Marcosnto", - "Gleisson_Neves" + "naozuka", + "marcelobonatto", + "rubenfaria" ] }, - "Web/CSS/float": { - "modified": "2019-03-23T22:20:46.403Z", + "Web/JavaScript/Reference/Errors/Unexpected_type": { + "modified": "2020-03-12T19:46:50.924Z", "contributors": [ - "biracruz" + "DeividhyTonetti", + "LucasSouza6", + "mauricionsantos", + "rubenfaria" ] }, - "Web/CSS/font-family": { - "modified": "2019-10-03T18:27:37.350Z", + "Web/JavaScript/Reference/Errors/Unterminated_string_literal": { + "modified": "2020-03-12T19:45:00.554Z", "contributors": [ - "kmoreiradesigner", - "Ronkiro", - "fscholz", - "Sebastianz", - "bubui" + "pratosnaweb" ] }, - "Web/CSS/font-feature-settings": { - "modified": "2020-12-07T08:17:07.091Z", + "Web/JavaScript/Reference/Functions": { + "modified": "2020-10-20T11:16:27.457Z", "contributors": [ - "Strapazzon", - "yagosrocha" + "dorfs", + "Trauvin", + "Gabriela-23", + "Glaydson", + "renoirsousa", + "rafaelbertelli", + "Jerffersonferreira", + "thiagobitencourt", + "grocholski", + "boniattirodrigo", + "Durtto", + "fscholz" ] }, - "Web/CSS/font-kerning": { - "modified": "2019-03-23T22:09:10.848Z", + "Web/JavaScript/Reference/Functions/Arrow_functions": { + "modified": "2020-10-15T21:30:14.177Z", "contributors": [ - "rener_bz" + "thgo", + "diogenesfranca", + "hansobvius", + "eduardosoller", + "leandrowf", + "mari1248", + "SphinxKnight", + "lesimoes", + "alexnum", + "rivajunior", + "RodrigoOler", + "lucasmedeiros" ] }, - "Web/CSS/font-size": { - "modified": "2020-10-15T22:19:23.993Z", + "Web/JavaScript/Reference/Functions/arguments": { + "modified": "2020-03-12T19:42:08.040Z", "contributors": [ - "MatheusBorges", - "jorgeclesio" + "Arlon", + "Lovelex", + "peaonunes", + "lffg", + "renatodantas", + "greevin", + "YurePereira", + "icaromh" ] }, - "Web/CSS/font-variation-settings": { - "modified": "2020-10-15T22:24:06.969Z", - "contributors": [ - "GuilhermePiovesan" - ] - }, - "Web/CSS/font-weight": { - "modified": "2019-03-23T22:49:03.645Z", + "Web/JavaScript/Reference/Functions/get": { + "modified": "2020-08-27T04:51:38.379Z", "contributors": [ - "SphinxKnight", - "fscholz", - "Sebastianz", - "ppedruzzi" + "SandroMiguel", + "rodrigocode4", + "hbarcelos" ] }, - "Web/CSS/grid": { - "modified": "2020-10-15T22:11:03.246Z", + "Web/JavaScript/Reference/Functions/rest_parameters": { + "modified": "2020-03-12T19:42:42.252Z", "contributors": [ - "eniocsj" + "gudeck", + "SphinxKnight", + "matheussilvasantos", + "KennyMack", + "raduq" ] }, - "Web/CSS/grid-auto-flow": { - "modified": "2020-10-15T22:01:03.947Z", + "Web/JavaScript/Reference/Functions/set": { + "modified": "2020-03-12T19:44:37.360Z", "contributors": [ - "thiagommoreira" + "chicabomb", + "filipetorres", + "willianbriotto" ] }, - "Web/CSS/grid-template-columns": { - "modified": "2020-10-15T21:55:28.296Z", + "Web/JavaScript/Reference/Global_Objects": { + "modified": "2020-03-12T19:38:37.086Z", "contributors": [ - "asm95", - "fscholz", - "kazaku16" + "misabraga", + "thiagoh", + "SphinxKnight", + "teoli", + "vagnerleitte", + "Norbert" ] }, - "Web/CSS/grid-template-rows": { - "modified": "2020-10-15T22:05:37.787Z", + "Web/JavaScript/Reference/Global_Objects/Array": { + "modified": "2019-05-03T12:21:47.299Z", "contributors": [ - "marcosdourado" + "thelimarenan", + "caiocaly", + "ManoelLobo", + "rafaelbezerra195", + "gutoribeiro", + "kdex", + "biracruz", + "marcoaure", + "dsbezerra", + "deyvid0123", + "deyvidyury", + "raduq", + "RodolfoSilva", + "FrancisWagner", + "euconectei", + "teoli", + "xhximenes", + "Sheppy" ] }, - "Web/CSS/height": { - "modified": "2019-03-23T23:09:19.423Z", + "Web/JavaScript/Reference/Global_Objects/Array/@@iterator": { + "modified": "2019-03-23T22:35:56.703Z", "contributors": [ - "mrcehlo", - "mrstork", - "SphinxKnight", - "Sebastianz", - "marcosyoshihiro" + "jjmars" ] }, - "Web/CSS/hifens": { - "modified": "2019-03-23T22:08:31.285Z", + "Web/JavaScript/Reference/Global_Objects/Array/@@unscopables": { + "modified": "2020-10-15T22:03:58.150Z", "contributors": [ - "gilsonnunes" + "Filipe-Souza", + "marciioluucas" ] }, - "Web/CSS/image-set()": { - "modified": "2020-11-16T08:53:55.560Z", + "Web/JavaScript/Reference/Global_Objects/Array/Reduce": { + "modified": "2020-11-06T11:41:26.392Z", "contributors": [ - "chrisdavidmills", - "leandroruel" + "ricardo.passos.cr", + "duduindo", + "krisamorim", + "mablook", + "balini", + "WandersonDavid", + "rubenmarcus", + "mateusvelleda", + "smoothfall", + "rbuzatto", + "geekcom", + "SphinxKnight", + "guardezi", + "ChrisAmora", + "danilosetubal", + "elvismdnin", + "eltonmesquita", + "gabrielsimas", + "rafaelcavalcante", + "ThaleSelaht", + "alexgwolff", + "FrancisWagner", + "ErickWendel" ] }, - "Web/CSS/imagem": { - "modified": "2020-10-15T22:03:54.448Z", + "Web/JavaScript/Reference/Global_Objects/Array/ReduceRight": { + "modified": "2020-10-15T21:39:00.467Z", "contributors": [ - "brunoeduardo" + "mateusvelleda", + "luisfvieira", + "raduq" ] }, - "Web/CSS/inheritance": { - "modified": "2019-03-23T22:30:06.400Z", + "Web/JavaScript/Reference/Global_Objects/Array/concat": { + "modified": "2019-06-03T12:42:22.079Z", "contributors": [ - "fcard" + "diegoarcega", + "soleeweb", + "teoli", + "Leikovsk" ] }, - "Web/CSS/initial": { - "modified": "2020-10-15T22:26:34.680Z", + "Web/JavaScript/Reference/Global_Objects/Array/copyWithin": { + "modified": "2019-03-23T22:35:55.533Z", "contributors": [ - "marlonveiga-santos" + "igorc2", + "jjmars" ] }, - "Web/CSS/inline-size": { - "modified": "2020-10-15T22:06:25.990Z", + "Web/JavaScript/Reference/Global_Objects/Array/entries": { + "modified": "2019-03-23T22:35:59.312Z", "contributors": [ - "zKhiro" + "igorc2", + "fime", + "jjmars" ] }, - "Web/CSS/isolation": { - "modified": "2019-06-05T21:56:02.812Z", + "Web/JavaScript/Reference/Global_Objects/Array/every": { + "modified": "2020-10-15T21:41:16.789Z", "contributors": [ - "ni-reis", - "rener_bz" + "mateusvelleda", + "pedroprcgm", + "kidjapa", + "zenithpolar", + "mtxr", + "rennerocha", + "monteiroflavio", + "MichelMentzFernandes", + "alisonmonteiro", + "diegoarcega" ] }, - "Web/CSS/letter-spacing": { - "modified": "2020-10-15T22:02:19.098Z", + "Web/JavaScript/Reference/Global_Objects/Array/fill": { + "modified": "2020-10-15T21:39:00.968Z", "contributors": [ - "V1n1c1us" + "mateusvelleda", + "MarcoBrunoBR", + "murillodmiranda", + "SphinxKnight", + "erickvieira", + "ronniery", + "raduq" ] }, - "Web/CSS/line-break": { - "modified": "2020-10-15T21:48:42.616Z", + "Web/JavaScript/Reference/Global_Objects/Array/find": { + "modified": "2020-10-24T15:40:42.111Z", "contributors": [ + "Gustavonobreza", + "mateusvelleda", + "marcoscoelho", + "awquadros", + "jkdrangel", "SphinxKnight", - "Kappyh", - "helitonmartins", - "phenriqueleao", - "alexandresn" + "leonardosv", + "cezaraugusto", + "Selminha", + "raduq" ] }, - "Web/CSS/margin": { - "modified": "2020-10-15T22:00:45.937Z", + "Web/JavaScript/Reference/Global_Objects/Array/findIndex": { + "modified": "2020-10-15T21:44:45.523Z", "contributors": [ - "felima2017" + "mateusvelleda", + "brunotalhate", + "jjmars" ] }, - "Web/CSS/margin-bottom": { - "modified": "2020-10-15T22:18:51.440Z", + "Web/JavaScript/Reference/Global_Objects/Array/flat": { + "modified": "2020-10-15T22:05:38.464Z", "contributors": [ - "Clecio013" + "DiegoGeoDev", + "malarahfelipe", + "mateusvelleda", + "gabriellamas", + "CalvinNunes" ] }, - "Web/CSS/margin-top": { - "modified": "2019-03-23T22:48:06.569Z", + "Web/JavaScript/Reference/Global_Objects/Array/flatMap": { + "modified": "2020-10-15T22:04:41.673Z", "contributors": [ - "Sebastianz", - "dlepera" + "caricati", + "malarahfelipe", + "MatheusFrez", + "rbuzatto", + "leonardomarciano", + "proxy-chan" ] }, - "Web/CSS/max-width": { - "modified": "2020-10-30T00:27:30.942Z", + "Web/JavaScript/Reference/Global_Objects/Array/forEach": { + "modified": "2020-10-15T21:24:03.153Z", "contributors": [ - "mipan-zuzuzu-zuzuzum", - "gustavofrezzz", - "zKhiro" + "mateusvelleda", + "Gutem", + "fred-azevedo", + "rodorgas", + "alexandresn", + "deyvidyury", + "rafaelescrich", + "teoli", + "nah_luquiari" ] }, - "Web/CSS/min-height": { - "modified": "2019-03-23T23:03:57.511Z", + "Web/JavaScript/Reference/Global_Objects/Array/from": { + "modified": "2020-10-15T21:38:56.337Z", "contributors": [ - "JulianoPadilha", - "Sebastianz", - "LeonardoMax" + "salomes", + "mateusvelleda", + "SphinxKnight", + "rafaelcavalcante", + "welintonti", + "victor-borges" ] }, - "Web/CSS/mix-blend-mode": { - "modified": "2019-03-23T22:47:35.984Z", + "Web/JavaScript/Reference/Global_Objects/Array/indexOf": { + "modified": "2020-10-15T21:37:56.001Z", "contributors": [ - "mrstork", - "Sebastianz", - "afonsoalban" - ] + "victorwestmann", + "mateusvelleda", + "SDamasceno-Dev", + "tavieto", + "rafaelkendrik", + "LeoRiether", + "brunoluigi", + "ErickWendel", + "lucas.comino" + ] }, - "Web/CSS/number": { - "modified": "2020-10-15T22:25:43.785Z", + "Web/JavaScript/Reference/Global_Objects/Array/isArray": { + "modified": "2019-08-21T18:08:19.665Z", "contributors": [ - "euvanribeiro" + "WBerredo", + "lotharthesavior", + "ZavarezeH" ] }, - "Web/CSS/object-fit": { - "modified": "2019-09-09T10:42:42.040Z", + "Web/JavaScript/Reference/Global_Objects/Array/join": { + "modified": "2020-10-26T23:42:47.826Z", "contributors": [ - "mhayk", - "Sebastianz", - "brunolimawd" + "Gustavonobreza", + "Grohden", + "ZavarezeH" ] }, - "Web/CSS/offset": { - "modified": "2019-03-23T22:09:22.407Z", + "Web/JavaScript/Reference/Global_Objects/Array/keys": { + "modified": "2019-03-23T22:54:07.464Z", "contributors": [ - "alisson-suzigan", - "Schieck" + "SphinxKnight", + "flaviomicheletti", + "lotharthesavior" ] }, - "Web/CSS/opacity": { - "modified": "2019-09-03T00:02:11.829Z", + "Web/JavaScript/Reference/Global_Objects/Array/lastIndexOf": { + "modified": "2019-05-09T12:20:08.266Z", "contributors": [ - "hierror" + "fmaiabatista", + "rodamaral", + "brunoluigi", + "raduq" ] }, - "Web/CSS/outline": { - "modified": "2019-03-23T22:29:17.217Z", + "Web/JavaScript/Reference/Global_Objects/Array/length": { + "modified": "2019-04-07T08:45:26.003Z", "contributors": [ - "MaurilioNovais" + "PointCodeZero", + "hpribeiro", + "jouderianjr", + "lnmunhoz", + "icaromh" ] }, - "Web/CSS/overflow": { - "modified": "2019-03-23T23:35:08.837Z", + "Web/JavaScript/Reference/Global_Objects/Array/map": { + "modified": "2020-10-15T21:32:56.196Z", "contributors": [ - "haskellcamargo", - "teoli", - "KikenCris", - "Sheppy", - "diogotito", - "Francis" + "mateusvelleda", + "lotharthesavior", + "trestini" ] }, - "Web/CSS/padding": { - "modified": "2019-03-23T22:10:23.184Z", + "Web/JavaScript/Reference/Global_Objects/Array/of": { + "modified": "2020-10-15T21:38:59.029Z", "contributors": [ - "aantonello" + "CarlaTeo", + "SphinxKnight", + "theuves", + "raduq" ] }, - "Web/CSS/padding-left": { - "modified": "2019-03-23T23:05:03.904Z", + "Web/JavaScript/Reference/Global_Objects/Array/pop": { + "modified": "2020-10-15T21:32:41.724Z", "contributors": [ - "Sebastianz", - "Prinz_Rana", - "fscholz", - "SKO" + "mateusvelleda", + "gbezerras", + "marinalimeira" ] }, - "Web/CSS/page-break-before": { - "modified": "2020-10-15T22:23:32.559Z", + "Web/JavaScript/Reference/Global_Objects/Array/push": { + "modified": "2019-03-23T23:07:45.788Z", "contributors": [ - "EdsonLI" + "lucascaprio", + "lucasvarela", + "marinalimeira", + "JeanRigotti", + "solfier" ] }, - "Web/CSS/pointer-events": { - "modified": "2019-10-10T16:54:43.656Z", + "Web/JavaScript/Reference/Global_Objects/Array/reverse": { + "modified": "2019-03-23T22:54:17.462Z", "contributors": [ - "Sebastianz", - "brunoeduardo" + "leonardocodognoto" ] }, - "Web/CSS/position": { - "modified": "2020-11-12T16:32:21.055Z", + "Web/JavaScript/Reference/Global_Objects/Array/shift": { + "modified": "2020-10-15T21:31:30.081Z", "contributors": [ - "joao-alberto", - "talles.makoto" + "mateusvelleda", + "bfagundes", + "LuizinGustavo", + "csrene", + "AlexSander", + "bernardobrezende", + "JeanRigotti" ] }, - "Web/CSS/radial-gradient()": { - "modified": "2020-11-18T14:42:38.700Z", + "Web/JavaScript/Reference/Global_Objects/Array/slice": { + "modified": "2020-10-15T21:38:58.669Z", "contributors": [ - "chrisdavidmills", - "Sebastianz", - "mrstork", - "srsaude" + "g-nogara", + "GutuGaluppo", + "multi4me", + "Ermesoml", + "proxy-chan", + "odahcam", + "nelson777", + "vandercijr" ] }, - "Web/CSS/repeating-linear-gradient()": { - "modified": "2020-11-18T14:46:15.881Z", + "Web/JavaScript/Reference/Global_Objects/Array/some": { + "modified": "2020-10-15T21:39:11.018Z", "contributors": [ - "chrisdavidmills", - "Sebastianz", - "prayash", - "teoli", - "Erick_Ribeiro" + "axcosta", + "wrafanunes", + "mateusvelleda", + "hrcaio", + "diegoarcega", + "raduq" ] }, - "Web/CSS/ruby-align": { - "modified": "2019-03-23T22:39:36.583Z", + "Web/JavaScript/Reference/Global_Objects/Array/sort": { + "modified": "2020-12-03T19:46:39.220Z", "contributors": [ - "ygormaximo" + "rogeriojesussilva", + "h3nr1ke", + "Pedrock", + "mateusvelleda", + "RoryKinape", + "maleskena", + "maxHSG", + "WBerredo", + "mauricio-fidalgo", + "felipecaputo" ] }, - "Web/CSS/scroll-behavior": { - "modified": "2019-03-23T22:05:52.763Z", + "Web/JavaScript/Reference/Global_Objects/Array/splice": { + "modified": "2019-03-23T23:21:08.881Z", "contributors": [ - "otaviogui", - "ogawaryu" + "marciioluucas", + "gabsprates", + "santospatrick", + "Auugustocesar", + "BrOrlandi", + "alexbispo", + "leaofelipe", + "wbruno", + "teoli", + "cirocosta" ] }, - "Web/CSS/scrollbar-color": { - "modified": "2020-10-15T22:15:14.505Z", + "Web/JavaScript/Reference/Global_Objects/Array/toLocaleString": { + "modified": "2019-03-23T22:50:39.765Z", "contributors": [ - "helton-mori-dev" + "valdeirpsr", + "erickvieira", + "ErickWendel" ] }, - "Web/CSS/sintaxe": { - "modified": "2019-03-18T20:58:06.000Z", + "Web/JavaScript/Reference/Global_Objects/Array/toSource": { + "modified": "2020-06-02T16:37:19.766Z", "contributors": [ - "EdilsonSilva", - "zKhiro", - "diancabral", + "mablook", "teoli", - "fvargaspf@gmail.com" + "raduq" ] }, - "Web/CSS/text-align": { - "modified": "2020-09-13T12:38:14.000Z", + "Web/JavaScript/Reference/Global_Objects/Array/toString": { + "modified": "2019-03-23T22:48:37.450Z", "contributors": [ - "hicksf", - "CinatitBR", - "FernandaBernardo", - "ronysilvati" + "MichelMentzFernandes", + "geovanerocha" ] }, - "Web/CSS/text-decoration": { - "modified": "2019-03-23T22:35:55.748Z", + "Web/JavaScript/Reference/Global_Objects/Array/unshift": { + "modified": "2020-10-15T21:30:05.373Z", "contributors": [ - "gabiduarte" + "mateusvelleda", + "JsBatista", + "jurandirvalerio", + "mateusleon" ] }, - "Web/CSS/text-decoration-style": { - "modified": "2019-03-23T22:34:47.555Z", + "Web/JavaScript/Reference/Global_Objects/Array/values": { + "modified": "2019-03-23T22:47:27.892Z", "contributors": [ - "miller.augusto" + "SphinxKnight", + "raduq" ] }, - "Web/CSS/text-overflow": { - "modified": "2019-03-23T23:32:14.078Z", + "Web/JavaScript/Reference/Global_Objects/ArrayBuffer": { + "modified": "2020-10-15T21:29:12.919Z", "contributors": [ - "Krenair", - "Sebastianz", - "miller.augusto", + "Rondinelly", + "Jeremie", "teoli", - "recoverjp@gmail.com" + "mklauck" ] }, - "Web/CSS/text-rendering": { - "modified": "2019-03-23T23:36:15.210Z", + "Web/JavaScript/Reference/Global_Objects/AsyncFunction": { + "modified": "2019-03-23T22:08:08.077Z", "contributors": [ - "mateusmeyer", - "fscholz", - "teoli", - "marioluan", - "lmiranda" + "GutuGaluppo", + "alefesouza" ] }, - "Web/CSS/text-shadow": { - "modified": "2019-03-23T22:50:26.761Z", + "Web/JavaScript/Reference/Global_Objects/Atomics": { + "modified": "2019-03-23T22:34:49.263Z", "contributors": [ - "vspereira", - "luis.kaufmann.silva", - "Sebastianz", - "philippesilva" + "KennyMack" ] }, - "Web/CSS/text-transform": { - "modified": "2020-10-15T22:00:36.908Z", + "Web/JavaScript/Reference/Global_Objects/Atomics/add": { + "modified": "2019-03-23T22:09:03.574Z", "contributors": [ - "FernandaBernardo" + "AlanCezarAraujo" ] }, - "Web/CSS/time": { - "modified": "2020-10-15T22:25:42.997Z", + "Web/JavaScript/Reference/Global_Objects/BigInt": { + "modified": "2019-05-28T15:22:19.642Z", "contributors": [ - "euvanribeiro" + "AlanCezarAraujo", + "theuves" ] }, - "Web/CSS/touch-action": { - "modified": "2020-10-15T21:58:13.110Z", + "Web/JavaScript/Reference/Global_Objects/Boolean": { + "modified": "2019-03-23T22:51:14.765Z", "contributors": [ - "leandrofsp" + "raduq", + "wbamberg", + "Hikashii", + "pdanker", + "icaromh" ] }, - "Web/CSS/transform": { - "modified": "2019-03-23T23:38:43.751Z", + "Web/JavaScript/Reference/Global_Objects/Boolean/toSource": { + "modified": "2019-03-23T22:47:21.468Z", "contributors": [ - "Sebastianz", - "fscholz", "teoli", - "rafael.modos" + "raduq" ] }, - "Web/CSS/transform-function": { - "modified": "2019-03-23T22:03:42.541Z", + "Web/JavaScript/Reference/Global_Objects/Boolean/toString": { + "modified": "2019-03-23T22:06:44.278Z", "contributors": [ - "mfluehr" + "thiagosaife" ] }, - "Web/CSS/transform-function/matrix()": { - "modified": "2020-11-16T09:00:13.847Z", + "Web/JavaScript/Reference/Global_Objects/Boolean/valueOf": { + "modified": "2019-03-23T22:42:40.647Z", "contributors": [ - "chrisdavidmills", - "MarcosNakamine" + "felipebelluco" ] }, - "Web/CSS/transform-function/perspective()": { - "modified": "2020-11-16T09:10:49.924Z", + "Web/JavaScript/Reference/Global_Objects/DataView": { + "modified": "2020-10-15T21:51:29.239Z", "contributors": [ - "chrisdavidmills", - "larimaza" + "Rondinelly", + "duduindo", + "fabriciofrontarolli" ] }, - "Web/CSS/transform-function/rotate()": { - "modified": "2020-11-19T16:06:09.849Z", + "Web/JavaScript/Reference/Global_Objects/Date": { + "modified": "2019-03-18T20:41:58.137Z", "contributors": [ - "chrisdavidmills", - "YurePereira" + "Bagata", + "wbamberg", + "quindai", + "marcelobonatto", + "lucas-daltro", + "fnsc.luis", + "daniloazevedo", + "teoli", + "BargaoRobalo" ] }, - "Web/CSS/transform-function/rotate3d()": { - "modified": "2020-11-19T16:07:35.157Z", + "Web/JavaScript/Reference/Global_Objects/Date/@@toPrimitive": { + "modified": "2020-10-15T22:34:13.518Z", "contributors": [ - "chrisdavidmills", - "larimaza" + "FernandoKGA" ] }, - "Web/CSS/transform-function/scale()": { - "modified": "2020-11-30T10:15:54.148Z", + "Web/JavaScript/Reference/Global_Objects/Date/UTC": { + "modified": "2019-03-23T22:50:40.604Z", "contributors": [ - "chrisdavidmills", - "larimaza" + "LeonardoBos" ] }, - "Web/CSS/transform-function/translate()": { - "modified": "2020-11-30T10:30:42.247Z", + "Web/JavaScript/Reference/Global_Objects/Date/getDate": { + "modified": "2019-03-23T22:52:17.951Z", "contributors": [ - "chrisdavidmills", - "duduindo", - "Dianakc", - "MarcosNakamine", - "brunoeduardo" + "thiagoh" ] }, - "Web/CSS/transform-style": { - "modified": "2020-10-15T22:29:54.621Z", + "Web/JavaScript/Reference/Global_Objects/Date/getDay": { + "modified": "2019-03-23T22:52:01.927Z", "contributors": [ - "joaopedroaats" + "thiagoh" ] }, - "Web/CSS/transition": { - "modified": "2020-05-17T21:28:19.368Z", + "Web/JavaScript/Reference/Global_Objects/Date/getFullYear": { + "modified": "2019-03-23T22:52:07.207Z", "contributors": [ - "bruno-cr", - "hbmuller" + "thiagoh" ] }, - "Web/CSS/transition-delay": { - "modified": "2020-10-15T22:25:42.611Z", + "Web/JavaScript/Reference/Global_Objects/Date/getHours": { + "modified": "2019-03-23T22:52:04.095Z", "contributors": [ - "euvanribeiro" + "thiagoh" ] }, - "Web/CSS/transition-timing-function": { - "modified": "2019-03-23T22:09:51.499Z", + "Web/JavaScript/Reference/Global_Objects/Date/getMilliseconds": { + "modified": "2019-03-23T22:25:46.007Z", "contributors": [ - "welitonderesende" + "joelwallis" ] }, - "Web/CSS/valor_computado": { - "modified": "2019-03-23T22:09:29.149Z", + "Web/JavaScript/Reference/Global_Objects/Date/getMinutes": { + "modified": "2019-03-23T22:25:45.808Z", "contributors": [ - "Fernandolrs" + "joelwallis" ] }, - "Web/CSS/valor_espeficifco": { - "modified": "2019-03-23T22:09:23.838Z", + "Web/JavaScript/Reference/Global_Objects/Date/getMonth": { + "modified": "2019-03-23T22:51:50.216Z", "contributors": [ - "Fernandolrs" + "gnuns" ] }, - "Web/CSS/valor_inicial": { - "modified": "2020-02-01T14:54:00.506Z", + "Web/JavaScript/Reference/Global_Objects/Date/getSeconds": { + "modified": "2019-03-23T22:25:45.327Z", "contributors": [ - "marlonveiga-santos", - "Fernandolrs" + "joelwallis" ] }, - "Web/CSS/var()": { - "modified": "2020-11-04T09:10:42.127Z", + "Web/JavaScript/Reference/Global_Objects/Date/getTime": { + "modified": "2019-03-23T22:25:55.014Z", "contributors": [ - "chrisdavidmills", - "filipetorres" + "danielpm", + "joelwallis" ] }, - "Web/CSS/vertical-align": { - "modified": "2019-06-19T18:03:19.393Z", + "Web/JavaScript/Reference/Global_Objects/Date/getTimezoneOffset": { + "modified": "2019-03-23T22:51:37.039Z", "contributors": [ - "douglast2t", - "guifrrs", - "ronysilvati" + "andrejunges", + "candidodmv" ] }, - "Web/CSS/visibility": { - "modified": "2020-10-15T21:59:53.930Z", + "Web/JavaScript/Reference/Global_Objects/Date/getUTCDate": { + "modified": "2019-03-23T22:25:45.470Z", "contributors": [ - "brunopulis" + "joelwallis" ] }, - "Web/CSS/white-space": { - "modified": "2020-10-15T21:33:46.098Z", + "Web/JavaScript/Reference/Global_Objects/Date/getUTCDay": { + "modified": "2020-08-27T16:21:04.054Z", "contributors": [ - "mtsgeneroso", - "maurojs10", - "fscholz", - "Sebastianz", - "rafaellyra" + "morvanabonin", + "rogeriopradoj" ] }, - "Web/CSS/width": { - "modified": "2019-03-23T22:25:51.390Z", + "Web/JavaScript/Reference/Global_Objects/Date/getUTCFullYear": { + "modified": "2020-10-15T22:11:50.613Z", "contributors": [ - "DiegoBRodrigues" + "jonathanTrancozo" ] }, - "Web/CSS/will-change": { - "modified": "2019-10-12T17:58:25.195Z", + "Web/JavaScript/Reference/Global_Objects/Date/getUTCHours": { + "modified": "2020-10-15T22:29:14.615Z", "contributors": [ - "K3yboard", - "jlozovei", - "raphaguasta", - "Jerffersonferreira" + "FernandoKGA", + "hiramfernandes" ] }, - "Web/CSS/word-break": { - "modified": "2020-10-15T21:41:36.303Z", + "Web/JavaScript/Reference/Global_Objects/Date/getUTCMilliseconds": { + "modified": "2020-10-15T21:59:36.124Z", "contributors": [ - "srsaude", - "teoli", - "anderson-fachini" + "vbaptistella" ] }, - "Web/CSS/word-wrap": { - "modified": "2019-03-23T23:34:13.390Z", + "Web/JavaScript/Reference/Global_Objects/Date/getUTCMinutes": { + "modified": "2020-10-15T22:33:32.360Z", "contributors": [ - "fscholz", - "teoli", - "marcoscoelho" + "FernandoKGA" ] }, - "Web/CSS/writing-mode": { - "modified": "2019-03-23T22:01:39.192Z", + "Web/JavaScript/Reference/Global_Objects/Date/getUTCMonth": { + "modified": "2020-10-15T21:58:33.350Z", "contributors": [ - "jessuircleydson" + "caiocsl" ] }, - "Web/Demos_of_open_web_technologies": { - "modified": "2020-09-04T06:28:02.627Z", + "Web/JavaScript/Reference/Global_Objects/Date/getUTCSeconds": { + "modified": "2020-10-15T22:19:49.811Z", "contributors": [ - "gustavoSoriano", - "angelorubin", - "arthur2323" + "gutobrz" ] }, - "Web/Events": { - "modified": "2019-08-20T18:23:47.517Z", + "Web/JavaScript/Reference/Global_Objects/Date/getYear": { + "modified": "2019-03-23T22:52:07.407Z", "contributors": [ - "helton-mori-dev", - "ayrtton", - "Marnei-Cardoso", - "wbamberg", - "LeandroMaxNatal", - "susanasilva", - "jpmedley" + "thiagoh" ] }, - "Web/Events/DOMContentLoaded": { - "modified": "2019-03-18T20:53:06.319Z", + "Web/JavaScript/Reference/Global_Objects/Date/now": { + "modified": "2019-09-07T10:31:23.595Z", "contributors": [ - "helton-mori-dev", - "fscholz", - "greevin", - "macalha" + "lucasinocente", + "rodgerpaulo", + "rodrigosilvaleite", + "alcatrazbr", + "giovannimesquita" ] }, - "Web/Events/abort": { - "modified": "2019-04-30T14:23:25.544Z", + "Web/JavaScript/Reference/Global_Objects/Date/parse": { + "modified": "2020-09-19T12:07:04.791Z", "contributors": [ - "wbamberg", - "KaykyB", - "tinogomes" + "rafaelflorespereira", + "Klaifer", + "remmendo", + "thiagobittner" ] }, - "Web/Events/beforeunload": { - "modified": "2019-04-30T13:57:03.306Z", + "Web/JavaScript/Reference/Global_Objects/Date/setDate": { + "modified": "2020-10-15T22:31:46.152Z", "contributors": [ - "wbamberg", - "LeoNicolas" + "lghiggino" ] }, - "Web/Events/blur": { - "modified": "2019-03-23T22:07:32.725Z", + "Web/JavaScript/Reference/Global_Objects/Date/setFullYear": { + "modified": "2020-10-15T22:33:35.634Z", "contributors": [ - "fscholz", - "erikseyti", - "Fusseldieb" + "FernandoKGA" ] }, - "Web/Events/focus": { - "modified": "2019-03-23T22:03:56.654Z", + "Web/JavaScript/Reference/Global_Objects/Date/setHours": { + "modified": "2020-10-15T22:33:33.944Z", "contributors": [ - "fscholz", - "erikseyti" + "FernandoKGA" ] }, - "Web/Events/focusin": { - "modified": "2019-03-23T22:03:40.133Z", + "Web/JavaScript/Reference/Global_Objects/Date/setMilliseconds": { + "modified": "2020-10-15T22:33:48.619Z", "contributors": [ - "MarcoBrunoBR", - "fscholz", - "erikseyti" + "FernandoKGA" ] }, - "Web/Events/focusout": { - "modified": "2019-03-23T22:03:46.833Z", + "Web/JavaScript/Reference/Global_Objects/Date/setMinutes": { + "modified": "2020-10-15T22:33:49.145Z", "contributors": [ - "fscholz", - "erikseyti" + "FernandoKGA" ] }, - "Web/Events/input": { - "modified": "2019-03-23T22:14:30.766Z", + "Web/JavaScript/Reference/Global_Objects/Date/setMonth": { + "modified": "2020-10-15T22:34:08.767Z", "contributors": [ - "fscholz", - "heltonandreazza" + "FernandoKGA" ] }, - "Web/Events/load": { - "modified": "2019-03-18T20:53:32.628Z", + "Web/JavaScript/Reference/Global_Objects/Date/setSeconds": { + "modified": "2020-10-15T22:34:12.191Z", "contributors": [ - "helton-mori-dev", - "fscholz", - "Maikoncanuto" + "FernandoKGA" ] }, - "Web/Events/readystatechange": { - "modified": "2019-03-23T22:53:19.134Z", + "Web/JavaScript/Reference/Global_Objects/Date/setTime": { + "modified": "2020-10-15T22:06:26.538Z", "contributors": [ - "fscholz", - "brunoczim", - "macalha" + "Bagata", + "deyvidyury" ] }, - "Web/Guide": { - "modified": "2020-10-30T13:31:43.101Z", + "Web/JavaScript/Reference/Global_Objects/Date/setUTCDate": { + "modified": "2020-10-15T22:34:09.643Z", "contributors": [ - "manoelbjr", - "brasmon8351", - "wcqueiroz", - "alanreisb", - "LucianoHanna", - "javaroldo", - "nagaozen", - "Danilson_Veloso", - "alexandresn", - "leonardocoelho", - "joaumg", - "luizmassa", - "sheldonled", - "Sheppy" + "FernandoKGA" ] }, - "Web/Guide/AJAX": { - "modified": "2019-04-26T09:51:09.814Z", + "Web/JavaScript/Reference/Global_Objects/Date/setUTCFullYear": { + "modified": "2020-10-15T22:34:09.833Z", "contributors": [ - "helton-mori-dev", - "chrisdavidmills", - "Wanderleymuniz", - "flaviomicheletti", - "gigantebsb", - "PedroFelipe" + "FernandoKGA" ] }, - "Web/Guide/AJAX/Getting_Started": { - "modified": "2019-03-23T23:09:35.656Z", + "Web/JavaScript/Reference/Global_Objects/Date/setUTCHours": { + "modified": "2020-10-15T22:34:12.207Z", "contributors": [ - "chrisdavidmills", - "darnosls", - "DiogoFontes", - "renatogalvones", - "devLopez", - "flaviomicheletti", - "Alakazam", - "xanfox", - "robinsonsantos" + "FernandoKGA" ] }, - "Web/Guide/API": { - "modified": "2019-09-11T09:42:23.112Z", + "Web/JavaScript/Reference/Global_Objects/Date/setUTCMilliseconds": { + "modified": "2020-10-15T22:34:12.221Z", "contributors": [ - "SphinxKnight", - "Sheppy" + "FernandoKGA" ] }, - "Web/Guide/CSS/CSS_Media_queries": { - "modified": "2019-03-23T23:04:07.760Z", + "Web/JavaScript/Reference/Global_Objects/Date/setUTCMinutes": { + "modified": "2020-10-15T22:34:15.562Z", "contributors": [ - "HugoRibeiro", - "angeliski", - "dailsoncampos", - "nieckarz", - "Sebastianz", - "mrstork", - "malayaleecoder", - "davidcorbetta", - "jorgeclesio", - "Pedrinho", - "brunoeduardo", - "fabianosantos.net" + "FernandoKGA" ] }, - "Web/Guide/CSS/CSS_media_queries_(consultas_de_mídia_em_CSS)": { - "modified": "2019-03-23T23:08:21.480Z", + "Web/JavaScript/Reference/Global_Objects/Date/setUTCMonth": { + "modified": "2020-10-15T22:34:15.556Z", "contributors": [ - "dinaldojr" + "FernandoKGA" ] }, - "Web/Guide/CSS/Scaling_background_images": { - "modified": "2019-03-23T22:59:50.758Z", + "Web/JavaScript/Reference/Global_Objects/Date/setUTCSeconds": { + "modified": "2020-10-15T22:34:11.911Z", "contributors": [ - "mrstork", - "MarcosNakamine" + "FernandoKGA" ] }, - "Web/Guide/CSS/Understanding_z_index": { - "modified": "2019-03-23T22:59:23.481Z", + "Web/JavaScript/Reference/Global_Objects/Date/setYear": { + "modified": "2020-10-15T22:34:14.397Z", "contributors": [ - "songbird159", - "teoli", - "MaxWilliamJF" + "FernandoKGA" ] }, - "Web/Guide/Events": { - "modified": "2019-03-23T23:21:12.584Z", + "Web/JavaScript/Reference/Global_Objects/Date/toDateString": { + "modified": "2019-03-23T22:37:22.411Z", "contributors": [ - "Sheppy" + "pabloff9" ] }, - "Web/Guide/Events/Event_handlers": { - "modified": "2020-08-06T11:00:19.146Z", + "Web/JavaScript/Reference/Global_Objects/Date/toGMTString": { + "modified": "2020-10-15T22:34:12.107Z", "contributors": [ - "eziotristao" + "FernandoKGA" ] }, - "Web/Guide/Events/Mutation_events": { - "modified": "2019-03-23T22:59:51.382Z", + "Web/JavaScript/Reference/Global_Objects/Date/toISOString": { + "modified": "2020-10-15T22:34:15.917Z", "contributors": [ - "diegolw" + "FernandoKGA" ] }, - "Web/Guide/Events/Overview_of_Events_and_Handlers": { - "modified": "2020-09-28T23:35:22.348Z", + "Web/JavaScript/Reference/Global_Objects/Date/toJSON": { + "modified": "2020-10-15T22:08:19.553Z", "contributors": [ - "helton-mori-dev" + "duodraco" ] }, - "Web/Guide/Events/Touch_events": { - "modified": "2019-03-23T23:21:11.070Z", + "Web/JavaScript/Reference/Global_Objects/Date/toLocaleDateString": { + "modified": "2019-10-05T10:35:23.837Z", "contributors": [ - "alipseight", - "Estupendo", - "fellyph" + "alexandregabriel", + "erickm32", + "emanueloliveira" ] }, - "Web/Guide/Events/criando_e_disparando_eventos": { - "modified": "2019-03-23T22:11:33.073Z", + "Web/JavaScript/Reference/Global_Objects/Date/toLocaleString": { + "modified": "2020-10-15T22:22:49.670Z", "contributors": [ - "JefersonOliveira90" + "niltonfreitas_" ] }, - "Web/Guide/Gráficos": { - "modified": "2019-03-23T23:24:23.146Z", + "Web/JavaScript/Reference/Global_Objects/Date/toLocaleTimeString": { + "modified": "2020-10-15T22:01:32.171Z", "contributors": [ - "julio-elipse", - "MarceloBRN", - "LucasPrado", - "MatCAlv" + "jbwestphal" ] }, - "Web/Guide/HTML/Canvas_tutorial": { - "modified": "2019-03-23T23:13:39.145Z", + "Web/JavaScript/Reference/Global_Objects/Date/toSource": { + "modified": "2020-10-15T22:34:13.547Z", "contributors": [ - "CarlosRodrigues", - "Halcance", - "MarceloBRN", - "angelosds", - "Claudiovascaino", - "gxovano", - "gutierri", - "trevorh" + "FernandoKGA" ] }, - "Web/Guide/HTML/Canvas_tutorial/Advanced_animations": { - "modified": "2019-03-23T22:19:02.957Z", + "Web/JavaScript/Reference/Global_Objects/Date/toString": { + "modified": "2020-10-15T22:34:16.319Z", "contributors": [ - "mak213k" + "FernandoKGA" ] }, - "Web/Guide/HTML/Canvas_tutorial/Applying_styles_and_colors": { - "modified": "2020-09-23T19:39:01.390Z", + "Web/JavaScript/Reference/Global_Objects/Date/toTimeString": { + "modified": "2020-10-15T22:34:13.284Z", "contributors": [ - "viniciusfinger", - "AdelinoGonzalesEscobar", - "thulioph", - "MarceloBRN" + "FernandoKGA" ] }, - "Web/Guide/HTML/Canvas_tutorial/Basic_animations": { - "modified": "2019-03-18T21:15:02.453Z", + "Web/JavaScript/Reference/Global_Objects/Date/toUTCString": { + "modified": "2020-10-15T22:34:13.668Z", "contributors": [ - "LeandroLS", - "claromes", - "CarlosEduR", - "augustoroc" + "FernandoKGA" ] }, - "Web/Guide/HTML/Canvas_tutorial/Compositing": { - "modified": "2019-03-23T22:12:17.031Z", + "Web/JavaScript/Reference/Global_Objects/Date/valueOf": { + "modified": "2020-10-15T22:34:13.277Z", "contributors": [ - "CarlosRodrigues", - "Fernandolrs", - "mak213k" + "FernandoKGA" ] }, - "Web/Guide/HTML/Canvas_tutorial/Compositing/Exemplo": { - "modified": "2019-03-18T21:37:01.783Z", + "Web/JavaScript/Reference/Global_Objects/Error": { + "modified": "2019-03-23T22:43:17.643Z", "contributors": [ - "CarlosRodrigues" + "cezaraugusto", + "augustoclaro" ] }, - "Web/Guide/HTML/Canvas_tutorial/Conclusão": { - "modified": "2019-03-18T21:36:59.449Z", + "Web/JavaScript/Reference/Global_Objects/Error/toSource": { + "modified": "2020-11-02T11:33:59.599Z", "contributors": [ - "CarlosRodrigues" + "FernandoKGA" ] }, - "Web/Guide/HTML/Canvas_tutorial/Drawing_shapes": { - "modified": "2020-06-20T19:01:22.926Z", + "Web/JavaScript/Reference/Global_Objects/Error/toString": { + "modified": "2020-11-02T10:09:38.309Z", "contributors": [ - "luizsanches", - "yMegaM", - "MarceloBRN", - "RuanAragao", - "lucas-lambda", - "charlesjamil", - "hellks", - "thiagoao", - "patrickwreis", - "augustoroc" + "FernandoKGA" ] }, - "Web/Guide/HTML/Canvas_tutorial/Drawing_text": { - "modified": "2019-03-23T22:16:08.231Z", + "Web/JavaScript/Reference/Global_Objects/EvalError": { + "modified": "2019-03-23T22:29:52.954Z", "contributors": [ - "surprise102", - "Joao-Maciel", - "netoguimaraes" + "jaimemaretoli" ] }, - "Web/Guide/HTML/Canvas_tutorial/Otimizando_Canvas": { - "modified": "2019-03-18T21:35:40.184Z", + "Web/JavaScript/Reference/Global_Objects/Float32Array": { + "modified": "2020-10-15T22:08:32.783Z", "contributors": [ - "fabianosantos.net" + "ChristoPy" ] }, - "Web/Guide/HTML/Canvas_tutorial/Using_images": { - "modified": "2019-10-15T16:17:36.192Z", + "Web/JavaScript/Reference/Global_Objects/Float64Array": { + "modified": "2020-10-15T22:32:01.059Z", "contributors": [ - "JIrismar" + "GuilhermeVazz" ] }, - "Web/Guide/HTML/Canvas_tutorial/Utilizacao_basica": { - "modified": "2019-03-23T23:13:44.390Z", + "Web/JavaScript/Reference/Global_Objects/Function": { + "modified": "2020-03-26T18:53:42.833Z", "contributors": [ - "MarceloBRN", - "RuanAragao", - "FilipeSilva", - "lucaspedroza" + "HenriqueMartinsBotelho", + "diegolaquino", + "IanRamosC", + "YurePereira", + "chrisdavidmills" ] }, - "Web/Guide/HTML/Categorias_de_conteudo": { - "modified": "2019-03-18T21:16:20.736Z", + "Web/JavaScript/Reference/Global_Objects/Function/apply": { + "modified": "2019-03-23T22:52:01.105Z", "contributors": [ - "ygormaximo" + "hierror", + "cezaraugusto", + "edjungklaus", + "LucasRamos", + "caiocutrim" ] }, - "Web/Guide/HTML/Content_Editable": { - "modified": "2019-03-23T22:43:02.407Z", + "Web/JavaScript/Reference/Global_Objects/Function/arguments": { + "modified": "2019-05-25T00:50:43.245Z", "contributors": [ - "expalmer", - "fellyph" + "Arlon", + "Anderson-Vasques" ] }, - "Web/Guide/HTML/Forms": { - "modified": "2020-07-16T22:21:01.260Z", + "Web/JavaScript/Reference/Global_Objects/Function/bind": { + "modified": "2020-05-09T18:15:16.714Z", "contributors": [ - "Magela", - "psergiojr", - "felipez3r0", - "jaimemaretoli", - "eduardobona", - "frankfarias", - "jgborges", - "SilvEiRax", - "sjmiles" + "lcelso", + "leo-ls", + "Kasagari", + "eduardoJoseRibeiro", + "felipeorlando", + "nevorah", + "fbctf", + "heronmedeiros", + "edvaldofarias" ] }, - "Web/Guide/HTML/Forms/Form_validation": { - "modified": "2020-07-16T22:21:52.226Z", + "Web/JavaScript/Reference/Global_Objects/Function/call": { + "modified": "2019-03-23T23:05:33.507Z", "contributors": [ - "LisandroTSilva", - "JEricFarias", - "JeffersonSotto", - "GeysaPriscila" + "leogsouza", + "cezaraugusto", + "vitorn1234", + "caiocutrim", + "PedroVinicius" ] }, - "Web/Guide/HTML/Forms/How_to_build_custom_form_widgets": { - "modified": "2020-07-16T22:21:57.640Z", + "Web/JavaScript/Reference/Global_Objects/Function/caller": { + "modified": "2019-03-23T22:47:00.952Z", "contributors": [ - "italorangel" + "teoli", + "raduq" ] }, - "Web/Guide/HTML/Forms/How_to_structure_an_HTML_form": { - "modified": "2020-08-25T09:42:10.924Z", + "Web/JavaScript/Reference/Global_Objects/Function/displayName": { + "modified": "2020-10-15T21:58:35.041Z", "contributors": [ - "Camila-Isabela", - "Rondinelly", - "mqdev", - "itamarsilva", - "fscholz", - "rafaelblink", - "Renancp01", - "Danilson_Veloso", - "angellica.araujo", - "Sheppy" + "alinedmelo" ] }, - "Web/Guide/HTML/Forms/Meu_primeiro_formulario_HTML": { - "modified": "2020-07-16T22:21:06.348Z", + "Web/JavaScript/Reference/Global_Objects/Function/length": { + "modified": "2020-08-25T13:54:49.738Z", "contributors": [ - "italorangel", - "itamarsilva", - "fabiobasso", - "samlopes_br", - "Victorfm2167", - "WagnerSilveira", - "melostbr", - "wesleey", - "khiby" + "duduindo", + "GuilhermeVazz", + "alinedmelo", + "matheussilvasantos", + "LucasRamos" ] }, - "Web/Guide/HTML/Forms/Os_widgets_nativos": { - "modified": "2020-07-16T22:21:22.988Z", + "Web/JavaScript/Reference/Global_Objects/Function/name": { + "modified": "2020-10-15T22:06:36.004Z", "contributors": [ - "danncam", - "VictorGom3s" + "leo-ls" ] }, - "Web/Guide/HTML/Forms/Sending_and_retrieving_form_data": { - "modified": "2020-07-16T22:21:28.510Z", + "Web/JavaScript/Reference/Global_Objects/Function/toSource": { + "modified": "2020-10-15T21:58:35.614Z", "contributors": [ - "Gus-fm", - "iClarkSi", - "filipetorres", - "Victorfm2167" + "alinedmelo" ] }, - "Web/Guide/HTML/Using_data_attributes": { - "modified": "2020-07-16T22:22:37.008Z", + "Web/JavaScript/Reference/Global_Objects/Function/toString": { + "modified": "2020-10-15T22:14:19.175Z", "contributors": [ - "marcos.m.ventura", - "soutomario", - "thomas-adriano", - "danielmelogpi" + "FernandoKGA", + "Romulofelipe" ] }, - "Web/Guide/Introducao_ao_Desenvolvimento_Web": { - "modified": "2019-07-28T16:57:13.368Z", + "Web/JavaScript/Reference/Global_Objects/Generator": { + "modified": "2020-03-24T12:10:57.953Z", "contributors": [ - "rvenson" + "KennyMack" ] }, - "Web/Guide/Mobile": { - "modified": "2020-04-05T18:24:36.523Z", + "Web/JavaScript/Reference/Global_Objects/Infinity": { + "modified": "2020-03-12T19:40:37.632Z", "contributors": [ - "guidiasz", - "michelsouza" + "isacfadoni", + "jsvini" ] }, - "Web/Guide/Performance": { - "modified": "2019-03-18T20:49:01.451Z", + "Web/JavaScript/Reference/Global_Objects/Int16Array": { + "modified": "2020-10-15T22:12:41.379Z", "contributors": [ - "ssamuel645", - "KelviDalmazo" + "murillodmiranda" ] }, - "Web/Guide/Printing": { - "modified": "2020-08-18T10:16:18.081Z", + "Web/JavaScript/Reference/Global_Objects/InternalError": { + "modified": "2020-10-15T22:33:36.868Z", "contributors": [ - "Eder_Duarte", - "maatheusgouveia" + "shingravirei" ] }, - "Web/HTML": { - "modified": "2019-09-10T15:24:16.025Z", + "Web/JavaScript/Reference/Global_Objects/Intl": { + "modified": "2019-04-03T16:14:02.453Z", "contributors": [ - "SphinxKnight", - "brasmon8351", - "wcqueiroz", - "jorgeclesio", - "Rech", - "diegobarcelar", - "julio-elipse", - "BrunaGil", - "ferro-br", - "phenriqueleao", - "andalvalmeida", - "rubensdemelo", - "samuelbzrra", - "Carlos_Mir_de_Souza", - "marciioluucas", - "dariogabriel113", - "renato_oliveira", - "Schieck", - "fabianosantos.net", - "Victorfm2167", - "jwhitlock", - "RenanBirck", - "KadirTopal", - "rafaelsouza", - "LuccasBarbosa", - "ptcmariano", - "IvomarS", - "Cleiveson", - "ronaldoamaral", - "hostlionhospedarsites", - "rafiuske", - "blueridanus", - "srsaude", - "mklauck", - "MatCAlv", - "alispivak-demo", - "eufaloserio", - "dancasttro", - "mcpelegrin" + "letuche", + "alexandresn" ] }, - "Web/HTML/Applying_color": { - "modified": "2019-03-18T21:43:53.570Z", + "Web/JavaScript/Reference/Global_Objects/Intl/DateTimeFormat": { + "modified": "2020-10-15T22:29:38.599Z", "contributors": [ - "larimaza" + "SphinxKnight", + "gibify_official" ] }, - "Web/HTML/CORS_imagens_habilitadas": { - "modified": "2019-03-23T22:20:56.821Z", + "Web/JavaScript/Reference/Global_Objects/Intl/NumberFormat": { + "modified": "2020-04-21T09:08:10.746Z", "contributors": [ - "mak213k" + "fscholz", + "thomazcapra", + "romulocintra", + "letuche", + "marcelobonatto" ] }, - "Web/HTML/Canvas": { - "modified": "2020-01-16T19:34:10.555Z", + "Web/JavaScript/Reference/Global_Objects/Intl/RelativeTimeFormat": { + "modified": "2020-10-15T22:19:18.527Z", "contributors": [ - "marlonveiga-santos", - "alexandreab", - "besopmac", - "MarceloBRN", - "alipseight", - "juniorgarcia", - "erickzanardo", - "teoli", - "matheusmariano" + "fscholz", + "ChilenoSika" ] }, - "Web/HTML/Canvas/A_basic_ray-caster": { - "modified": "2019-03-23T22:18:52.140Z", + "Web/JavaScript/Reference/Global_Objects/JSON": { + "modified": "2019-05-04T10:27:47.204Z", "contributors": [ - "alipseight", - "juniorgarcia" + "Leodma", + "techtique", + "Jeremie", + "deyvid0123", + "jessicatenca", + "markokr" ] }, - "Web/HTML/Controlando_verificacao_ortografica_em_formularios_HTML": { - "modified": "2019-03-23T22:27:29.620Z", + "Web/JavaScript/Reference/Global_Objects/JSON/parse": { + "modified": "2020-10-15T21:37:32.669Z", "contributors": [ - "sheldonled" + "MarcosNakamine", + "Fernandolrs", + "v1ctorf", + "Francisaac", + "renanmedina" ] }, - "Web/HTML/Dicas_para_criar_páginas_HTML_de_carregamento_rápido": { - "modified": "2020-07-16T22:22:33.399Z", + "Web/JavaScript/Reference/Global_Objects/JSON/stringify": { + "modified": "2020-06-10T02:22:31.726Z", "contributors": [ - "teoli", - "gmerencio" + "henriquegeremia", + "PauloRicardoDeveloper", + "nilocoelhojunior", + "einstenj", + "ikariwill", + "lucasmaiaesilva" ] }, - "Web/HTML/Element": { - "modified": "2020-10-20T02:01:24.831Z", - "contributors": [ - "SphinxKnight", - "marcus.simei", - "jrborbars", - "fcard", - "afonsopacifer", - "antoniojnr", - "teoli", - "luizmassa", - "robsonds", - "LeonardoPacheco", - "hsteffano" + "Web/JavaScript/Reference/Global_Objects/Map": { + "modified": "2020-10-15T21:43:23.476Z", + "contributors": [ + "mathvalenza", + "mateusvelleda", + "chapeupreto", + "mauricio.araldi", + "Klauswk", + "renatoluna", + "BernardoMariano", + "raduq", + "raphaelpor" ] }, - "Web/HTML/Element/Audio": { - "modified": "2019-03-23T23:39:06.591Z", + "Web/JavaScript/Reference/Global_Objects/Map/clear": { + "modified": "2019-03-23T22:13:54.269Z", "contributors": [ - "wbamberg", - "Gregory", - "teoli", - "mateus.m.luna", - "LeonardoPacheco" + "renatoluna" ] }, - "Web/HTML/Element/Heading_Elements": { - "modified": "2020-11-22T18:16:21.735Z", + "Web/JavaScript/Reference/Global_Objects/Map/delete": { + "modified": "2019-05-29T19:41:42.276Z", "contributors": [ - "TohoSeiwa", - "wcqueiroz", - "Ikebhering", - "IanRamosC", - "ViniFG" + "renatoluna" ] }, - "Web/HTML/Element/Input": { - "modified": "2019-03-23T23:19:19.777Z", + "Web/JavaScript/Reference/Global_Objects/Map/entries": { + "modified": "2019-03-23T22:13:54.600Z", "contributors": [ - "Disjuntores", - "srsaude", - "teoli", - "joaobarbosa" + "renatoluna" ] }, - "Web/HTML/Element/Input/button": { - "modified": "2020-10-15T22:27:35.557Z", + "Web/JavaScript/Reference/Global_Objects/Map/forEach": { + "modified": "2019-09-16T15:32:37.374Z", "contributors": [ - "Eliezer62" + "cezinha", + "rodrigocnascimento", + "renatoluna" ] }, - "Web/HTML/Element/Input/checkbox": { - "modified": "2020-10-15T22:07:27.923Z", + "Web/JavaScript/Reference/Global_Objects/Map/get": { + "modified": "2020-10-15T21:58:34.923Z", "contributors": [ - "gustavando", - "trandreluis", - "anok", - "rafaeltaro", - "SphinxKnight", - "creis" + "haskellcamargo" ] }, - "Web/HTML/Element/Input/data": { - "modified": "2019-03-18T20:52:31.949Z", + "Web/JavaScript/Reference/Global_Objects/Map/has": { + "modified": "2020-10-15T22:01:02.517Z", "contributors": [ - "SphinxKnight", - "badarojr", - "beeblebrox3", - "marcelobonatto", - "mtsgeneroso", - "Ermesoml", - "alipseight" + "clovislima", + "MarcVFX" ] }, - "Web/HTML/Element/Input/password": { - "modified": "2020-10-15T22:06:49.756Z", + "Web/JavaScript/Reference/Global_Objects/Map/keys": { + "modified": "2019-03-23T22:20:29.616Z", "contributors": [ - "liddack" + "shuminyang" ] }, - "Web/HTML/Element/Input/range": { - "modified": "2019-03-18T20:57:11.406Z", + "Web/JavaScript/Reference/Global_Objects/Map/set": { + "modified": "2019-03-23T22:10:32.061Z", "contributors": [ - "SphinxKnight", - "g-thome", - "Humberto", - "TecladistaProd" + "haskellcamargo", + "nanquim" ] }, - "Web/HTML/Element/Input/time": { - "modified": "2020-10-15T22:07:24.929Z", + "Web/JavaScript/Reference/Global_Objects/Map/size": { + "modified": "2019-03-18T20:56:12.542Z", "contributors": [ - "liddack" + "mauricio.araldi", + "raduq" ] }, - "Web/HTML/Element/Output": { - "modified": "2020-10-15T21:19:50.384Z", + "Web/JavaScript/Reference/Global_Objects/Map/values": { + "modified": "2020-10-15T22:16:52.931Z", "contributors": [ - "wbamberg", - "wallacemaxters", - "GPrimola", - "teoli", - "LeonardoPacheco", - "mateus.m.luna" + "liddack" ] }, - "Web/HTML/Element/Source": { - "modified": "2019-03-23T23:39:09.351Z", + "Web/JavaScript/Reference/Global_Objects/Math": { + "modified": "2019-03-23T23:21:27.763Z", "contributors": [ - "Rahmon", + "rafaelbezerra195", + "fernandosavio", + "emviveros", + "FlavioFS", "teoli", - "LeonardoPacheco" + "xhximenes", + "vagnerleitte", + "fscholz" ] }, - "Web/HTML/Element/Video": { - "modified": "2019-03-23T23:39:11.809Z", + "Web/JavaScript/Reference/Global_Objects/Math/E": { + "modified": "2020-10-15T21:47:13.887Z", "contributors": [ - "wbamberg", - "KaykyB", - "Fernandolrs", - "rafaelcavalcante", - "teoli", - "LeonardoPacheco" + "daniloazevedo", + "tetri" ] }, - "Web/HTML/Element/a": { - "modified": "2020-10-15T21:21:57.553Z", + "Web/JavaScript/Reference/Global_Objects/Math/LN10": { + "modified": "2019-03-23T22:12:19.651Z", "contributors": [ - "Marrior-dot", - "BeatrizCavallieri", - "GabrielleGuida", - "gilmargn", - "MarcosNakamine", - "GPrimola", - "antoniojnr", - "teoli", - "marcoex", - "Graffitti", - "thiagoharry", - "vagnerleitte", - "fnsc.luis" + "Guimaraesmvf" ] }, - "Web/HTML/Element/abbr": { - "modified": "2020-10-15T21:24:34.973Z", + "Web/JavaScript/Reference/Global_Objects/Math/LN2": { + "modified": "2020-10-15T21:55:04.335Z", "contributors": [ - "GPrimola", - "fscholz", - "teoli", - "thiagoharry", - "alexfigueiredo" + "fernandosavio" ] }, - "Web/HTML/Element/acronym": { - "modified": "2020-10-15T21:24:47.267Z", + "Web/JavaScript/Reference/Global_Objects/Math/LOG10E": { + "modified": "2020-10-15T21:55:05.255Z", "contributors": [ - "GPrimola", - "teoli", - "thiagoharry" + "hvianna", + "fernandosavio" ] }, - "Web/HTML/Element/address": { - "modified": "2019-03-23T23:26:26.807Z", + "Web/JavaScript/Reference/Global_Objects/Math/LOG2E": { + "modified": "2020-10-15T21:55:04.690Z", "contributors": [ - "coloringa", - "alisson-suzigan", - "teoli", - "thiagoharry" + "hvianna", + "fernandosavio" ] }, - "Web/HTML/Element/applet": { - "modified": "2019-03-23T23:09:08.718Z", + "Web/JavaScript/Reference/Global_Objects/Math/PI": { + "modified": "2020-10-15T21:47:10.311Z", "contributors": [ - "marcosyoshihiro" + "daniloazevedo" ] }, - "Web/HTML/Element/area": { - "modified": "2019-03-23T23:15:00.929Z", + "Web/JavaScript/Reference/Global_Objects/Math/SQRT1_2": { + "modified": "2020-10-15T21:55:05.961Z", "contributors": [ - "Gregory", - "jgborges", - "teoli", - "Haroldohc" + "fernandosavio" ] }, - "Web/HTML/Element/article": { - "modified": "2019-03-23T23:36:23.011Z", + "Web/JavaScript/Reference/Global_Objects/Math/SQRT2": { + "modified": "2020-10-15T21:55:05.849Z", "contributors": [ - "wbamberg", - "Jerffersonferreira", - "teoli", - "robsonds" + "hvianna", + "fernandosavio" ] }, - "Web/HTML/Element/aside": { - "modified": "2020-10-15T21:23:20.646Z", + "Web/JavaScript/Reference/Global_Objects/Math/abs": { + "modified": "2019-03-23T23:10:06.875Z", "contributors": [ - "wbamberg", - "GPrimola", - "srsaude", - "teoli", - "Linc0" + "flpwgr", + "Thiago" ] }, - "Web/HTML/Element/b": { - "modified": "2019-03-23T23:08:37.937Z", + "Web/JavaScript/Reference/Global_Objects/Math/acos": { + "modified": "2019-03-23T22:19:53.926Z", "contributors": [ - "teoli", - "luizmassa" + "isaiasBR" ] }, - "Web/HTML/Element/base": { - "modified": "2019-03-18T20:35:07.314Z", + "Web/JavaScript/Reference/Global_Objects/Math/acosh": { + "modified": "2020-10-15T21:55:06.035Z", "contributors": [ - "teodoz", - "rogeriopradoj", - "luizmassa", - "WagnerBeethoven" + "fernandosavio" ] }, - "Web/HTML/Element/bdi": { - "modified": "2019-03-23T22:55:51.883Z", + "Web/JavaScript/Reference/Global_Objects/Math/asin": { + "modified": "2020-10-15T21:55:07.550Z", "contributors": [ - "Gregory", - "cid360", - "jgborges" + "carlos-teixeira314", + "fernandosavio" ] }, - "Web/HTML/Element/bdo": { - "modified": "2020-10-15T21:58:57.805Z", + "Web/JavaScript/Reference/Global_Objects/Math/asinh": { + "modified": "2020-10-15T22:03:29.264Z", "contributors": [ - "tiagofranca" + "OJEP" ] }, - "Web/HTML/Element/big": { - "modified": "2020-10-15T22:19:28.136Z", + "Web/JavaScript/Reference/Global_Objects/Math/atan": { + "modified": "2020-10-15T21:55:06.721Z", "contributors": [ - "jorgeclesio" + "fernandosavio" ] }, - "Web/HTML/Element/blink": { - "modified": "2019-03-23T22:51:55.020Z", + "Web/JavaScript/Reference/Global_Objects/Math/atan2": { + "modified": "2019-03-23T22:22:42.007Z", "contributors": [ - "TatiTheFreaK", - "ti201501", - "macalha" + "isaiasBR" ] }, - "Web/HTML/Element/blockquote": { - "modified": "2019-03-23T22:54:49.360Z", + "Web/JavaScript/Reference/Global_Objects/Math/atanh": { + "modified": "2020-10-15T21:55:07.443Z", "contributors": [ - "rafaelff", - "Barbosado", - "teoli" + "fernandosavio" ] }, - "Web/HTML/Element/body": { - "modified": "2020-06-19T20:58:40.238Z", + "Web/JavaScript/Reference/Global_Objects/Math/cbrt": { + "modified": "2020-10-15T21:58:38.295Z", "contributors": [ - "samuelmelo203", - "Clecio013", - "fbilinski", - "Ronicley", - "netoguimaraes" + "Mareken" ] }, - "Web/HTML/Element/br": { - "modified": "2019-03-23T22:30:12.009Z", + "Web/JavaScript/Reference/Global_Objects/Math/ceil": { + "modified": "2019-07-19T10:47:36.140Z", "contributors": [ - "LucasGagno" + "WilliamSakata", + "Albert.Bitencourte", + "fscarol", + "niltonfreitas_", + "teoli", + "vagnerleitte" ] }, - "Web/HTML/Element/button": { - "modified": "2020-01-06T10:39:09.221Z", + "Web/JavaScript/Reference/Global_Objects/Math/clz32": { + "modified": "2020-10-15T22:28:44.661Z", "contributors": [ - "pahbloo", - "Painatalman", - "ilariojunior", - "gulima", - "Cloves23", - "03-04-85" + "karenc-sousa", + "josimaraLima" ] }, - "Web/HTML/Element/canvas": { - "modified": "2019-03-23T23:39:11.475Z", + "Web/JavaScript/Reference/Global_Objects/Math/cos": { + "modified": "2020-10-15T22:18:27.705Z", "contributors": [ - "wbamberg", - "jorgematheus", - "MarceloBRN", - "teoli", - "jpalharini" + "Cleianderson" ] }, - "Web/HTML/Element/caption": { - "modified": "2019-05-24T13:28:15.271Z", + "Web/JavaScript/Reference/Global_Objects/Math/cosh": { + "modified": "2020-10-15T22:28:21.218Z", "contributors": [ - "duduindo", - "Ca_uai", - "ooredroxoo" + "renato.alecrim" ] }, - "Web/HTML/Element/center": { - "modified": "2020-10-15T22:19:26.722Z", + "Web/JavaScript/Reference/Global_Objects/Math/exp": { + "modified": "2019-03-23T23:15:09.889Z", "contributors": [ - "RapozaoBR", - "joaomatco213", - "jorgeclesio" + "teoli", + "haskellcamargo" ] }, - "Web/HTML/Element/cite": { - "modified": "2020-06-24T20:47:35.913Z", + "Web/JavaScript/Reference/Global_Objects/Math/expm1": { + "modified": "2020-10-15T22:31:35.332Z", "contributors": [ - "RaphaelBRodrigues", - "rodrigocode4", - "rafaelblink" + "karenc-sousa" ] }, - "Web/HTML/Element/code": { - "modified": "2020-10-15T22:20:52.767Z", + "Web/JavaScript/Reference/Global_Objects/Math/floor": { + "modified": "2019-09-13T11:05:18.946Z", "contributors": [ - "BrunoSoaresGaldino" + "maarysantos", + "fscarol", + "teoli", + "matheuslc" ] }, - "Web/HTML/Element/col": { - "modified": "2020-10-15T21:58:57.355Z", + "Web/JavaScript/Reference/Global_Objects/Math/hypot": { + "modified": "2020-10-15T21:55:03.563Z", "contributors": [ - "erikseyti" + "fernandosavio" ] }, - "Web/HTML/Element/command": { - "modified": "2019-03-23T23:38:57.259Z", + "Web/JavaScript/Reference/Global_Objects/Math/log": { + "modified": "2019-03-23T22:26:27.916Z", "contributors": [ - "wbamberg", - "teoli", - "LeonardoPacheco" + "monteiroflavio" ] }, - "Web/HTML/Element/conteúdo": { - "modified": "2020-10-15T22:25:22.827Z", + "Web/JavaScript/Reference/Global_Objects/Math/log10": { + "modified": "2019-03-23T22:26:17.000Z", "contributors": [ - "IsaqueFelipe" + "thaisdemoura", + "monteiroflavio" ] }, - "Web/HTML/Element/data": { - "modified": "2019-03-23T23:15:11.615Z", + "Web/JavaScript/Reference/Global_Objects/Math/log1p": { + "modified": "2020-10-15T22:22:08.225Z", "contributors": [ - "teoli", - "Haroldohc" + "Mathues" ] }, - "Web/HTML/Element/datalist": { - "modified": "2020-07-24T12:07:37.628Z", + "Web/JavaScript/Reference/Global_Objects/Math/log2": { + "modified": "2020-10-15T21:59:58.075Z", "contributors": [ - "mfranzke", - "wbamberg", - "teoli", - "LeonardoPacheco" + "RodolfoSilva" ] }, - "Web/HTML/Element/dd": { - "modified": "2020-10-15T22:03:52.136Z", + "Web/JavaScript/Reference/Global_Objects/Math/max": { + "modified": "2019-03-23T23:10:00.119Z", "contributors": [ - "GutuGaluppo", - "GPrimola" + "lucsrods", + "LucianoBritis", + "Thiago", + "teoli" ] }, - "Web/HTML/Element/del": { - "modified": "2019-03-23T23:05:32.110Z", + "Web/JavaScript/Reference/Global_Objects/Math/min": { + "modified": "2019-04-26T13:13:20.729Z", "contributors": [ - "minduka" + "yogmel", + "LucianoBritis" ] }, - "Web/HTML/Element/details": { - "modified": "2019-03-23T23:38:58.865Z", + "Web/JavaScript/Reference/Global_Objects/Math/pow": { + "modified": "2019-04-25T15:22:09.540Z", "contributors": [ - "wbamberg", - "teoli", - "LeonardoPacheco" + "xneuber", + "HumbsBR", + "ralphrass" ] }, - "Web/HTML/Element/dfn": { - "modified": "2019-03-23T23:15:43.009Z", + "Web/JavaScript/Reference/Global_Objects/Math/random": { + "modified": "2020-10-15T21:29:15.686Z", "contributors": [ + "Ocramoi", + "brevvi", + "WBerredo", + "fernandosavio", + "AustinFelipe", + "CasperBraske", "teoli", - "eduardojmatos" + "xhximenes" ] }, - "Web/HTML/Element/dialog": { - "modified": "2020-10-15T22:00:30.887Z", + "Web/JavaScript/Reference/Global_Objects/Math/round": { + "modified": "2019-08-15T18:47:55.871Z", "contributors": [ - "euvanribeiro", - "Genildo_Lopes", - "marceloch2", - "chicojunior" + "brunomazzardo", + "letuche", + "SphinxKnight", + "giovana-morais", + "Guimaraesmvf", + "lumathias", + "teoli", + "vagnerleitte" ] }, - "Web/HTML/Element/dir": { - "modified": "2020-10-15T22:14:38.248Z", + "Web/JavaScript/Reference/Global_Objects/Math/sign": { + "modified": "2020-10-15T21:55:40.410Z", "contributors": [ - "Mateusstslino" + "leonardocxavier.lx", + "josetepedino" ] }, - "Web/HTML/Element/div": { - "modified": "2019-03-23T23:09:09.627Z", + "Web/JavaScript/Reference/Global_Objects/Math/sin": { + "modified": "2020-10-15T22:04:54.149Z", "contributors": [ - "caioferrarezi", - "Marius2112", - "SubaruSama", - "lucrp", - "leleofg", - "marcosyoshihiro" + "raullesteves", + "LucianoDos" ] }, - "Web/HTML/Element/dl": { - "modified": "2020-10-15T21:20:22.549Z", + "Web/JavaScript/Reference/Global_Objects/Math/sinh": { + "modified": "2020-10-15T22:13:49.195Z", "contributors": [ - "GPrimola", - "niltoncsr", - "fellyph", - "pkelbert", - "teoli", - "ken210" + "taranttini" ] }, - "Web/HTML/Element/dt": { - "modified": "2019-03-23T22:48:59.353Z", + "Web/JavaScript/Reference/Global_Objects/Math/sqrt": { + "modified": "2020-10-15T21:26:04.927Z", "contributors": [ - "Jerffersonferreira", - "vtmx" + "fernandosavio", + "teoli", + "Phisichodelic" ] }, - "Web/HTML/Element/em": { - "modified": "2020-10-15T22:00:30.429Z", + "Web/JavaScript/Reference/Global_Objects/Math/tan": { + "modified": "2019-03-23T23:10:38.670Z", "contributors": [ - "rodrigocode4", - "SaggitariusA" + "brunofin" ] }, - "Web/HTML/Element/embed": { - "modified": "2020-01-23T00:06:41.612Z", + "Web/JavaScript/Reference/Global_Objects/Math/tanh": { + "modified": "2020-10-15T22:04:54.316Z", "contributors": [ - "LucasPereira", - "GPrimola", - "Tonihtml" + "LucianoDos" ] }, - "Web/HTML/Element/fieldset": { - "modified": "2019-03-18T20:42:56.564Z", + "Web/JavaScript/Reference/Global_Objects/Math/trunc": { + "modified": "2019-03-18T20:46:02.772Z", "contributors": [ - "peas", - "otavioaquino", - "brunoalv-s", - "wmerussi", - "Gregory", - "LucasGagno" + "rbuzatto", + "SphinxKnight", + "renamed" ] }, - "Web/HTML/Element/figcaption": { - "modified": "2020-10-15T22:34:28.797Z", + "Web/JavaScript/Reference/Global_Objects/NaN": { + "modified": "2020-03-12T19:40:35.675Z", "contributors": [ - "hicksf" + "trestini" ] }, - "Web/HTML/Element/figura": { - "modified": "2019-03-23T23:22:45.109Z", + "Web/JavaScript/Reference/Global_Objects/Number": { + "modified": "2019-03-18T20:45:04.310Z", "contributors": [ + "edvoidcode", "wbamberg", - "jorgeclesio", - "teoli", - "Graffitti" + "rubenfaria", + "gutoribeiro", + "olilucas", + "fscholz" ] }, - "Web/HTML/Element/footer": { - "modified": "2019-03-23T23:36:28.026Z", + "Web/JavaScript/Reference/Global_Objects/Number/EPSILON": { + "modified": "2020-10-15T22:33:22.823Z", "contributors": [ - "wbamberg", - "teoli", - "robsonds", - "ethertank" + "FernandoKGA" ] }, - "Web/HTML/Element/form": { - "modified": "2019-05-30T02:15:09.926Z", + "Web/JavaScript/Reference/Global_Objects/Number/MAX_SAFE_INTEGER": { + "modified": "2020-10-15T22:33:22.489Z", "contributors": [ - "jorgeclesio", - "teoli", - "perrucho" + "FernandoKGA" ] }, - "Web/HTML/Element/head": { - "modified": "2019-03-23T22:21:23.704Z", + "Web/JavaScript/Reference/Global_Objects/Number/MAX_VALUE": { + "modified": "2020-10-15T22:33:22.445Z", "contributors": [ - "mak213k" + "FernandoKGA" ] }, - "Web/HTML/Element/header": { - "modified": "2019-03-23T23:33:25.477Z", + "Web/JavaScript/Reference/Global_Objects/Number/MIN_SAFE_INTEGER": { + "modified": "2020-10-15T22:33:22.518Z", "contributors": [ - "ilariojunior", - "wbamberg", - "GPrimola", - "Humberto", - "teoli", - "regisdiogo" + "FernandoKGA" ] }, - "Web/HTML/Element/hgroup": { - "modified": "2020-10-15T21:40:04.892Z", + "Web/JavaScript/Reference/Global_Objects/Number/MIN_VALUE": { + "modified": "2020-10-15T22:33:23.068Z", "contributors": [ - "printf-ana", - "Vitor-droid", - "Maujor", - "gabrielmelo" + "FernandoKGA" ] }, - "Web/HTML/Element/hr": { - "modified": "2019-03-23T23:00:09.683Z", + "Web/JavaScript/Reference/Global_Objects/Number/NEGATIVE_INFINITY": { + "modified": "2020-10-15T22:33:22.475Z", "contributors": [ - "brunoqueiros" + "FernandoKGA" ] }, - "Web/HTML/Element/html": { - "modified": "2019-03-23T23:33:25.274Z", + "Web/JavaScript/Reference/Global_Objects/Number/NaN": { + "modified": "2019-03-23T22:21:44.421Z", "contributors": [ - "GPrimola", - "teoli", - "irvinggomes" + "caioabe" ] }, - "Web/HTML/Element/i": { - "modified": "2019-03-23T22:12:56.021Z", + "Web/JavaScript/Reference/Global_Objects/Number/POSITIVE_INFINITY": { + "modified": "2020-10-15T21:59:00.701Z", "contributors": [ - "rafaelcavalcante", - "sscaetite" + "vierno" ] }, - "Web/HTML/Element/iframe": { - "modified": "2020-10-15T21:30:21.333Z", + "Web/JavaScript/Reference/Global_Objects/Number/isFinite": { + "modified": "2020-10-15T21:59:02.386Z", "contributors": [ - "fscholz", - "wbamberg", - "RenanBirck", - "jgborges", - "marcosyoshihiro" + "dayanyrec" ] }, - "Web/HTML/Element/img": { - "modified": "2020-07-23T17:09:01.419Z", + "Web/JavaScript/Reference/Global_Objects/Number/isInteger": { + "modified": "2019-07-29T15:37:40.408Z", "contributors": [ - "jrom99", - "ilariojunior", - "Wesley-181", - "dodireis", - "Jessica7", - "andrekutianski", - "jorgeclesio", - "marcosyoshihiro" + "vitorbertulucci", + "odahcam" ] }, - "Web/HTML/Element/ins": { - "modified": "2019-03-23T23:15:01.095Z", + "Web/JavaScript/Reference/Global_Objects/Number/isNaN": { + "modified": "2019-03-23T23:10:13.820Z", "contributors": [ + "SphinxKnight", + "codermarcos", "teoli", - "Haroldohc" + "nickmarinho" ] }, - "Web/HTML/Element/label": { - "modified": "2019-09-13T15:44:10.344Z", + "Web/JavaScript/Reference/Global_Objects/Number/isSafeInteger": { + "modified": "2020-10-15T22:23:14.691Z", "contributors": [ - "Edionay", - "jyrodrigues", - "DavidL_Santos", - "teoli", - "Nathalino_Pacheco" + "carloserocha" ] }, - "Web/HTML/Element/legend": { - "modified": "2019-03-23T22:59:55.952Z", + "Web/JavaScript/Reference/Global_Objects/Number/parseFloat": { + "modified": "2019-03-18T21:00:18.240Z", "contributors": [ - "hbmuller" + "negreirosleo", + "SphinxKnight", + "jctosta" ] }, - "Web/HTML/Element/li": { - "modified": "2019-03-23T23:14:25.501Z", + "Web/JavaScript/Reference/Global_Objects/Number/parseInt": { + "modified": "2020-10-15T22:33:24.030Z", "contributors": [ - "Aschlla", - "flpms" + "FernandoKGA" ] }, - "Web/HTML/Element/link": { - "modified": "2019-03-23T22:55:34.683Z", + "Web/JavaScript/Reference/Global_Objects/Number/toExponential": { + "modified": "2019-03-23T22:10:51.562Z", "contributors": [ - "FahMont", - "Cloves23", - "teoli", - "tabytaa", - "jgborges" + "waltton" ] }, - "Web/HTML/Element/main": { - "modified": "2019-03-23T23:03:43.266Z", + "Web/JavaScript/Reference/Global_Objects/Number/toFixed": { + "modified": "2020-10-15T21:42:57.260Z", "contributors": [ - "leandroruel", - "afonsopacifer" + "waveiro", + "akfzambrana" ] }, - "Web/HTML/Element/map": { - "modified": "2019-03-23T23:14:59.765Z", + "Web/JavaScript/Reference/Global_Objects/Number/toLocaleString": { + "modified": "2020-10-15T21:47:41.116Z", "contributors": [ - "marcelobonatto", - "teoli", - "Haroldohc" + "waveiro", + "cristiancporto", + "marcelobonatto" ] }, - "Web/HTML/Element/mark": { - "modified": "2020-10-15T21:25:22.825Z", + "Web/JavaScript/Reference/Global_Objects/Number/toPrecision": { + "modified": "2020-10-15T22:17:13.989Z", "contributors": [ - "wbamberg", - "GPrimola", - "teoli", - "fellyph" + "haist", + "milovaz" ] }, - "Web/HTML/Element/marquee": { - "modified": "2019-03-23T23:05:53.169Z", + "Web/JavaScript/Reference/Global_Objects/Number/toSource": { + "modified": "2020-10-15T22:17:14.004Z", "contributors": [ - "Synaxis", - "luis-vmjr", - "luhluzinha123", - "Fernandolrs", - "Grohden", - "KaykyB", - "mcand" + "milovaz" ] }, - "Web/HTML/Element/meta": { - "modified": "2019-03-18T20:58:16.076Z", + "Web/JavaScript/Reference/Global_Objects/Number/toString": { + "modified": "2019-03-23T22:52:50.933Z", "contributors": [ - "Expablo", - "Joaohfer", - "adnamavlis", - "Gabriela-23", - "rotirotirafa", - "programacaocriativa" + "tributus" ] }, - "Web/HTML/Element/meter": { - "modified": "2020-10-15T21:19:31.461Z", + "Web/JavaScript/Reference/Global_Objects/Number/valueOf": { + "modified": "2020-10-15T22:17:17.170Z", "contributors": [ - "fscholz", - "wbamberg", - "teoli", - "arthurpf", - "viniciuspires", - "fellyph", - "LeonardoPacheco" + "milovaz" ] }, - "Web/HTML/Element/nav": { - "modified": "2019-03-23T23:39:09.069Z", + "Web/JavaScript/Reference/Global_Objects/Object": { + "modified": "2020-10-15T21:22:46.995Z", "contributors": [ - "wbamberg", - "GPrimola", + "UPPERCASEuser", + "fscholz", + "LucianoDos", + "user2015", "teoli", - "mazulo", - "AluisioASG" + "matheusrocha89" ] }, - "Web/HTML/Element/nobr": { - "modified": "2019-03-23T23:02:27.507Z", + "Web/JavaScript/Reference/Global_Objects/Object/__defineGetter__": { + "modified": "2020-10-15T22:10:25.431Z", "contributors": [ - "acdcjunior" + "KyryIx" ] }, - "Web/HTML/Element/noscript": { - "modified": "2019-03-18T20:54:14.839Z", + "Web/JavaScript/Reference/Global_Objects/Object/__defineSetter__": { + "modified": "2020-10-15T22:34:14.134Z", "contributors": [ - "aryldo", - "jdruk", - "RobertoRodrigues" + "FernandoKGA" ] }, - "Web/HTML/Element/ol": { - "modified": "2019-03-23T23:00:24.283Z", + "Web/JavaScript/Reference/Global_Objects/Object/__lookupGetter__": { + "modified": "2020-10-15T22:01:00.255Z", "contributors": [ - "Aschlla", - "Jerffersonferreira", - "jnrbo" + "Learaujoss" ] }, - "Web/HTML/Element/optgroup": { - "modified": "2019-03-23T23:15:59.381Z", + "Web/JavaScript/Reference/Global_Objects/Object/__lookupSetter__": { + "modified": "2020-10-15T22:34:13.904Z", "contributors": [ - "teoli", - "MichelW" + "FernandoKGA" ] }, - "Web/HTML/Element/option": { - "modified": "2019-03-23T23:08:11.548Z", - "contributors": [ - "srsaude", - "masimao" + "Web/JavaScript/Reference/Global_Objects/Object/assign": { + "modified": "2020-10-15T21:38:23.637Z", + "contributors": [ + "nikolasFreitas", + "daniloazevedo", + "SphinxKnight", + "rafaelcavalcante", + "gugiserman", + "kdex", + "Jerffersonferreira", + "jhserodio", + "desoares1975", + "hbarcelos", + "HenriqueSilverio" ] }, - "Web/HTML/Element/p": { - "modified": "2020-10-15T21:30:09.624Z", + "Web/JavaScript/Reference/Global_Objects/Object/constructor": { + "modified": "2019-03-23T22:54:12.280Z", "contributors": [ - "warkentien2", - "RobMota", - "Ikebhering", - "jorgeclesio", - "marcosyoshihiro" + "chorajunior", + "lotharthesavior" ] }, - "Web/HTML/Element/picture": { - "modified": "2019-03-23T22:14:52.966Z", + "Web/JavaScript/Reference/Global_Objects/Object/create": { + "modified": "2019-03-21T08:33:13.941Z", "contributors": [ - "lionzo", - "luisfvieira", - "gepetobio", - "Fernandolrs", - "jtec-info" + "GabrielLidenor", + "andrekishimoto", + "andresales" ] }, - "Web/HTML/Element/pre": { - "modified": "2019-03-23T22:49:38.308Z", + "Web/JavaScript/Reference/Global_Objects/Object/defineProperties": { + "modified": "2019-03-23T22:07:15.693Z", "contributors": [ - "brunoaugustosilva", - "rai200890" + "KyryIx", + "LucianoDos" ] }, - "Web/HTML/Element/progress": { - "modified": "2020-10-15T21:19:22.513Z", + "Web/JavaScript/Reference/Global_Objects/Object/defineProperty": { + "modified": "2020-10-15T21:48:58.770Z", "contributors": [ - "fscholz", - "wbamberg", - "teoli", - "Athos" + "TavaresW-lima", + "luan0ap", + "luzeduardo", + "KyryIx", + "Glaydson", + "saulobmansur", + "joeltonmats", + "mshmeirelles", + "ronniery" ] }, - "Web/HTML/Element/q": { - "modified": "2020-10-15T21:53:18.961Z", + "Web/JavaScript/Reference/Global_Objects/Object/entries": { + "modified": "2020-10-15T21:53:04.423Z", "contributors": [ - "fscholz", - "murillomartins" + "mateusvelleda", + "vhfmag", + "cezaraugusto" ] }, - "Web/HTML/Element/rt": { - "modified": "2019-03-23T23:14:59.910Z", + "Web/JavaScript/Reference/Global_Objects/Object/freeze": { + "modified": "2019-05-16T22:14:31.830Z", "contributors": [ - "teoli", - "Haroldohc" + "jpsl00", + "HugoBex" ] }, - "Web/HTML/Element/ruby": { - "modified": "2019-03-23T23:15:11.786Z", + "Web/JavaScript/Reference/Global_Objects/Object/fromEntries": { + "modified": "2020-10-15T22:21:48.504Z", "contributors": [ - "ygormaximo", - "teoli", - "Haroldohc" + "soutokevin" ] }, - "Web/HTML/Element/s": { - "modified": "2020-10-15T22:24:14.325Z", + "Web/JavaScript/Reference/Global_Objects/Object/getOwnPropertyDescriptor": { + "modified": "2020-10-15T21:46:28.549Z", "contributors": [ - "Rogerio-Viana" + "fscholz", + "danilobarion1986" ] }, - "Web/HTML/Element/script": { - "modified": "2020-09-11T10:57:54.213Z", + "Web/JavaScript/Reference/Global_Objects/Object/getOwnPropertyDescriptors": { + "modified": "2020-10-15T22:34:14.161Z", "contributors": [ - "Aldrei", - "icaromh", - "wellington1993", - "Cloves23", - "kvnol" + "fernanduandrade" ] }, - "Web/HTML/Element/section": { - "modified": "2019-12-14T08:16:21.902Z", + "Web/JavaScript/Reference/Global_Objects/Object/getOwnPropertyNames": { + "modified": "2019-03-23T22:34:44.099Z", "contributors": [ - "lcsdeveloper", "soter19", - "digoribeiro", - "wbamberg", - "ArturGuedes", - "alisson-suzigan", - "dann", - "brunoeduardo", - "leosilva-rs", - "teoli", - "mazulo" + "deyvidyury" ] }, - "Web/HTML/Element/select": { - "modified": "2019-03-23T23:10:25.032Z", + "Web/JavaScript/Reference/Global_Objects/Object/getOwnPropertySymbols": { + "modified": "2020-10-15T22:34:14.971Z", "contributors": [ - "srsaude", - "danilovaz" + "fernanduandrade" ] }, - "Web/HTML/Element/span": { - "modified": "2020-10-15T21:22:22.723Z", + "Web/JavaScript/Reference/Global_Objects/Object/getPrototypeOf": { + "modified": "2019-03-23T22:50:02.364Z", "contributors": [ - "almeidaalex", - "GPrimola", - "teoli", - "vagnerleitte" + "victor-borges" ] }, - "Web/HTML/Element/strong": { - "modified": "2020-04-01T13:41:40.583Z", + "Web/JavaScript/Reference/Global_Objects/Object/hasOwnProperty": { + "modified": "2019-07-24T09:59:12.961Z", "contributors": [ - "hcnunes", - "Luan-Michel", - "wcqueiroz", - "helton-mori-dev", - "brandelli", - "fvaladares", - "Felipebros", - "israeljunior", - "Eric-Madureira" + "lucasramosi", + "andremarcondesteixeira", + "KennyMack", + "teoli", + "gigaPaul" ] }, - "Web/HTML/Element/style": { - "modified": "2019-03-23T23:03:07.094Z", + "Web/JavaScript/Reference/Global_Objects/Object/is": { + "modified": "2019-03-23T22:21:14.617Z", "contributors": [ - "jvitor222", - "jgborges" + "amaralbf" ] }, - "Web/HTML/Element/summary": { - "modified": "2019-03-23T23:39:14.453Z", + "Web/JavaScript/Reference/Global_Objects/Object/isExtensible": { + "modified": "2020-10-15T22:21:49.022Z", "contributors": [ - "wbamberg", - "andrekutianski", - "IgorGoncalves", - "teoli", - "LeonardoPacheco" + "soutokevin" ] }, - "Web/HTML/Element/table": { - "modified": "2019-03-23T23:19:11.495Z", + "Web/JavaScript/Reference/Global_Objects/Object/isFrozen": { + "modified": "2020-10-15T22:20:52.994Z", "contributors": [ - "lucasjmatias", - "teoli", - "pfurtado" + "pedroprado010" ] }, - "Web/HTML/Element/template": { - "modified": "2019-03-23T22:28:18.497Z", + "Web/JavaScript/Reference/Global_Objects/Object/isPrototypeOf": { + "modified": "2020-10-15T21:57:20.725Z", "contributors": [ - "josuecintra", - "claudiolcastro", - "raphaguasta" + "SilvaCoder" ] }, - "Web/HTML/Element/textarea": { - "modified": "2020-10-15T22:08:16.624Z", + "Web/JavaScript/Reference/Global_Objects/Object/isSealed": { + "modified": "2020-10-15T22:07:55.569Z", "contributors": [ - "brasmon8351", - "Leodma", - "RicardoLovatel" + "HelcioMacedo" ] }, - "Web/HTML/Element/tfoot": { - "modified": "2020-10-15T22:22:00.242Z", + "Web/JavaScript/Reference/Global_Objects/Object/keys": { + "modified": "2019-03-23T22:47:37.261Z", "contributors": [ - "chucky515" + "kdex", + "eduardojmatos", + "ronysilvati" ] }, - "Web/HTML/Element/th": { - "modified": "2020-10-15T22:28:54.791Z", + "Web/JavaScript/Reference/Global_Objects/Object/preventExtensions": { + "modified": "2020-10-15T21:57:55.623Z", "contributors": [ - "VitorBrreto", - "Rogerio-Viana" + "saarlander", + "LucianoDos" ] }, - "Web/HTML/Element/time": { - "modified": "2019-03-23T23:34:52.239Z", + "Web/JavaScript/Reference/Global_Objects/Object/propertyIsEnumerable": { + "modified": "2020-10-15T22:32:29.322Z", "contributors": [ - "wbamberg", - "guilhermeHenryk", - "AlanCezarAraujo", - "teoli", - "fnsc.luis" + "GuilhermeVazz" ] }, - "Web/HTML/Element/title": { - "modified": "2020-10-15T21:30:07.882Z", + "Web/JavaScript/Reference/Global_Objects/Object/proto": { + "modified": "2019-03-23T22:19:51.716Z", "contributors": [ - "jpreuss", - "RobMota", - "antoniojnr", - "marcosyoshihiro" + "KyryIx", + "Treze", + "manzettidenis" ] }, - "Web/HTML/Element/track": { - "modified": "2020-10-15T22:13:43.726Z", + "Web/JavaScript/Reference/Global_Objects/Object/seal": { + "modified": "2019-03-23T22:23:03.815Z", "contributors": [ - "Auugustocesar" + "SilvaCoder" ] }, - "Web/HTML/Element/ul": { - "modified": "2019-03-23T22:26:34.814Z", + "Web/JavaScript/Reference/Global_Objects/Object/setPrototypeOf": { + "modified": "2019-03-23T22:12:04.085Z", "contributors": [ - "Aschlla" + "KyryIx", + "gutoribeiro" ] }, - "Web/HTML/Element/var": { - "modified": "2019-03-23T22:44:24.198Z", + "Web/JavaScript/Reference/Global_Objects/Object/toLocaleString": { + "modified": "2020-10-15T22:34:13.476Z", "contributors": [ - "perrucho" + "FernandoKGA" ] }, - "Web/HTML/Element/wbr": { - "modified": "2019-03-23T23:15:00.705Z", + "Web/JavaScript/Reference/Global_Objects/Object/toSource": { + "modified": "2020-10-15T22:34:16.108Z", "contributors": [ - "wbamberg", - "SphinxKnight", - "josielrocha", - "teoli", - "Haroldohc" + "rafaelflorespereira", + "FernandoKGA" ] }, - "Web/HTML/Elementos_block-level": { - "modified": "2020-02-07T04:59:22.048Z", + "Web/JavaScript/Reference/Global_Objects/Object/toString": { + "modified": "2019-03-23T23:07:48.389Z", "contributors": [ - "SphinxKnight", - "rcsilvadev", - "klisostom", - "jorgeclesio", - "MarcoBrunoBR", - "jaimemaretoli" + "AleCorrea", + "klzns" ] }, - "Web/HTML/Global_attributes": { - "modified": "2019-03-23T22:29:49.023Z", + "Web/JavaScript/Reference/Global_Objects/Object/valueOf": { + "modified": "2020-10-15T22:00:42.323Z", "contributors": [ - "GPrimola", - "UelioNobre", - "andrekutianski", - "teoli" + "MarcceloSelv" ] }, - "Web/HTML/Global_attributes/accesskey": { - "modified": "2020-10-15T22:22:48.066Z", + "Web/JavaScript/Reference/Global_Objects/Object/values": { + "modified": "2019-03-23T22:25:57.378Z", "contributors": [ - "jovair", - "brunopulis" + "gabefurlan" ] }, - "Web/HTML/Global_attributes/autocapitalize": { - "modified": "2020-10-15T22:30:46.263Z", + "Web/JavaScript/Reference/Global_Objects/Promise": { + "modified": "2020-10-19T07:58:10.031Z", "contributors": [ - "klayton" + "SphinxKnight", + "JulioDinis", + "henriquejsfj", + "mateusvelleda", + "node1111", + "ThalesRod", + "rafaelcavalcante", + "eduardoyutaka", + "WBerredo", + "filipetorres", + "fernando.ghisi", + "kdex", + "BrOrlandi", + "gabrielagabriel", + "caio_araujo", + "pauloaug", + "vbmendes", + "teoli", + "RyanFilho", + "keuller" ] }, - "Web/HTML/Global_attributes/class": { - "modified": "2019-03-23T22:29:54.038Z", + "Web/JavaScript/Reference/Global_Objects/Promise/all": { + "modified": "2020-10-15T21:38:19.432Z", "contributors": [ - "fcard" + "SphinxKnight", + "igorsamado", + "renatovassao", + "fernando-camacho", + "gustavohenke" ] }, - "Web/HTML/Global_attributes/contenteditable": { - "modified": "2020-10-15T22:31:33.906Z", + "Web/JavaScript/Reference/Global_Objects/Promise/allSettled": { + "modified": "2020-10-23T13:34:53.762Z", "contributors": [ - "ooVictorFranco" + "gabrielfdg10", + "rafaelblink" ] }, - "Web/HTML/Global_attributes/data-*": { - "modified": "2019-03-23T22:16:25.954Z", + "Web/JavaScript/Reference/Global_Objects/Promise/catch": { + "modified": "2020-10-15T21:46:01.585Z", "contributors": [ - "linconkusunoki", - "julianopoveda" + "Ronkiro", + "caiouehara", + "toruticas", + "fscholz", + "vvinhas" ] }, - "Web/HTML/Global_attributes/hidden": { - "modified": "2020-11-23T09:20:48.582Z", + "Web/JavaScript/Reference/Global_Objects/Promise/finally": { + "modified": "2020-10-15T22:09:11.734Z", "contributors": [ - "gustavando", - "eduardovivi", - "gulima", - "sheldonled" + "Rovelcio", + "tuxpilgrim" ] }, - "Web/HTML/Global_attributes/id": { - "modified": "2019-03-18T20:38:37.479Z", + "Web/JavaScript/Reference/Global_Objects/Promise/race": { + "modified": "2019-03-23T22:49:35.540Z", "contributors": [ - "digoribeiro", - "cristianofromagio" + "SphinxKnight", + "gustavohenke" ] }, - "Web/HTML/Global_attributes/itemprop": { - "modified": "2019-03-23T22:05:54.045Z", + "Web/JavaScript/Reference/Global_Objects/Promise/reject": { + "modified": "2020-10-15T21:46:17.994Z", "contributors": [ - "lucashe1997" + "fscholz", + "vbmendes" ] }, - "Web/HTML/Global_attributes/lang": { - "modified": "2020-10-15T22:14:08.418Z", + "Web/JavaScript/Reference/Global_Objects/Promise/resolve": { + "modified": "2020-10-15T21:49:25.849Z", "contributors": [ - "ViniciusMatias" + "igorc2", + "nunks", + "teogenesmoura", + "BrOrlandi", + "iFgR" ] }, - "Web/HTML/Global_attributes/tabindex": { - "modified": "2020-05-19T09:39:36.399Z", + "Web/JavaScript/Reference/Global_Objects/Promise/then": { + "modified": "2019-03-23T22:58:50.489Z", "contributors": [ - "lucasecdb", - "cristianofromagio" + "SphinxKnight", + "olegon", + "rafaelmatos20", + "lypborges" ] }, - "Web/HTML/Global_attributes/title": { - "modified": "2019-03-23T22:08:26.903Z", + "Web/JavaScript/Reference/Global_Objects/Proxy": { + "modified": "2020-10-15T21:51:59.693Z", "contributors": [ - "alisson-suzigan" + "renefb", + "Fernandolrs", + "rafaelbertelli", + "wallacemaxters", + "mshmeirelles" ] }, - "Web/HTML/HTML5": { - "modified": "2019-11-20T18:24:04.168Z", + "Web/JavaScript/Reference/Global_Objects/ReferenceError": { + "modified": "2019-03-23T22:27:53.828Z", "contributors": [ - "sambrmg", - "Fernandolrs", - "matheussilvasantos", - "netoguimaraes", - "jaimemaretoli", - "macalha", - "teoli", - "lfelipev", - "leandro2103", - "rodrigopadula", - "mauricio.araldi", - "PedroFelipe", - "phenriqueleao", - "apereira2001", - "RodrigoAlmeidaSp" + "liliansilva" ] }, - "Web/HTML/HTML5/Introduction_to_HTML5": { - "modified": "2019-03-23T23:38:50.368Z", + "Web/JavaScript/Reference/Global_Objects/Reflect": { + "modified": "2020-06-26T00:19:16.395Z", "contributors": [ - "flmidia", - "teoli", - "eduardodx" + "Marcelo-Rodrigues", + "chicoria", + "Keony", + "Pedrinho", + "eduardoyuidy", + "fscholz" ] }, - "Web/HTML/Inline_elemente": { - "modified": "2019-03-23T23:13:50.417Z", + "Web/JavaScript/Reference/Global_Objects/Reflect/apply": { + "modified": "2019-03-23T22:25:21.456Z", "contributors": [ - "rennan.martini" + "alinemorelli" ] }, - "Web/HTML/Optimizing_your_pages_for_speculative_parsing": { - "modified": "2019-03-23T23:35:26.036Z", + "Web/JavaScript/Reference/Global_Objects/Reflect/construct": { + "modified": "2020-10-15T22:17:42.172Z", "contributors": [ - "teoli", - "claudio.adalberto.silva" + "felipefabreu" ] }, - "Web/HTML/Preloading_content": { - "modified": "2020-10-15T22:14:26.980Z", + "Web/JavaScript/Reference/Global_Objects/Reflect/defineProperty": { + "modified": "2020-10-15T22:31:07.123Z", "contributors": [ - "BeatrizCavallieri", - "w4rlooc", - "duduindo", - "philgruneich", - "tuliocribeiro", - "Expablo" + "Marcelo-Rodrigues" ] }, - "Web/HTML/Quirks_Mode_and_Standards_Mode": { - "modified": "2019-03-23T23:05:38.681Z", + "Web/JavaScript/Reference/Global_Objects/Reflect/set": { + "modified": "2019-03-18T20:36:06.411Z", "contributors": [ - "chrisdavidmills", - "criskubiaki", - "luisOtavio", - "macalha" + "georgelima" ] }, - "Web/HTML/ReferenciaHTML": { - "modified": "2019-09-09T07:19:45.753Z", + "Web/JavaScript/Reference/Global_Objects/RegExp": { + "modified": "2019-11-07T22:08:21.265Z", "contributors": [ - "SphinxKnight", - "julio-elipse", + "helton-mori-dev", + "jaimemnds", + "patrickjonesdsc", "wbamberg", - "dricupello", - "fabianosantos.net" + "danieltex", + "matheussilvasantos", + "Bruno_Lopes" ] }, - "Web/HTML/Using_HTML5_audio_and_video": { - "modified": "2019-03-23T23:39:05.441Z", + "Web/JavaScript/Reference/Global_Objects/RegExp/compile": { + "modified": "2020-10-15T22:19:19.959Z", "contributors": [ - "diogocezar", - "rubensnovaes", - "teoli", - "just_peter", - "Junior201313", - "eduardodx", - "LeonardoPacheco" + "Fernandolrs" ] }, - "Web/HTML/Using_the_application_cache": { - "modified": "2019-03-23T23:33:12.384Z", + "Web/JavaScript/Reference/Global_Objects/RegExp/exec": { + "modified": "2019-03-23T22:11:00.508Z", "contributors": [ - "Etrusco", - "isaiasBR", - "bruno-vaz", - "Jerffersonferreira", - "fabianosantos.net", - "wmsbill", - "rogeriomoraessp", - "teoli", - "ethertank", - "netfuzzer123" + "andremendonca", + "rafaelcavalcante", + "WagnerSilveira" ] }, - "Web/HTML/favicon": { - "modified": "2019-05-05T00:27:21.844Z", + "Web/JavaScript/Reference/Global_Objects/RegExp/ignoreCase": { + "modified": "2020-10-15T22:33:56.561Z", "contributors": [ - "willianpascoal" + "alvarez86" ] }, - "Web/HTML/formatos_midia_suportados": { - "modified": "2019-03-23T22:44:08.372Z", + "Web/JavaScript/Reference/Global_Objects/RegExp/sticky": { + "modified": "2020-10-15T22:18:20.521Z", "contributors": [ - "MarceloBonifazio", - "yuriploc", - "brunoeduardo" - ] - }, - "Web/HTML/microformatos": { - "modified": "2019-09-03T11:27:26.864Z", - "contributors": [ - "luisfvieira" + "saulobmansur" ] }, - "Web/HTTP": { - "modified": "2020-09-23T19:42:27.917Z", + "Web/JavaScript/Reference/Global_Objects/RegExp/test": { + "modified": "2020-09-05T00:20:04.652Z", "contributors": [ - "viniciusfinger", - "Rech", - "julio-elipse", - "0limpi0", - "Schieck", - "andrekutianski", - "jeanonline", - "akwaryo", - "megaday", - "Anonymous" + "alvarez86", + "Bagata", + "igorc2", + "felipericardo", + "iFgR" ] }, - "Web/HTTP/Authentication": { - "modified": "2019-03-18T20:54:05.177Z", + "Web/JavaScript/Reference/Global_Objects/Set": { + "modified": "2020-10-15T21:30:09.930Z", "contributors": [ - "ViniciusMatias" + "wellpardim10", + "leo-ls", + "emiyasaki", + "GarkGarcia", + "SphinxKnight", + "Davidpsjunior", + "EdJr" ] }, - "Web/HTTP/Basico_sobre_HTTP": { - "modified": "2019-03-18T20:54:14.334Z", + "Web/JavaScript/Reference/Global_Objects/Set/add": { + "modified": "2019-08-12T18:33:12.776Z", "contributors": [ - "mauromattos00", - "wdot789" + "lucsrods", + "Davidpsjunior" ] }, - "Web/HTTP/Basico_sobre_HTTP/Identifying_resources_on_the_Web": { - "modified": "2019-03-23T22:04:02.281Z", + "Web/JavaScript/Reference/Global_Objects/Set/clear": { + "modified": "2019-03-23T22:31:32.028Z", "contributors": [ - "krisfertig", - "rbertoche", - "marciioluucas" + "Davidpsjunior" ] }, - "Web/HTTP/Basico_sobre_HTTP/MIME_types": { - "modified": "2019-12-16T17:35:45.160Z", + "Web/JavaScript/Reference/Global_Objects/Set/delete": { + "modified": "2019-03-23T22:31:37.586Z", "contributors": [ - "JpOnline", - "hugojunior", - "marcusedu" + "Davidpsjunior" ] }, - "Web/HTTP/Basico_sobre_HTTP/MIME_types/Complete_list_of_MIME_types": { - "modified": "2019-03-23T22:04:21.860Z", + "Web/JavaScript/Reference/Global_Objects/Set/entries": { + "modified": "2019-03-23T22:31:39.376Z", "contributors": [ - "khalid_ait", - "berbare", - "lpdouglas" + "Davidpsjunior" ] }, - "Web/HTTP/CORS/Errors": { - "modified": "2019-03-18T21:20:00.561Z", + "Web/JavaScript/Reference/Global_Objects/Set/has": { + "modified": "2020-10-15T22:22:02.385Z", "contributors": [ - "nchevobbe" + "lucsrods" ] }, - "Web/HTTP/CORS/Errors/CORSDidNotSucceed": { - "modified": "2020-07-16T19:35:30.072Z", + "Web/JavaScript/Reference/Global_Objects/Set/values": { + "modified": "2020-10-15T22:22:15.454Z", "contributors": [ - "uilmo.carneiro", - "giovana-morais" + "chicabomb" ] }, - "Web/HTTP/CORS/Errors/CORSMissingAllowOrigin": { - "modified": "2019-08-15T10:13:47.925Z", + "Web/JavaScript/Reference/Global_Objects/String": { + "modified": "2019-03-23T23:14:51.438Z", "contributors": [ - "tinogomes" + "wbamberg", + "coloringa", + "brunopulis", + "user2015", + "Marcus_xpt", + "rmello", + "teoli", + "nicholasess", + "fscholz" ] }, - "Web/HTTP/CORS/Errors/CORSNotSupportingCredentials": { - "modified": "2020-11-04T12:36:34.140Z", + "Web/JavaScript/Reference/Global_Objects/String/@@iterator": { + "modified": "2020-10-16T00:11:07.868Z", "contributors": [ - "matruskan" + "ricardo.passos.cr", + "vmardss" ] }, - "Web/HTTP/CORS/Errors/CORSRequestNotHttp": { - "modified": "2020-07-24T12:02:11.941Z", + "Web/JavaScript/Reference/Global_Objects/String/Trim": { + "modified": "2020-10-16T00:00:03.933Z", "contributors": [ - "aguiar02", - "gabrielalves96" + "ricardo.passos.cr", + "coloringa", + "GlauberF", + "Webysther" ] }, - "Web/HTTP/CSP": { - "modified": "2020-10-20T08:49:00.342Z", + "Web/JavaScript/Reference/Global_Objects/String/anchor": { + "modified": "2020-10-15T22:35:00.314Z", "contributors": [ - "lucasrenod", - "cafweb", - "macalha", - "rosemberglpi", - "hllrsr", - "jwhitlock", - "pedrotcaraujo", - "meldenne" + "ricardo.passos.cr" ] }, - "Web/HTTP/Compressão": { - "modified": "2019-03-18T21:19:41.947Z", + "Web/JavaScript/Reference/Global_Objects/String/big": { + "modified": "2020-10-15T22:35:01.913Z", "contributors": [ - "krisfertig" + "ricardo.passos.cr" ] }, - "Web/HTTP/Content_negotiation": { - "modified": "2019-10-26T16:55:23.137Z", + "Web/JavaScript/Reference/Global_Objects/String/blink": { + "modified": "2020-10-15T22:35:01.790Z", "contributors": [ - "felipelube", - "Jürgen Jeka" + "ricardo.passos.cr" ] }, - "Web/HTTP/Content_negotiation/List_of_default_Accept_values": { - "modified": "2019-06-29T15:45:26.059Z", + "Web/JavaScript/Reference/Global_Objects/String/bold": { + "modified": "2020-10-15T22:35:02.301Z", "contributors": [ - "rafaelff" + "ricardo.passos.cr" ] }, - "Web/HTTP/Controle_Acesso_CORS": { - "modified": "2020-10-15T21:51:46.835Z", + "Web/JavaScript/Reference/Global_Objects/String/charAt": { + "modified": "2020-10-09T12:22:30.996Z", "contributors": [ - "kenchen12", - "herculan0", - "joao-rafael", - "Rondinelly", - "lshumbleprogrammer", - "rbuzatto", - "paulocoe", - "marcosalpereira", - "rodolphopicolo", - "guilhermeiobbi", - "art", - "xikaos", - "andrekutianski" + "ricardo.passos.cr", + "ShadYueh", + "LucianoBritis" ] }, - "Web/HTTP/Cookies": { - "modified": "2020-05-19T15:14:13.958Z", + "Web/JavaScript/Reference/Global_Objects/String/charCodeAt": { + "modified": "2020-10-09T12:26:04.591Z", "contributors": [ - "eestein", - "helton-mori-dev", - "julio-elipse", - "gabcs07" + "ricardo.passos.cr", + "proxy-chan", + "NicholasBraga" ] }, - "Web/HTTP/Feature_Policy": { - "modified": "2020-10-15T22:32:05.540Z", + "Web/JavaScript/Reference/Global_Objects/String/codePointAt": { + "modified": "2020-11-02T09:15:45.248Z", "contributors": [ - "mfuji09" + "FernandoKGA", + "ricardo.passos.cr" ] }, - "Web/HTTP/Feature_Policy/Using_Feature_Policy": { - "modified": "2020-07-20T20:48:22.250Z", + "Web/JavaScript/Reference/Global_Objects/String/concat": { + "modified": "2020-10-09T16:58:32.740Z", "contributors": [ - "FernandoKGA" + "ricardo.passos.cr", + "gusleindecker", + "LucianoMedeiros" ] }, - "Web/HTTP/Gerenciamento_de_Conexão_em_HTTP_1.x": { - "modified": "2019-03-23T22:25:52.431Z", + "Web/JavaScript/Reference/Global_Objects/String/endsWith": { + "modified": "2020-10-15T21:56:21.169Z", "contributors": [ - "Fernandolrs", - "DiegoTelles" + "ricardo.passos.cr", + "houstondapaz", + "marceloogeda" ] }, - "Web/HTTP/HTTP": { - "modified": "2020-01-20T16:42:39.746Z", + "Web/JavaScript/Reference/Global_Objects/String/fixed": { + "modified": "2020-10-15T22:35:03.509Z", "contributors": [ - "Neiva07", - "henry700", - "GPrimola", - "coloringa" + "ricardo.passos.cr" ] }, - "Web/HTTP/Headers": { - "modified": "2020-08-02T21:34:50.722Z", + "Web/JavaScript/Reference/Global_Objects/String/fontcolor": { + "modified": "2020-10-15T22:35:02.895Z", "contributors": [ - "gutoribeiro", - "davidalves1", - "eziotristao", - "helton-mori-dev", - "secato", - "pedroberbel", - "GPrimola", - "luiz787", - "Lazz", - "yagoazedias", - "fscholz", - "andrekutianski" + "ricardo.passos.cr" ] }, - "Web/HTTP/Headers/Accept": { - "modified": "2020-10-15T22:26:07.441Z", + "Web/JavaScript/Reference/Global_Objects/String/fontsize": { + "modified": "2020-10-15T22:35:04.374Z", "contributors": [ - "FernandoKGA" + "ricardo.passos.cr" ] }, - "Web/HTTP/Headers/Accept-CH": { - "modified": "2020-10-15T22:26:08.419Z", + "Web/JavaScript/Reference/Global_Objects/String/fromCharCode": { + "modified": "2020-10-15T23:47:01.302Z", "contributors": [ - "FernandoKGA" + "ricardo.passos.cr", + "NicholasBraga" ] }, - "Web/HTTP/Headers/Accept-CH-Lifetime": { - "modified": "2020-10-15T22:26:09.466Z", + "Web/JavaScript/Reference/Global_Objects/String/fromCodePoint": { + "modified": "2020-10-09T12:25:02.641Z", "contributors": [ - "FernandoKGA" + "ricardo.passos.cr", + "LucasPereira", + "SphinxKnight", + "CesarBalzer" ] }, - "Web/HTTP/Headers/Accept-Charset": { - "modified": "2020-10-15T22:26:09.572Z", + "Web/JavaScript/Reference/Global_Objects/String/includes": { + "modified": "2020-10-15T21:41:15.485Z", "contributors": [ - "FernandoKGA" + "ricardo.passos.cr", + "brasmon8351", + "mateusvelleda", + "SphinxKnight", + "marlonmleite", + "brunolellis" ] }, - "Web/HTTP/Headers/Accept-Encoding": { - "modified": "2020-10-15T22:26:26.705Z", + "Web/JavaScript/Reference/Global_Objects/String/indexOf": { + "modified": "2020-10-15T21:28:05.356Z", "contributors": [ - "FernandoKGA" + "ricardo.passos.cr", + "mateusvelleda", + "Leokuma", + "suyfranca", + "badiale", + "vspedr", + "diegoarcega", + "teoli", + "nicholasess" ] }, - "Web/HTTP/Headers/Accept-Language": { - "modified": "2020-10-15T22:21:08.686Z", + "Web/JavaScript/Reference/Global_Objects/String/italics": { + "modified": "2020-10-15T22:35:03.387Z", "contributors": [ - "kibutzzz" + "ricardo.passos.cr" ] }, - "Web/HTTP/Headers/Accept-Patch": { - "modified": "2020-10-15T22:26:27.309Z", + "Web/JavaScript/Reference/Global_Objects/String/lastIndexOf": { + "modified": "2020-10-09T15:25:04.260Z", "contributors": [ - "FernandoKGA" + "ricardo.passos.cr", + "mfelippi" ] }, - "Web/HTTP/Headers/Accept-Ranges": { - "modified": "2020-10-15T22:26:36.739Z", + "Web/JavaScript/Reference/Global_Objects/String/length": { + "modified": "2020-10-10T15:37:30.908Z", "contributors": [ - "FernandoKGA" + "ricardo.passos.cr", + "Gemacedo", + "solangealmn", + "fernandomalmeida" ] }, - "Web/HTTP/Headers/Access-Control-Allow-Credentials": { - "modified": "2020-10-15T22:26:50.350Z", + "Web/JavaScript/Reference/Global_Objects/String/link": { + "modified": "2020-10-15T22:35:03.504Z", "contributors": [ - "FernandoKGA" + "ricardo.passos.cr" ] }, - "Web/HTTP/Headers/Access-Control-Allow-Headers": { - "modified": "2020-10-15T22:26:53.489Z", + "Web/JavaScript/Reference/Global_Objects/String/localeCompare": { + "modified": "2020-11-02T09:27:21.616Z", "contributors": [ - "FernandoKGA" + "FernandoKGA", + "ricardo.passos.cr" ] }, - "Web/HTTP/Headers/Access-Control-Allow-Methods": { - "modified": "2020-10-15T22:26:56.233Z", + "Web/JavaScript/Reference/Global_Objects/String/match": { + "modified": "2020-10-10T11:58:28.242Z", "contributors": [ - "FernandoKGA" + "ricardo.passos.cr", + "brasmon8351", + "Laercio89", + "jgspaiva", + "soutomario", + "henriquejensen", + "naccarati", + "teoli", + "Nathalino_Pacheco" ] }, - "Web/HTTP/Headers/Access-Control-Allow-Origin": { - "modified": "2020-10-15T22:02:18.454Z", + "Web/JavaScript/Reference/Global_Objects/String/matchAll": { + "modified": "2020-10-15T22:35:13.784Z", "contributors": [ - "francinysalles", - "jkdrangel" + "ricardo.passos.cr" ] }, - "Web/HTTP/Headers/Access-Control-Expose-Headers": { - "modified": "2020-10-15T22:27:11.135Z", + "Web/JavaScript/Reference/Global_Objects/String/normalize": { + "modified": "2020-10-15T21:57:14.941Z", "contributors": [ - "FernandoKGA" + "ricardo.passos.cr", + "andrefranca92" ] }, - "Web/HTTP/Headers/Access-Control-Max-Age": { - "modified": "2020-10-15T22:27:11.158Z", + "Web/JavaScript/Reference/Global_Objects/String/padEnd": { + "modified": "2020-10-15T22:09:36.225Z", "contributors": [ - "FernandoKGA" + "ricardo.passos.cr", + "rbuzatto" ] }, - "Web/HTTP/Headers/Access-Control-Request-Headers": { - "modified": "2020-10-15T22:07:42.625Z", + "Web/JavaScript/Reference/Global_Objects/String/padStart": { + "modified": "2020-10-15T22:12:29.113Z", "contributors": [ - "EversonRRMoura" + "ricardo.passos.cr", + "rbuzatto" ] }, - "Web/HTTP/Headers/Access-Control-Request-Method": { - "modified": "2020-10-15T22:27:11.209Z", + "Web/JavaScript/Reference/Global_Objects/String/raw": { + "modified": "2020-11-02T09:59:22.925Z", "contributors": [ - "FernandoKGA" + "FernandoKGA", + "ricardo.passos.cr", + "Werner1201" ] }, - "Web/HTTP/Headers/Age": { - "modified": "2020-10-15T22:07:25.015Z", + "Web/JavaScript/Reference/Global_Objects/String/repeat": { + "modified": "2020-10-15T22:05:59.737Z", "contributors": [ - "jamrocha" + "ricardo.passos.cr", + "liddack" ] }, - "Web/HTTP/Headers/Allow": { - "modified": "2020-02-11T10:36:24.890Z", + "Web/JavaScript/Reference/Global_Objects/String/replace": { + "modified": "2020-10-11T21:06:21.721Z", "contributors": [ - "FernandoKGA" + "ricardo.passos.cr", + "PedroMarianoAlmeida", + "xitiu", + "soutomario", + "BrOrlandi", + "solangealmn", + "acdcjunior", + "mazulo" ] }, - "Web/HTTP/Headers/Alt-Svc": { - "modified": "2020-10-15T22:27:23.038Z", + "Web/JavaScript/Reference/Global_Objects/String/replaceAll": { + "modified": "2020-10-15T22:33:05.718Z", "contributors": [ + "ricardo.passos.cr", "FernandoKGA" ] }, - "Web/HTTP/Headers/Authorization": { - "modified": "2020-02-15T01:32:30.446Z", + "Web/JavaScript/Reference/Global_Objects/String/search": { + "modified": "2020-10-13T21:00:52.211Z", "contributors": [ - "FernandoKGA" + "ricardo.passos.cr", + "stroparo" ] }, - "Web/HTTP/Headers/Cache-Control": { - "modified": "2020-10-22T20:01:06.178Z", + "Web/JavaScript/Reference/Global_Objects/String/slice": { + "modified": "2020-10-13T21:05:35.776Z", "contributors": [ - "rogeriodegoiania", - "jamrocha" + "ricardo.passos.cr", + "miguel.velasques", + "nstseek", + "gkaneto", + "andresmachado", + "brunopulis" ] }, - "Web/HTTP/Headers/Clear-Site-Data": { - "modified": "2020-10-15T22:27:31.884Z", + "Web/JavaScript/Reference/Global_Objects/String/small": { + "modified": "2020-10-15T22:35:17.508Z", "contributors": [ - "FernandoKGA" + "ricardo.passos.cr" ] }, - "Web/HTTP/Headers/Conexão": { - "modified": "2020-10-15T22:08:10.001Z", + "Web/JavaScript/Reference/Global_Objects/String/split": { + "modified": "2020-10-13T22:09:32.003Z", "contributors": [ - "FernandoKGA", - "duduindo", - "mrseoliveira" + "ricardo.passos.cr", + "gabriel_cadu", + "NicholasBraga" ] }, - "Web/HTTP/Headers/Content-Disposition": { - "modified": "2020-10-15T22:27:55.693Z", + "Web/JavaScript/Reference/Global_Objects/String/startsWith": { + "modified": "2020-10-15T21:41:07.642Z", "contributors": [ - "eduardocruz", - "FernandoKGA" + "ricardo.passos.cr", + "santoyx", + "georgebias", + "SphinxKnight", + "renanmfd", + "eklam" ] }, - "Web/HTTP/Headers/Content-Encoding": { - "modified": "2020-10-15T22:27:52.523Z", + "Web/JavaScript/Reference/Global_Objects/String/strike": { + "modified": "2020-10-15T22:35:17.757Z", "contributors": [ - "FernandoKGA" + "ricardo.passos.cr" ] }, - "Web/HTTP/Headers/Content-Language": { - "modified": "2020-10-15T22:14:20.024Z", + "Web/JavaScript/Reference/Global_Objects/String/sub": { + "modified": "2020-10-14T00:19:40.694Z", "contributors": [ - "coloringa" + "ricardo.passos.cr", + "netstudenton" ] }, - "Web/HTTP/Headers/Content-Length": { - "modified": "2020-10-15T22:09:26.720Z", + "Web/JavaScript/Reference/Global_Objects/String/substr": { + "modified": "2020-10-15T21:59:06.950Z", "contributors": [ - "jamrocha" + "ricardo.passos.cr", + "marceloogeda" ] }, - "Web/HTTP/Headers/Content-Location": { - "modified": "2020-10-15T22:25:41.262Z", + "Web/JavaScript/Reference/Global_Objects/String/substring": { + "modified": "2020-10-14T01:32:35.715Z", "contributors": [ - "FernandoKGA" + "ricardo.passos.cr", + "evertonsilva", + "gusleindecker", + "brunodsgn", + "luis.kaufmann.silva" ] }, - "Web/HTTP/Headers/Content-Range": { - "modified": "2020-10-15T22:29:25.800Z", + "Web/JavaScript/Reference/Global_Objects/String/sup": { + "modified": "2020-10-15T22:35:18.049Z", "contributors": [ - "FernandoKGA" + "ricardo.passos.cr" ] }, - "Web/HTTP/Headers/Content-Security-Policy": { - "modified": "2020-10-15T22:29:29.169Z", + "Web/JavaScript/Reference/Global_Objects/String/toLocaleLowerCase": { + "modified": "2020-11-02T09:37:28.971Z", "contributors": [ - "FernandoKGA" + "FernandoKGA", + "ricardo.passos.cr" ] }, - "Web/HTTP/Headers/Content-Security-Policy-Report-Only": { - "modified": "2020-10-15T22:31:19.501Z", + "Web/JavaScript/Reference/Global_Objects/String/toLocaleUpperCase": { + "modified": "2020-11-02T09:32:27.542Z", "contributors": [ - "FernandoKGA" + "FernandoKGA", + "ricardo.passos.cr" ] }, - "Web/HTTP/Headers/Content-Type": { - "modified": "2020-10-15T21:55:31.773Z", + "Web/JavaScript/Reference/Global_Objects/String/toLowerCase": { + "modified": "2020-10-14T02:14:21.974Z", "contributors": [ - "khaosdoctor" + "ricardo.passos.cr", + "JaconsMorais" ] }, - "Web/HTTP/Headers/Cookie": { - "modified": "2020-10-15T22:29:26.513Z", + "Web/JavaScript/Reference/Global_Objects/String/toSource": { + "modified": "2020-10-14T02:19:39.086Z", "contributors": [ - "FernandoKGA" + "ricardo.passos.cr", + "teoli", + "netstudenton" ] }, - "Web/HTTP/Headers/Cookie2": { - "modified": "2020-10-15T22:29:27.166Z", + "Web/JavaScript/Reference/Global_Objects/String/toString": { + "modified": "2020-10-14T02:23:54.563Z", "contributors": [ - "FernandoKGA" + "ricardo.passos.cr", + "mfelippi" ] }, - "Web/HTTP/Headers/Cross-Origin-Resource-Policy": { - "modified": "2020-10-15T22:29:30.347Z", + "Web/JavaScript/Reference/Global_Objects/String/toUpperCase": { + "modified": "2020-10-15T23:55:31.039Z", "contributors": [ - "FernandoKGA" + "ricardo.passos.cr", + "PTPAC", + "marcelobonatto" ] }, - "Web/HTTP/Headers/DNT": { - "modified": "2020-10-15T22:29:39.511Z", + "Web/JavaScript/Reference/Global_Objects/String/trimEnd": { + "modified": "2020-10-16T00:03:20.779Z", "contributors": [ + "ricardo.passos.cr", + "pedrollmatias", "FernandoKGA" ] }, - "Web/HTTP/Headers/DPR": { - "modified": "2020-10-15T22:29:39.224Z", + "Web/JavaScript/Reference/Global_Objects/String/trimStart": { + "modified": "2020-10-16T00:05:21.145Z", "contributors": [ + "ricardo.passos.cr", "FernandoKGA" ] }, - "Web/HTTP/Headers/Date": { - "modified": "2020-10-15T22:31:16.510Z", + "Web/JavaScript/Reference/Global_Objects/String/valueOf": { + "modified": "2020-10-16T00:08:38.848Z", "contributors": [ - "FernandoKGA" + "ricardo.passos.cr", + "rodcantanhede" ] }, - "Web/HTTP/Headers/Device-Memory": { - "modified": "2020-10-15T22:31:19.616Z", + "Web/JavaScript/Reference/Global_Objects/Symbol": { + "modified": "2020-09-15T10:43:33.383Z", "contributors": [ - "FernandoKGA" + "fernanduandrade", + "leandrobudau", + "iurevguimaraes", + "emersonbroga", + "SphinxKnight", + "colares", + "kdex", + "Grohden", + "raduq", + "astesio", + "AlanCezarAraujo" ] }, - "Web/HTTP/Headers/Digest": { - "modified": "2020-10-15T22:31:16.637Z", + "Web/JavaScript/Reference/Global_Objects/Symbol/asyncIterator": { + "modified": "2020-10-15T22:34:24.437Z", "contributors": [ - "FernandoKGA" + "fernanduandrade" ] }, - "Web/HTTP/Headers/ETag": { - "modified": "2020-10-15T22:31:10.148Z", + "Web/JavaScript/Reference/Global_Objects/Symbol/description": { + "modified": "2020-10-15T22:34:29.672Z", "contributors": [ - "deniscapeto", - "augustowebd.mozilla", - "MoraisG" + "fernanduandrade" ] }, - "Web/HTTP/Headers/Early-Data": { - "modified": "2020-10-15T22:31:17.142Z", + "Web/JavaScript/Reference/Global_Objects/Symbol/hasInstance": { + "modified": "2019-03-23T22:24:54.749Z", "contributors": [ - "FernandoKGA" + "GoToLoop" ] }, - "Web/HTTP/Headers/Expect": { - "modified": "2020-10-15T22:31:20.718Z", + "Web/JavaScript/Reference/Global_Objects/Symbol/isConcatSpreadable": { + "modified": "2020-10-15T22:34:26.103Z", "contributors": [ - "FernandoKGA" + "fernanduandrade" ] }, - "Web/HTTP/Headers/Expect-CT": { - "modified": "2020-10-15T22:31:22.739Z", + "Web/JavaScript/Reference/Global_Objects/Symbol/iterator": { + "modified": "2020-10-15T22:34:27.073Z", "contributors": [ - "FernandoKGA" + "fernanduandrade" ] }, - "Web/HTTP/Headers/Expires": { - "modified": "2020-10-15T22:07:21.086Z", + "Web/JavaScript/Reference/Global_Objects/Symbol/match": { + "modified": "2020-10-15T22:34:29.871Z", "contributors": [ - "SphinxKnight", - "jamrocha" + "fernanduandrade" ] }, - "Web/HTTP/Headers/Feature-Policy": { - "modified": "2020-10-15T22:32:03.095Z", + "Web/JavaScript/Reference/Global_Objects/Symbol/matchAll": { + "modified": "2020-10-15T22:34:29.939Z", "contributors": [ - "FernandoKGA" + "fernanduandrade" ] }, - "Web/HTTP/Headers/Forwarded": { - "modified": "2020-10-15T22:31:19.681Z", + "Web/JavaScript/Reference/Global_Objects/Symbol/replace": { + "modified": "2020-10-15T22:34:29.718Z", "contributors": [ - "FernandoKGA" + "fernanduandrade" ] }, - "Web/HTTP/Headers/From": { - "modified": "2020-10-15T22:31:17.738Z", + "Web/JavaScript/Reference/Global_Objects/Symbol/search": { + "modified": "2020-10-15T22:34:30.027Z", "contributors": [ - "FernandoKGA" + "fernanduandrade" ] }, - "Web/HTTP/Headers/Host": { - "modified": "2020-10-15T21:56:25.368Z", + "Web/JavaScript/Reference/Global_Objects/Symbol/species": { + "modified": "2020-10-15T22:34:30.020Z", "contributors": [ - "cesarvn2010" + "fernanduandrade" ] }, - "Web/HTTP/Headers/If-Match": { - "modified": "2020-10-15T22:31:31.434Z", + "Web/JavaScript/Reference/Global_Objects/Symbol/split": { + "modified": "2020-10-15T22:34:24.566Z", "contributors": [ - "FernandoKGA" + "fernanduandrade" ] }, - "Web/HTTP/Headers/If-Modified-Since": { - "modified": "2020-10-15T21:56:17.428Z", + "Web/JavaScript/Reference/Global_Objects/Symbol/toPrimitive": { + "modified": "2020-10-15T22:34:30.039Z", "contributors": [ - "WaGjUb" + "fernanduandrade" ] }, - "Web/HTTP/Headers/If-None-Match": { - "modified": "2020-10-15T22:31:32.703Z", + "Web/JavaScript/Reference/Global_Objects/Symbol/toStringTag": { + "modified": "2020-10-15T22:34:30.237Z", "contributors": [ - "FernandoKGA" + "fernanduandrade" ] }, - "Web/HTTP/Headers/If-Range": { - "modified": "2020-10-15T22:31:33.474Z", + "Web/JavaScript/Reference/Global_Objects/Symbol/unscopables": { + "modified": "2020-10-15T22:34:31.078Z", "contributors": [ - "FernandoKGA" + "fernanduandrade" ] }, - "Web/HTTP/Headers/If-Unmodified-Since": { - "modified": "2020-10-15T22:05:25.445Z", + "Web/JavaScript/Reference/Global_Objects/TypeError": { + "modified": "2019-03-23T22:46:29.217Z", "contributors": [ - "gnuns", - "francinysalles" + "haskellcamargo", + "bernardodill" ] }, - "Web/HTTP/Headers/Keep-Alive": { - "modified": "2020-10-15T22:18:39.285Z", + "Web/JavaScript/Reference/Global_Objects/TypedArray": { + "modified": "2019-03-23T22:12:24.054Z", "contributors": [ - "pedrochaves", - "luan0ap" + "fscholz" ] }, - "Web/HTTP/Headers/Large-Allocation": { - "modified": "2020-10-15T22:31:49.734Z", + "Web/JavaScript/Reference/Global_Objects/TypedArray/sort": { + "modified": "2019-03-23T22:12:28.316Z", "contributors": [ - "FernandoKGA" + "joaovinicius" ] }, - "Web/HTTP/Headers/Last-Modified": { - "modified": "2020-10-15T21:56:35.716Z", + "Web/JavaScript/Reference/Global_Objects/WeakMap": { + "modified": "2020-10-15T21:27:55.448Z", "contributors": [ - "cesarvn2010" + "jotaRenan", + "mnunes01", + "SphinxKnight", + "codermarcos", + "kdex", + "thiagohora", + "teoli", + "gabrielrubens" ] }, - "Web/HTTP/Headers/Link": { - "modified": "2020-10-15T22:31:34.762Z", + "Web/JavaScript/Reference/Global_Objects/WeakMap/delete": { + "modified": "2020-10-15T22:09:31.522Z", "contributors": [ - "FernandoKGA" + "rodrigocode4" ] }, - "Web/HTTP/Headers/Localização": { - "modified": "2020-10-15T22:25:31.903Z", + "Web/JavaScript/Reference/Global_Objects/WeakMap/get": { + "modified": "2020-10-15T22:13:57.372Z", "contributors": [ - "FernandoKGA" + "jotaRenan" ] }, - "Web/HTTP/Headers/NEL": { - "modified": "2020-07-08T20:29:31.709Z", + "Web/JavaScript/Reference/Global_Objects/WeakMap/has": { + "modified": "2020-10-15T22:13:54.938Z", "contributors": [ - "FernandoKGA" + "jotaRenan" ] }, - "Web/HTTP/Headers/Origin": { - "modified": "2020-10-15T22:31:35.312Z", + "Web/JavaScript/Reference/Global_Objects/WeakMap/set": { + "modified": "2020-10-15T22:13:54.974Z", "contributors": [ - "FernandoKGA" + "jotaRenan" ] }, - "Web/HTTP/Headers/Pragma": { - "modified": "2020-10-15T22:31:35.228Z", + "Web/JavaScript/Reference/Global_Objects/WeakSet": { + "modified": "2019-03-23T22:01:31.430Z", "contributors": [ - "FernandoKGA" + "daniloprates" ] }, - "Web/HTTP/Headers/Proxy-Authenticate": { - "modified": "2020-10-15T22:31:36.533Z", + "Web/JavaScript/Reference/Global_Objects/decodeURI": { + "modified": "2020-10-15T22:12:38.394Z", "contributors": [ - "FernandoKGA" + "murillodmiranda" ] }, - "Web/HTTP/Headers/Proxy-Authorization": { - "modified": "2020-07-09T11:07:07.810Z", + "Web/JavaScript/Reference/Global_Objects/decodeURIComponent": { + "modified": "2020-03-12T19:42:51.399Z", "contributors": [ - "FernandoKGA" + "jhonnymoreira" ] }, - "Web/HTTP/Headers/Public-Key-Pins": { - "modified": "2020-10-15T22:31:35.978Z", + "Web/JavaScript/Reference/Global_Objects/encodeURI": { + "modified": "2020-10-19T23:50:41.182Z", "contributors": [ "FernandoKGA" ] }, - "Web/HTTP/Headers/Public-Key-Pins-Report-Only": { - "modified": "2020-10-15T22:31:47.341Z", + "Web/JavaScript/Reference/Global_Objects/encodeURIComponent": { + "modified": "2020-03-12T19:42:13.212Z", "contributors": [ - "FernandoKGA" + "duduindo", + "lucascosta", + "fabriciofrontarolli", + "TiagoNeves" ] }, - "Web/HTTP/Headers/Range": { - "modified": "2020-10-15T22:31:38.126Z", + "Web/JavaScript/Reference/Global_Objects/escape": { + "modified": "2020-03-12T19:43:31.007Z", "contributors": [ - "FernandoKGA" + "KennyMack" ] }, - "Web/HTTP/Headers/Referer": { - "modified": "2020-10-15T22:26:06.843Z", + "Web/JavaScript/Reference/Global_Objects/eval": { + "modified": "2020-03-12T19:40:58.698Z", "contributors": [ - "FernandoKGA" + "hmschreiner", + "helton-mori-dev", + "davilmaster", + "NicholasBraga", + "soter19", + "michaelycus", + "dayvsonlima" ] }, - "Web/HTTP/Headers/Referrer-Policy": { - "modified": "2020-10-15T22:31:38.598Z", + "Web/JavaScript/Reference/Global_Objects/globalThis": { + "modified": "2020-10-15T22:14:46.227Z", "contributors": [ - "kenchen12", - "FernandoKGA" + "Rondinelly" ] }, - "Web/HTTP/Headers/Retry-After": { - "modified": "2020-10-15T21:58:41.599Z", + "Web/JavaScript/Reference/Global_Objects/isFinite": { + "modified": "2020-03-12T19:42:41.771Z", "contributors": [ - "dgadelha" + "ronysilvati", + "kelvys" ] }, - "Web/HTTP/Headers/Save-Data": { - "modified": "2020-10-15T22:31:38.329Z", + "Web/JavaScript/Reference/Global_Objects/isNaN": { + "modified": "2020-10-15T21:27:25.549Z", "contributors": [ - "FernandoKGA" + "MarcosNakamine", + "helton-mori-dev", + "nilocoelhojunior", + "bartolomeu.gusella", + "SphinxKnight", + "teoli", + "nasviana" ] }, - "Web/HTTP/Headers/Sec-Fetch-Site": { - "modified": "2020-10-15T22:34:11.157Z", + "Web/JavaScript/Reference/Global_Objects/null": { + "modified": "2020-03-12T19:40:38.603Z", "contributors": [ - "MatheusNtg" + "angelorubin", + "trestini" ] }, - "Web/HTTP/Headers/Server": { - "modified": "2020-10-15T22:07:06.159Z", + "Web/JavaScript/Reference/Global_Objects/parseFloat": { + "modified": "2020-03-12T19:43:31.757Z", "contributors": [ - "francinysalles" + "KennyMack" ] }, - "Web/HTTP/Headers/Server-Timing": { - "modified": "2020-10-15T22:31:38.528Z", + "Web/JavaScript/Reference/Global_Objects/parseInt": { + "modified": "2020-03-12T19:39:16.771Z", "contributors": [ - "FernandoKGA" + "einstenj", + "odahcam", + "SphinxKnight", + "teoli", + "oshiroam" ] }, - "Web/HTTP/Headers/Set-Cookie": { - "modified": "2020-10-15T21:56:19.509Z", + "Web/JavaScript/Reference/Global_Objects/undefined": { + "modified": "2020-03-12T19:40:39.962Z", "contributors": [ - "claudiombsilva", - "thiagorock22", - "WaGjUb" + "trestini" ] }, - "Web/HTTP/Headers/Set-Cookie/SameSite": { - "modified": "2020-10-15T22:31:49.288Z", + "Web/JavaScript/Reference/Global_Objects/unescape": { + "modified": "2020-03-12T19:46:40.592Z", "contributors": [ - "ooVictorFranco" + "IsmaelEzequiel" ] }, - "Web/HTTP/Headers/Set-Cookie2": { - "modified": "2020-10-15T22:31:37.734Z", + "Web/JavaScript/Reference/Global_Objects/uneval": { + "modified": "2020-03-12T19:42:19.284Z", "contributors": [ - "FernandoKGA" + "teoli", + "ffabiosales" ] }, - "Web/HTTP/Headers/SourceMap": { - "modified": "2020-10-15T22:20:50.501Z", + "Web/JavaScript/Reference/Iteration_protocols": { + "modified": "2020-03-12T19:46:49.209Z", "contributors": [ - "ogeidexe" + "Rondinelly", + "danilosetubal" ] }, - "Web/HTTP/Headers/Strict-Transport-Security": { - "modified": "2020-10-15T22:09:01.413Z", + "Web/JavaScript/Reference/Lexical_grammar": { + "modified": "2020-03-12T19:46:38.568Z", "contributors": [ - "darleizillmer" + "Danilo", + "ViniciusDutra" ] }, - "Web/HTTP/Headers/TE": { - "modified": "2020-10-15T22:31:39.430Z", + "Web/JavaScript/Reference/Operators": { + "modified": "2020-03-12T19:38:09.829Z", "contributors": [ - "FernandoKGA" + "ogilvieira", + "fortunatolf-tech", + "lazaroalvarenga", + "mahenrique", + "cris-luz-07", + "jorgeclesio", + "iCynthia", + "teoli", + "ethertank" ] }, - "Web/HTTP/Headers/Timing-Allow-Origin": { - "modified": "2020-10-15T22:31:39.349Z", + "Web/JavaScript/Reference/Operators/Bitwise_XOR": { + "modified": "2020-10-15T22:31:57.374Z", "contributors": [ - "FernandoKGA" + "joaopedroaats" ] }, - "Web/HTTP/Headers/Tk": { - "modified": "2020-10-15T22:31:39.173Z", + "Web/JavaScript/Reference/Operators/Grouping": { + "modified": "2020-03-12T19:39:46.309Z", "contributors": [ - "FernandoKGA" + "SphinxKnight", + "cirocosta" ] }, - "Web/HTTP/Headers/Trailer": { - "modified": "2020-10-15T22:31:40.917Z", + "Web/JavaScript/Reference/Operators/Operator_Precedence": { + "modified": "2020-03-12T19:39:59.148Z", "contributors": [ - "FernandoKGA" + "ShadYueh" ] }, - "Web/HTTP/Headers/Transfer-Encoding": { - "modified": "2020-10-15T22:31:41.759Z", + "Web/JavaScript/Reference/Operators/Optional_chaining": { + "modified": "2020-11-27T11:24:17.100Z", "contributors": [ - "FernandoKGA" + "myke-oliveira", + "gabrieluizramos", + "agusmao720919" ] }, - "Web/HTTP/Headers/Upgrade-Insecure-Requests": { - "modified": "2020-10-15T22:05:25.350Z", + "Web/JavaScript/Reference/Operators/Pipeline_operator": { + "modified": "2020-10-15T22:12:37.977Z", "contributors": [ - "francinysalles" + "murillodmiranda" ] }, - "Web/HTTP/Headers/User-Agent": { - "modified": "2020-10-15T22:31:39.984Z", + "Web/JavaScript/Reference/Operators/Property_Accessors": { + "modified": "2020-03-12T19:44:40.050Z", "contributors": [ - "FernandoKGA" + "matheussilvasantos" ] }, - "Web/HTTP/Headers/Vary": { - "modified": "2020-10-15T22:31:40.954Z", + "Web/JavaScript/Reference/Operators/Spread_syntax": { + "modified": "2020-10-15T22:02:07.859Z", "contributors": [ - "FernandoKGA" + "jdanielnd", + "ederknd", + "fabio.rachid", + "d3m4", + "klassmann" ] }, - "Web/HTTP/Headers/Via": { - "modified": "2020-10-15T22:31:40.512Z", + "Web/JavaScript/Reference/Operators/async_function": { + "modified": "2020-03-12T19:46:14.006Z", "contributors": [ - "FernandoKGA" + "alefesouza", + "HugoOliveira" ] }, - "Web/HTTP/Headers/WWW-Authenticate": { - "modified": "2020-10-15T22:07:55.835Z", + "Web/JavaScript/Reference/Operators/await": { + "modified": "2020-03-12T19:46:38.624Z", "contributors": [ - "FernandoKGA", - "bmansur" + "alefesouza" ] }, - "Web/HTTP/Headers/Want-Digest": { - "modified": "2020-10-15T22:31:40.550Z", + "Web/JavaScript/Reference/Operators/class": { + "modified": "2020-03-12T19:46:36.744Z", "contributors": [ - "FernandoKGA" + "alefesouza" ] }, - "Web/HTTP/Headers/Warning": { - "modified": "2020-10-15T22:31:39.879Z", + "Web/JavaScript/Reference/Operators/function": { + "modified": "2020-10-15T21:41:22.699Z", "contributors": [ - "FernandoKGA" + "GPrimola", + "nadineouro", + "ti.marcosdias" ] }, - "Web/HTTP/Headers/X-Content-Type-Options": { - "modified": "2020-10-15T21:55:34.398Z", + "Web/JavaScript/Reference/Operators/function*": { + "modified": "2020-03-12T19:46:36.669Z", "contributors": [ - "khaosdoctor" + "alefesouza" ] }, - "Web/HTTP/Headers/X-DNS-Prefetch-Control": { - "modified": "2020-10-15T22:11:22.598Z", + "Web/JavaScript/Reference/Operators/in": { + "modified": "2020-10-15T22:00:04.247Z", "contributors": [ - "LucasKluge" + "colares" ] }, - "Web/HTTP/Headers/X-Forwarded-For": { - "modified": "2020-10-15T22:31:44.027Z", + "Web/JavaScript/Reference/Operators/instanceof": { + "modified": "2020-03-12T19:41:08.081Z", "contributors": [ - "FernandoKGA" + "antonio-damaso" ] }, - "Web/HTTP/Headers/X-Forwarded-Host": { - "modified": "2020-10-15T22:31:44.446Z", + "Web/JavaScript/Reference/Operators/new": { + "modified": "2020-03-12T19:44:36.405Z", "contributors": [ - "FernandoKGA" + "jra", + "dime2lo" ] }, - "Web/HTTP/Headers/X-Forwarded-Proto": { - "modified": "2020-10-15T22:31:43.726Z", + "Web/JavaScript/Reference/Operators/new.target": { + "modified": "2020-10-15T22:00:16.053Z", "contributors": [ - "FernandoKGA" + "SauloNunes", + "LucasGabrielSI" ] }, - "Web/HTTP/Headers/X-Frame-Options": { - "modified": "2020-10-15T22:31:47.974Z", + "Web/JavaScript/Reference/Operators/super": { + "modified": "2020-05-28T22:55:58.719Z", "contributors": [ - "FernandoKGA" + "Pedrodotcom", + "GabrielSpada", + "alexxmde", + "alexnum", + "nicematt", + "iFgR" ] }, - "Web/HTTP/Headers/X-XSS-Protection": { - "modified": "2020-10-15T22:31:47.343Z", + "Web/JavaScript/Reference/Operators/this": { + "modified": "2020-03-12T19:43:04.728Z", "contributors": [ - "FernandoKGA" + "JVFeijo", + "CarlosRodrigues", + "LucasGabrielSI", + "hadnet" ] }, - "Web/HTTP/Mensagens": { - "modified": "2020-04-19T17:43:58.667Z", + "Web/JavaScript/Reference/Operators/typeof": { + "modified": "2020-03-12T19:38:14.288Z", "contributors": [ - "satoLG", - "jamrocha" + "ffaneto", + "felini", + "aldovitch", + "douglasquintanilha", + "teoli", + "HenriqueSilverio" ] }, - "Web/HTTP/Methods": { - "modified": "2020-10-15T21:51:11.621Z", + "Web/JavaScript/Reference/Operators/void": { + "modified": "2020-03-12T19:41:22.522Z", "contributors": [ - "julio-elipse", - "fplucas", - "thiagosgarcia", - "superdiegonunes", - "andrekutianski", - "helcorin" + "angelorubin", + "raphaelhenrique", + "alexrohleder", + "carlosdelfino", + "schlagi123", + "fernandojupaes", + "leandro2103" ] }, - "Web/HTTP/Methods/CONNECT": { - "modified": "2020-10-15T21:58:22.687Z", + "Web/JavaScript/Reference/Operators/yield": { + "modified": "2020-03-12T19:46:36.407Z", "contributors": [ - "marciioluucas" + "thedjmarcelo", + "alefesouza" ] }, - "Web/HTTP/Methods/DELETE": { - "modified": "2020-10-15T21:58:32.285Z", + "Web/JavaScript/Reference/Operators/yield*": { + "modified": "2020-03-12T19:46:39.660Z", "contributors": [ - "calexandrepcjr", - "flgmjr", - "almeidaalex", - "marciioluucas" + "alefesouza" ] }, - "Web/HTTP/Methods/GET": { - "modified": "2020-10-15T21:51:45.627Z", + "Web/JavaScript/Reference/Statements": { + "modified": "2020-10-19T15:09:34.949Z", "contributors": [ - "krisfertig", - "marciioluucas", - "andrekutianski" + "VitorCampos11", + "vinicius0022", + "ivan2209", + "teoli", + "trevorh" ] }, - "Web/HTTP/Methods/HEAD": { - "modified": "2020-10-15T22:14:53.554Z", + "Web/JavaScript/Reference/Statements/Empty": { + "modified": "2020-10-15T21:41:12.853Z", "contributors": [ - "ViniciusMatias" + "SphinxKnight", + "RZDeveloper", + "joao_sanches" ] }, - "Web/HTTP/Methods/OPTIONS": { - "modified": "2020-10-15T21:56:04.830Z", + "Web/JavaScript/Reference/Statements/block": { + "modified": "2020-03-12T19:46:44.788Z", "contributors": [ - "impadalko", - "Mega85" - ] - }, - "Web/HTTP/Methods/PATCH": { - "modified": "2020-03-26T15:24:48.895Z", - "contributors": [ - "joão.ramires", - "GustavoOS" + "alefesouza" ] }, - "Web/HTTP/Methods/POST": { - "modified": "2020-10-15T22:12:56.254Z", + "Web/JavaScript/Reference/Statements/break": { + "modified": "2020-03-12T19:40:00.144Z", "contributors": [ - "caukazama", - "thiagojc89", - "krisfertig" + "LucasSan" ] }, - "Web/HTTP/Methods/PUT": { - "modified": "2020-10-15T22:14:53.561Z", + "Web/JavaScript/Reference/Statements/class": { + "modified": "2020-10-15T21:38:06.149Z", "contributors": [ - "ViniciusMatias" + "fscholz", + "SphinxKnight", + "AlanCezarAraujo", + "Selminha" ] }, - "Web/HTTP/Methods/TRACE": { - "modified": "2020-10-15T22:04:21.753Z", + "Web/JavaScript/Reference/Statements/const": { + "modified": "2020-10-17T21:41:42.745Z", "contributors": [ - "solfier", - "fabio-r-souza" + "tassni", + "Beel132", + "panoramix360", + "SphinxKnight", + "DanielMarques", + "caiocaly", + "claudio-cavalcante", + "Klauswk", + "GianWinckler", + "AlanCezarAraujo", + "angellica.araujo" ] }, - "Web/HTTP/Overview": { - "modified": "2020-09-23T20:02:12.544Z", + "Web/JavaScript/Reference/Statements/continue": { + "modified": "2020-03-12T19:45:02.135Z", "contributors": [ - "viniciusfinger", - "K4mek", - "gustavoluchi", - "bruno_scatena", - "viniciusbds", - "julio-elipse", - "GPrimola", - "SubaruSama", - "CarlosAlbertoSzygalski", - "renatodantas", - "holdonmax" + "Deniscapp", + "jfsiebel", + "sheldonled" ] }, - "Web/HTTP/Redirecionamento": { - "modified": "2019-03-18T21:39:38.468Z", + "Web/JavaScript/Reference/Statements/debugger": { + "modified": "2020-10-15T21:39:08.215Z", "contributors": [ - "FelipeBergmann" + "felipelube", + "rands0n" ] }, - "Web/HTTP/Server-Side_Access_Control": { - "modified": "2020-04-19T11:26:06.291Z", + "Web/JavaScript/Reference/Statements/do...while": { + "modified": "2020-04-16T16:34:01.857Z", "contributors": [ - "marcio1002" + "eng.danielsoares", + "danimai", + "rubenmarcus", + "matheussilvasantos", + "brunoeduardo" ] }, - "Web/HTTP/Session": { - "modified": "2019-03-18T21:38:28.348Z", + "Web/JavaScript/Reference/Statements/export": { + "modified": "2020-10-15T21:50:01.385Z", "contributors": [ - "krisfertig", - "zscaiosi" + "frispoli", + "romulocintra", + "helton-mori-dev", + "rodolphopicolo", + "jomarcardoso", + "renamed", + "nicematt" ] }, - "Web/HTTP/Status": { - "modified": "2020-09-30T05:44:50.985Z", + "Web/JavaScript/Reference/Statements/for": { + "modified": "2020-11-10T12:40:17.530Z", "contributors": [ - "nunezgarcia548", - "José_Santana", - "macalha", - "pedrochaves", - "PauloItalo17", - "jamrocha", - "atiladelcanton", - "MarcosRocha", - "Felipeandradee", - "AlexandreVelloso", - "zenithpolar", - "alexandresn", + "duartegabriel68", + "sad1502", + "matheussouza89", + "mateuscqueiros", + "brevvi", "raduq", - "Igor_Araujo", - "MateusGabi", - "Jens.B" + "PedroTorresMaschio" ] }, - "Web/HTTP/Status/100": { - "modified": "2020-10-15T22:08:25.420Z", + "Web/JavaScript/Reference/Statements/for-await...of": { + "modified": "2020-10-15T22:23:08.933Z", "contributors": [ - "ferfabricio" + "alexandreab", + "deadkff01" ] }, - "Web/HTTP/Status/101": { - "modified": "2019-08-30T14:26:22.601Z", + "Web/JavaScript/Reference/Statements/for...in": { + "modified": "2020-03-12T19:43:06.159Z", "contributors": [ - "GMBarragam" + "WaGjUb", + "samir.araujo", + "Gutemberg" ] }, - "Web/HTTP/Status/103": { - "modified": "2020-10-15T22:26:01.901Z", + "Web/JavaScript/Reference/Statements/for...of": { + "modified": "2020-03-12T19:43:02.972Z", "contributors": [ - "FernandoKGA" + "emilianocarvalho", + "malukenho", + "filipetorres", + "tiagocedrim", + "cezaraugusto", + "michaelycus", + "mfelippi", + "oliveirarthur" ] }, - "Web/HTTP/Status/200": { - "modified": "2020-10-15T21:55:04.602Z", + "Web/JavaScript/Reference/Statements/function": { + "modified": "2020-03-12T19:43:06.976Z", "contributors": [ - "macalha", - "raduq", - "jackiecard" + "Helder-JR", + "diegolaquino", + "YurePereira" ] }, - "Web/HTTP/Status/201": { - "modified": "2020-10-15T21:59:06.317Z", + "Web/JavaScript/Reference/Statements/function*": { + "modified": "2020-10-15T21:33:49.171Z", "contributors": [ - "raduq", - "akanagusku", - "tchaguitos" + "gabrielrleal", + "Rondinelly", + "marcusdacoregio", + "GabrielBarbosaGV", + "SphinxKnight", + "cezaraugusto", + "AlanCezarAraujo" ] }, - "Web/HTTP/Status/202": { - "modified": "2019-12-24T03:35:51.332Z", + "Web/JavaScript/Reference/Statements/if...else": { + "modified": "2020-03-12T19:43:02.168Z", "contributors": [ - "euvanribeiro", - "FernandoKGA" + "cezaraugusto", + "Gutemberg" ] }, - "Web/HTTP/Status/203": { - "modified": "2019-03-18T21:27:54.664Z", + "Web/JavaScript/Reference/Statements/import": { + "modified": "2020-10-15T21:38:22.321Z", "contributors": [ - "ferfabricio" + "impadalko", + "helton-mori-dev", + "filipemarins", + "Rondinelly", + "cezaraugusto", + "PauloNevesF", + "tamorim" ] }, - "Web/HTTP/Status/204": { - "modified": "2020-10-15T21:58:52.674Z", + "Web/JavaScript/Reference/Statements/import.meta": { + "modified": "2020-10-15T22:30:56.248Z", "contributors": [ - "macalha", - "fhecorrea", - "salomaosnff" + "joaopclima" ] }, - "Web/HTTP/Status/205": { - "modified": "2019-12-23T21:44:23.232Z", + "Web/JavaScript/Reference/Statements/label": { + "modified": "2020-03-12T19:39:09.854Z", "contributors": [ - "doougui", - "allansli", - "navarro" + "teoli", + "cirocosta" ] }, - "Web/HTTP/Status/206": { - "modified": "2020-10-15T22:25:54.629Z", + "Web/JavaScript/Reference/Statements/let": { + "modified": "2020-09-29T14:52:23.571Z", "contributors": [ - "FernandoKGA" + "guialtran", + "rafaelcavalcante", + "eltonmesquita", + "teoli", + "ftonato", + "kazumi" ] }, - "Web/HTTP/Status/300": { - "modified": "2019-12-27T11:18:36.624Z", + "Web/JavaScript/Reference/Statements/return": { + "modified": "2020-03-12T19:46:40.874Z", "contributors": [ - "FernandoKGA" + "wcqueiroz", + "joelwallis", + "renoirsousa", + "alefesouza" ] }, - "Web/HTTP/Status/301": { - "modified": "2020-10-15T22:24:18.785Z", + "Web/JavaScript/Reference/Statements/switch": { + "modified": "2020-03-12T19:40:26.448Z", "contributors": [ - "FernandoKGA" + "helton-mori-dev", + "FelipeFernandesLeandro", + "raulfernando", + "cezaraugusto", + "AlanCezarAraujo" ] }, - "Web/HTTP/Status/302": { - "modified": "2020-10-15T22:10:28.043Z", + "Web/JavaScript/Reference/Statements/throw": { + "modified": "2020-03-12T19:44:28.525Z", "contributors": [ - "FernandoKGA", - "raduq", - "CGReinhold" + "dime2lo" ] }, - "Web/HTTP/Status/303": { - "modified": "2020-10-15T22:04:22.978Z", + "Web/JavaScript/Reference/Statements/try...catch": { + "modified": "2020-03-12T19:39:26.996Z", "contributors": [ - "marcelobonatto" + "VitorFlora", + "danilofarias", + "rmalveis", + "pbcjr", + "teoli", + "xhximenes" ] }, - "Web/HTTP/Status/304": { - "modified": "2020-10-15T22:00:19.115Z", + "Web/JavaScript/Reference/Statements/var": { + "modified": "2020-03-12T19:40:01.397Z", "contributors": [ - "macalha", - "bartolomeu.gusella" + "doomsterinc", + "angellica.araujo", + "teoli", + "antonio-damaso" ] }, - "Web/HTTP/Status/307": { - "modified": "2020-10-15T22:11:27.802Z", + "Web/JavaScript/Reference/Statements/while": { + "modified": "2020-03-12T19:43:47.406Z", "contributors": [ - "dancamboim", - "CGReinhold" + "DiegoVictor" ] }, - "Web/HTTP/Status/308": { - "modified": "2020-10-15T22:25:15.141Z", + "Web/JavaScript/Reference/Statements/with": { + "modified": "2020-03-12T19:46:40.073Z", "contributors": [ - "FernandoKGA" + "LucasSouza6", + "alefesouza" ] }, - "Web/HTTP/Status/400": { - "modified": "2020-10-01T08:48:37.177Z", + "Web/JavaScript/Reference/Strict_mode": { + "modified": "2020-03-12T19:43:28.549Z", "contributors": [ - "kendalbaba8", - "hmgoncalves", - "glasswalk3r", - "sergioflores-j" + "srthiagos", + "henriquemazer", + "rdasilva", + "arturhns", + "matheusr", + "RenanBirck", + "jjmars" ] }, - "Web/HTTP/Status/401": { - "modified": "2020-12-01T19:39:24.191Z", + "Web/JavaScript/Typed_arrays": { + "modified": "2020-03-12T19:45:33.922Z", "contributors": [ - "caio-gi25-me", - "izabelvidal", - "macalha", - "bmansur", - "carlosmarx" + "pauloantonelli", + "andrevargas" ] }, - "Web/HTTP/Status/402": { - "modified": "2020-10-15T22:25:28.519Z", + "Web/Manifest": { + "modified": "2019-06-02T15:51:05.029Z", "contributors": [ - "FernandoKGA", - "RaulDeMelo" + "Rondinelly", + "Felipe-Marin", + "enriquerenebr", + "Gauzzi", + "philippesilva" ] }, - "Web/HTTP/Status/403": { - "modified": "2020-10-15T21:56:18.319Z", + "Web/MathML": { + "modified": "2020-06-20T18:00:14.899Z", "contributors": [ - "macalha", - "carlosmarx" + "luizsanches", + "julio-elipse", + "michaeldouglas", + "rodrigopadula", + "fred.wang", + "Dyvik" ] }, - "Web/HTTP/Status/404": { - "modified": "2020-10-15T21:57:08.819Z", + "Web/MathML/Element": { + "modified": "2019-03-23T23:15:05.305Z", "contributors": [ - "pedropaulosuzuki" + "non", + "splewako" ] }, - "Web/HTTP/Status/405": { - "modified": "2019-03-18T21:09:45.460Z", + "Web/MathML/Element/math": { + "modified": "2019-03-23T23:15:04.481Z", "contributors": [ - "dathin67" + "Haroldohc" ] }, - "Web/HTTP/Status/406": { - "modified": "2020-10-15T22:25:54.038Z", + "Web/Performance": { + "modified": "2020-01-02T12:25:47.809Z", "contributors": [ - "FernandoKGA" + "chrisdavidmills" ] }, - "Web/HTTP/Status/407": { - "modified": "2020-10-15T22:14:55.526Z", + "Web/Progressive_web_apps": { + "modified": "2020-04-06T10:15:30.355Z", "contributors": [ - "ViniciusMatias" + "R-Santtos", + "chrisdavidmills", + "mfuji09" ] }, - "Web/HTTP/Status/408": { - "modified": "2019-08-20T21:08:30.185Z", + "Web/Reference": { + "modified": "2020-09-10T17:40:01.881Z", "contributors": [ - "macalha", - "lucasrenod", - "SphinxKnight", - "11808s8", - "alanlucian" + "Luscas", + "jose.elias.0703", + "julio-elipse", + "Schieck", + "leonardocoelho", + "luizmassa", + "eliveltoncristiano" ] }, - "Web/HTTP/Status/409": { - "modified": "2020-10-12T18:38:04.385Z", + "Web/Reference/API": { + "modified": "2019-03-23T22:46:47.941Z", "contributors": [ - "enriquerenebr", - "macalha", - "augustowebd.mozilla", - "wilsonferro" + "julio-elipse", + "Anderson-Vasques", + "devmessias", + "angelorubin", + "amoedoamorim", + "takahan", + "pcf-pcf" ] }, - "Web/HTTP/Status/410": { - "modified": "2020-10-15T22:09:41.751Z", + "Web/SVG": { + "modified": "2019-06-09T13:24:36.730Z", "contributors": [ - "macalha" + "wcqueiroz", + "julio-elipse", + "macalha", + "teoli", + "Joshua-S" ] }, - "Web/HTTP/Status/411": { - "modified": "2019-03-18T21:25:46.143Z", + "Web/SVG/Applying_SVG_effects_to_HTML_content": { + "modified": "2019-03-23T22:45:26.414Z", "contributors": [ - "jamrocha" + "teoli", + "takahan" ] }, - "Web/HTTP/Status/412": { - "modified": "2020-10-15T22:26:08.284Z", + "Web/SVG/Attribute": { + "modified": "2019-03-23T22:58:41.365Z", "contributors": [ - "FernandoKGA" + "averdion" ] }, - "Web/HTTP/Status/413": { - "modified": "2019-08-30T13:19:23.971Z", + "Web/SVG/Attribute/class": { + "modified": "2019-03-23T22:58:45.630Z", "contributors": [ - "GMBarragam" + "caio" ] }, - "Web/HTTP/Status/414": { - "modified": "2019-03-23T22:05:49.854Z", + "Web/SVG/Attribute/contentStyleType": { + "modified": "2019-03-23T22:58:38.907Z", "contributors": [ - "pedropaulosuzuki" + "caio" ] }, - "Web/HTTP/Status/415": { - "modified": "2019-03-23T22:08:19.304Z", + "Web/SVG/Attribute/fill": { + "modified": "2020-10-15T22:34:04.647Z", "contributors": [ - "VitorHFLopes" + "littlebru" ] }, - "Web/HTTP/Status/416": { - "modified": "2020-10-15T22:26:05.801Z", + "Web/SVG/Attribute/keyTimes": { + "modified": "2020-10-15T22:29:23.505Z", "contributors": [ - "FernandoKGA" + "MarcosNakamine" ] }, - "Web/HTTP/Status/417": { - "modified": "2019-09-11T14:11:12.818Z", + "Web/SVG/Attribute/preserveAspectRatio": { + "modified": "2020-04-16T18:21:49.688Z", "contributors": [ - "Rogerio-Viana", - "raduq" + "MarcosNakamine" ] }, - "Web/HTTP/Status/418": { - "modified": "2020-10-15T22:09:34.458Z", + "Web/SVG/Attribute/stroke": { + "modified": "2020-10-15T21:44:52.165Z", "contributors": [ - "raduq", - "macalha" + "MarcosNakamine", + "gabiduarte" ] }, - "Web/HTTP/Status/422": { - "modified": "2019-05-17T09:52:53.330Z", + "Web/SVG/Attribute/stroke-dashoffset": { + "modified": "2019-03-23T22:07:45.957Z", "contributors": [ - "raduq" + "brunoalv-s" ] }, - "Web/HTTP/Status/425": { - "modified": "2020-10-15T22:18:43.120Z", + "Web/SVG/Attribute/style": { + "modified": "2019-03-23T22:58:27.562Z", "contributors": [ - "raduq" + "caio" ] }, - "Web/HTTP/Status/426": { - "modified": "2019-05-17T09:28:05.733Z", + "Web/SVG/Attribute/version": { + "modified": "2020-10-15T22:29:15.866Z", "contributors": [ - "raduq" + "MarcosNakamine" ] }, - "Web/HTTP/Status/428": { - "modified": "2019-05-17T09:48:01.976Z", + "Web/SVG/Attribute/viewBox": { + "modified": "2020-04-16T18:40:16.127Z", "contributors": [ - "raduq" + "MarcosNakamine" ] }, - "Web/HTTP/Status/429": { - "modified": "2019-03-23T22:11:06.523Z", + "Web/SVG/Attribute/width": { + "modified": "2019-03-23T22:12:36.682Z", "contributors": [ - "matheuscorreia", - "MilesGitGud" + "webmasterdro" ] }, - "Web/HTTP/Status/431": { - "modified": "2020-01-05T14:49:44.248Z", + "Web/SVG/Compatibility_sources": { + "modified": "2019-03-23T22:45:22.788Z", "contributors": [ - "FernandoKGA" + "takahan" ] }, - "Web/HTTP/Status/451": { - "modified": "2020-10-15T22:09:34.570Z", + "Web/SVG/Content_type": { + "modified": "2019-03-23T22:58:44.489Z", "contributors": [ - "macalha" + "caio" ] }, - "Web/HTTP/Status/500": { - "modified": "2020-10-15T22:06:42.031Z", + "Web/SVG/Element": { + "modified": "2019-06-18T23:26:07.906Z", "contributors": [ - "omauriciomaciel", - "francinysalles" + "wcqueiroz", + "caio", + "teoli", + "ethertank" ] }, - "Web/HTTP/Status/501": { - "modified": "2020-10-15T22:17:52.081Z", + "Web/SVG/Element/a": { + "modified": "2020-10-15T21:34:48.646Z", "contributors": [ - "lucianoac", - "raduq" + "MarcosNakamine", + "Sebastianz", + "caio" ] }, - "Web/HTTP/Status/502": { - "modified": "2020-10-15T22:20:07.323Z", + "Web/SVG/Element/altGlyph": { + "modified": "2019-03-23T22:57:23.875Z", "contributors": [ - "moraesdam" + "Sebastianz", + "caio" ] }, - "Web/HTTP/Status/503": { - "modified": "2020-10-15T22:09:37.984Z", + "Web/SVG/Element/altGlyphDef": { + "modified": "2019-03-23T22:57:26.729Z", "contributors": [ - "nunezgarcia548", - "macalha" + "Sebastianz", + "caio" ] }, - "Web/HTTP/Status/504": { - "modified": "2020-10-15T21:58:42.777Z", + "Web/SVG/Element/altGlyphItem": { + "modified": "2019-03-23T22:57:25.735Z", "contributors": [ - "Rogerio-Viana", - "caiobrentano" + "Sebastianz", + "caio" ] }, - "Web/HTTP/Status/505": { - "modified": "2019-03-18T21:25:04.554Z", + "Web/SVG/Element/animate": { + "modified": "2020-10-15T21:34:48.794Z", "contributors": [ - "macalha" + "MarcosNakamine", + "wbamberg", + "Sebastianz", + "caio" ] }, - "Web/HTTP/Status/506": { - "modified": "2020-01-05T13:08:39.666Z", + "Web/SVG/Element/animateColor": { + "modified": "2019-03-23T22:57:25.579Z", "contributors": [ - "FernandoKGA" + "wbamberg", + "Sebastianz", + "caio" ] }, - "Web/HTTP/Status/507": { - "modified": "2019-12-27T11:31:39.081Z", + "Web/SVG/Element/animateMotion": { + "modified": "2019-03-23T22:57:26.608Z", "contributors": [ - "FernandoKGA" + "wbamberg", + "Sebastianz", + "caio" ] }, - "Web/HTTP/Status/508": { - "modified": "2019-09-10T09:19:50.989Z", + "Web/SVG/Element/animateTransform": { + "modified": "2019-03-23T22:57:23.127Z", "contributors": [ - "lucianoac" + "Sebastianz", + "caio" ] }, - "Web/HTTP/Status/510": { - "modified": "2020-01-05T13:00:04.462Z", + "Web/SVG/Element/circle": { + "modified": "2019-03-23T22:57:10.633Z", "contributors": [ - "FernandoKGA" + "wbamberg", + "Sebastianz", + "caio" ] }, - "Web/HTTP/Status/511": { - "modified": "2019-10-29T08:55:24.737Z", + "Web/SVG/Element/color-profile": { + "modified": "2019-03-23T22:57:13.667Z", "contributors": [ - "niknicius" + "Sebastianz", + "caio" ] }, - "Web/JavaScript": { - "modified": "2020-10-08T23:48:25.254Z", + "Web/SVG/Element/defs": { + "modified": "2019-03-23T22:58:41.965Z", "contributors": [ - "ricardo.passos.cr", - "SphinxKnight", - "julio-elipse", - "natth42", - "renoirsousa", - "andregarzia", - "marcelomelofreitas", - "KennyMack", - "haskellcamargo", - "Franck_Moreira", - "danielmelogpi", - "gcacars", - "ti.marcosdias", - "teoli", - "viniciusdacal", - "Lutchia", - "paulociecomp", - "mauricio.araldi", - "marinalimeira", - "ThiagoCase", - "helderdarocha", - "rodrigopadula", - "jswisher", - "netfuzzer33", - "jaydson", - "tauame" + "Sebastianz", + "caio" ] }, - "Web/JavaScript/A_re-introduction_to_JavaScript": { - "modified": "2020-05-27T17:14:30.277Z", + "Web/SVG/Element/desc": { + "modified": "2019-03-23T23:34:02.707Z", "contributors": [ - "ruanpetterson", - "nailtonvieira", - "michaelycus", - "mateus.mlo", - "jhbalestrin", - "Sheppy", - "TiagoWinehouse", - "victorwpbastos", - "ruda", - "ti.marcosdias", - "fredericksilva", - "Scr1pt3r", - "trestini", - "ThiagoMatos", - "angelorubin", - "jlcarvalho", - "TheBorba", + "Sebastianz", + "caio", + "fscholz", "teoli", - "gtcarlos", - "arthur.luiz" + "pedrofsn" ] }, - "Web/JavaScript/About_JavaScript": { - "modified": "2020-03-12T19:38:41.483Z", + "Web/SVG/Element/ellipse": { + "modified": "2019-03-23T22:57:25.451Z", "contributors": [ - "fcard", - "teoli", - "kuni71" + "wbamberg", + "Sebastianz", + "caio" ] }, - "Web/JavaScript/Data_structures": { - "modified": "2020-08-07T10:04:07.537Z", + "Web/SVG/Element/filter": { + "modified": "2019-03-23T22:57:12.383Z", "contributors": [ - "rafhaelfitzpatrick", - "GuilhermePiovesan", - "luizamunk", - "larafelix", - "gabrielbarros28", - "BrunoThomaz", - "renansouza", - "rafaelcavalcante", - "HelderSi", - "wendellpereira", - "dmop", - "wesleycoder", - "WederPachecoSilva", - "Domicio", + "Sebastianz", + "caio" + ] + }, + "Web/SVG/Element/g": { + "modified": "2020-10-15T21:34:51.514Z", + "contributors": [ + "MarcosNakamine", + "Sebastianz", "teoli", - "jagascript" + "caio" ] }, - "Web/JavaScript/Enumerabilidade_e_posse_de_propriedades": { - "modified": "2020-03-12T19:44:27.885Z", + "Web/SVG/Element/glyph": { + "modified": "2019-03-23T22:51:14.283Z", "contributors": [ - "jaimemaretoli", - "cantoniazzi" + "Sebastianz", + "caio" ] }, - "Web/JavaScript/Equality_comparisons_and_sameness": { - "modified": "2020-03-12T19:41:26.724Z", + "Web/SVG/Element/glyphRef": { + "modified": "2019-03-23T22:51:12.926Z", "contributors": [ - "babieste", - "VictorGom3s", - "phillipnunes", - "alinedmelo", - "alexandresn" + "Sebastianz", + "caio" ] }, - "Web/JavaScript/EventLoop": { - "modified": "2020-03-12T19:41:03.578Z", + "Web/SVG/Element/hkern": { + "modified": "2019-03-23T22:51:14.130Z", "contributors": [ - "GuilhermePiovesan", - "Rondinelly", - "oirodolfo", - "ruda", - "jaimeschettini", - "Felipe_Baravieira" + "Sebastianz", + "caio" ] }, - "Web/JavaScript/Guide": { - "modified": "2020-03-12T19:37:56.671Z", + "Web/SVG/Element/image": { + "modified": "2020-10-15T21:34:49.162Z", "contributors": [ - "SphinxKnight", - "Franck_Moreira", - "Danilson_Veloso", - "MarceloBRN", - "felipetesc", - "evertonmss", - "carlospereira9372", + "MarcosNakamine", + "Sebastianz", "teoli", - "regisdiogo", - "ethertank" + "caio" ] }, - "Web/JavaScript/Guide/Closures": { - "modified": "2020-04-07T04:11:27.586Z", + "Web/SVG/Element/line": { + "modified": "2019-03-23T22:57:18.810Z", "contributors": [ - "henriquegeremia", - "KarineLiuti", - "eduardothemoura", - "babieste", "wbamberg", - "Qiua", - "vagnerleitte", - "welitonderesende", - "akfzambrana", - "AlanCezarAraujo", - "dansoah", - "cirocosta", - "teoli", - "ffrulani", - "carlosrberto", - "Machado" + "Sebastianz", + "caio" ] }, - "Web/JavaScript/Guide/Coleções_chaveadas": { - "modified": "2020-03-12T19:42:42.934Z", + "Web/SVG/Element/linearGradient": { + "modified": "2019-03-23T23:12:58.688Z", "contributors": [ - "Franck_Moreira" + "wbamberg", + "Sebastianz", + "caio", + "eltonmesquita" ] }, - "Web/JavaScript/Guide/Declarações": { - "modified": "2020-03-12T19:39:22.758Z", + "Web/SVG/Element/marker": { + "modified": "2019-03-23T22:51:15.955Z", "contributors": [ - "igormmatos", - "TheMrHetch", - "viniciusdacal", - "mahenrique", - "Franck_Moreira", - "DiegoGrande", - "MarceloBRN", - "pkelbert" + "wbamberg", + "Sebastianz", + "caio" ] }, - "Web/JavaScript/Guide/Detalhes_do_Modelo_do_Objeto": { - "modified": "2020-10-29T17:14:14.553Z", + "Web/SVG/Element/mask": { + "modified": "2019-03-23T22:51:15.170Z", "contributors": [ - "pedropaulo91", - "FranklynKleiton", - "igorsmasc", "wbamberg", - "nailtonvieira", - "rsr90", - "tassionoronha", - "MuralhadeAdriano", - "victor-borges", - "fabiomiranda", - "AlanCezarAraujo", - "teoli", - "lisy", - "alexandresn" + "Sebastianz", + "caio" ] }, - "Web/JavaScript/Guide/Expressions_and_Operators": { - "modified": "2020-11-13T16:04:53.998Z", + "Web/SVG/Element/metadata": { + "modified": "2019-03-23T22:51:15.500Z", "contributors": [ - "bragaus", - "webfelipemaia", - "dowgssss", - "Franck_Moreira", - "gustavo8555", - "odisseumau", - "MarceloBRN", - "pkelbert", - "teoli", - "atilafassina" + "Sebastianz", + "caio" ] }, - "Web/JavaScript/Guide/Formatando_texto": { - "modified": "2020-03-12T19:42:35.835Z", + "Web/SVG/Element/missing-glyph": { + "modified": "2019-03-23T22:50:49.615Z", "contributors": [ - "Franck_Moreira", - "odisseumau", - "reuel.jonathan" + "Sebastianz", + "caio" ] }, - "Web/JavaScript/Guide/Funções": { - "modified": "2020-03-12T19:40:21.813Z", + "Web/SVG/Element/mpath": { + "modified": "2019-03-23T22:57:24.178Z", "contributors": [ - "webfelipemaia", - "MateusHirt", - "arxdsilva", - "luc4smoreira", - "martinusso", - "hctsantos", - "Franck_Moreira", - "odisseumau", - "lfelipev", - "melostbr", - "rvNN", - "fabianobn", - "ewertonorg" + "Sebastianz", + "caio" ] }, - "Web/JavaScript/Guide/Igualdade": { - "modified": "2019-03-23T23:25:15.038Z", + "Web/SVG/Element/path": { + "modified": "2019-03-23T22:58:43.505Z", "contributors": [ - "teoli", - "fernando.karpinski" + "Sebastianz", + "reebr", + "caio" ] }, - "Web/JavaScript/Guide/Indexed_collections": { - "modified": "2020-12-11T14:17:55.678Z", + "Web/SVG/Element/pattern": { + "modified": "2019-03-23T22:50:49.027Z", "contributors": [ - "bragaus", - "felima2017", - "hctsantos", - "jppcel", - "thiagosaife", - "doomsterinc", - "felipetesc" + "wbamberg", + "Sebastianz", + "caio" ] }, - "Web/JavaScript/Guide/Inheritance_and_the_prototype_chain": { - "modified": "2020-03-12T19:39:21.410Z", + "Web/SVG/Element/polygon": { + "modified": "2019-03-23T22:57:10.306Z", "contributors": [ - "deadkff01", - "duduindo", - "lms7", - "lucgauer", - "Timer00", - "melostbr", - "VinicioSantos", - "everton3x", - "hudsontavares", - "ericcristhiano", - "Felipe_Baravieira", - "luisfmsouza", - "LucasCaixeta", - "antoniomquadrosfilho" + "wbamberg", + "Sebastianz", + "caio" ] }, - "Web/JavaScript/Guide/Introduction": { - "modified": "2020-03-12T19:41:02.913Z", + "Web/SVG/Element/polyline": { + "modified": "2019-03-23T22:57:19.114Z", "contributors": [ - "LucasGabrielSI", - "luc4smoreira", - "ledebour", - "mahenrique", - "Franck_Moreira", - "Danilson_Veloso", - "frcnetto", - "joaomarcoslopes", - "carolinne", - "gomez", - "melostbr", - "PedroTorresMaschio" + "wbamberg", + "Sebastianz", + "caio" ] }, - "Web/JavaScript/Guide/Iteratores_e_geradores": { - "modified": "2020-08-05T20:59:34.854Z", + "Web/SVG/Element/radialGradient": { + "modified": "2019-03-23T22:51:15.349Z", "contributors": [ - "jonas-alves", - "lcelso", - "lesimoes", - "MarceloFAugusto", - "emersonlaurentino", - "upnic", - "iFgR", - "felipetesc" + "wbamberg", + "Sebastianz", + "caio" ] }, - "Web/JavaScript/Guide/Keyed_collections": { - "modified": "2020-03-12T19:44:28.942Z", + "Web/SVG/Element/rect": { + "modified": "2020-10-15T21:34:48.350Z", "contributors": [ - "jaimemaretoli", - "raphaellima8" + "MarcosNakamine", + "wbamberg", + "Sebastianz", + "caio" ] }, - "Web/JavaScript/Guide/Lacos_e_iteracoes": { - "modified": "2020-03-12T19:41:00.064Z", + "Web/SVG/Element/script": { + "modified": "2019-03-23T22:51:13.840Z", "contributors": [ - "SphinxKnight", - "odjr", - "Killdragon", - "Gregory", - "Franck_Moreira", - "odisseumau", - "alinehx", - "Felipe_Baravieira" + "Sebastianz", + "caio" ] }, - "Web/JavaScript/Guide/Meta_programming": { - "modified": "2020-07-06T21:45:33.616Z", + "Web/SVG/Element/set": { + "modified": "2019-03-18T21:15:52.031Z", "contributors": [ - "brasmon8351", - "lcelso", - "Darksoulsong", - "WagnerSilveira", - "evertonmss" + "Sebastianz", + "caio" ] }, - "Web/JavaScript/Guide/Módulos": { - "modified": "2020-10-15T22:31:27.603Z", + "Web/SVG/Element/stop": { + "modified": "2019-03-18T21:15:53.395Z", "contributors": [ - "LucioCarvalhoDev", - "brasmon8351" + "Sebastianz", + "caio" ] }, - "Web/JavaScript/Guide/Numeros_e_datas": { - "modified": "2020-11-19T03:04:52.069Z", + "Web/SVG/Element/style": { + "modified": "2019-03-23T22:58:43.006Z", "contributors": [ - "SphinxKnight", - "bragaus", - "Franck_Moreira", - "fabiobasso", - "felipebool", - "odisseumau", - "thiagosaife", - "lfelipev", - "TiagoAmaral", - "MarceloBRN" + "Sebastianz", + "caio" ] }, - "Web/JavaScript/Guide/Regular_Expressions": { - "modified": "2020-11-20T11:07:29.286Z", + "Web/SVG/Element/svg": { + "modified": "2020-10-15T21:28:10.159Z", "contributors": [ - "bragaus", - "leonardogs0919", - "PedroIgnacio", - "luisfvieira", - "rodrigocode4", - "Twodio", - "niltonslf", - "labforcode", - "gutuler", - "GabrielAlvez", - "Tiagosb", - "JardelUiliam", - "Feijor", - "fininhors", - "Franck_Moreira", - "pauloaug", - "programadorthi", - "odisseumau", - "edupsousa", + "MarcosNakamine", + "Sebastianz", + "caio", "teoli", - "marciotoledo", - "ethertank", - "danielpsrj" + "Haroldohc" ] }, - "Web/JavaScript/Guide/Sintaxe_e_tipos": { - "modified": "2020-03-12T19:42:40.865Z", + "Web/SVG/Element/switch": { + "modified": "2019-03-23T22:50:51.303Z", "contributors": [ - "Franck_Moreira" + "Sebastianz", + "caio" ] }, - "Web/JavaScript/Guide/Trabalhando_com_Objetos": { - "modified": "2019-10-02T09:41:18.709Z", + "Web/SVG/Element/symbol": { + "modified": "2019-03-23T22:52:08.134Z", "contributors": [ - "reinaldoamaralstudio", - "Marcustap", - "diegolaquino", - "thienry", - "caio687", - "SphinxKnight", - "everton0991", - "andre-violin", - "camposdev", - "daliannyvieira", - "cezaraugusto", - "raphaellima8", - "Danilson_Veloso", - "jigs12", - "LucasRamos", + "Sebastianz", + "caio", + "dayanyrec" + ] + }, + "Web/SVG/Element/text": { + "modified": "2020-10-15T21:27:11.261Z", + "contributors": [ + "MarcosNakamine", + "Sebastianz", "teoli", - "fernando.karpinski" + "caio", + "unreleasedmix" ] }, - "Web/JavaScript/Guide/Usando_promises": { - "modified": "2020-04-19T11:41:18.110Z", + "Web/SVG/Element/textPath": { + "modified": "2019-03-23T22:50:48.585Z", "contributors": [ - "RodrigoWebDev", - "lopesboa", - "marciioluucas", - "alexat13", - "joao-rafael", - "Jeovano", - "Tiagosb" + "Sebastianz", + "caio" ] }, - "Web/JavaScript/Guide/Values,_variables,_and_literals": { - "modified": "2020-10-29T14:01:41.068Z", + "Web/SVG/Element/title": { + "modified": "2019-03-18T21:25:13.519Z", "contributors": [ - "wcqueiroz", - "PieterVeldman", - "Dikz", - "dbconrado", - "mahenrique", - "Franck_Moreira", - "MichelMentzFernandes", - "rodrigo-designer", - "melostbr", - "Domicio", - "raduq", - "werikson.h@gmail.com", - "Jonathanfk", - "ewertonorg", - "felipe.uliana", - "pkelbert", - "teoli", - "raphaelfabeni", - "arielserafini" + "Sebastianz", + "caio" ] }, - "Web/JavaScript/Introduction_to_Object-Oriented_JavaScript": { - "modified": "2020-06-07T23:51:22.220Z", + "Web/SVG/Element/tref": { + "modified": "2019-03-23T22:57:16.290Z", "contributors": [ - "thalesruan", - "lucasinocente", - "Janjos", - "mensonones", - "lourencoccc", - "victormaestri", - "caio_araujo", - "raphaellima8", - "leandroruel", - "filipetorres", - "filipeluiz", - "dragonares5", - "marvin52", - "caioguedes", - "ronybezerra", - "GabrielLidenor", - "pabloff9", - "ti.marcosdias", - "Webysther", - "brunoeduardo", - "DolbyCpp", - "RebeloX", - "mateusleon", - "ewertonorg", - "phillippimenta", - "masimao", - "lucaspedroza", - "teoli", - "acaua", - "FilipeLinhares", - "augustowebd" + "Sebastianz", + "caio" ] }, - "Web/JavaScript/JavaScript_technologies_overview": { - "modified": "2019-05-10T14:34:34.570Z", + "Web/SVG/Element/tspan": { + "modified": "2020-10-15T21:34:49.043Z", "contributors": [ - "SaggitariusA", - "jessicamorim42", - "angelorubin", - "caioabe", - "marcio-ti", - "IanRamosC", - "teoli", - "cleitongalvao", - "treax" + "MarcosNakamine", + "wbamberg", + "Sebastianz", + "caio" ] }, - "Web/JavaScript/Language_Resources": { - "modified": "2020-03-12T19:43:20.868Z", + "Web/SVG/Element/use": { + "modified": "2019-03-23T22:57:25.260Z", "contributors": [ - "christophergomes", - "Danilson_Veloso" + "ed1nh0", + "Sebastianz", + "caio" ] }, - "Web/JavaScript/Memory_Management": { - "modified": "2020-03-12T19:40:29.251Z", + "Web/SVG/Element/view": { + "modified": "2020-10-15T21:34:47.580Z", "contributors": [ - "silvaw", - "LincePotiguara", - "gcacars", - "AlanCezarAraujo" + "MarcosNakamine", + "Sebastianz", + "caio" ] }, - "Web/JavaScript/Reference": { - "modified": "2019-03-23T23:33:55.653Z", + "Web/SVG/Element/vkern": { + "modified": "2019-03-23T22:51:15.049Z", "contributors": [ - "Gutemberg", - "teoli", - "ggviana", - "ethertank" + "Sebastianz", + "caio" ] }, - "Web/JavaScript/Reference/About": { - "modified": "2020-03-12T19:38:32.625Z", + "Web/SVG/Tutorial": { + "modified": "2020-05-06T15:49:36.834Z", "contributors": [ - "alissonbovenzo", - "teoli", - "ggviana" + "gilmargn", + "mauriciosoares01", + "rogeralbinoi" ] }, - "Web/JavaScript/Reference/Classes": { - "modified": "2020-10-15T21:39:06.651Z", + "Web/SVG/Tutorial/Introduction": { + "modified": "2019-03-18T20:34:25.046Z", "contributors": [ - "henriquegeremia", - "Danilo", - "28Rasc", - "crisleitaoguerra", - "lesimoes", - "stephanogiuseppe", - "fscholz", - "TiagoDanin", - "rodrigocode4", - "JhonnathaAndrade", - "SphinxKnight", - "brunozache", - "danilosetubal", - "thiagolimaa", - "lucasclazer", - "lmcarreiro", - "flavio-jr", - "shuminyang", - "juloko", - "lourencoccc", - "Arashk", - "deadkff01", - "davidcorbetta", - "ldoamaral", - "ti.marcosdias", - "ThiagoSchetini", - "felipetesc", - "haskellcamargo", - "jonicas" + "kafnjr", + "mauriciosoares01", + "Anizio", + "FelipeAlvim" ] }, - "Web/JavaScript/Reference/Classes/constructor": { - "modified": "2020-10-21T08:28:05.769Z", + "Web/Security": { + "modified": "2019-09-10T16:44:48.056Z", "contributors": [ - "DaMaGi", - "deadkff01", - "ThiagoSchetini" + "SphinxKnight", + "julio-elipse", + "ygormaximo", + "takahan", + "Fulanodigital" ] }, - "Web/JavaScript/Reference/Classes/extends": { - "modified": "2020-10-15T21:39:13.563Z", + "Web/Security/Securing_your_site": { + "modified": "2019-03-23T22:41:54.591Z", "contributors": [ - "fscholz", - "SphinxKnight", - "raduq" + "julio-elipse", + "ygormaximo", + "marumari" ] }, - "Web/JavaScript/Reference/Classes/static": { - "modified": "2020-10-15T21:39:09.808Z", + "Web/Security/Securing_your_site/Turning_off_form_autocompletion": { + "modified": "2019-03-23T22:41:55.986Z", "contributors": [ - "joaopedroaats", - "helton-mori-dev", - "fscholz", - "SphinxKnight", - "leticiacostadias", - "diegofernandez", - "kdex", - "raduq" + "VitorTakara", + "allanfoppa", + "cloudcon", + "Jerffersonferreira", + "iversonfariascosta", + "mfelippi", + "marcoiai" ] }, - "Web/JavaScript/Reference/Deprecated_and_obsolete_features": { - "modified": "2020-03-12T19:44:38.541Z", + "Web/Web_Components": { + "modified": "2020-08-16T18:35:27.844Z", "contributors": [ - "Gabrieleiro", - "houstondapaz", - "gabrielppeixoto", - "raduq" + "GuilhermePiovesan", + "alexongarato", + "burn-c", + "luan0ap", + "cristiano-soares" ] }, - "Web/JavaScript/Reference/Errors": { - "modified": "2020-03-12T19:44:14.768Z", + "Web/XSLT": { + "modified": "2019-03-23T22:02:56.256Z", "contributors": [ - "gutoribeiro", - "fscholz" + "lfaraone" ] }, - "Web/JavaScript/Reference/Errors/Cant_access_lexical_declaration_before_init": { - "modified": "2020-03-12T19:49:26.166Z", + "WebAssembly": { + "modified": "2019-03-23T22:13:27.780Z", "contributors": [ - "ViniciusMatias" + "cstipkovic", + "Fernandolrs", + "AlanCezarAraujo" ] }, - "Web/JavaScript/Reference/Errors/Cant_access_property": { - "modified": "2020-03-12T19:48:10.197Z", + "WebAssembly/Concepts": { + "modified": "2020-06-28T19:04:25.686Z", "contributors": [ - "igormmatos" + "VictorGom3s", + "jhserodio", + "luan0ap", + "thiagosaife" ] }, - "Web/JavaScript/Reference/Errors/Fata_parênteses_após_lista_argumento": { - "modified": "2020-03-12T19:45:19.574Z", + "orphaned/Learn/How_to_contribute": { + "modified": "2020-07-16T22:33:45.702Z", "contributors": [ - "re-andrade1987", - "Tiagoc8402" + "MistarSometung", + "SphinxKnight", + "G_Nascimento", + "AdrianoCh" ] }, - "Web/JavaScript/Reference/Errors/Fecha_chaves_esquecida_apos_lista_propriedades": { - "modified": "2020-03-12T19:47:22.337Z", + "Learn/CSS/Building_blocks/Cascade_and_inheritance": { + "modified": "2020-08-10T11:05:37.121Z", "contributors": [ - "marcelobonatto" + "dsantana77" ] }, - "Web/JavaScript/Reference/Errors/For-each-in_loops_are_deprecated": { - "modified": "2020-03-12T19:46:42.577Z", + "Learn/CSS/Building_blocks": { + "modified": "2020-07-16T22:28:09.218Z", "contributors": [ - "thiagosaife" - ] - }, - "Web/JavaScript/Reference/Errors/Illegal_character": { - "modified": "2020-03-12T19:47:11.284Z", - "contributors": [ - "tomascco", - "Docinho" + "terasider" ] }, - "Web/JavaScript/Reference/Errors/Invalid_array_length": { - "modified": "2020-03-12T19:48:00.493Z", + "Learn/CSS/Building_blocks/The_box_model": { + "modified": "2020-11-09T11:05:07.161Z", "contributors": [ - "thiagosaife" + "wilsonbrandao", + "eduardodarocha", + "warleyfdias" ] }, - "Web/JavaScript/Reference/Errors/Invalid_assignment_left-hand_side": { - "modified": "2020-03-12T19:47:13.957Z", + "Learn/CSS/Styling_text": { + "modified": "2020-11-10T21:16:01.558Z", "contributors": [ - "Maycoooonm" + "wilsonbrandao", + "WesleyCristiano" ] }, - "Web/JavaScript/Reference/Errors/Invalid_const_assignment": { - "modified": "2020-03-12T19:49:08.927Z", + "Learn/CSS": { + "modified": "2020-07-16T22:25:36.584Z", "contributors": [ - "Lennoard" + "fbilinski", + "peas", + "adoniasvitorio", + "melostbr", + "stefanocbl", + "ThiagoMSArrais", + "uteifeld", + "megaday", + "mak213k", + "luan03" ] }, - "Web/JavaScript/Reference/Errors/Invalid_date": { - "modified": "2020-03-12T19:47:58.766Z", + "Learn/Tools_and_testing": { + "modified": "2020-07-16T22:38:56.887Z", "contributors": [ - "thiagosaife" + "GPrimola" ] }, - "Web/JavaScript/Reference/Errors/JSON_bad_parse": { - "modified": "2020-03-12T19:48:06.055Z", + "Learn/Front-end_web_developer": { + "modified": "2020-11-06T17:15:48.569Z", "contributors": [ - "JonatasFAlves" + "flaviomicheletti", + "SphinxKnight", + "marcus.simei", + "vinidesign.web", + "victorwvieira", + "etc_william" ] }, - "Web/JavaScript/Reference/Errors/Missing_colon_after_property_id": { - "modified": "2020-03-12T19:46:39.740Z", + "Learn/Getting_started_with_the_web/The_web_and_web_standards": { + "modified": "2020-09-30T16:25:35.717Z", "contributors": [ - "CristianoLima" + "kleversonsc", + "Xxxtechnopy", + "wilkersalazar" ] }, - "Web/JavaScript/Reference/Errors/Missing_curly_after_function_body": { - "modified": "2020-06-11T07:31:16.349Z", + "Learn/Getting_started_with_the_web/What_will_your_website_look_like": { + "modified": "2020-11-26T14:10:39.382Z", "contributors": [ - "EnzoLeCarvalho" + "SphinxKnight", + "Fernando_Moreira", + "Magela", + "wcqueiroz", + "rafael-junio", + "RobMota", + "Gabriela-23", + "ricardoferreirades", + "psergiojr", + "gustavoaraujo" ] }, - "Web/JavaScript/Reference/Errors/Missing_formal_parameter": { - "modified": "2020-03-12T19:46:52.360Z", + "Learn/Getting_started_with_the_web/How_the_Web_works": { + "modified": "2020-07-16T22:34:02.146Z", "contributors": [ - "danielmalves" + "raucer", + "Magela", + "wcqueiroz", + "joaopaulogn.dev", + "kleinerbr", + "otavioarc", + "pablobfonseca", + "gustavoaraujo" ] }, - "Web/JavaScript/Reference/Errors/Missing_semicolon_before_statement": { - "modified": "2020-04-24T18:53:47.335Z", + "Learn/Getting_started_with_the_web/CSS_basics": { + "modified": "2020-07-16T22:35:02.824Z", "contributors": [ - "JoaoSantos65", - "bruncs", - "rubenfaria" + "Magela", + "The-Physicist", + "klisostom", + "SphinxKnight", + "MidianLima", + "wcqueiroz", + "fpsaraiva", + "otavioarc", + "yosasuke", + "rsip22", + "MatheusSales", + "DiegoBousfield", + "gustavoaraujo" ] }, - "Web/JavaScript/Reference/Errors/Negative_repetition_count": { - "modified": "2020-03-12T19:49:26.923Z", + "Learn/Getting_started_with_the_web/HTML_basics": { + "modified": "2020-09-28T22:22:12.899Z", "contributors": [ - "ViniciusMatias" + "kleversonsc", + "Magela", + "cisojacobsen", + "lukebarneys", + "The-Physicist", + "wcqueiroz", + "helton-mori-dev", + "fabianosantos.net", + "RobMota", + "brunopulis", + "marciioluucas", + "rsip22", + "DiegoBousfield", + "gustavoaraujo" ] }, - "Web/JavaScript/Reference/Errors/No_variable_name": { - "modified": "2020-03-12T19:47:33.508Z", + "Learn/Getting_started_with_the_web": { + "modified": "2020-11-12T14:47:17.943Z", "contributors": [ - "danemmanuel" + "msevero.vasconcelos", + "Magela", + "wcqueiroz", + "ivanagui2", + "adoniasvitorio", + "LucianoHanna", + "RobMota", + "gustavoaraujo", + "duuz" ] }, - "Web/JavaScript/Reference/Errors/Not_a_codepoint": { - "modified": "2020-03-12T19:49:24.646Z", + "Learn/Getting_started_with_the_web/Installing_basic_software": { + "modified": "2020-07-16T22:34:10.512Z", "contributors": [ - "ViniciusMatias" + "Magela", + "wcqueiroz", + "israeljunior", + "helton-mori-dev", + "el-unicorn", + "rafael-junio", + "RobMota", + "leocadiomichael", + "CNicola", + "gustavoaraujo" ] }, - "Web/JavaScript/Reference/Errors/Not_a_function": { - "modified": "2020-03-12T19:46:51.395Z", + "Learn/Getting_started_with_the_web/JavaScript_basics": { + "modified": "2020-11-19T13:42:46.355Z", "contributors": [ - "vanessa-ariel", - "VictorGom3s", - "mvieira-kpmg", - "lucianoac", - "rubenfaria" + "msevero.vasconcelos", + "yurigauermarques", + "imsantosrodrigo", + "di3goCS", + "raucer", + "soarescamila", + "lucas-av7", + "Magela", + "wcqueiroz", + "helton-mori-dev", + "pietromesadri", + "raphaelhenrique", + "gabrielrosa2004", + "fernandosavio", + "Ralf_Amr", + "otavioarc", + "davilmaster", + "mrmorais", + "marcio-ti", + "barrosval", + "capaci", + "MatheusSales", + "DiegoBousfield", + "leleofg", + "gustavoaraujo" ] }, - "Web/JavaScript/Reference/Errors/NãoNomeado_funcão_declaração": { - "modified": "2020-03-12T19:47:57.308Z", + "Learn/Getting_started_with_the_web/Dealing_with_files": { + "modified": "2020-07-16T22:34:37.257Z", "contributors": [ - "LucianoCalsolari", - "re-andrade1987" + "Andrya", + "Magela", + "wcqueiroz", + "RobMota", + "SphinxKnight", + "Mservicos", + "Gabriela-23", + "ricardoferreirades", + "rsip22", + "rvNN", + "CNicola", + "gustavoaraujo" ] }, - "Web/JavaScript/Reference/Errors/Não_definido": { - "modified": "2020-03-12T19:45:05.709Z", + "Learn/Getting_started_with_the_web/Publishing_your_website": { + "modified": "2020-07-16T22:34:28.025Z", "contributors": [ - "eduardovivi", - "emilianocarvalho", + "raucer", + "Magela", + "wcqueiroz", + "tuxpilgrim", "Fernandolrs", - "FelipeLima" + "otavioarc", + "barrosval", + "gustavoaraujo" ] }, - "Web/JavaScript/Reference/Errors/Precision_range": { - "modified": "2020-04-17T23:39:16.233Z", + "Learn/HTML/Howto": { + "modified": "2020-07-16T22:22:30.419Z", "contributors": [ - "ViniciusMatias" + "wcqueiroz", + "julio-elipse", + "slopesricardo" ] }, - "Web/JavaScript/Reference/Errors/Property_access_denied": { - "modified": "2020-03-12T19:48:57.838Z", + "Learn/HTML": { + "modified": "2020-10-31T12:06:06.944Z", "contributors": [ - "luan0ap" + "yurigauermarques", + "Magela", + "wcqueiroz", + "julio-elipse", + "Gabriela-23", + "luzniek", + "Fernandolrs", + "Leodma", + "lsvinicius", + "dnlezin" ] }, - "Web/JavaScript/Reference/Errors/Read-only": { - "modified": "2020-03-12T19:47:21.681Z", + "Learn/HTML/Introduction_to_HTML/Creating_hyperlinks": { + "modified": "2020-12-09T14:37:56.311Z", "contributors": [ - "VitorHFLopes" + "Magela", + "imsantosrodrigo", + "soarescamila", + "klisostom", + "wcqueiroz", + "joaopaulogn.dev", + "Kardhyr", + "programando", + "fossalex", + "stefanocbl" ] }, - "Web/JavaScript/Reference/Errors/Redeclared_parameter": { - "modified": "2020-03-12T19:49:14.206Z", + "Learn/HTML/Introduction_to_HTML/Debugging_HTML": { + "modified": "2020-10-10T15:20:53.986Z", "contributors": [ - "leobarros" + "imsantosrodrigo", + "ricardo-ap-abreu", + "drikoh", + "charles_melara", + "Marnei-Cardoso" ] }, - "Web/JavaScript/Reference/Errors/Stmt_after_return": { - "modified": "2020-03-12T19:44:07.787Z", + "Learn/HTML/Introduction_to_HTML/Document_and_website_structure": { + "modified": "2020-10-10T12:24:24.277Z", "contributors": [ - "gidaltilopes", - "raduq" + "imsantosrodrigo", + "LucasPereira", + "Lukff", + "wcqueiroz", + "felipe-luiz" ] }, - "Web/JavaScript/Reference/Errors/Too_much_recursion": { - "modified": "2020-03-12T19:49:13.727Z", + "Learn/HTML/Introduction_to_HTML/Advanced_text_formatting": { + "modified": "2020-11-03T03:15:01.344Z", "contributors": [ - "umpierrefp" + "SphinxKnight", + "MiguelZK", + "imsantosrodrigo", + "klisostom", + "romulocarvalho", + "itamarsilva" ] }, - "Web/JavaScript/Reference/Errors/Undeclared_var": { - "modified": "2020-03-12T19:44:41.988Z", + "Learn/HTML/Introduction_to_HTML/HTML_text_fundamentals": { + "modified": "2020-10-08T15:21:36.053Z", "contributors": [ - "tmoraes" + "imsantosrodrigo", + "soarescamila", + "Magela", + "hillary-reis", + "klisostom", + "wcqueiroz", + "digoribeiro", + "joaopaulogn.dev", + "RobMota", + "SphinxKnight", + "programando", + "stefanocbl" ] }, - "Web/JavaScript/Reference/Errors/Undefined_prop": { - "modified": "2020-03-12T19:49:23.239Z", + "Learn/HTML/Introduction_to_HTML/Getting_started": { + "modified": "2020-12-07T16:55:14.326Z", "contributors": [ - "ViniciusMatias" + "Magela", + "soarescamila", + "wcqueiroz", + "diegobarcelar", + "Gabriela-23", + "IsabellaMacedo", + "hocraveiro", + "GustavoAlvesDaSilvaCoder", + "allysonthales", + "jorgeclesio" ] }, - "Web/JavaScript/Reference/Errors/Unexpected_token": { - "modified": "2020-03-12T19:46:47.848Z", + "Learn/HTML/Introduction_to_HTML": { + "modified": "2020-11-27T11:33:56.639Z", "contributors": [ - "naozuka", - "marcelobonatto", - "rubenfaria" + "msevero.vasconcelos", + "SphinxKnight", + "marcus.simei", + "Magela", + "wcqueiroz", + "Gabriela-23", + "BrunoThomaz", + "JonatasTeixeira", + "Ronicley", + "Isaakie", + "stefanocbl", + "farfael", + "yfernandes", + "AnteroJunior", + "erickmartim", + "andrekutianski" ] }, - "Web/JavaScript/Reference/Errors/Unexpected_type": { - "modified": "2020-03-12T19:46:50.924Z", + "Learn/HTML/Introduction_to_HTML/Test_your_skills:_HTML_text_basics": { + "modified": "2020-10-02T10:40:58.435Z", "contributors": [ - "DeividhyTonetti", - "LucasSouza6", - "mauricionsantos", - "rubenfaria" + "lufesipe", + "incaDigital" ] }, - "Web/JavaScript/Reference/Errors/Unterminated_string_literal": { - "modified": "2020-03-12T19:45:00.554Z", + "Learn/HTML/Introduction_to_HTML/The_head_metadata_in_HTML": { + "modified": "2020-07-16T22:23:22.939Z", "contributors": [ - "pratosnaweb" + "Danilo", + "Magela", + "klisostom", + "leoc01", + "wcqueiroz", + "daliannyvieira", + "Luan4560", + "joaopaulogn.dev", + "RobMota", + "Gabriela-23", + "programando", + "mitlearning", + "stefanocbl", + "kenobll" ] }, - "Web/JavaScript/Reference/Functions": { - "modified": "2020-10-20T11:16:27.457Z", + "Learn/HTML/Multimedia_and_embedding/Adding_vector_graphics_to_the_Web": { + "modified": "2020-08-14T16:08:27.991Z", "contributors": [ - "dorfs", - "Trauvin", - "Gabriela-23", - "Glaydson", - "renoirsousa", - "rafaelbertelli", - "Jerffersonferreira", - "thiagobitencourt", - "grocholski", - "boniattirodrigo", - "Durtto", - "fscholz" + "MarcosClaro" ] }, - "Web/JavaScript/Reference/Functions/Arrow_functions": { - "modified": "2020-10-15T21:30:14.177Z", + "Learn/HTML/Multimedia_and_embedding/Images_in_HTML": { + "modified": "2020-07-16T22:24:47.423Z", "contributors": [ - "thgo", - "diogenesfranca", - "hansobvius", - "eduardosoller", - "leandrowf", - "mari1248", - "SphinxKnight", - "lesimoes", - "alexnum", - "rivajunior", - "RodrigoOler", - "lucasmedeiros" + "cisojacobsen", + "LucasPereira", + "rafaelblink", + "brunopulis" ] }, - "Web/JavaScript/Reference/Functions/Definicoes_metodos": { - "modified": "2020-10-15T21:41:38.555Z", + "Learn/HTML/Multimedia_and_embedding": { + "modified": "2020-09-18T10:32:28.552Z", "contributors": [ - "LuizinGustavo", - "michael-nishikawa" + "gcrz", + "MiscoTrisco", + "wcqueiroz", + "finkenauer", + "MatheusKozaku" ] }, - "Web/JavaScript/Reference/Functions/Parametros_Predefinidos": { - "modified": "2020-11-16T09:54:39.736Z", + "Learn/HTML/Multimedia_and_embedding/Other_embedding_technologies": { + "modified": "2020-07-16T22:25:03.448Z", "contributors": [ - "mateusvelleda", - "rafaelcavalcante", - "Roger-Melo", - "SphinxKnight", - "alissonperez", - "fernandosavio", - "KennyMack", - "AlanCezarAraujo" + "cisojacobsen", + "MatheusBorges", + "LucasPereira" ] }, - "Web/JavaScript/Reference/Functions/arguments": { - "modified": "2020-03-12T19:42:08.040Z", + "Learn/HTML/Multimedia_and_embedding/Responsive_images": { + "modified": "2020-07-16T22:24:37.186Z", "contributors": [ - "Arlon", - "Lovelex", - "peaonunes", - "lffg", - "renatodantas", - "greevin", - "YurePereira", - "icaromh" + "gustavaum", + "davimh", + "rafaelcavalcante", + "BrunoThomaz" ] }, - "Web/JavaScript/Reference/Functions/get": { - "modified": "2020-08-27T04:51:38.379Z", + "Learn/HTML/Multimedia_and_embedding/Video_and_audio_content": { + "modified": "2020-07-16T22:24:55.358Z", "contributors": [ - "SandroMiguel", - "rodrigocode4", - "hbarcelos" + "LucasPereira", + "LucasPrado" ] }, - "Web/JavaScript/Reference/Functions/rest_parameters": { - "modified": "2020-03-12T19:42:42.252Z", + "Learn/HTML/Tables/Basics": { + "modified": "2020-11-17T04:01:03.837Z", "contributors": [ - "gudeck", "SphinxKnight", - "matheussilvasantos", - "KennyMack", - "raduq" + "aluizioneto", + "Caio_Rocha" ] }, - "Web/JavaScript/Reference/Functions/set": { - "modified": "2020-03-12T19:44:37.360Z", + "Learn/HTML/Tables": { + "modified": "2020-07-16T22:25:14.343Z", "contributors": [ - "chicabomb", - "filipetorres", - "willianbriotto" + "nicolearagao", + "BeatrizCavallieri" ] }, - "Web/JavaScript/Reference/Global_Objects": { - "modified": "2020-03-12T19:38:37.086Z", + "Learn": { + "modified": "2020-08-17T01:24:04.475Z", "contributors": [ - "misabraga", - "thiagoh", + "GiovanniHD201E", + "Magela", + "Anonymous", "SphinxKnight", + "wcqueiroz", + "leticiacampanharo", + "svarlamov", + "julio-elipse", + "CodexZombie", + "Ermesoml", + "LucasPrado", + "phhoffmann", + "mrmorais", + "Gilbertosilvax1", "teoli", - "vagnerleitte", - "Norbert" + "toscano", + "CNicola", + "JamileLima", + "Diegoprsz", + "Doug_Fany", + "gustavoaraujo", + "-" ] }, - "Web/JavaScript/Reference/Global_Objects/Array": { - "modified": "2019-05-03T12:21:47.299Z", + "Learn/JavaScript/Client-side_web_APIs/Client-side_storage": { + "modified": "2020-09-30T03:03:23.191Z", "contributors": [ - "thelimarenan", - "caiocaly", - "ManoelLobo", - "rafaelbezerra195", - "gutoribeiro", - "kdex", - "biracruz", - "marcoaure", - "dsbezerra", - "deyvid0123", - "deyvidyury", - "raduq", - "RodolfoSilva", - "FrancisWagner", - "euconectei", - "teoli", - "xhximenes", - "Sheppy" + "SphinxKnight", + "Paulo_Rezende" ] }, - "Web/JavaScript/Reference/Global_Objects/Array/@@iterator": { - "modified": "2019-03-23T22:35:56.703Z", + "Learn/JavaScript/Client-side_web_APIs": { + "modified": "2020-07-16T22:32:41.822Z", "contributors": [ - "jjmars" + "georgebueno77", + "helton-mori-dev", + "WellingtonFR", + "allanregess", + "Wendryl", + "andersoonluan" ] }, - "Web/JavaScript/Reference/Global_Objects/Array/@@unscopables": { - "modified": "2020-10-15T22:03:58.150Z", + "Learn/JavaScript/Client-side_web_APIs/Introduction": { + "modified": "2020-11-04T14:49:24.547Z", "contributors": [ - "Filipe-Souza", - "marciioluucas" + "domuserk", + "nunes.rodrigo.dev", + "BeatrizCavallieri", + "GLuchtenberg", + "fpsaraiva", + "FernandaBernardo" ] }, - "Web/JavaScript/Reference/Global_Objects/Array/Reduce": { - "modified": "2020-11-06T11:41:26.392Z", + "Learn/JavaScript/Building_blocks/Build_your_own_function": { + "modified": "2020-07-20T16:29:20.448Z", "contributors": [ - "ricardo.passos.cr", - "duduindo", - "krisamorim", - "mablook", - "balini", - "WandersonDavid", - "rubenmarcus", - "mateusvelleda", - "smoothfall", - "rbuzatto", - "geekcom", - "SphinxKnight", - "guardezi", - "ChrisAmora", - "danilosetubal", - "elvismdnin", - "eltonmesquita", - "gabrielsimas", - "rafaelcavalcante", - "ThaleSelaht", - "alexgwolff", - "FrancisWagner", - "ErickWendel" + "eziotristao", + "gabriel_cadu", + "artphil", + "greysonf" ] }, - "Web/JavaScript/Reference/Global_Objects/Array/ReduceRight": { - "modified": "2020-10-15T21:39:00.467Z", + "Learn/JavaScript/Building_blocks/Looping_code": { + "modified": "2020-07-16T22:31:21.519Z", "contributors": [ - "mateusvelleda", - "luisfvieira", - "raduq" + "gabriel_cadu", + "lucas-av7", + "jess-silvano", + "recofka" ] }, - "Web/JavaScript/Reference/Global_Objects/Array/concat": { - "modified": "2019-06-03T12:42:22.079Z", + "Learn/JavaScript/Building_blocks/conditionals": { + "modified": "2020-11-20T11:18:47.143Z", "contributors": [ - "diegoarcega", - "soleeweb", - "teoli", - "Leikovsk" + "Coronel-Marc", + "gabriel_cadu", + "euvanribeiro", + "greysonf", + "biakp", + "joficial", + "raphaeljq", + "francoforget", + "fenobalao" ] }, - "Web/JavaScript/Reference/Global_Objects/Array/contains": { - "modified": "2020-10-15T21:30:32.690Z", + "Learn/JavaScript/Building_blocks/Events": { + "modified": "2020-07-16T22:31:39.504Z", "contributors": [ - "mateusvelleda", - "wbamberg", - "RodolfoSilva", - "emmanueldaher", - "cirocosta" + "suyfranca", + "PGama-Rodrigo", + "douglast2t", + "greysonf", + "VictorGom3s" ] }, - "Web/JavaScript/Reference/Global_Objects/Array/copyWithin": { - "modified": "2019-03-23T22:35:55.533Z", + "Learn/JavaScript/Building_blocks/Functions": { + "modified": "2020-07-16T22:31:26.363Z", "contributors": [ - "igorc2", - "jjmars" + "artphil", + "samu101108" ] }, - "Web/JavaScript/Reference/Global_Objects/Array/entries": { - "modified": "2019-03-23T22:35:59.312Z", + "Learn/JavaScript/Building_blocks/Image_gallery": { + "modified": "2020-07-16T22:31:44.008Z", "contributors": [ - "igorc2", - "fime", - "jjmars" + "greysonf" ] }, - "Web/JavaScript/Reference/Global_Objects/Array/every": { - "modified": "2020-10-15T21:41:16.789Z", + "Learn/JavaScript/Building_blocks": { + "modified": "2020-07-16T22:31:10.224Z", "contributors": [ - "mateusvelleda", - "pedroprcgm", - "kidjapa", - "zenithpolar", - "mtxr", - "rennerocha", - "monteiroflavio", - "MichelMentzFernandes", - "alisonmonteiro", - "diegoarcega" + "Danilo", + "artphil", + "renansouza", + "psergiojr", + "tecnobr" ] }, - "Web/JavaScript/Reference/Global_Objects/Array/fill": { - "modified": "2020-10-15T21:39:00.968Z", + "Learn/JavaScript/Building_blocks/Return_values": { + "modified": "2020-07-16T22:31:34.447Z", "contributors": [ - "mateusvelleda", - "MarcoBrunoBR", - "murillodmiranda", - "SphinxKnight", - "erickvieira", - "ronniery", - "raduq" + "gabriel_cadu", + "Danilo", + "greysonf" ] }, - "Web/JavaScript/Reference/Global_Objects/Array/filtro": { - "modified": "2020-10-15T21:36:30.999Z", + "Learn/JavaScript/Howto": { + "modified": "2020-07-16T22:33:10.988Z", "contributors": [ - "chrisdavidmills", - "mateusvelleda", - "FelipeMarra", - "leonardooliveira95", - "junagao", - "mtaribeiro", - "RodrigoReis", - "alexandresn", - "erikvinicius5", - "lotharthesavior", - "felipecaputo" + "edvoidcode", + "kabwto" ] }, - "Web/JavaScript/Reference/Global_Objects/Array/find": { - "modified": "2020-10-24T15:40:42.111Z", + "Learn/JavaScript": { + "modified": "2020-08-28T11:51:35.506Z", "contributors": [ - "Gustavonobreza", - "mateusvelleda", - "marcoscoelho", - "awquadros", - "jkdrangel", + "moukinchung", + "Chanpt", + "daniel-neiva", + "BeatrizCavallieri", + "leanfj", + "Takeshi-S", + "Abraham.G.", + "wcqueiroz", + "paulopompeu", + "CarlosFariass", + "leticiacampanharo", + "helton-mori-dev", "SphinxKnight", - "leonardosv", - "cezaraugusto", - "Selminha", - "raduq" + "gucaveira", + "aoc85", + "7aylors", + "gabrielrosa2004", + "byxande", + "amc97", + "Velasco", + "marcio-ti", + "Victorfm2167", + "diogoslima", + "deyvid0123" ] }, - "Web/JavaScript/Reference/Global_Objects/Array/findIndex": { - "modified": "2020-10-15T21:44:45.523Z", + "Learn/JavaScript/Objects/Adding_bouncing_balls_features": { + "modified": "2020-07-16T22:32:35.532Z", "contributors": [ - "mateusvelleda", - "brunotalhate", - "jjmars" + "greysonf" ] }, - "Web/JavaScript/Reference/Global_Objects/Array/flat": { - "modified": "2020-10-15T22:05:38.464Z", + "Learn/JavaScript/Objects/Basics": { + "modified": "2020-12-11T00:30:59.153Z", "contributors": [ - "DiegoGeoDev", - "malarahfelipe", - "mateusvelleda", - "gabriellamas", - "CalvinNunes" + "iJacKP", + "clivelton", + "WellingtonFR", + "rafaelsantosjor", + "hmilena", + "webfelipemaia" ] }, - "Web/JavaScript/Reference/Global_Objects/Array/flatMap": { - "modified": "2020-10-15T22:04:41.673Z", + "Learn/JavaScript/Objects/Inheritance": { + "modified": "2020-07-16T22:32:15.784Z", "contributors": [ - "caricati", - "malarahfelipe", - "MatheusFrez", - "rbuzatto", - "leonardomarciano", - "proxy-chan" + "WellingtonFR", + "greysonf" ] }, - "Web/JavaScript/Reference/Global_Objects/Array/forEach": { - "modified": "2020-10-15T21:24:03.153Z", + "Learn/JavaScript/Objects": { + "modified": "2020-07-16T22:31:52.228Z", "contributors": [ - "mateusvelleda", - "Gutem", - "fred-azevedo", - "rodorgas", - "alexandresn", - "deyvidyury", - "rafaelescrich", - "teoli", - "nah_luquiari" + "rafaelsantosjor", + "webfelipemaia", + "Tiagosb", + "claudiolcastro", + "carlos-rafael", + "juniorcaires" ] }, - "Web/JavaScript/Reference/Global_Objects/Array/from": { - "modified": "2020-10-15T21:38:56.337Z", + "Learn/JavaScript/Objects/JSON": { + "modified": "2020-07-16T22:32:28.309Z", "contributors": [ - "salomes", - "mateusvelleda", - "SphinxKnight", - "rafaelcavalcante", - "welintonti", - "victor-borges" + "euvanribeiro", + "WellingtonFR", + "mateus1siqueira", + "greysonf" ] }, - "Web/JavaScript/Reference/Global_Objects/Array/indexOf": { - "modified": "2020-10-15T21:37:56.001Z", + "Learn/JavaScript/Objects/Object_building_practice": { + "modified": "2020-07-16T22:32:32.103Z", "contributors": [ - "victorwestmann", - "mateusvelleda", - "SDamasceno-Dev", - "tavieto", - "rafaelkendrik", - "LeoRiether", - "brunoluigi", - "ErickWendel", - "lucas.comino" + "tonMoraes", + "greysonf" ] }, - "Web/JavaScript/Reference/Global_Objects/Array/isArray": { - "modified": "2019-08-21T18:08:19.665Z", + "Learn/JavaScript/Objects/Object_prototypes": { + "modified": "2020-07-16T22:32:21.988Z", "contributors": [ - "WBerredo", - "lotharthesavior", - "ZavarezeH" + "WellingtonFR", + "DanStos", + "greysonf" ] }, - "Web/JavaScript/Reference/Global_Objects/Array/join": { - "modified": "2020-10-26T23:42:47.826Z", + "Learn/JavaScript/Objects/Object-oriented_JS": { + "modified": "2020-07-16T22:32:07.136Z", "contributors": [ - "Gustavonobreza", - "Grohden", - "ZavarezeH" + "rpizzolato", + "WellingtonFR", + "greysonf" ] }, - "Web/JavaScript/Reference/Global_Objects/Array/keys": { - "modified": "2019-03-23T22:54:07.464Z", + "Learn/Learning_and_getting_help": { + "modified": "2020-07-16T22:40:49.138Z", "contributors": [ - "SphinxKnight", - "flaviomicheletti", - "lotharthesavior" + "GiovanniHD201E" ] }, - "Web/JavaScript/Reference/Global_Objects/Array/lastIndexOf": { - "modified": "2019-05-09T12:20:08.266Z", + "Learn/Release_notes": { + "modified": "2020-10-15T20:54:28.940Z", "contributors": [ - "fmaiabatista", - "rodamaral", - "brunoluigi", - "raduq" + "3ltons" ] }, - "Web/JavaScript/Reference/Global_Objects/Array/length": { - "modified": "2019-04-07T08:45:26.003Z", + "MDN/At_ten": { + "modified": "2019-03-23T22:47:39.647Z", "contributors": [ - "PointCodeZero", - "hpribeiro", - "jouderianjr", - "lnmunhoz", - "icaromh" + "meldenne" ] }, - "Web/JavaScript/Reference/Global_Objects/Array/map": { - "modified": "2020-10-15T21:32:56.196Z", + "Web/API/Document_Object_Model/Events": { + "modified": "2020-08-30T22:44:17.906Z", "contributors": [ - "mateusvelleda", - "lotharthesavior", - "trestini" + "bermarques" ] }, - "Web/JavaScript/Reference/Global_Objects/Array/of": { - "modified": "2020-10-15T21:38:59.029Z", + "Web/API/Document_Object_Model/Examples": { + "modified": "2019-03-23T22:11:58.983Z", "contributors": [ - "CarlaTeo", - "SphinxKnight", - "theuves", - "raduq" + "virginiarcruz" ] }, - "Web/JavaScript/Reference/Global_Objects/Array/pop": { - "modified": "2020-10-15T21:32:41.724Z", + "Web/API/Document_object_model/How_to_create_a_DOM_tree": { + "modified": "2019-03-23T22:11:56.223Z", "contributors": [ - "mateusvelleda", - "gbezerras", - "marinalimeira" + "virginiarcruz" ] }, - "Web/JavaScript/Reference/Global_Objects/Array/prototype": { - "modified": "2019-03-23T23:05:21.611Z", + "Web/API/Document_Object_Model": { + "modified": "2019-07-12T13:54:33.473Z", "contributors": [ - "medeirosmarcus", - "rodrigofazenda", - "DevStanki", - "gutoribeiro", - "danielbastos" + "wcqueiroz", + "AlyoshaS", + "tuanny", + "arai", + "srsaude" ] }, - "Web/JavaScript/Reference/Global_Objects/Array/push": { - "modified": "2019-03-23T23:07:45.788Z", + "Web/API/Document_Object_Model/Introduction": { + "modified": "2020-12-03T17:12:30.790Z", "contributors": [ - "lucascaprio", - "lucasvarela", - "marinalimeira", - "JeanRigotti", - "solfier" + "aotakeda", + "xKbryan", + "herculesgabriel", + "mfdj.1999", + "tomazcunha", + "andrekutianski", + "ramonfranklyn", + "onsistec" ] }, - "Web/JavaScript/Reference/Global_Objects/Array/reverse": { - "modified": "2019-03-23T22:54:17.462Z", + "Web/API/Document_Object_Model/Whitespace": { + "modified": "2019-03-18T21:38:03.775Z", "contributors": [ - "leonardocodognoto" + "jpreuss", + "coloringa" ] }, - "Web/JavaScript/Reference/Global_Objects/Array/shift": { - "modified": "2020-10-15T21:31:30.081Z", + "Web/API/HTML_Drag_and_Drop_API/File_drag_and_drop": { + "modified": "2020-03-05T12:27:04.657Z", "contributors": [ - "mateusvelleda", - "bfagundes", - "LuizinGustavo", - "csrene", - "AlexSander", - "bernardobrezende", - "JeanRigotti" + "NOOB_DISNEY" ] }, - "Web/JavaScript/Reference/Global_Objects/Array/slice": { - "modified": "2020-10-15T21:38:58.669Z", + "Web/API/HTML_Drag_and_Drop_API": { + "modified": "2019-12-03T23:38:01.288Z", "contributors": [ - "g-nogara", - "GutuGaluppo", - "multi4me", - "Ermesoml", - "proxy-chan", - "odahcam", - "nelson777", - "vandercijr" + "CharlesEduardoSCBR", + "rodrigofazenda", + "cezaraugusto", + "saviski", + "jpalharini" ] }, - "Web/JavaScript/Reference/Global_Objects/Array/some": { - "modified": "2020-10-15T21:39:11.018Z", + "Games/Introduction_to_HTML5_Game_Development": { + "modified": "2019-03-18T20:49:07.398Z", "contributors": [ - "axcosta", - "wrafanunes", - "mateusvelleda", - "hrcaio", - "diegoarcega", - "raduq" + "G_Nascimento" ] }, - "Web/JavaScript/Reference/Global_Objects/Array/sort": { - "modified": "2020-12-03T19:46:39.220Z", + "Glossary/404": { + "modified": "2019-03-23T22:47:20.165Z", "contributors": [ - "rogeriojesussilva", - "h3nr1ke", - "Pedrock", - "mateusvelleda", - "RoryKinape", - "maleskena", - "maxHSG", - "WBerredo", - "mauricio-fidalgo", - "felipecaputo" + "raduq" ] }, - "Web/JavaScript/Reference/Global_Objects/Array/splice": { - "modified": "2019-03-23T23:21:08.881Z", + "Glossary/502": { + "modified": "2019-03-23T22:47:23.868Z", "contributors": [ - "marciioluucas", - "gabsprates", - "santospatrick", - "Auugustocesar", - "BrOrlandi", - "alexbispo", - "leaofelipe", - "wbruno", - "teoli", - "cirocosta" + "raduq" ] }, - "Web/JavaScript/Reference/Global_Objects/Array/toLocaleString": { - "modified": "2019-03-23T22:50:39.765Z", + "Glossary/Abstraction": { + "modified": "2019-03-23T22:35:53.964Z", "contributors": [ - "valdeirpsr", - "erickvieira", - "ErickWendel" + "jjmars" ] }, - "Web/JavaScript/Reference/Global_Objects/Array/toSource": { - "modified": "2020-06-02T16:37:19.766Z", + "Glossary/Accessibility": { + "modified": "2019-03-23T22:05:43.916Z", "contributors": [ - "mablook", - "teoli", - "raduq" + "MarceloBRN" ] }, - "Web/JavaScript/Reference/Global_Objects/Array/toString": { - "modified": "2019-03-23T22:48:37.450Z", + "Glossary/Adobe_Flash": { + "modified": "2019-03-18T21:44:03.570Z", "contributors": [ - "MichelMentzFernandes", - "geovanerocha" + "SaraJade" ] }, - "Web/JavaScript/Reference/Global_Objects/Array/unshift": { - "modified": "2020-10-15T21:30:05.373Z", + "Glossary/AJAX": { + "modified": "2020-01-10T00:02:09.757Z", "contributors": [ - "mateusvelleda", - "JsBatista", - "jurandirvalerio", - "mateusleon" + "brunofrra", + "mariozuany", + "barrosval", + "rogeriomoraessp" ] }, - "Web/JavaScript/Reference/Global_Objects/Array/values": { - "modified": "2019-03-23T22:47:27.892Z", + "Glossary/Algorithm": { + "modified": "2019-01-17T02:26:12.294Z", "contributors": [ - "SphinxKnight", - "raduq" + "SaraJade" ] }, - "Web/JavaScript/Reference/Global_Objects/ArrayBuffer": { - "modified": "2020-10-15T21:29:12.919Z", + "Glossary/Alpha": { + "modified": "2020-11-15T12:30:40.587Z", "contributors": [ - "Rondinelly", - "Jeremie", - "teoli", - "mklauck" + "IsaqueDiniz" ] }, - "Web/JavaScript/Reference/Global_Objects/AsyncFunction": { - "modified": "2019-03-23T22:08:08.077Z", + "Glossary/API": { + "modified": "2019-10-20T21:41:36.383Z", "contributors": [ - "GutuGaluppo", - "alefesouza" + "htmribeiro", + "raphaelhenrique", + "andrekutianski", + "raduq" ] }, - "Web/JavaScript/Reference/Global_Objects/Atomics": { - "modified": "2019-03-23T22:34:49.263Z", + "Glossary/Apple_Safari": { + "modified": "2019-03-18T21:43:59.859Z", "contributors": [ - "KennyMack" + "SaraJade" ] }, - "Web/JavaScript/Reference/Global_Objects/Atomics/add": { - "modified": "2019-03-23T22:09:03.574Z", + "Glossary/Argument": { + "modified": "2019-03-23T22:04:07.640Z", "contributors": [ - "AlanCezarAraujo" + "apsychox", + "SaraJade", + "gabrielrosa2004" ] }, - "Web/JavaScript/Reference/Global_Objects/BigInt": { - "modified": "2019-05-28T15:22:19.642Z", + "Glossary/Arpanet": { + "modified": "2019-03-23T22:06:40.692Z", "contributors": [ - "AlanCezarAraujo", - "theuves" + "SaraJade" ] }, - "Web/JavaScript/Reference/Global_Objects/BigInt/prototype": { - "modified": "2020-10-15T22:29:51.823Z", + "Glossary/array": { + "modified": "2019-06-22T20:19:15.594Z", "contributors": [ - "LuisAraujo" + "lucaslombardif", + "RNT17", + "gabrielagabriel", + "gusleindecker" ] }, - "Web/JavaScript/Reference/Global_Objects/Boolean": { - "modified": "2019-03-23T22:51:14.765Z", + "Glossary/Accessibility_tree": { + "modified": "2020-11-11T16:52:08.076Z", "contributors": [ - "raduq", - "wbamberg", - "Hikashii", - "pdanker", - "icaromh" + "IsaqueDiniz" ] }, - "Web/JavaScript/Reference/Global_Objects/Boolean/prototype": { - "modified": "2019-03-23T22:47:24.930Z", + "Glossary/ASCII": { + "modified": "2020-08-07T10:40:43.821Z", "contributors": [ - "raduq" + "rafhaelfitzpatrick", + "mak213k" ] }, - "Web/JavaScript/Reference/Global_Objects/Boolean/toSource": { - "modified": "2019-03-23T22:47:21.468Z", + "Glossary/Asynchronous": { + "modified": "2019-03-18T21:43:52.623Z", "contributors": [ - "teoli", - "raduq" + "SaraJade" ] }, - "Web/JavaScript/Reference/Global_Objects/Boolean/toString": { - "modified": "2019-03-23T22:06:44.278Z", + "Glossary/Attribute": { + "modified": "2019-05-30T03:05:20.743Z", "contributors": [ - "thiagosaife" + "jorgeclesio", + "GoToLoop" ] }, - "Web/JavaScript/Reference/Global_Objects/Boolean/valueOf": { - "modified": "2019-03-23T22:42:40.647Z", + "Glossary/Bandwidth": { + "modified": "2020-03-28T04:45:58.336Z", "contributors": [ - "felipebelluco" + "joelson.ejr" ] }, - "Web/JavaScript/Reference/Global_Objects/DataView": { - "modified": "2020-10-15T21:51:29.239Z", + "Glossary/BigInt": { + "modified": "2019-06-01T11:26:46.232Z", "contributors": [ - "Rondinelly", - "duduindo", - "fabriciofrontarolli" + "emersonbroga" ] }, - "Web/JavaScript/Reference/Global_Objects/Date": { - "modified": "2019-03-18T20:41:58.137Z", + "Glossary/Boolean": { + "modified": "2019-03-23T23:02:25.617Z", "contributors": [ - "Bagata", - "wbamberg", - "quindai", - "marcelobonatto", - "lucas-daltro", - "fnsc.luis", - "daniloazevedo", - "teoli", - "BargaoRobalo" + "eduardocezarinossp", + "ViniciusMachado", + "trestini" ] }, - "Web/JavaScript/Reference/Global_Objects/Date/@@toPrimitive": { - "modified": "2020-10-15T22:34:13.518Z", + "Glossary/HTTP_header": { + "modified": "2019-12-23T23:53:58.987Z", "contributors": [ "FernandoKGA" ] }, - "Web/JavaScript/Reference/Global_Objects/Date/UTC": { - "modified": "2019-03-23T22:50:40.604Z", + "Glossary/Cache": { + "modified": "2020-08-20T08:30:54.843Z", "contributors": [ - "LeonardoBos" + "joaomantovani", + "FernandoKGA" ] }, - "Web/JavaScript/Reference/Global_Objects/Date/getDate": { - "modified": "2019-03-23T22:52:17.951Z", + "Glossary/Call_stack": { + "modified": "2019-08-25T21:21:29.113Z", "contributors": [ - "thiagoh" + "helton-mori-dev" ] }, - "Web/JavaScript/Reference/Global_Objects/Date/getDay": { - "modified": "2019-03-23T22:52:01.927Z", + "Glossary/Callback_function": { + "modified": "2019-03-23T22:02:52.552Z", "contributors": [ - "thiagoh" + "MRND-DTR", + "MattBizzo" ] }, - "Web/JavaScript/Reference/Global_Objects/Date/getFullYear": { - "modified": "2019-03-23T22:52:07.207Z", + "Glossary/Character": { + "modified": "2019-03-18T21:46:30.079Z", "contributors": [ - "thiagoh" + "melostbr" ] }, - "Web/JavaScript/Reference/Global_Objects/Date/getHours": { - "modified": "2019-03-23T22:52:04.095Z", + "Glossary/caret": { + "modified": "2020-07-09T00:00:12.770Z", "contributors": [ - "thiagoh" + "ooVictorFranco" ] }, - "Web/JavaScript/Reference/Global_Objects/Date/getMilliseconds": { - "modified": "2019-03-23T22:25:46.007Z", + "Glossary/CDN": { + "modified": "2019-01-16T22:59:44.431Z", "contributors": [ - "joelwallis" + "Rickslayer" ] }, - "Web/JavaScript/Reference/Global_Objects/Date/getMinutes": { - "modified": "2019-03-23T22:25:45.808Z", + "Glossary/character_encoding": { + "modified": "2020-08-07T20:35:41.005Z", "contributors": [ - "joelwallis" + "rafhaelfitzpatrick" ] }, - "Web/JavaScript/Reference/Global_Objects/Date/getMonth": { - "modified": "2019-03-23T22:51:50.216Z", + "Glossary/Chrome": { + "modified": "2019-03-23T22:32:20.365Z", "contributors": [ - "gnuns" + "meldenne" ] }, - "Web/JavaScript/Reference/Global_Objects/Date/getSeconds": { - "modified": "2019-03-23T22:25:45.327Z", + "Glossary/Class": { + "modified": "2019-03-23T22:50:05.950Z", "contributors": [ - "joelwallis" + "victor-borges" ] }, - "Web/JavaScript/Reference/Global_Objects/Date/getTime": { - "modified": "2019-03-23T22:25:55.014Z", + "Glossary/CMS": { + "modified": "2019-03-23T22:31:12.002Z", "contributors": [ - "danielpm", - "joelwallis" + "Rickslayer" ] }, - "Web/JavaScript/Reference/Global_Objects/Date/getTimezoneOffset": { - "modified": "2019-03-23T22:51:37.039Z", + "Glossary/Alignment_Container": { + "modified": "2020-11-07T17:45:53.749Z", "contributors": [ - "andrejunges", - "candidodmv" + "IsaqueDiniz" ] }, - "Web/JavaScript/Reference/Global_Objects/Date/getUTCDate": { - "modified": "2019-03-23T22:25:45.470Z", + "Glossary/Type_Conversion": { + "modified": "2019-03-18T21:32:31.465Z", "contributors": [ - "joelwallis" + "aleexmuller" ] }, - "Web/JavaScript/Reference/Global_Objects/Date/getUTCDay": { - "modified": "2020-08-27T16:21:04.054Z", + "Glossary/CORS": { + "modified": "2019-12-23T23:53:25.142Z", "contributors": [ - "morvanabonin", - "rogeriopradoj" + "FernandoKGA" ] }, - "Web/JavaScript/Reference/Global_Objects/Date/getUTCFullYear": { - "modified": "2020-10-15T22:11:50.613Z", + "Glossary/CRUD": { + "modified": "2020-12-05T13:04:05.864Z", "contributors": [ - "jonathanTrancozo" + "IsaqueDiniz" ] }, - "Web/JavaScript/Reference/Global_Objects/Date/getUTCHours": { - "modified": "2020-10-15T22:29:14.615Z", + "Glossary/CSS_pixel": { + "modified": "2020-11-14T14:30:11.858Z", "contributors": [ - "FernandoKGA", - "hiramfernandes" + "IsaqueDiniz" ] }, - "Web/JavaScript/Reference/Global_Objects/Date/getUTCMilliseconds": { - "modified": "2020-10-15T21:59:36.124Z", + "Glossary/CSS_preprocessor": { + "modified": "2020-11-13T12:59:56.480Z", "contributors": [ - "vbaptistella" + "IsaqueDiniz" ] }, - "Web/JavaScript/Reference/Global_Objects/Date/getUTCMinutes": { - "modified": "2020-10-15T22:33:32.360Z", + "Glossary/CSS_Selector": { + "modified": "2019-03-23T22:06:48.887Z", "contributors": [ - "FernandoKGA" + "IsmaelEzequiel" ] }, - "Web/JavaScript/Reference/Global_Objects/Date/getUTCMonth": { - "modified": "2020-10-15T21:58:33.350Z", + "Glossary/CSS": { + "modified": "2019-03-23T22:17:45.507Z", "contributors": [ - "caiocsl" + "psergiojr" ] }, - "Web/JavaScript/Reference/Global_Objects/Date/getUTCSeconds": { - "modified": "2020-10-15T22:19:49.811Z", + "Glossary/CSSOM": { + "modified": "2020-11-13T12:20:41.027Z", "contributors": [ - "gutobrz" + "IsaqueDiniz" ] }, - "Web/JavaScript/Reference/Global_Objects/Date/getYear": { - "modified": "2019-03-23T22:52:07.407Z", + "Glossary/Statement": { + "modified": "2019-03-23T22:23:07.569Z", "contributors": [ - "thiagoh" + "Franck_Moreira" ] }, - "Web/JavaScript/Reference/Global_Objects/Date/now": { - "modified": "2019-09-07T10:31:23.595Z", + "Glossary/Graceful_degradation": { + "modified": "2020-09-22T20:12:45.099Z", "contributors": [ - "lucasinocente", - "rodgerpaulo", - "rodrigosilvaleite", - "alcatrazbr", - "giovannimesquita" + "BeatrizCavallieri", + "Dianakc" ] }, - "Web/JavaScript/Reference/Global_Objects/Date/parse": { - "modified": "2020-09-19T12:07:04.791Z", + "Glossary/Doctype": { + "modified": "2019-03-18T21:46:11.657Z", "contributors": [ - "rafaelflorespereira", - "Klaifer", - "remmendo", - "thiagobittner" + "lucasbd" ] }, - "Web/JavaScript/Reference/Global_Objects/Date/setDate": { - "modified": "2020-10-15T22:31:46.152Z", + "Glossary/DOM": { + "modified": "2019-03-23T23:10:39.579Z", "contributors": [ - "lghiggino" + "GoToLoop", + "gabrielagabriel", + "panaggio" ] }, - "Web/JavaScript/Reference/Global_Objects/Date/setFullYear": { - "modified": "2020-10-15T22:33:35.634Z", + "Glossary/Domain": { + "modified": "2019-03-18T21:36:28.595Z", "contributors": [ - "FernandoKGA" + "GPrimola" ] }, - "Web/JavaScript/Reference/Global_Objects/Date/setHours": { - "modified": "2020-10-15T22:33:33.944Z", + "Glossary/ECMA": { + "modified": "2019-03-23T22:30:25.897Z", "contributors": [ - "FernandoKGA" + "GoToLoop" ] }, - "Web/JavaScript/Reference/Global_Objects/Date/setMilliseconds": { - "modified": "2020-10-15T22:33:48.619Z", + "Glossary/Element": { + "modified": "2020-08-23T14:35:41.260Z", "contributors": [ - "FernandoKGA" + "josewest700", + "wcqueiroz", + "luiszambon" ] }, - "Web/JavaScript/Reference/Global_Objects/Date/setMinutes": { - "modified": "2020-10-15T22:33:49.145Z", + "Glossary/IP_Address": { + "modified": "2019-03-18T21:44:09.753Z", "contributors": [ - "FernandoKGA" + "SaraJade" ] }, - "Web/JavaScript/Reference/Global_Objects/Date/setMonth": { - "modified": "2020-10-15T22:34:08.767Z", + "Glossary/Endianness": { + "modified": "2019-03-18T21:33:18.048Z", "contributors": [ - "FernandoKGA" + "paulobruno", + "pauloantonelli" ] }, - "Web/JavaScript/Reference/Global_Objects/Date/setSeconds": { - "modified": "2020-10-15T22:34:12.191Z", + "Glossary/Entity_header": { + "modified": "2019-03-18T21:10:53.093Z", "contributors": [ - "FernandoKGA" + "coloringa" ] }, - "Web/JavaScript/Reference/Global_Objects/Date/setTime": { - "modified": "2020-10-15T22:06:26.538Z", + "Glossary/Scope": { + "modified": "2019-03-23T22:09:33.536Z", "contributors": [ - "Bagata", - "deyvidyury" + "Fernandolrs" ] }, - "Web/JavaScript/Reference/Global_Objects/Date/setUTCDate": { - "modified": "2020-10-15T22:34:09.643Z", + "Glossary/Falsy": { + "modified": "2019-03-18T21:15:58.741Z", "contributors": [ - "FernandoKGA" + "eduardocezarinossp", + "jeanonline" ] }, - "Web/JavaScript/Reference/Global_Objects/Date/setUTCFullYear": { - "modified": "2020-10-15T22:34:09.833Z", + "Glossary/Flex": { + "modified": "2019-03-18T20:42:53.641Z", "contributors": [ - "FernandoKGA" + "helton-mori-dev" ] }, - "Web/JavaScript/Reference/Global_Objects/Date/setUTCHours": { - "modified": "2020-10-15T22:34:12.207Z", + "Glossary/Forbidden_header_name": { + "modified": "2020-01-18T00:05:07.612Z", "contributors": [ - "FernandoKGA" + "FernandoKGA", + "darleizillmer" ] }, - "Web/JavaScript/Reference/Global_Objects/Date/setUTCMilliseconds": { - "modified": "2020-10-15T22:34:12.221Z", + "Glossary/Forbidden_response_header_name": { + "modified": "2019-03-18T21:26:05.371Z", "contributors": [ - "FernandoKGA" + "darleizillmer" ] }, - "Web/JavaScript/Reference/Global_Objects/Date/setUTCMinutes": { - "modified": "2020-10-15T22:34:15.562Z", + "Glossary/First-class_Function": { + "modified": "2019-03-18T21:32:51.242Z", "contributors": [ - "FernandoKGA" + "thiagosaife", + "emersonmdca" ] }, - "Web/JavaScript/Reference/Global_Objects/Date/setUTCMonth": { - "modified": "2020-10-15T22:34:15.556Z", + "Glossary/Function": { + "modified": "2019-03-18T21:34:00.632Z", "contributors": [ - "FernandoKGA" + "apsychox" ] }, - "Web/JavaScript/Reference/Global_Objects/Date/setUTCSeconds": { - "modified": "2020-10-15T22:34:11.911Z", + "Glossary/Fuzzing": { + "modified": "2019-09-06T03:22:02.462Z", "contributors": [ - "FernandoKGA" + "SphinxKnight", + "fscholz", + "ygormaximo" ] }, - "Web/JavaScript/Reference/Global_Objects/Date/setYear": { - "modified": "2020-10-15T22:34:14.397Z", + "Glossary/Gecko": { + "modified": "2019-12-23T23:52:37.656Z", "contributors": [ "FernandoKGA" ] }, - "Web/JavaScript/Reference/Global_Objects/Date/toDateString": { - "modified": "2019-03-23T22:37:22.411Z", + "Glossary/General_header": { + "modified": "2019-05-24T15:18:50.536Z", "contributors": [ - "pabloff9" + "Glmsnc" ] }, - "Web/JavaScript/Reference/Global_Objects/Date/toGMTString": { - "modified": "2020-10-15T22:34:12.107Z", + "Glossary/Global_object": { + "modified": "2019-03-18T21:40:17.626Z", "contributors": [ - "FernandoKGA" + "ebragaparah" ] }, - "Web/JavaScript/Reference/Global_Objects/Date/toISOString": { - "modified": "2020-10-15T22:34:15.917Z", + "Glossary/Grid": { + "modified": "2020-07-14T21:04:41.276Z", "contributors": [ - "FernandoKGA" + "Dianakc" ] }, - "Web/JavaScript/Reference/Global_Objects/Date/toJSON": { - "modified": "2020-10-15T22:08:19.553Z", + "Glossary/Grid_Areas": { + "modified": "2019-03-23T22:14:26.280Z", "contributors": [ - "duodraco" + "kaiomarcio", + "heltonss" ] }, - "Web/JavaScript/Reference/Global_Objects/Date/toLocaleDateString": { - "modified": "2019-10-05T10:35:23.837Z", + "Glossary/Hoisting": { + "modified": "2020-01-23T16:47:05.779Z", "contributors": [ - "alexandregabriel", - "erickm32", - "emanueloliveira" + "GuilhermePiovesan", + "rolandgnm" ] }, - "Web/JavaScript/Reference/Global_Objects/Date/toLocaleString": { - "modified": "2020-10-15T22:22:49.670Z", + "Glossary/HSTS": { + "modified": "2019-03-18T21:26:13.963Z", "contributors": [ - "niltonfreitas_" + "darleizillmer" ] }, - "Web/JavaScript/Reference/Global_Objects/Date/toLocaleTimeString": { - "modified": "2020-10-15T22:01:32.171Z", + "Glossary/HTML": { + "modified": "2019-03-23T22:22:10.633Z", "contributors": [ - "jbwestphal" + "psergiojr", + "rafaelcavalcante", + "barrosval" ] }, - "Web/JavaScript/Reference/Global_Objects/Date/toSource": { - "modified": "2020-10-15T22:34:13.547Z", + "Glossary/HTTP_2": { + "modified": "2019-06-08T19:33:12.373Z", "contributors": [ - "FernandoKGA" + "wcqueiroz" ] }, - "Web/JavaScript/Reference/Global_Objects/Date/toString": { - "modified": "2020-10-15T22:34:16.319Z", + "Glossary/HTTP": { + "modified": "2019-03-23T22:21:56.435Z", "contributors": [ - "FernandoKGA" + "aretw0", + "barrosval" ] }, - "Web/JavaScript/Reference/Global_Objects/Date/toTimeString": { - "modified": "2020-10-15T22:34:13.284Z", + "Glossary/https": { + "modified": "2019-03-18T21:44:09.623Z", "contributors": [ - "FernandoKGA" + "SaraJade" ] }, - "Web/JavaScript/Reference/Global_Objects/Date/toUTCString": { - "modified": "2020-10-15T22:34:13.668Z", + "Glossary/Idempotent": { + "modified": "2019-09-01T01:44:12.557Z", "contributors": [ "FernandoKGA" ] }, - "Web/JavaScript/Reference/Global_Objects/Date/valueOf": { - "modified": "2020-10-15T22:34:13.277Z", + "Glossary/Identifier": { + "modified": "2019-03-23T22:28:41.179Z", "contributors": [ - "FernandoKGA" + "apsychox", + "OrdepPedro", + "danilobarion1986" ] }, - "Web/JavaScript/Reference/Global_Objects/Error": { - "modified": "2019-03-23T22:43:17.643Z", + "Glossary/IIFE": { + "modified": "2019-03-23T22:41:51.789Z", + "contributors": [ + "daviccardoso", + "fbidu", + "MarcoRibeiro" + ] + }, + "Glossary": { + "modified": "2020-10-07T11:13:14.110Z", "contributors": [ - "cezaraugusto", - "augustoclaro" + "peterbe", + "SphinxKnight", + "wcqueiroz", + "wbamberg", + "matheusdmm", + "-", + "gusleindecker" ] }, - "Web/JavaScript/Reference/Global_Objects/Error/toSource": { - "modified": "2020-11-02T11:33:59.599Z", + "Glossary/IndexedDB": { + "modified": "2019-03-23T22:30:14.736Z", "contributors": [ - "FernandoKGA" + "GoToLoop" ] }, - "Web/JavaScript/Reference/Global_Objects/Error/toString": { - "modified": "2020-11-02T10:09:38.309Z", + "Glossary/Internet": { + "modified": "2019-03-18T21:45:04.739Z", "contributors": [ - "FernandoKGA" + "SaraJade" ] }, - "Web/JavaScript/Reference/Global_Objects/EvalError": { - "modified": "2019-03-23T22:29:52.954Z", + "Glossary/IPv4": { + "modified": "2019-03-18T21:44:10.032Z", "contributors": [ - "jaimemaretoli" + "SaraJade" ] }, - "Web/JavaScript/Reference/Global_Objects/Float32Array": { - "modified": "2020-10-15T22:08:32.783Z", + "Glossary/IPv6": { + "modified": "2019-03-18T21:45:04.897Z", "contributors": [ - "ChristoPy" + "SaraJade" ] }, - "Web/JavaScript/Reference/Global_Objects/Float64Array": { - "modified": "2020-10-15T22:32:01.059Z", + "Glossary/IRC": { + "modified": "2019-06-03T01:34:33.650Z", "contributors": [ - "GuilhermeVazz" + "wcqueiroz" ] }, - "Web/JavaScript/Reference/Global_Objects/Function": { - "modified": "2020-03-26T18:53:42.833Z", + "Glossary/ISO": { + "modified": "2019-08-19T01:24:15.027Z", "contributors": [ - "HenriqueMartinsBotelho", - "diegolaquino", - "IanRamosC", - "YurePereira", - "chrisdavidmills" + "KoffeeBunker" ] }, - "Web/JavaScript/Reference/Global_Objects/Function/apply": { - "modified": "2019-03-23T22:52:01.105Z", + "Glossary/Jank": { + "modified": "2019-01-17T10:31:38.830Z", "contributors": [ - "hierror", - "cezaraugusto", - "edjungklaus", - "LucasRamos", - "caiocutrim" + "IgorGoncalves" ] }, - "Web/JavaScript/Reference/Global_Objects/Function/arguments": { - "modified": "2019-05-25T00:50:43.245Z", + "Glossary/JavaScript": { + "modified": "2020-07-14T13:39:05.371Z", "contributors": [ - "Arlon", - "Anderson-Vasques" + "jose.elias.0703", + "rbertoche", + "barrosval" ] }, - "Web/JavaScript/Reference/Global_Objects/Function/bind": { - "modified": "2020-05-09T18:15:16.714Z", + "Glossary/jpeg": { + "modified": "2019-03-18T21:44:01.853Z", "contributors": [ - "lcelso", - "leo-ls", - "Kasagari", - "eduardoJoseRibeiro", - "felipeorlando", - "nevorah", - "fbctf", - "heronmedeiros", - "edvaldofarias" + "SaraJade" ] }, - "Web/JavaScript/Reference/Global_Objects/Function/call": { - "modified": "2019-03-23T23:05:33.507Z", + "Glossary/jQuery": { + "modified": "2019-05-17T17:03:39.259Z", "contributors": [ - "leogsouza", - "cezaraugusto", - "vitorn1234", - "caiocutrim", - "PedroVinicius" + "ElsonMendes" ] }, - "Web/JavaScript/Reference/Global_Objects/Function/caller": { - "modified": "2019-03-23T22:47:00.952Z", + "Glossary/Key": { + "modified": "2019-03-23T22:02:49.869Z", "contributors": [ - "teoli", - "raduq" + "Hikashii" ] }, - "Web/JavaScript/Reference/Global_Objects/Function/displayName": { - "modified": "2020-10-15T21:58:35.041Z", + "Glossary/Dynamic_programming_language": { + "modified": "2020-07-02T21:45:18.003Z", "contributors": [ - "alinedmelo" + "raucer" ] }, - "Web/JavaScript/Reference/Global_Objects/Function/length": { - "modified": "2020-08-25T13:54:49.738Z", + "Glossary/markup": { + "modified": "2020-07-18T12:20:15.308Z", "contributors": [ - "duduindo", - "GuilhermeVazz", - "alinedmelo", - "matheussilvasantos", - "LucasRamos" + "jose.elias.0703" ] }, - "Web/JavaScript/Reference/Global_Objects/Function/name": { - "modified": "2020-10-15T22:06:36.004Z", + "Glossary/Metadata": { + "modified": "2019-11-05T19:38:53.604Z", "contributors": [ - "leo-ls" + "klisostom" ] }, - "Web/JavaScript/Reference/Global_Objects/Function/prototype": { - "modified": "2020-10-15T22:06:36.377Z", + "Glossary/Mozilla_Firefox": { + "modified": "2019-12-23T23:52:10.939Z", "contributors": [ - "GuilhermeVazz", - "leo-ls" + "FernandoKGA" ] }, - "Web/JavaScript/Reference/Global_Objects/Function/toSource": { - "modified": "2020-10-15T21:58:35.614Z", + "Glossary/Mutable": { + "modified": "2019-03-18T21:42:49.961Z", "contributors": [ - "alinedmelo" + "VitorHFLopes" ] }, - "Web/JavaScript/Reference/Global_Objects/Function/toString": { - "modified": "2020-10-15T22:14:19.175Z", + "Glossary/Opera_Browser": { + "modified": "2019-03-18T21:44:16.421Z", "contributors": [ - "FernandoKGA", - "Romulofelipe" + "SaraJade" ] }, - "Web/JavaScript/Reference/Global_Objects/Generator": { - "modified": "2020-03-24T12:10:57.953Z", + "Glossary/Browser": { + "modified": "2019-03-18T21:43:58.161Z", "contributors": [ - "KennyMack" + "SaraJade" ] }, - "Web/JavaScript/Reference/Global_Objects/Infinity": { - "modified": "2020-03-12T19:40:37.632Z", + "Glossary/Node.js": { + "modified": "2019-03-23T22:30:20.248Z", "contributors": [ - "isacfadoni", - "jsvini" + "joelwallis", + "GoToLoop" ] }, - "Web/JavaScript/Reference/Global_Objects/Int16Array": { - "modified": "2020-10-15T22:12:41.379Z", + "Glossary/Domain_name": { + "modified": "2019-03-18T21:43:57.004Z", "contributors": [ - "murillodmiranda" + "SaraJade" ] }, - "Web/JavaScript/Reference/Global_Objects/InternalError": { - "modified": "2020-10-15T22:33:36.868Z", + "Glossary/Null": { + "modified": "2019-03-23T23:02:20.116Z", "contributors": [ - "shingravirei" + "trestini" ] }, - "Web/JavaScript/Reference/Global_Objects/Intl": { - "modified": "2019-04-03T16:14:02.453Z", + "Glossary/Number": { + "modified": "2019-03-23T22:04:09.762Z", "contributors": [ - "letuche", - "alexandresn" + "gabrielrosa2004" ] }, - "Web/JavaScript/Reference/Global_Objects/Intl/DateTimeFormat": { - "modified": "2020-10-15T22:29:38.599Z", + "Glossary/Object": { + "modified": "2019-03-23T22:46:59.570Z", "contributors": [ - "SphinxKnight", - "gibify_official" + "raduq" ] }, - "Web/JavaScript/Reference/Global_Objects/Intl/NumberFormat": { - "modified": "2020-04-21T09:08:10.746Z", + "Glossary/OOP": { + "modified": "2019-03-23T22:34:54.131Z", "contributors": [ - "fscholz", - "thomazcapra", - "romulocintra", - "letuche", - "marcelobonatto" + "raduq" ] }, - "Web/JavaScript/Reference/Global_Objects/Intl/NumberFormat/prototype": { - "modified": "2020-04-21T09:08:10.648Z", + "Glossary/OpenGL": { + "modified": "2019-03-18T21:45:06.071Z", "contributors": [ - "fscholz", - "marcelobonatto" + "fitojb", + "leandroleo2" ] }, - "Web/JavaScript/Reference/Global_Objects/Intl/RelativeTimeFormat": { - "modified": "2020-10-15T22:19:18.527Z", + "Glossary/Operator": { + "modified": "2019-06-06T00:19:52.618Z", "contributors": [ - "fscholz", - "ChilenoSika" + "wcqueiroz", + "rubenfaria" ] }, - "Web/JavaScript/Reference/Global_Objects/JSON": { - "modified": "2019-05-04T10:27:47.204Z", + "Glossary/Operand": { + "modified": "2019-03-23T22:04:38.960Z", "contributors": [ - "Leodma", - "techtique", - "Jeremie", - "deyvid0123", - "jessicatenca", - "markokr" + "rubenfaria" ] }, - "Web/JavaScript/Reference/Global_Objects/JSON/parse": { - "modified": "2020-10-15T21:37:32.669Z", + "Glossary/Origin": { + "modified": "2019-12-23T23:53:08.917Z", "contributors": [ - "MarcosNakamine", - "Fernandolrs", - "v1ctorf", - "Francisaac", - "renanmedina" + "FernandoKGA" ] }, - "Web/JavaScript/Reference/Global_Objects/JSON/stringify": { - "modified": "2020-06-10T02:22:31.726Z", + "Glossary/OTA": { + "modified": "2019-03-23T22:30:21.110Z", "contributors": [ - "henriquegeremia", - "PauloRicardoDeveloper", - "nilocoelhojunior", - "einstenj", - "ikariwill", - "lucasmaiaesilva" + "GoToLoop" ] }, - "Web/JavaScript/Reference/Global_Objects/Map": { - "modified": "2020-10-15T21:43:23.476Z", + "Glossary/Keyword": { + "modified": "2020-08-25T13:00:01.177Z", "contributors": [ - "mathvalenza", - "mateusvelleda", - "chapeupreto", - "mauricio.araldi", - "Klauswk", - "renatoluna", - "BernardoMariano", - "raduq", - "raphaelpor" + "duduindo", + "LeoCrespi" ] }, - "Web/JavaScript/Reference/Global_Objects/Map/clear": { - "modified": "2019-03-23T22:13:54.269Z", + "Glossary/PHP": { + "modified": "2019-09-19T14:26:56.337Z", "contributors": [ - "renatoluna" + "Lucas-Santos", + "jorgeclesio", + "Danilo_Santos" ] }, - "Web/JavaScript/Reference/Global_Objects/Map/delete": { - "modified": "2019-05-29T19:41:42.276Z", + "Glossary/Pixel": { + "modified": "2019-03-18T21:40:44.589Z", "contributors": [ - "renatoluna" + "ingridmachado" ] }, - "Web/JavaScript/Reference/Global_Objects/Map/entries": { - "modified": "2019-03-23T22:13:54.600Z", + "Glossary/Polyfill": { + "modified": "2019-03-23T22:06:23.757Z", "contributors": [ - "renatoluna" + "vmellos", + "vgonsalez" ] }, - "Web/JavaScript/Reference/Global_Objects/Map/forEach": { - "modified": "2019-09-16T15:32:37.374Z", + "Glossary/Port": { + "modified": "2019-03-23T22:24:11.899Z", "contributors": [ - "cezinha", - "rodrigocnascimento", - "renatoluna" + "mak213k" ] }, - "Web/JavaScript/Reference/Global_Objects/Map/get": { - "modified": "2020-10-15T21:58:34.923Z", + "Glossary/Vendor_Prefix": { + "modified": "2019-03-23T22:29:28.726Z", "contributors": [ - "haskellcamargo" + "UzumakiArtanis", + "angelorubin", + "deyvid0123" ] }, - "Web/JavaScript/Reference/Global_Objects/Map/has": { - "modified": "2020-10-15T22:01:02.517Z", + "Glossary/Preflight_request": { + "modified": "2020-03-18T17:01:01.937Z", "contributors": [ - "clovislima", - "MarcVFX" + "leandroatavares", + "leandrokanis" ] }, - "Web/JavaScript/Reference/Global_Objects/Map/keys": { - "modified": "2019-03-23T22:20:29.616Z", + "Glossary/Primitive": { + "modified": "2019-03-23T23:02:25.520Z", "contributors": [ - "shuminyang" + "user2015", + "melostbr", + "trestini" ] }, - "Web/JavaScript/Reference/Global_Objects/Map/prototype": { - "modified": "2019-03-23T22:13:49.481Z", + "Glossary/Computer_Programming": { + "modified": "2019-03-23T22:36:02.574Z", "contributors": [ - "renatoluna" + "jjmars" ] }, - "Web/JavaScript/Reference/Global_Objects/Map/set": { - "modified": "2019-03-23T22:10:32.061Z", + "Glossary/Progressive_web_apps": { + "modified": "2020-11-29T08:12:45.879Z", "contributors": [ - "haskellcamargo", - "nanquim" + "IsaqueDiniz" ] }, - "Web/JavaScript/Reference/Global_Objects/Map/size": { - "modified": "2019-03-18T20:56:12.542Z", + "Glossary/property/CSS": { + "modified": "2019-03-18T21:46:38.697Z", "contributors": [ - "mauricio.araldi", - "raduq" + "melostbr" ] }, - "Web/JavaScript/Reference/Global_Objects/Map/values": { - "modified": "2020-10-15T22:16:52.931Z", + "Glossary/property": { + "modified": "2019-03-18T21:46:28.428Z", "contributors": [ - "liddack" + "apsychox", + "melostbr" ] }, - "Web/JavaScript/Reference/Global_Objects/Math": { - "modified": "2019-03-23T23:21:27.763Z", + "Glossary/property/JavaScript": { + "modified": "2020-11-21T11:51:09.095Z", "contributors": [ - "rafaelbezerra195", - "fernandosavio", - "emviveros", - "FlavioFS", - "teoli", - "xhximenes", - "vagnerleitte", - "fscholz" + "IsaqueDiniz" ] }, - "Web/JavaScript/Reference/Global_Objects/Math/E": { - "modified": "2020-10-15T21:47:13.887Z", + "Glossary/Protocol": { + "modified": "2019-03-23T22:22:26.263Z", "contributors": [ - "daniloazevedo", - "tetri" + "ViniciusMachado", + "melostbr" ] }, - "Web/JavaScript/Reference/Global_Objects/Math/LN10": { - "modified": "2019-03-23T22:12:19.651Z", + "Glossary/Prototype": { + "modified": "2019-03-23T22:15:29.194Z", "contributors": [ - "Guimaraesmvf" + "andre-bahia" ] }, - "Web/JavaScript/Reference/Global_Objects/Math/LN2": { - "modified": "2020-10-15T21:55:04.335Z", + "Glossary/Proxy_server": { + "modified": "2020-06-30T09:57:05.710Z", "contributors": [ - "fernandosavio" + "lutzleonardo15", + "elvisguarda03" ] }, - "Web/JavaScript/Reference/Global_Objects/Math/LOG10E": { - "modified": "2020-10-15T21:55:05.255Z", + "Glossary/Pseudo-class": { + "modified": "2019-03-23T22:22:16.368Z", "contributors": [ - "hvianna", - "fernandosavio" + "LuanComputacao" ] }, - "Web/JavaScript/Reference/Global_Objects/Math/LOG2E": { - "modified": "2020-10-15T21:55:04.690Z", + "Glossary/Pseudo-element": { + "modified": "2019-03-18T21:19:40.409Z", "contributors": [ - "hvianna", - "fernandosavio" + "theuves" ] }, - "Web/JavaScript/Reference/Global_Objects/Math/PI": { - "modified": "2020-10-15T21:47:10.311Z", + "Glossary/Python": { + "modified": "2019-03-23T22:21:19.519Z", "contributors": [ - "daniloazevedo" + "ViniciusMachado" ] }, - "Web/JavaScript/Reference/Global_Objects/Math/SQRT1_2": { - "modified": "2020-10-15T21:55:05.961Z", + "Glossary/Recursion": { + "modified": "2019-06-18T22:36:11.172Z", "contributors": [ - "fernandosavio" + "deomorxsy", + "apsychox" ] }, - "Web/JavaScript/Reference/Global_Objects/Math/SQRT2": { - "modified": "2020-10-15T21:55:05.849Z", + "Glossary/Reflow": { + "modified": "2020-03-13T16:11:18.382Z", "contributors": [ - "hvianna", - "fernandosavio" + "EduardoDaSilva" ] }, - "Web/JavaScript/Reference/Global_Objects/Math/abs": { - "modified": "2019-03-23T23:10:06.875Z", + "Glossary/Request_header": { + "modified": "2019-03-18T21:25:47.888Z", "contributors": [ - "flpwgr", - "Thiago" + "Filipe-Souza" ] }, - "Web/JavaScript/Reference/Global_Objects/Math/acos": { - "modified": "2019-03-23T22:19:53.926Z", + "Glossary/Responsive_web_design": { + "modified": "2019-03-18T21:37:44.626Z", "contributors": [ - "isaiasBR" + "coloringa" ] }, - "Web/JavaScript/Reference/Global_Objects/Math/acosh": { - "modified": "2020-10-15T21:55:06.035Z", + "Glossary/REST": { + "modified": "2020-09-02T21:05:55.192Z", "contributors": [ - "fernandosavio" + "fernandohtr" ] }, - "Web/JavaScript/Reference/Global_Objects/Math/asin": { - "modified": "2020-10-15T21:55:07.550Z", + "Glossary/Ruby": { + "modified": "2019-03-23T22:39:33.555Z", "contributors": [ - "carlos-teixeira314", - "fernandosavio" + "ygormaximo" ] }, - "Web/JavaScript/Reference/Global_Objects/Math/asinh": { - "modified": "2020-10-15T22:03:29.264Z", + "Glossary/SDP": { + "modified": "2020-11-24T03:27:06.272Z", "contributors": [ - "OJEP" + "guiseek" ] }, - "Web/JavaScript/Reference/Global_Objects/Math/atan": { - "modified": "2020-10-15T21:55:06.721Z", + "Glossary/safe": { + "modified": "2019-09-01T01:44:39.467Z", "contributors": [ - "fernandosavio" + "FernandoKGA" ] }, - "Web/JavaScript/Reference/Global_Objects/Math/atan2": { - "modified": "2019-03-23T22:22:42.007Z", + "Glossary/Self-Executing_Anonymous_Function": { + "modified": "2019-03-18T21:24:13.352Z", "contributors": [ - "isaiasBR" + "itumoraes" ] }, - "Web/JavaScript/Reference/Global_Objects/Math/atanh": { - "modified": "2020-10-15T21:55:07.443Z", + "Glossary/Semantics": { + "modified": "2019-11-06T20:51:20.923Z", "contributors": [ - "fernandosavio" + "klisostom", + "wcqueiroz" ] }, - "Web/JavaScript/Reference/Global_Objects/Math/cbrt": { - "modified": "2020-10-15T21:58:38.295Z", + "Glossary/SEO": { + "modified": "2019-03-23T22:28:40.636Z", "contributors": [ - "Mareken" + "Aschlla" ] }, - "Web/JavaScript/Reference/Global_Objects/Math/ceil": { - "modified": "2019-07-19T10:47:36.140Z", + "Glossary/Server": { + "modified": "2019-03-23T22:47:28.024Z", "contributors": [ - "WilliamSakata", - "Albert.Bitencourte", - "fscarol", - "niltonfreitas_", - "teoli", - "vagnerleitte" + "GoToLoop", + "raduq" ] }, - "Web/JavaScript/Reference/Global_Objects/Math/clz32": { - "modified": "2020-10-15T22:28:44.661Z", + "Glossary/SGML": { + "modified": "2019-03-18T21:38:45.984Z", "contributors": [ - "karenc-sousa", - "josimaraLima" + "jorgeclesio" ] }, - "Web/JavaScript/Reference/Global_Objects/Math/cos": { - "modified": "2020-10-15T22:18:27.705Z", + "Glossary/Synchronous": { + "modified": "2019-03-18T21:43:56.155Z", "contributors": [ - "Cleianderson" + "SaraJade" ] }, - "Web/JavaScript/Reference/Global_Objects/Math/cosh": { - "modified": "2020-10-15T22:28:21.218Z", + "Glossary/Sloppy_mode": { + "modified": "2019-07-03T00:15:27.167Z", "contributors": [ - "renato.alecrim" + "opedropaes", + "marciooliveira" ] }, - "Web/JavaScript/Reference/Global_Objects/Math/exp": { - "modified": "2019-03-23T23:15:09.889Z", + "Glossary/Stacking_context": { + "modified": "2019-03-23T22:09:15.293Z", "contributors": [ - "teoli", - "haskellcamargo" + "rener_bz" ] }, - "Web/JavaScript/Reference/Global_Objects/Math/expm1": { - "modified": "2020-10-15T22:31:35.332Z", + "Glossary/String": { + "modified": "2019-03-23T22:48:30.483Z", "contributors": [ - "karenc-sousa" + "coloringa", + "reuel.jonathan" ] }, - "Web/JavaScript/Reference/Global_Objects/Math/floor": { - "modified": "2019-09-13T11:05:18.946Z", + "Glossary/SVG": { + "modified": "2019-03-23T22:17:51.716Z", "contributors": [ - "maarysantos", - "fscarol", - "teoli", - "matheuslc" + "coloringa", + "psergiojr" ] }, - "Web/JavaScript/Reference/Global_Objects/Math/hypot": { - "modified": "2020-10-15T21:55:03.563Z", + "Glossary/Symbol": { + "modified": "2019-03-18T21:36:11.562Z", "contributors": [ - "fernandosavio" + "RafaelAdao", + "trestini" ] }, - "Web/JavaScript/Reference/Global_Objects/Math/log": { - "modified": "2019-03-23T22:26:27.916Z", + "Glossary/Tag": { + "modified": "2019-06-14T07:53:04.390Z", "contributors": [ - "monteiroflavio" + "wcqueiroz", + "Renisson-Silva" ] }, - "Web/JavaScript/Reference/Global_Objects/Math/log10": { - "modified": "2019-03-23T22:26:17.000Z", + "Glossary/TCP": { + "modified": "2019-03-18T21:45:12.989Z", "contributors": [ - "thaisdemoura", - "monteiroflavio" + "SaraJade" ] }, - "Web/JavaScript/Reference/Global_Objects/Math/log1p": { - "modified": "2020-10-15T22:22:08.225Z", + "Glossary/Three_js": { + "modified": "2019-03-18T21:44:29.352Z", "contributors": [ - "Mathues" + "lucaspontoexe" ] }, - "Web/JavaScript/Reference/Global_Objects/Math/log2": { - "modified": "2020-10-15T21:59:58.075Z", + "Glossary/TLS": { + "modified": "2019-03-18T21:44:01.071Z", "contributors": [ - "RodolfoSilva" + "SaraJade" ] }, - "Web/JavaScript/Reference/Global_Objects/Math/max": { - "modified": "2019-03-23T23:10:00.119Z", + "Glossary/Alignment_Subject": { + "modified": "2020-11-08T11:34:22.567Z", "contributors": [ - "lucsrods", - "LucianoBritis", - "Thiago", - "teoli" + "IsaqueDiniz" ] }, - "Web/JavaScript/Reference/Global_Objects/Math/min": { - "modified": "2019-04-26T13:13:20.729Z", + "orphaned/Glossary/Tratando_Formulários_com_PHP": { + "modified": "2019-05-30T02:54:29.717Z", "contributors": [ - "yogmel", - "LucianoBritis" + "jorgeclesio" ] }, - "Web/JavaScript/Reference/Global_Objects/Math/pow": { - "modified": "2019-04-25T15:22:09.540Z", + "Glossary/Truthy": { + "modified": "2019-03-23T22:44:49.553Z", "contributors": [ - "xneuber", - "HumbsBR", - "ralphrass" + "cezaraugusto", + "jeanonline" ] }, - "Web/JavaScript/Reference/Global_Objects/Math/random": { - "modified": "2020-10-15T21:29:15.686Z", + "Glossary/undefined": { + "modified": "2019-03-23T22:47:22.150Z", "contributors": [ - "Ocramoi", - "brevvi", - "WBerredo", - "fernandosavio", - "AustinFelipe", - "CasperBraske", - "teoli", - "xhximenes" + "raduq" + ] + }, + "Glossary/URI": { + "modified": "2019-03-23T22:05:53.369Z", + "contributors": [ + "pedropaulosuzuki" ] }, - "Web/JavaScript/Reference/Global_Objects/Math/round": { - "modified": "2019-08-15T18:47:55.871Z", + "Glossary/URL": { + "modified": "2019-03-23T22:17:47.485Z", "contributors": [ - "brunomazzardo", - "letuche", - "SphinxKnight", - "giovana-morais", - "Guimaraesmvf", - "lumathias", - "teoli", - "vagnerleitte" + "psergiojr" ] }, - "Web/JavaScript/Reference/Global_Objects/Math/sign": { - "modified": "2020-10-15T21:55:40.410Z", + "Glossary/UTF-8": { + "modified": "2020-08-07T20:20:51.387Z", "contributors": [ - "leonardocxavier.lx", - "josetepedino" + "rafhaelfitzpatrick" ] }, - "Web/JavaScript/Reference/Global_Objects/Math/sin": { - "modified": "2020-10-15T22:04:54.149Z", + "Glossary/UX": { + "modified": "2019-06-27T03:02:50.385Z", "contributors": [ - "raullesteves", - "LucianoDos" + "wcqueiroz" ] }, - "Web/JavaScript/Reference/Global_Objects/Math/sinh": { - "modified": "2020-10-15T22:13:49.195Z", + "Glossary/Value": { + "modified": "2019-03-23T22:09:43.019Z", "contributors": [ - "taranttini" + "melostbr", + "Fernandolrs" ] }, - "Web/JavaScript/Reference/Global_Objects/Math/sqrt": { - "modified": "2020-10-15T21:26:04.927Z", + "Glossary/Variable": { + "modified": "2019-03-23T22:04:07.138Z", "contributors": [ - "fernandosavio", - "teoli", - "Phisichodelic" + "apsychox", + "melostbr", + "gabrielrosa2004" ] }, - "Web/JavaScript/Reference/Global_Objects/Math/tan": { - "modified": "2019-03-23T23:10:38.670Z", + "Glossary/Viewport": { + "modified": "2020-01-10T08:14:42.218Z", "contributors": [ - "brunofin" + "marlonveiga-santos" ] }, - "Web/JavaScript/Reference/Global_Objects/Math/tanh": { - "modified": "2020-10-15T22:04:54.316Z", + "Glossary/W3C": { + "modified": "2020-01-10T00:07:54.607Z", "contributors": [ - "LucianoDos" + "brunofrra", + "GPrimola" ] }, - "Web/JavaScript/Reference/Global_Objects/Math/trunc": { - "modified": "2019-03-18T20:46:02.772Z", + "Glossary/webp": { + "modified": "2019-03-18T21:42:09.223Z", "contributors": [ - "rbuzatto", - "SphinxKnight", - "renamed" + "MarcosNakamine" ] }, - "Web/JavaScript/Reference/Global_Objects/NaN": { - "modified": "2020-03-12T19:40:35.675Z", + "Glossary/WebSockets": { + "modified": "2019-03-18T21:30:41.662Z", "contributors": [ - "trestini" + "rbertoche" ] }, - "Web/JavaScript/Reference/Global_Objects/Number": { - "modified": "2019-03-18T20:45:04.310Z", + "Glossary/WHATWG": { + "modified": "2019-03-18T21:36:57.818Z", "contributors": [ - "edvoidcode", - "wbamberg", - "rubenfaria", - "gutoribeiro", - "olilucas", - "fscholz" + "GPrimola" ] }, - "Web/JavaScript/Reference/Global_Objects/Number/EPSILON": { - "modified": "2020-10-15T22:33:22.823Z", + "Glossary/Wrapper": { + "modified": "2020-08-07T11:26:36.555Z", "contributors": [ - "FernandoKGA" + "rafhaelfitzpatrick", + "Fernandolrs" ] }, - "Web/JavaScript/Reference/Global_Objects/Number/MAX_SAFE_INTEGER": { - "modified": "2020-10-15T22:33:22.489Z", + "Glossary/XHR_(XMLHttpRequest)": { + "modified": "2019-04-26T09:39:50.976Z", "contributors": [ - "FernandoKGA" + "helton-mori-dev" ] }, - "Web/JavaScript/Reference/Global_Objects/Number/MAX_VALUE": { - "modified": "2020-10-15T22:33:22.445Z", + "Glossary/XML": { + "modified": "2019-03-23T22:17:58.150Z", "contributors": [ - "FernandoKGA" + "psergiojr" ] }, - "Web/JavaScript/Reference/Global_Objects/Number/MIN_SAFE_INTEGER": { - "modified": "2020-10-15T22:33:22.518Z", + "orphaned/Hello_World_Rust": { + "modified": "2019-03-23T22:54:34.208Z", "contributors": [ - "FernandoKGA" + "IvomarS", + "molokdotc" ] }, - "Web/JavaScript/Reference/Global_Objects/Number/MIN_VALUE": { - "modified": "2020-10-15T22:33:23.068Z", + "Web/HTML/Attributes": { + "modified": "2019-03-23T23:39:13.093Z", "contributors": [ - "FernandoKGA" + "MatCAlv", + "LeonardoPacheco", + "FelipeFonseca" ] }, - "Web/JavaScript/Reference/Global_Objects/Number/NEGATIVE_INFINITY": { - "modified": "2020-10-15T22:33:22.475Z", + "orphaned/Learn/HTML/Forms/HTML5_updates": { + "modified": "2019-03-23T23:38:57.820Z", "contributors": [ - "FernandoKGA" + "digovc", + "andrejunges", + "phenriqueleao" ] }, - "Web/JavaScript/Reference/Global_Objects/Number/NaN": { - "modified": "2019-03-23T22:21:44.421Z", + "orphaned/Instalando_Rust": { + "modified": "2019-03-23T22:54:43.463Z", "contributors": [ - "caioabe" + "molokdotc" ] }, - "Web/JavaScript/Reference/Global_Objects/Number/POSITIVE_INFINITY": { - "modified": "2020-10-15T21:59:00.701Z", + "Glossary/JSON": { + "modified": "2019-03-23T23:24:58.365Z", "contributors": [ - "vierno" + "teoli", + "estevamdf" ] }, - "Web/JavaScript/Reference/Global_Objects/Number/isFinite": { - "modified": "2020-10-15T21:59:02.386Z", + "Learn/Accessibility/Accessibility_troubleshooting": { + "modified": "2020-07-16T22:40:36.530Z", "contributors": [ - "dayanyrec" + "luan0ap", + "msales" ] }, - "Web/JavaScript/Reference/Global_Objects/Number/isInteger": { - "modified": "2019-07-29T15:37:40.408Z", + "Learn/Accessibility/CSS_and_JavaScript": { + "modified": "2020-07-16T22:40:18.608Z", "contributors": [ - "vitorbertulucci", - "odahcam" + "raphaelminacio" ] }, - "Web/JavaScript/Reference/Global_Objects/Number/isNaN": { - "modified": "2019-03-23T23:10:13.820Z", + "Learn/Common_questions/How_does_the_Internet_work": { + "modified": "2020-07-16T22:35:37.501Z", + "contributors": [ + "firenhite", + "wcqueiroz", + "danielbrai", + "barrosval", + "lhenriquenunes", + "mrmorais" + ] + }, + "Learn/Common_questions/set_up_a_local_testing_server": { + "modified": "2020-07-16T22:35:53.295Z", "contributors": [ + "RenanArques", + "wcqueiroz", "SphinxKnight", - "codermarcos", - "teoli", - "nickmarinho" + "linoveloso", + "vgabrielps", + "Edusar" ] }, - "Web/JavaScript/Reference/Global_Objects/Number/isSafeInteger": { - "modified": "2020-10-15T22:23:14.691Z", + "Learn/Common_questions/How_do_you_host_your_website_on_Google_App_Engine": { + "modified": "2020-07-16T22:35:52.368Z", "contributors": [ - "carloserocha" + "Felipe-GB", + "wcqueiroz" ] }, - "Web/JavaScript/Reference/Global_Objects/Number/parseFloat": { - "modified": "2019-03-18T21:00:18.240Z", + "Learn/Common_questions/What_are_browser_developer_tools": { + "modified": "2020-07-16T22:35:47.861Z", "contributors": [ - "negreirosleo", - "SphinxKnight", - "jctosta" + "gilmargn", + "italorangel", + "ocaccy", + "7aylors", + "rubenfaria" ] }, - "Web/JavaScript/Reference/Global_Objects/Number/parseInt": { - "modified": "2020-10-15T22:33:24.030Z", + "Learn/Common_questions/What_is_a_web_server": { + "modified": "2020-07-16T22:35:31.716Z", "contributors": [ - "FernandoKGA" + "wcqueiroz", + "thaishfmarques", + "erickandrade", + "lfpelison", + "kleinerbr", + "linielson" ] }, - "Web/JavaScript/Reference/Global_Objects/Number/prototype": { - "modified": "2019-03-23T22:11:17.514Z", + "Learn/Common_questions/What_are_hyperlinks": { + "modified": "2020-09-14T13:55:12.468Z", "contributors": [ - "matAlmeida", - "gutoribeiro" + "lathne" ] }, - "Web/JavaScript/Reference/Global_Objects/Number/toExponential": { - "modified": "2019-03-23T22:10:51.562Z", + "Learn/Common_questions/Thinking_before_coding": { + "modified": "2020-07-16T22:35:34.836Z", "contributors": [ - "waltton" + "firenhite", + "wcqueiroz" ] }, - "Web/JavaScript/Reference/Global_Objects/Number/toFixed": { - "modified": "2020-10-15T21:42:57.260Z", + "Learn/Common_questions/How_much_does_it_cost": { + "modified": "2020-07-16T22:35:45.917Z", "contributors": [ - "waveiro", - "akfzambrana" + "wcqueiroz" ] }, - "Web/JavaScript/Reference/Global_Objects/Number/toLocaleString": { - "modified": "2020-10-15T21:47:41.116Z", + "Learn/Common_questions/What_software_do_I_need": { + "modified": "2020-07-16T22:35:33.538Z", "contributors": [ - "waveiro", - "cristiancporto", - "marcelobonatto" + "sredoja" ] }, - "Web/JavaScript/Reference/Global_Objects/Number/toPrecision": { - "modified": "2020-10-15T22:17:13.989Z", + "Learn/CSS/CSS_layout/Normal_Flow": { + "modified": "2020-07-16T22:27:22.550Z", "contributors": [ - "haist", - "milovaz" + "GiovanniHD201E" ] }, - "Web/JavaScript/Reference/Global_Objects/Number/toSource": { - "modified": "2020-10-15T22:17:14.004Z", + "Learn/CSS/CSS_layout/Introduction": { + "modified": "2020-07-16T22:27:07.240Z", "contributors": [ - "milovaz" + "GiovanniHD201E" ] }, - "Web/JavaScript/Reference/Global_Objects/Number/toString": { - "modified": "2019-03-23T22:52:50.933Z", + "Learn/CSS/CSS_layout/Multiple-column_Layout": { + "modified": "2020-07-16T22:27:11.776Z", "contributors": [ - "tributus" + "FabricioBernardes" ] }, - "Web/JavaScript/Reference/Global_Objects/Number/valueOf": { - "modified": "2020-10-15T22:17:17.170Z", + "Learn/CSS/First_steps/How_CSS_is_structured": { + "modified": "2020-11-07T13:04:16.800Z", "contributors": [ - "milovaz" + "sabertoletti32", + "JuniorUbarana", + "Edsonoguera", + "danfrsv", + "felipekafuri" ] }, - "Web/JavaScript/Reference/Global_Objects/Object": { - "modified": "2020-10-15T21:22:46.995Z", + "Learn/CSS/First_steps/Getting_started": { + "modified": "2020-07-27T14:59:56.561Z", "contributors": [ - "UPPERCASEuser", - "fscholz", - "LucianoDos", - "user2015", - "teoli", - "matheusrocha89" + "warleyfdias", + "klisostom" ] }, - "Web/JavaScript/Reference/Global_Objects/Object/__defineGetter__": { - "modified": "2020-10-15T22:10:25.431Z", + "Learn/CSS/First_steps/What_is_CSS": { + "modified": "2020-10-15T22:23:04.005Z", "contributors": [ - "KyryIx" + "klisostom" ] }, - "Web/JavaScript/Reference/Global_Objects/Object/__defineSetter__": { - "modified": "2020-10-15T22:34:14.134Z", + "Learn/CSS/Howto/CSS_FAQ": { + "modified": "2020-07-16T22:25:45.672Z", "contributors": [ - "FernandoKGA" + "JefersonOliveira90" + ] + }, + "Learn/JavaScript/Asynchronous/Concepts": { + "modified": "2020-10-06T09:57:59.299Z", + "contributors": [ + "joseluizmonteirojr", + "bellammuniz" ] }, - "Web/JavaScript/Reference/Global_Objects/Object/__lookupGetter__": { - "modified": "2020-10-15T22:01:00.255Z", + "Learn/JavaScript/Asynchronous/Choosing_the_right_approach": { + "modified": "2020-10-15T22:33:23.228Z", "contributors": [ - "Learaujoss" + "manoelbjr" ] }, - "Web/JavaScript/Reference/Global_Objects/Object/__lookupSetter__": { - "modified": "2020-10-15T22:34:13.904Z", + "Learn/JavaScript/Asynchronous/Introducing": { + "modified": "2020-07-16T22:33:17.985Z", "contributors": [ - "FernandoKGA" + "bellammuniz" ] }, - "Web/JavaScript/Reference/Global_Objects/Object/assign": { - "modified": "2020-10-15T21:38:23.637Z", + "Learn/JavaScript/First_steps/Silly_story_generator": { + "modified": "2020-07-16T22:31:02.876Z", "contributors": [ - "nikolasFreitas", - "daniloazevedo", - "SphinxKnight", - "rafaelcavalcante", - "gugiserman", - "kdex", - "Jerffersonferreira", - "jhserodio", - "desoares1975", - "hbarcelos", - "HenriqueSilverio" + "gabriel_cadu", + "kaiqueprazeres", + "VictorGom3s", + "fenobalao", + "carlos-rafael" ] }, - "Web/JavaScript/Reference/Global_Objects/Object/constructor": { - "modified": "2019-03-23T22:54:12.280Z", + "Learn/JavaScript/First_steps/Math": { + "modified": "2020-07-16T22:30:27.765Z", "contributors": [ - "chorajunior", - "lotharthesavior" + "leonardogbxv", + "VictorCPPlanas", + "etc_william", + "BrunoBit", + "webfelipemaia", + "MattBizzo", + "rubenfaria" ] }, - "Web/JavaScript/Reference/Global_Objects/Object/create": { - "modified": "2019-03-21T08:33:13.941Z", + "Learn/JavaScript/First_steps/What_is_JavaScript": { + "modified": "2020-08-28T14:30:44.945Z", "contributors": [ - "GabrielLidenor", - "andrekishimoto", - "andresales" + "moukinchung", + "webfelipemaia", + "di3goCS", + "LuizEduS", + "fersouza90", + "Magela", + "lzhudson", + "rubenfaria", + "MattBizzo", + "BiancaAlves", + "thierryrenematos" ] }, - "Web/JavaScript/Reference/Global_Objects/Object/defineProperties": { - "modified": "2019-03-23T22:07:15.693Z", + "Learn/JavaScript/First_steps/Test_your_skills:_variables": { + "modified": "2020-07-18T16:26:39.168Z", "contributors": [ - "KyryIx", - "LucianoDos" + "webfelipemaia" ] }, - "Web/JavaScript/Reference/Global_Objects/Object/defineProperty": { - "modified": "2020-10-15T21:48:58.770Z", + "Learn/JavaScript/First_steps/Variables": { + "modified": "2020-07-18T12:10:35.369Z", "contributors": [ - "TavaresW-lima", - "luan0ap", - "luzeduardo", - "KyryIx", - "Glaydson", - "saulobmansur", - "joeltonmats", - "mshmeirelles", - "ronniery" + "webfelipemaia", + "Magela", + "lzhudson", + "MattBizzo", + "rubenfaria", + "fenobalao" ] }, - "Web/JavaScript/Reference/Global_Objects/Object/entries": { - "modified": "2020-10-15T21:53:04.423Z", + "Learn/Server-side/Django/development_environment": { + "modified": "2020-08-26T10:15:03.041Z", "contributors": [ - "mateusvelleda", - "vhfmag", - "cezaraugusto" + "ecoscom", + "BraianF", + "ViniciusMatias" ] }, - "Web/JavaScript/Reference/Global_Objects/Object/freeze": { - "modified": "2019-05-16T22:14:31.830Z", + "Learn/Server-side/Django/Deployment": { + "modified": "2020-09-05T19:47:24.465Z", "contributors": [ - "jpsl00", - "HugoBex" + "Ricardo_Ribeiro" ] }, - "Web/JavaScript/Reference/Global_Objects/Object/fromEntries": { - "modified": "2020-10-15T22:21:48.504Z", + "Learn/Server-side/Django/Introduction": { + "modified": "2020-09-05T19:15:55.942Z", "contributors": [ - "soutokevin" + "rykarumstuler", + "ecoscom", + "edivandyeimes", + "kiabo", + "Guilhermeasper", + "caveman-0", + "lopespaz", + "Nordor1" ] }, - "Web/JavaScript/Reference/Global_Objects/Object/getOwnPropertyDescriptor": { - "modified": "2020-10-15T21:46:28.549Z", + "Learn/Server-side/Django/Sessions": { + "modified": "2020-07-16T22:37:27.571Z", "contributors": [ - "fscholz", - "danilobarion1986" + "ecoscom", + "tamiryspino", + "fossalex", + "brendonhc" ] }, - "Web/JavaScript/Reference/Global_Objects/Object/getOwnPropertyDescriptors": { - "modified": "2020-10-15T22:34:14.161Z", + "Learn/Server-side/Django/Tutorial_local_library_website": { + "modified": "2020-08-26T10:23:14.303Z", "contributors": [ - "fernanduandrade" + "ecoscom", + "caveman-0", + "ViniciusMatias", + "victordfb", + "lopespaz", + "naiieandrade" ] }, - "Web/JavaScript/Reference/Global_Objects/Object/getOwnPropertyNames": { - "modified": "2019-03-23T22:34:44.099Z", + "Learn/Server-side/Express_Nodejs/development_environment": { + "modified": "2020-07-16T22:38:00.195Z", "contributors": [ - "soter19", - "deyvidyury" + "ddanielcardoso", + "AAntoniazzi", + "danilosetubal" ] }, - "Web/JavaScript/Reference/Global_Objects/Object/getOwnPropertySymbols": { - "modified": "2020-10-15T22:34:14.971Z", + "Learn/Server-side/Express_Nodejs/Introduction": { + "modified": "2020-07-16T22:38:12.682Z", "contributors": [ - "fernanduandrade" + "ddanielcardoso", + "ErialdoDFfreitas", + "luane-aquino", + "AAntoniazzi", + "andersonse", + "TecladistaProd" ] }, - "Web/JavaScript/Reference/Global_Objects/Object/getPrototypeOf": { - "modified": "2019-03-23T22:50:02.364Z", + "Learn/Server-side/First_steps/Introduction": { + "modified": "2020-12-06T18:10:00.170Z", "contributors": [ - "victor-borges" + "duduindo", + "kvojps" ] }, - "Web/JavaScript/Reference/Global_Objects/Object/hasOwnProperty": { - "modified": "2019-07-24T09:59:12.961Z", + "Learn/Server-side/First_steps/Website_security": { + "modified": "2020-07-16T22:36:29.289Z", "contributors": [ - "lucasramosi", - "andremarcondesteixeira", - "KennyMack", - "teoli", - "gigaPaul" + "The-Physicist", + "wcqueiroz" ] }, - "Web/JavaScript/Reference/Global_Objects/Object/is": { - "modified": "2019-03-23T22:21:14.617Z", + "Learn/Tools_and_testing/Client-side_JavaScript_frameworks/React_getting_started": { + "modified": "2020-10-29T12:43:23.860Z", "contributors": [ - "amaralbf" + "pachicodes", + "Aleks", + "Ismael-Oliv", + "gilmargn", + "angelorubin", + "gsb6" ] }, - "Web/JavaScript/Reference/Global_Objects/Object/isExtensible": { - "modified": "2020-10-15T22:21:49.022Z", + "Learn/Tools_and_testing/Client-side_JavaScript_frameworks/Vue_getting_started": { + "modified": "2020-07-16T22:39:49.009Z", "contributors": [ - "soutokevin" + "fred_melo_07" ] }, - "Web/JavaScript/Reference/Global_Objects/Object/isFrozen": { - "modified": "2020-10-15T22:20:52.994Z", + "Glossary/Localization": { + "modified": "2019-03-23T23:25:17.486Z", "contributors": [ - "pedroprado010" + "-", + "ronaldo-bonfim" ] }, - "Web/JavaScript/Reference/Global_Objects/Object/isPrototypeOf": { - "modified": "2020-10-15T21:57:20.725Z", + "Web/CSS/mask": { + "modified": "2019-03-23T22:47:38.213Z", "contributors": [ - "SilvaCoder" + "teoli", + "Sebastianz", + "yagosrocha" ] }, - "Web/JavaScript/Reference/Global_Objects/Object/isSealed": { - "modified": "2020-10-15T22:07:55.569Z", + "orphaned/MDN/Community": { + "modified": "2019-03-23T23:18:59.817Z", "contributors": [ - "HelcioMacedo" + "sauloandrade", + "wbamberg", + "mrmorais", + "CNicola", + "camimq", + "-", + "Fabiola" ] }, - "Web/JavaScript/Reference/Global_Objects/Object/keys": { - "modified": "2019-03-23T22:47:37.261Z", + "orphaned/MDN/Community/Working_in_community": { + "modified": "2020-02-19T19:05:23.989Z", "contributors": [ - "kdex", - "eduardojmatos", - "ronysilvati" + "jswisher", + "wbamberg", + "MarceloBRN", + "Fernandolrs", + "mak213k", + "RenanBirck" ] }, - "Web/JavaScript/Reference/Global_Objects/Object/preventExtensions": { - "modified": "2020-10-15T21:57:55.623Z", + "orphaned/MDN/Community/Whats_happening": { + "modified": "2019-03-23T23:00:32.486Z", "contributors": [ - "saarlander", - "LucianoDos" + "wbamberg", + "-" ] }, - "Web/JavaScript/Reference/Global_Objects/Object/propertyIsEnumerable": { - "modified": "2020-10-15T22:32:29.322Z", + "orphaned/MDN/Contribute/Processes/Cross-team_collaboration_tactics": { + "modified": "2019-11-20T21:37:10.315Z", "contributors": [ - "GuilhermeVazz" + "wbamberg", + "angellica.araujo" ] }, - "Web/JavaScript/Reference/Global_Objects/Object/proto": { - "modified": "2019-03-23T22:19:51.716Z", + "MDN/Contribute/Howto/Create_and_edit_pages": { + "modified": "2020-01-20T16:42:55.893Z", "contributors": [ - "KyryIx", - "Treze", - "manzettidenis" + "mauJr", + "wbamberg", + "blue-bee", + "chrisdavidmills", + "chalix", + "LuccasBarbosa", + "juniorgarcia", + "rafaelcgstz", + "edu_jobs", + "A.M.M.A.", + "yelken" ] }, - "Web/JavaScript/Reference/Global_Objects/Object/prototype": { - "modified": "2019-03-23T23:02:44.390Z", + "MDN/Contribute/Howto/Tag": { + "modified": "2019-03-18T21:15:59.373Z", "contributors": [ - "runys", - "viniciuslacerda", - "melostbr", - "dafnk", - "gabefurlan", - "igorapa" + "wbamberg", + "Aschlla", + "fcard", + "juniorgarcia", + "tkovs", + "fabianosantos.net" ] }, - "Web/JavaScript/Reference/Global_Objects/Object/seal": { - "modified": "2019-03-23T22:23:03.815Z", + "MDN/Contribute/Howto/Convert_code_samples_to_be_live": { + "modified": "2019-03-23T23:11:54.642Z", "contributors": [ - "SilvaCoder" + "wbamberg", + "gleidiin", + "isaelss", + "PTLozano", + "Ladeia" ] }, - "Web/JavaScript/Reference/Global_Objects/Object/setPrototypeOf": { - "modified": "2019-03-23T22:12:04.085Z", + "MDN/Contribute/Howto/Create_an_interactive_exercise_to_help_learning_the_web/distant_example": { + "modified": "2019-01-17T10:48:33.130Z", "contributors": [ - "KyryIx", - "gutoribeiro" + "wbamberg", + "arthur2323" ] }, - "Web/JavaScript/Reference/Global_Objects/Object/toLocaleString": { - "modified": "2020-10-15T22:34:13.476Z", + "MDN/Contribute/Howto/Create_an_interactive_exercise_to_help_learning_the_web": { + "modified": "2019-11-06T11:43:24.278Z", "contributors": [ - "FernandoKGA" + "WellingtonFR", + "wbamberg", + "arthur2323" ] }, - "Web/JavaScript/Reference/Global_Objects/Object/toSource": { - "modified": "2020-10-15T22:34:16.108Z", + "orphaned/MDN/Contribute/Howto/Create_an_MDN_account": { + "modified": "2019-03-23T22:57:58.896Z", "contributors": [ - "rafaelflorespereira", - "FernandoKGA" + "eduardo.klein", + "wbamberg", + "jaimemaretoli", + "jokafla", + "123gvdblanche" ] }, - "Web/JavaScript/Reference/Global_Objects/Object/toString": { - "modified": "2019-03-23T23:07:48.389Z", + "orphaned/MDN/Contribute/Howto/Do_a_technical_review": { + "modified": "2019-03-23T23:03:05.824Z", "contributors": [ - "AleCorrea", - "klzns" + "wbamberg", + "luisfvieira", + "Gilbertosilvax1", + "takahan", + "-" ] }, - "Web/JavaScript/Reference/Global_Objects/Object/valueOf": { - "modified": "2020-10-15T22:00:42.323Z", + "orphaned/MDN/Contribute/Howto/Do_an_editorial_review": { + "modified": "2020-09-17T12:48:11.904Z", "contributors": [ - "MarcceloSelv" + "PauloNFraga", + "wbamberg", + "Gregory", + "o2over", + "pauloaug", + "Gilbertosilvax1", + "KadirTopal", + "sprodrigues", + "-", + "takahan" ] }, - "Web/JavaScript/Reference/Global_Objects/Object/values": { - "modified": "2019-03-23T22:25:57.378Z", + "orphaned/MDN/Contribute/Howto/Write_an_article_to_help_learn_about_the_Web": { + "modified": "2020-02-28T22:24:45.284Z", "contributors": [ - "gabefurlan" + "wbamberg", + "BrunoThomaz" ] }, - "Web/JavaScript/Reference/Global_Objects/Promise": { - "modified": "2020-10-19T07:58:10.031Z", + "MDN/Contribute/Howto": { + "modified": "2019-01-16T19:17:27.272Z", "contributors": [ - "SphinxKnight", - "JulioDinis", - "henriquejsfj", - "mateusvelleda", - "node1111", - "ThalesRod", - "rafaelcavalcante", - "eduardoyutaka", - "WBerredo", - "filipetorres", - "fernando.ghisi", - "kdex", - "BrOrlandi", - "gabrielagabriel", - "caio_araujo", - "pauloaug", - "vbmendes", - "teoli", - "RyanFilho", - "keuller" + "wbamberg", + "-", + "angellica.araujo" ] }, - "Web/JavaScript/Reference/Global_Objects/Promise/all": { - "modified": "2020-10-15T21:38:19.432Z", + "orphaned/MDN/Contribute/Howto/Set_the_summary_for_a_page": { + "modified": "2019-03-23T23:03:38.091Z", "contributors": [ - "SphinxKnight", - "igorsamado", - "renatovassao", - "fernando-camacho", - "gustavohenke" + "wbamberg", + "Gilbertosilvax1", + "fabiobasso", + "-", + "EduardoRedressa" ] }, - "Web/JavaScript/Reference/Global_Objects/Promise/allSettled": { - "modified": "2020-10-23T13:34:53.762Z", + "orphaned/MDN/Contribute/Howto/Tag_JavaScript_pages": { + "modified": "2019-01-16T21:06:45.074Z", "contributors": [ - "gabrielfdg10", - "rafaelblink" + "wbamberg", + "Gilbertosilvax1", + "marcionitao", + "rafamaxber" ] }, - "Web/JavaScript/Reference/Global_Objects/Promise/catch": { - "modified": "2020-10-15T21:46:01.585Z", + "MDN/Contribute/Processes": { + "modified": "2019-01-16T19:51:57.687Z", "contributors": [ - "Ronkiro", - "caiouehara", - "toruticas", - "fscholz", - "vvinhas" + "wbamberg", + "-" ] }, - "Web/JavaScript/Reference/Global_Objects/Promise/finally": { - "modified": "2020-10-15T22:09:11.734Z", + "orphaned/MDN/Editor/Basics": { + "modified": "2020-09-30T15:43:15.730Z", "contributors": [ - "Rovelcio", - "tuxpilgrim" + "chrisdavidmills", + "soarescamila" ] }, - "Web/JavaScript/Reference/Global_Objects/Promise/prototype": { - "modified": "2019-03-23T23:07:56.583Z", + "orphaned/MDN/Editor": { + "modified": "2020-09-30T15:43:15.561Z", "contributors": [ - "SphinxKnight", - "dowgssss", - "BrOrlandi", - "keuller" + "chrisdavidmills", + "wbamberg", + "-", + "teoli", + "BrKaosh", + "Lindonj1" ] }, - "Web/JavaScript/Reference/Global_Objects/Promise/race": { - "modified": "2019-03-23T22:49:35.540Z", + "MDN/Guidelines/Writing_style_guide": { + "modified": "2020-09-30T15:31:17.845Z", "contributors": [ - "SphinxKnight", - "gustavohenke" + "chrisdavidmills", + "jswisher", + "Carlos_Mir_de_Souza", + "helton-mori-dev", + "CodexZombie", + "wbamberg", + "RobMota", + "-" ] }, - "Web/JavaScript/Reference/Global_Objects/Promise/reject": { - "modified": "2020-10-15T21:46:17.994Z", + "MDN/Yari": { + "modified": "2019-09-09T15:53:42.526Z", "contributors": [ - "fscholz", - "vbmendes" + "SphinxKnight", + "wbamberg", + "richellyitalo" ] }, - "Web/JavaScript/Reference/Global_Objects/Promise/resolve": { - "modified": "2020-10-15T21:49:25.849Z", + "orphaned/MDN/Dashboards": { + "modified": "2019-06-06T00:53:15.090Z", "contributors": [ - "igorc2", - "nunks", - "teogenesmoura", - "BrOrlandi", - "iFgR" + "wcqueiroz" ] }, - "Web/JavaScript/Reference/Global_Objects/Promise/then": { - "modified": "2019-03-23T22:58:50.489Z", + "MDN/Tools/KumaScript/Troubleshooting": { + "modified": "2020-09-30T16:52:54.520Z", "contributors": [ - "SphinxKnight", - "olegon", - "rafaelmatos20", - "lypborges" + "chrisdavidmills", + "wbamberg", + "GPrimola" ] }, - "Web/JavaScript/Reference/Global_Objects/Proxy": { - "modified": "2020-10-15T21:51:59.693Z", + "orphaned/MDN/Tools/Page_regeneration": { + "modified": "2020-09-30T16:52:54.361Z", "contributors": [ - "renefb", - "Fernandolrs", - "rafaelbertelli", - "wallacemaxters", - "mshmeirelles" + "chrisdavidmills", + "wbamberg", + "-", + "juniorgarcia" ] }, - "Web/JavaScript/Reference/Global_Objects/ReferenceError": { - "modified": "2019-03-23T22:27:53.828Z", + "Mozilla/Add-ons/WebExtensions/Anatomy_of_a_WebExtension": { + "modified": "2019-09-29T21:36:50.619Z", "contributors": [ - "liliansilva" + "AdaiasMagdiel", + "jefersonnavarro", + "samuel.abreu", + "lubarino", + "jlamim" ] }, - "Web/JavaScript/Reference/Global_Objects/Reflect": { - "modified": "2020-06-26T00:19:16.395Z", + "Mozilla/Add-ons/WebExtensions/API/theme": { + "modified": "2020-10-15T22:16:55.245Z", "contributors": [ - "Marcelo-Rodrigues", - "chicoria", - "Keony", - "Pedrinho", - "eduardoyuidy", - "fscholz" + "Aschlla" ] }, - "Web/JavaScript/Reference/Global_Objects/Reflect/apply": { - "modified": "2019-03-23T22:25:21.456Z", + "Mozilla/Add-ons/WebExtensions/manifest.json/permissions": { + "modified": "2020-10-15T22:03:55.675Z", "contributors": [ - "alinemorelli" + "wbamberg", + "MarceloGhelman", + "Weslei" ] }, - "Web/JavaScript/Reference/Global_Objects/Reflect/construct": { - "modified": "2020-10-15T22:17:42.172Z", + "Mozilla/Add-ons/WebExtensions/What_next_": { + "modified": "2019-03-18T21:01:38.952Z", "contributors": [ - "felipefabreu" + "jefersonnavarro" ] }, - "Web/JavaScript/Reference/Global_Objects/Reflect/defineProperty": { - "modified": "2020-10-15T22:31:07.123Z", + "Mozilla/Add-ons/WebExtensions/Your_second_WebExtension": { + "modified": "2019-12-28T20:44:44.265Z", "contributors": [ - "Marcelo-Rodrigues" + "euvanribeiro", + "rodolfo.ghiggi", + "jefersonnavarro", + "WiataganPaz", + "Mostard", + "lubarino" ] }, - "Web/JavaScript/Reference/Global_Objects/Reflect/set": { - "modified": "2019-03-18T20:36:06.411Z", + "Mozilla/Add-ons/WebExtensions/Prerequisites": { + "modified": "2019-03-23T22:48:17.751Z", "contributors": [ - "georgelima" + "IgorOFC", + "jlamim" ] }, - "Web/JavaScript/Reference/Global_Objects/RegExp": { - "modified": "2019-11-07T22:08:21.265Z", + "Mozilla/Add-ons/WebExtensions/Your_first_WebExtension": { + "modified": "2019-03-18T21:05:56.580Z", "contributors": [ - "helton-mori-dev", - "jaimemnds", - "patrickjonesdsc", - "wbamberg", - "danieltex", - "matheussilvasantos", - "Bruno_Lopes" + "lubarino", + "Mostard", + "andregarzia" + ] + }, + "Mozilla/Add-ons/WebExtensions/user_interface/Context_menu_items": { + "modified": "2020-03-23T22:11:58.441Z", + "contributors": [ + "Sam-Marx" ] }, - "Web/JavaScript/Reference/Global_Objects/RegExp/compile": { - "modified": "2020-10-15T22:19:19.959Z", + "Mozilla/Developer_guide/Source_Code": { + "modified": "2019-03-23T23:36:39.907Z", "contributors": [ - "Fernandolrs" + "chrisdavidmills", + "jntesteves" ] }, - "Web/JavaScript/Reference/Global_Objects/RegExp/exec": { - "modified": "2019-03-23T22:11:00.508Z", + "Mozilla/Firefox/Experimental_features": { + "modified": "2019-01-17T00:25:13.965Z", "contributors": [ - "andremendonca", - "rafaelcavalcante", - "WagnerSilveira" + "wbamberg", + "marcio-ti" ] }, - "Web/JavaScript/Reference/Global_Objects/RegExp/ignoreCase": { - "modified": "2020-10-15T22:33:56.561Z", + "Mozilla/Firefox/Releases/3/Full_page_zoom": { + "modified": "2019-03-18T21:29:46.640Z", "contributors": [ - "alvarez86" + "Hv60T" ] }, - "Web/JavaScript/Reference/Global_Objects/RegExp/sticky": { - "modified": "2020-10-15T22:18:20.521Z", + "Web/Guide/HTML/Using_HTML_sections_and_outlines": { + "modified": "2020-10-07T01:45:20.737Z", "contributors": [ - "saulobmansur" + "leandroembu", + "Lucas_Inacio", + "davimdantas", + "SaggitariusA", + "webennes", + "edercampelo", + "IgorGoncalves", + "dann", + "netoguimaraes", + "Stutz.D", + "eduardodx", + "AluisioASG" ] }, - "Web/JavaScript/Reference/Global_Objects/RegExp/test": { - "modified": "2020-09-05T00:20:04.652Z", + "Web/XSLT/XSLT_JS_interface_in_Gecko/Advanced_Example": { + "modified": "2019-03-23T23:03:40.500Z", "contributors": [ - "alvarez86", - "Bagata", - "igorc2", - "felipericardo", - "iFgR" + "EduardoRedressa" ] }, - "Web/JavaScript/Reference/Global_Objects/Set": { - "modified": "2020-10-15T21:30:09.930Z", + "Web/XSLT/XSLT_JS_interface_in_Gecko": { + "modified": "2019-03-23T23:03:42.725Z", "contributors": [ - "wellpardim10", - "leo-ls", - "emiyasaki", - "GarkGarcia", - "SphinxKnight", - "Davidpsjunior", - "EdJr" + "ethertank" ] }, - "Web/JavaScript/Reference/Global_Objects/Set/add": { - "modified": "2019-08-12T18:33:12.776Z", + "orphaned/Tools/Add-ons/DOM_Inspector": { + "modified": "2020-07-16T22:36:24.634Z", "contributors": [ - "lucsrods", - "Davidpsjunior" + "wbamberg", + "DiegoTelles" ] }, - "Web/JavaScript/Reference/Global_Objects/Set/clear": { - "modified": "2019-03-23T22:31:32.028Z", + "orphaned/Tools/Add-ons": { + "modified": "2020-07-16T22:36:23.640Z", "contributors": [ - "Davidpsjunior" + "wbamberg", + "mak213k", + "DiegoTelles" ] }, - "Web/JavaScript/Reference/Global_Objects/Set/delete": { - "modified": "2019-03-23T22:31:37.586Z", + "Tools/Performance": { + "modified": "2020-07-16T22:36:13.436Z", "contributors": [ - "Davidpsjunior" + "wbamberg", + "IgorGoncalves", + "ricardolima89", + "gilton", + "samuelpontes" ] }, - "Web/JavaScript/Reference/Global_Objects/Set/entries": { - "modified": "2019-03-23T22:31:39.376Z", + "orphaned/Tools/CSS_Coverage": { + "modified": "2019-03-23T22:21:34.758Z", "contributors": [ - "Davidpsjunior" + "wbamberg", + "mak213k" ] }, - "Web/JavaScript/Reference/Global_Objects/Set/has": { - "modified": "2020-10-15T22:22:02.385Z", + "orphaned/Tools/Debugger_(before_Firefox_52)/Disable_breakpoints": { + "modified": "2019-03-23T22:21:41.910Z", "contributors": [ - "lucsrods" + "wbamberg", + "mak213k" ] }, - "Web/JavaScript/Reference/Global_Objects/Set/prototype": { - "modified": "2020-10-15T21:58:44.990Z", + "orphaned/Tools/Debugger_(before_Firefox_52)": { + "modified": "2019-03-23T22:21:37.545Z", "contributors": [ - "thayssn" + "wbamberg" ] }, - "Web/JavaScript/Reference/Global_Objects/Set/values": { - "modified": "2020-10-15T22:22:15.454Z", + "Tools/Remote_Debugging": { + "modified": "2020-07-16T22:35:37.857Z", "contributors": [ - "chicabomb" + "wbamberg", + "marciowb", + "nanardo", + "glacywhite", + "Giovane", + "MarcoRovida" ] }, - "Web/JavaScript/Reference/Global_Objects/String": { - "modified": "2019-03-23T23:14:51.438Z", + "Tools/Debugger": { + "modified": "2020-07-30T07:50:39.719Z", "contributors": [ + "LeandroVCastro", "wbamberg", - "coloringa", - "brunopulis", - "user2015", - "Marcus_xpt", - "rmello", + "flavioms7", + "LincePotiguara", + "vitorcardoso", + "Danilson_Veloso", + "GilvanFernandes", + "JAugusto", + "maybe", + "Radicalzinho", "teoli", - "nicholasess", - "fscholz" + "IvomarS" ] }, - "Web/JavaScript/Reference/Global_Objects/String/@@iterator": { - "modified": "2020-10-16T00:11:07.868Z", + "Tools/Debugger/Set_a_logpoint": { + "modified": "2020-07-16T22:35:20.440Z", "contributors": [ - "ricardo.passos.cr", - "vmardss" + "luan0ap" ] }, - "Web/JavaScript/Reference/Global_Objects/String/Trim": { - "modified": "2020-10-16T00:00:03.933Z", + "Tools/Style_Editor": { + "modified": "2020-07-16T22:35:00.708Z", "contributors": [ - "ricardo.passos.cr", - "coloringa", - "GlauberF", - "Webysther" + "wbamberg", + "MurilloLima", + "maybe", + "bbenatti" ] }, - "Web/JavaScript/Reference/Global_Objects/String/anchor": { - "modified": "2020-10-15T22:35:00.314Z", + "Tools/Storage_Inspector": { + "modified": "2020-07-16T22:36:10.142Z", "contributors": [ - "ricardo.passos.cr" + "erlongs", + "wbamberg", + "danieltex" ] }, - "Web/JavaScript/Reference/Global_Objects/String/big": { - "modified": "2020-10-15T22:35:01.913Z", + "Tools/Measure_a_portion_of_the_page": { + "modified": "2020-07-16T22:36:39.043Z", "contributors": [ - "ricardo.passos.cr" + "marlonveiga-santos" ] }, - "Web/JavaScript/Reference/Global_Objects/String/blink": { - "modified": "2020-10-15T22:35:01.790Z", + "Tools/Responsive_Design_Mode": { + "modified": "2020-07-16T22:35:22.122Z", "contributors": [ - "ricardo.passos.cr" + "cristiano-soares", + "wbamberg", + "jsx", + "teoli", + "EvertonPortela" ] }, - "Web/JavaScript/Reference/Global_Objects/String/bold": { - "modified": "2020-10-15T22:35:02.301Z", + "Tools/Page_Inspector/How_to/Examine_event_listeners": { + "modified": "2020-07-16T22:34:35.841Z", "contributors": [ - "ricardo.passos.cr" + "wbamberg", + "fabianosantos.net" ] }, - "Web/JavaScript/Reference/Global_Objects/String/charAt": { - "modified": "2020-10-09T12:22:30.996Z", + "Tools/Page_Inspector/How_to/Work_with_animations": { + "modified": "2020-07-16T22:34:36.936Z", "contributors": [ - "ricardo.passos.cr", - "ShadYueh", - "LucianoBritis" + "wbamberg", + "o2over" ] }, - "Web/JavaScript/Reference/Global_Objects/String/charCodeAt": { - "modified": "2020-10-09T12:26:04.591Z", + "Tools/Firefox_OS_1.1_Simulator": { + "modified": "2020-07-16T22:35:58.114Z", "contributors": [ - "ricardo.passos.cr", - "proxy-chan", - "NicholasBraga" + "wbamberg", + "faelpinho" ] }, - "Web/JavaScript/Reference/Global_Objects/String/codePointAt": { - "modified": "2020-11-02T09:15:45.248Z", + "Tools/Web_Console/UI_Tour": { + "modified": "2020-07-16T22:34:17.352Z", "contributors": [ - "FernandoKGA", - "ricardo.passos.cr" + "josimaraLima", + "cautnew" ] }, - "Web/JavaScript/Reference/Global_Objects/String/concat": { - "modified": "2020-10-09T16:58:32.740Z", + "Web/API/Geolocation_API": { + "modified": "2019-03-23T23:36:21.393Z", "contributors": [ - "ricardo.passos.cr", - "gusleindecker", - "LucianoMedeiros" + "rafaelcavalcante", + "paulo-raoni", + "ted_k", + "michaelycus", + "ronaldo.ap.abreu", + "emilianocarvalho" ] }, - "Web/JavaScript/Reference/Global_Objects/String/endsWith": { - "modified": "2020-10-15T21:56:21.169Z", + "Web/Guide/Mobile/Mobile-friendliness": { + "modified": "2019-03-23T23:28:21.815Z", "contributors": [ - "ricardo.passos.cr", - "houstondapaz", - "marceloogeda" + "clebermatheus1" ] }, - "Web/JavaScript/Reference/Global_Objects/String/fixed": { - "modified": "2020-10-15T22:35:03.509Z", + "Web/Guide/Mobile/Separate_sites": { + "modified": "2019-03-23T23:28:15.359Z", "contributors": [ - "ricardo.passos.cr" + "clebermatheus1" ] }, - "Web/JavaScript/Reference/Global_Objects/String/fontcolor": { - "modified": "2020-10-15T22:35:02.895Z", + "Web/Accessibility/ARIA/ARIA_Techniques/Using_the_aria-labelledby_attribute": { + "modified": "2019-03-23T23:02:11.347Z", "contributors": [ - "ricardo.passos.cr" + "eduardojmatos" ] }, - "Web/JavaScript/Reference/Global_Objects/String/fontsize": { - "modified": "2020-10-15T22:35:04.374Z", + "Web/Accessibility/ARIA/ARIA_Techniques/Using_the_aria-required_attribute": { + "modified": "2019-03-18T21:46:23.148Z", "contributors": [ - "ricardo.passos.cr" + "ivanoliveira" ] }, - "Web/JavaScript/Reference/Global_Objects/String/fromCharCode": { - "modified": "2020-10-15T23:47:01.302Z", + "Web/Accessibility/ARIA/ARIA_Techniques/Using_the_slider_role": { + "modified": "2019-03-23T22:16:26.114Z", "contributors": [ - "ricardo.passos.cr", - "NicholasBraga" + "rener_bz" ] }, - "Web/JavaScript/Reference/Global_Objects/String/fromCodePoint": { - "modified": "2020-10-09T12:25:02.641Z", + "Web/Accessibility/ARIA/ARIA_Techniques/Using_the_alert_role": { + "modified": "2019-03-23T22:50:52.511Z", "contributors": [ - "ricardo.passos.cr", - "LucasPereira", - "SphinxKnight", - "CesarBalzer" + "Aschlla", + "iCynthia" ] }, - "Web/JavaScript/Reference/Global_Objects/String/includes": { - "modified": "2020-10-15T21:41:15.485Z", + "Web/Accessibility/ARIA/forms/Basic_form_hints": { + "modified": "2019-03-23T22:29:41.083Z", "contributors": [ - "ricardo.passos.cr", - "brasmon8351", - "mateusvelleda", - "SphinxKnight", - "marlonmleite", - "brunolellis" + "rener_bz", + "Fernandolrs", + "caio.rrs" ] }, - "Web/JavaScript/Reference/Global_Objects/String/indexOf": { - "modified": "2020-10-15T21:28:05.356Z", + "Web/Accessibility/ARIA/ARIA_Screen_Reader_Implementors_Guide": { + "modified": "2019-03-23T22:29:38.626Z", "contributors": [ - "ricardo.passos.cr", - "mateusvelleda", - "Leokuma", - "suyfranca", - "badiale", - "vspedr", - "diegoarcega", - "teoli", - "nicholasess" + "caio.rrs" ] }, - "Web/JavaScript/Reference/Global_Objects/String/italics": { - "modified": "2020-10-15T22:35:03.387Z", + "Web/Accessibility/ARIA/widgets/overview": { + "modified": "2019-03-23T22:29:34.759Z", "contributors": [ - "ricardo.passos.cr" + "Aschlla", + "caio.rrs" ] }, - "Web/JavaScript/Reference/Global_Objects/String/lastIndexOf": { - "modified": "2020-10-09T15:25:04.260Z", + "Web/Accessibility/Mobile_accessibility_checklist": { + "modified": "2019-03-18T21:15:58.279Z", "contributors": [ - "ricardo.passos.cr", - "mfelippi" + "nathaliabruno", + "takahan" ] }, - "Web/JavaScript/Reference/Global_Objects/String/length": { - "modified": "2020-10-10T15:37:30.908Z", + "Web/Accessibility/An_overview_of_accessible_web_applications_and_widgets": { + "modified": "2019-03-23T22:27:46.873Z", "contributors": [ - "ricardo.passos.cr", - "Gemacedo", - "solangealmn", - "fernandomalmeida" + "Aschlla" ] }, - "Web/JavaScript/Reference/Global_Objects/String/link": { - "modified": "2020-10-15T22:35:03.504Z", + "Web/Accessibility/Understanding_WCAG": { + "modified": "2019-06-04T11:18:03.017Z", "contributors": [ - "ricardo.passos.cr" + "Rondinelly" ] }, - "Web/JavaScript/Reference/Global_Objects/String/localeCompare": { - "modified": "2020-11-02T09:27:21.616Z", + "Web/Accessibility/Understanding_WCAG/Keyboard": { + "modified": "2020-05-04T20:14:49.956Z", "contributors": [ - "FernandoKGA", - "ricardo.passos.cr" + "viviccamargo88" ] }, - "Web/JavaScript/Reference/Global_Objects/String/match": { - "modified": "2020-10-10T11:58:28.242Z", + "Web/Accessibility": { + "modified": "2019-09-09T14:18:55.700Z", "contributors": [ - "ricardo.passos.cr", - "brasmon8351", - "Laercio89", - "jgspaiva", - "soutomario", - "henriquejensen", - "naccarati", - "teoli", - "Nathalino_Pacheco" + "SphinxKnight", + "julio-elipse", + "marciioluucas", + "Aschlla", + "takahan", + "IanRamosC", + "rodrigopadula" ] }, - "Web/JavaScript/Reference/Global_Objects/String/matchAll": { - "modified": "2020-10-15T22:35:13.784Z", + "orphaned/Web/Accessibility/JAWS_Issues_with_Firefox": { + "modified": "2019-03-23T22:45:26.552Z", "contributors": [ - "ricardo.passos.cr" + "takahan" ] }, - "Web/JavaScript/Reference/Global_Objects/String/normalize": { - "modified": "2020-10-15T21:57:14.941Z", + "Web/API/Performance_API": { + "modified": "2020-04-24T14:27:05.156Z", "contributors": [ - "ricardo.passos.cr", - "andrefranca92" + "rbertoche" ] }, - "Web/JavaScript/Reference/Global_Objects/String/padEnd": { - "modified": "2020-10-15T22:09:36.225Z", + "Web/API/Push_API/Best_Practices": { + "modified": "2020-05-23T16:17:14.549Z", "contributors": [ - "ricardo.passos.cr", - "rbuzatto" + "brunoartc" ] }, - "Web/JavaScript/Reference/Global_Objects/String/padStart": { - "modified": "2020-10-15T22:12:29.113Z", + "Web/API/Push_API": { + "modified": "2019-03-23T22:39:02.907Z", "contributors": [ - "ricardo.passos.cr", - "rbuzatto" + "rodrigoalexandresc", + "fahadkalil", + "rmunhoz" ] }, - "Web/JavaScript/Reference/Global_Objects/String/prototype": { - "modified": "2020-10-15T21:58:05.452Z", + "Web/API/Web_Audio_API": { + "modified": "2019-03-18T20:58:41.484Z", "contributors": [ - "akinncar", - "coloringa", - "Perrottacooking", - "brunopulis" + "SphinxKnight", + "italoadler", + "GleisonLuis", + "MichelAlonso", + "gidenilson", + "Sheppy", + "DavidWalsh", + "rbrandao", + "taltk9", + "teoli", + "unreleasedmix" ] }, - "Web/JavaScript/Reference/Global_Objects/String/raw": { - "modified": "2020-11-02T09:59:22.925Z", + "Web/API/Web_Audio_API/Simple_synth": { + "modified": "2020-09-29T13:36:38.578Z", "contributors": [ - "FernandoKGA", - "ricardo.passos.cr", - "Werner1201" + "Trek" ] }, - "Web/JavaScript/Reference/Global_Objects/String/repeat": { - "modified": "2020-10-15T22:05:59.737Z", + "Web/API/BaseAudioContext/currentTime": { + "modified": "2019-03-23T22:31:21.913Z", "contributors": [ - "ricardo.passos.cr", - "liddack" + "deyvid0123" ] }, - "Web/JavaScript/Reference/Global_Objects/String/replace": { - "modified": "2020-10-11T21:06:21.721Z", + "Web/API/BatteryManager/ondischargingtimechange": { + "modified": "2019-03-23T23:16:54.139Z", "contributors": [ - "ricardo.passos.cr", - "PedroMarianoAlmeida", - "xitiu", - "soutomario", - "BrOrlandi", - "solangealmn", - "acdcjunior", - "mazulo" + "teoli", + "eliezerb" ] }, - "Web/JavaScript/Reference/Global_Objects/String/replaceAll": { - "modified": "2020-10-15T22:33:05.718Z", + "Web/API/Document/registerElement": { + "modified": "2019-03-23T22:20:55.282Z", "contributors": [ - "ricardo.passos.cr", - "FernandoKGA" + "rener_bz", + "mak213k" ] }, - "Web/JavaScript/Reference/Global_Objects/String/search": { - "modified": "2020-10-13T21:00:52.211Z", + "Web/API/EventTarget/addEventListener": { + "modified": "2019-03-23T23:35:46.468Z", "contributors": [ - "ricardo.passos.cr", - "stroparo" + "SphinxKnight", + "LesleyAndreza", + "wbamberg", + "cautnew", + "teoli", + "guipremonsa" ] }, - "Web/JavaScript/Reference/Global_Objects/String/slice": { - "modified": "2020-10-13T21:05:35.776Z", + "Web/API/Event/Comparison_of_Event_Targets": { + "modified": "2019-11-03T21:25:56.066Z", "contributors": [ - "ricardo.passos.cr", - "miguel.velasques", - "nstseek", - "gkaneto", - "andresmachado", - "brunopulis" + "rayonnunes" ] }, - "Web/JavaScript/Reference/Global_Objects/String/small": { - "modified": "2020-10-15T22:35:17.508Z", + "Web/API/Fetch_API/Cross-global_fetch_usage": { + "modified": "2019-03-18T20:48:56.041Z", "contributors": [ - "ricardo.passos.cr" + "matluz" ] }, - "Web/JavaScript/Reference/Global_Objects/String/split": { - "modified": "2020-10-13T22:09:32.003Z", + "Web/API/History_API/Example": { + "modified": "2019-03-18T21:40:08.609Z", "contributors": [ - "ricardo.passos.cr", - "gabriel_cadu", - "NicholasBraga" + "oidanieljunior" ] }, - "Web/JavaScript/Reference/Global_Objects/String/startsWith": { - "modified": "2020-10-15T21:41:07.642Z", + "Web/API/HTMLContentElement/select": { + "modified": "2019-03-23T22:20:59.150Z", "contributors": [ - "ricardo.passos.cr", - "santoyx", - "georgebias", - "SphinxKnight", - "renanmfd", - "eklam" + "mak213k" ] }, - "Web/JavaScript/Reference/Global_Objects/String/strike": { - "modified": "2020-10-15T22:35:17.757Z", + "Web/API/HTMLOrForeignElement/blur": { + "modified": "2020-10-15T22:12:54.970Z", "contributors": [ - "ricardo.passos.cr" + "salgueiroso" ] }, - "Web/JavaScript/Reference/Global_Objects/String/sub": { - "modified": "2020-10-14T00:19:40.694Z", + "Web/API/HTMLOrForeignElement/dataset": { + "modified": "2020-10-15T21:46:41.594Z", "contributors": [ - "ricardo.passos.cr", - "netstudenton" + "lago.aaron", + "Fernandolrs", + "Sipmann", + "emanueloliveira" ] }, - "Web/JavaScript/Reference/Global_Objects/String/substr": { - "modified": "2020-10-15T21:59:06.950Z", + "Web/API/HTMLOrForeignElement/focus": { + "modified": "2019-03-23T22:24:13.859Z", "contributors": [ - "ricardo.passos.cr", - "marceloogeda" + "erikseyti", + "brunopulis" ] }, - "Web/JavaScript/Reference/Global_Objects/String/substring": { - "modified": "2020-10-14T01:32:35.715Z", + "Web/API/IndexedDB_API/Using_IndexedDB": { + "modified": "2020-01-13T04:48:43.522Z", "contributors": [ - "ricardo.passos.cr", - "evertonsilva", - "gusleindecker", - "brunodsgn", - "luis.kaufmann.silva" + "chrisdavidmills", + "guilhermemar", + "IgorGoncalves", + "gustavo-veiga", + "sheldonled" ] }, - "Web/JavaScript/Reference/Global_Objects/String/sup": { - "modified": "2020-10-15T22:35:18.049Z", + "orphaned/Web/API/Node/Entendendo_o_uso_do_método_AppendChild-javascript": { + "modified": "2019-03-23T22:40:45.924Z", "contributors": [ - "ricardo.passos.cr" + "Josue-Bastos" ] }, - "Web/JavaScript/Reference/Global_Objects/String/toLocaleLowerCase": { - "modified": "2020-11-02T09:37:28.971Z", + "Web/API/HTMLElement/innerText": { + "modified": "2019-03-18T21:15:34.228Z", "contributors": [ - "FernandoKGA", - "ricardo.passos.cr" + "cammarin" ] }, - "Web/JavaScript/Reference/Global_Objects/String/toLocaleUpperCase": { - "modified": "2020-11-02T09:32:27.542Z", + "Web/API/Notification": { + "modified": "2020-11-27T03:23:53.561Z", "contributors": [ - "FernandoKGA", - "ricardo.passos.cr" + "SphinxKnight", + "Lukazovic", + "maatheusgouveia", + "HugoRibeiro", + "AlvaroAlves", + "teoli", + "salomaosnff" ] }, - "Web/JavaScript/Reference/Global_Objects/String/toLowerCase": { - "modified": "2020-10-14T02:14:21.974Z", + "Web/API/Crypto/getRandomValues": { + "modified": "2019-05-25T15:24:30.476Z", "contributors": [ - "ricardo.passos.cr", - "JaconsMorais" + "dowgssss", + "Gutem" ] }, - "Web/JavaScript/Reference/Global_Objects/String/toSource": { - "modified": "2020-10-14T02:19:39.086Z", + "Web/API/Selection": { + "modified": "2020-10-15T22:13:16.385Z", "contributors": [ - "ricardo.passos.cr", - "teoli", - "netstudenton" + "adrianowead" + ] + }, + "Web/API/Web_Animations_API/Using_the_Web_Animations_API": { + "modified": "2020-09-26T01:35:23.652Z", + "contributors": [ + "rafaelpradella" ] }, - "Web/JavaScript/Reference/Global_Objects/String/toString": { - "modified": "2020-10-14T02:23:54.563Z", + "Web/API/Web_Storage_API": { + "modified": "2019-09-19T15:22:07.557Z", "contributors": [ - "ricardo.passos.cr", - "mfelippi" + "elenderg", + "wcqueiroz", + "Mathmovic" ] }, - "Web/JavaScript/Reference/Global_Objects/String/toUpperCase": { - "modified": "2020-10-15T23:55:31.039Z", + "Web/API/Web_Storage_API/Using_the_Web_Storage_API": { + "modified": "2019-03-18T21:45:09.650Z", "contributors": [ - "ricardo.passos.cr", - "PTPAC", - "marcelobonatto" + "liddack", + "nilocoelhojunior" ] }, - "Web/JavaScript/Reference/Global_Objects/String/trimEnd": { - "modified": "2020-10-16T00:03:20.779Z", + "Web/API/WebGL_API/Tutorial/Adding_2D_content_to_a_WebGL_context": { + "modified": "2019-03-23T22:43:19.265Z", "contributors": [ - "ricardo.passos.cr", - "pedrollmatias", - "FernandoKGA" + "Nathipg", + "francopan" ] }, - "Web/JavaScript/Reference/Global_Objects/String/trimStart": { - "modified": "2020-10-16T00:05:21.145Z", + "Web/API/WebRTC_API/Simple_RTCDataChannel_sample": { + "modified": "2019-03-23T22:09:18.720Z", "contributors": [ - "ricardo.passos.cr", - "FernandoKGA" + "fscholz", + "wbamberg", + "Gurigraphics" ] }, - "Web/JavaScript/Reference/Global_Objects/String/valueOf": { - "modified": "2020-10-16T00:08:38.848Z", + "Web/API/Window/localStorage": { + "modified": "2019-03-18T21:09:45.741Z", "contributors": [ - "ricardo.passos.cr", - "rodcantanhede" + "yandiro", + "wwwjsw", + "jjmars" ] }, - "Web/JavaScript/Reference/Global_Objects/Symbol": { - "modified": "2020-09-15T10:43:33.383Z", + "Web/API/WindowOrWorkerGlobalScope/atob": { + "modified": "2020-10-15T21:46:04.009Z", "contributors": [ - "fernanduandrade", - "leandrobudau", - "iurevguimaraes", - "emersonbroga", - "SphinxKnight", - "colares", - "kdex", - "Grohden", - "raduq", - "astesio", - "AlanCezarAraujo" + "mateusvelleda", + "joaoricardo_rm" ] }, - "Web/JavaScript/Reference/Global_Objects/Symbol/asyncIterator": { - "modified": "2020-10-15T22:34:24.437Z", + "Web/API/WindowOrWorkerGlobalScope/clearTimeout": { + "modified": "2020-10-15T21:31:54.685Z", "contributors": [ - "fernanduandrade" + "GarkGarcia", + "teoli", + "Willkuns" ] }, - "Web/JavaScript/Reference/Global_Objects/Symbol/description": { - "modified": "2020-10-15T22:34:29.672Z", + "Web/API/XMLHttpRequest/Synchronous_and_Asynchronous_Requests": { + "modified": "2019-03-18T20:53:32.225Z", "contributors": [ - "fernanduandrade" + "helton-mori-dev", + "Laercio89", + "erickfaraujo", + "filipecalasans", + "melostbr" ] }, - "Web/JavaScript/Reference/Global_Objects/Symbol/hasInstance": { - "modified": "2019-03-23T22:24:54.749Z", + "Web/API/XMLHttpRequest/Using_XMLHttpRequest": { + "modified": "2019-03-23T23:31:13.941Z", "contributors": [ - "GoToLoop" + "JosOe", + "yuhzador", + "glaudiston", + "flaviomicheletti", + "RodrigoMarques", + "vitornogueira", + "teoli", + "MarcoBruno", + "vagnerleitte" ] }, - "Web/JavaScript/Reference/Global_Objects/Symbol/isConcatSpreadable": { - "modified": "2020-10-15T22:34:26.103Z", + "Web/CSS/CSS_Box_Model/Introduction_to_the_CSS_box_model": { + "modified": "2019-03-23T22:50:51.930Z", "contributors": [ - "fernanduandrade" + "ekbaumgarten" ] }, - "Web/JavaScript/Reference/Global_Objects/Symbol/iterator": { - "modified": "2020-10-15T22:34:27.073Z", + "Web/CSS/Comments": { + "modified": "2019-03-23T22:09:23.562Z", "contributors": [ - "fernanduandrade" + "Fernandolrs" ] }, - "Web/JavaScript/Reference/Global_Objects/Symbol/match": { - "modified": "2020-10-15T22:34:29.871Z", + "Web/CSS/CSS_Animations/Using_CSS_animations": { + "modified": "2019-03-23T23:39:07.702Z", "contributors": [ - "fernanduandrade" + "gabrielclaudino", + "Fernandolrs", + "dime2lo", + "cris-luz-07", + "SphinxKnight", + "teoli", + "gustavoaraujo", + "cauecidade", + "francisco.hansen" ] }, - "Web/JavaScript/Reference/Global_Objects/Symbol/matchAll": { - "modified": "2020-10-15T22:34:29.939Z", + "Web/CSS/CSS_Box_Model/Mastering_margin_collapsing": { + "modified": "2019-03-23T22:09:32.434Z", "contributors": [ - "fernanduandrade" + "marcosdourado", + "Fernandolrs" ] }, - "Web/JavaScript/Reference/Global_Objects/Symbol/replace": { - "modified": "2020-10-15T22:34:29.718Z", + "Web/CSS/CSS_Colors/Color_picker_tool": { + "modified": "2020-07-01T01:27:34.385Z", "contributors": [ - "fernanduandrade" + "gstfnsk", + "Andrya", + "SphinxKnight", + "gpaschoal", + "wcqueiroz", + "cbosco" ] }, - "Web/JavaScript/Reference/Global_Objects/Symbol/search": { - "modified": "2020-10-15T22:34:30.027Z", + "Web/CSS/CSS_Flexible_Box_Layout/Basic_Concepts_of_Flexbox": { + "modified": "2020-04-13T01:15:45.668Z", "contributors": [ - "fernanduandrade" + "carlosaffrc", + "SONSERVICE", + "davieduardo94", + "colares" ] }, - "Web/JavaScript/Reference/Global_Objects/Symbol/species": { - "modified": "2020-10-15T22:34:30.020Z", + "Web/CSS/CSS_Images/Implementing_image_sprites_in_CSS": { + "modified": "2019-03-18T21:40:05.241Z", "contributors": [ - "fernanduandrade" + "williamxavierdecastro" ] }, - "Web/JavaScript/Reference/Global_Objects/Symbol/split": { - "modified": "2020-10-15T22:34:24.566Z", + "Web/CSS/Reference": { + "modified": "2019-09-24T18:20:32.922Z", "contributors": [ - "fernanduandrade" + "duduindo", + "julio-elipse", + "fernahh", + "teoli", + "ethertank", + "rodrigopadula" ] }, - "Web/JavaScript/Reference/Global_Objects/Symbol/toPrimitive": { - "modified": "2020-10-15T22:34:30.039Z", + "Web/CSS/CSS_Types": { + "modified": "2019-03-18T21:41:31.457Z", "contributors": [ - "fernanduandrade" + "brunoeduardo" ] }, - "Web/JavaScript/Reference/Global_Objects/Symbol/toStringTag": { - "modified": "2020-10-15T22:34:30.237Z", + "Web/CSS/Replaced_element": { + "modified": "2019-03-23T22:09:21.528Z", "contributors": [ - "fernanduandrade" + "Fernandolrs" ] }, - "Web/JavaScript/Reference/Global_Objects/Symbol/unscopables": { - "modified": "2020-10-15T22:34:31.078Z", + "Web/CSS/hyphens": { + "modified": "2019-03-23T22:08:31.285Z", "contributors": [ - "fernanduandrade" + "gilsonnunes" ] }, - "Web/JavaScript/Reference/Global_Objects/TypeError": { - "modified": "2019-03-23T22:46:29.217Z", + "Web/CSS/image": { + "modified": "2020-10-15T22:03:54.448Z", "contributors": [ - "haskellcamargo", - "bernardodill" + "brunoeduardo" ] }, - "Web/JavaScript/Reference/Global_Objects/TypedArray": { - "modified": "2019-03-23T22:12:24.054Z", + "Web/CSS/Layout_mode": { + "modified": "2019-03-23T22:09:32.757Z", "contributors": [ - "fscholz" + "lcchueri", + "Fernandolrs" ] }, - "Web/JavaScript/Reference/Global_Objects/TypedArray/sort": { - "modified": "2019-03-23T22:12:28.316Z", + "Web/CSS/Visual_formatting_model": { + "modified": "2019-03-23T22:09:22.823Z", "contributors": [ - "joaovinicius" + "Fernandolrs" ] }, - "Web/JavaScript/Reference/Global_Objects/WeakMap": { - "modified": "2020-10-15T21:27:55.448Z", + "Web/CSS/Privacy_and_the_:visited_selector": { + "modified": "2019-04-15T23:34:22.131Z", "contributors": [ - "jotaRenan", - "mnunes01", - "SphinxKnight", - "codermarcos", - "kdex", - "thiagohora", - "teoli", - "gabrielrubens" + "tadeubarbosa" ] }, - "Web/JavaScript/Reference/Global_Objects/WeakMap/delete": { - "modified": "2020-10-15T22:09:31.522Z", + "Web/CSS/Pseudo-elements": { + "modified": "2020-07-03T20:21:08.594Z", "contributors": [ - "rodrigocode4" + "gstfnsk", + "Arlon", + "Lukff", + "brunoeduardo" ] }, - "Web/JavaScript/Reference/Global_Objects/WeakMap/get": { - "modified": "2020-10-15T22:13:57.372Z", + "Web/CSS/Attribute_selectors": { + "modified": "2020-10-15T22:02:16.544Z", "contributors": [ - "jotaRenan" + "EvertonTomalok" ] }, - "Web/JavaScript/Reference/Global_Objects/WeakMap/has": { - "modified": "2020-10-15T22:13:54.938Z", + "Web/CSS/Universal_selectors": { + "modified": "2020-10-15T22:18:51.680Z", "contributors": [ - "jotaRenan" + "synga" ] }, - "Web/JavaScript/Reference/Global_Objects/WeakMap/prototype": { - "modified": "2019-03-23T23:15:16.502Z", + "Web/CSS/CSS_Selectors": { + "modified": "2019-03-22T08:21:56.189Z", "contributors": [ - "SphinxKnight", - "teoli", - "gabrielrubens" + "Arlon", + "Lukff", + "kelvyncosta" ] }, - "Web/JavaScript/Reference/Global_Objects/WeakMap/set": { - "modified": "2020-10-15T22:13:54.974Z", + "Web/CSS/Syntax": { + "modified": "2019-03-18T20:58:06.000Z", "contributors": [ - "jotaRenan" + "EdilsonSilva", + "zKhiro", + "diancabral", + "teoli", + "fvargaspf@gmail.com" ] }, - "Web/JavaScript/Reference/Global_Objects/WeakSet": { - "modified": "2019-03-23T22:01:31.430Z", + "Web/CSS/Value_definition_syntax": { + "modified": "2019-03-23T22:09:28.440Z", "contributors": [ - "daniloprates" + "Fernandolrs" ] }, - "Web/JavaScript/Reference/Global_Objects/decodeURI": { - "modified": "2020-10-15T22:12:38.394Z", + "Web/CSS/CSS_Background_and_Borders/Border-image_generator": { + "modified": "2019-05-06T10:31:39.391Z", "contributors": [ - "murillodmiranda" + "leodeJESUS", + "Torto" ] }, - "Web/JavaScript/Reference/Global_Objects/decodeURIComponent": { - "modified": "2020-03-12T19:42:51.399Z", + "Web/CSS/CSS_Background_and_Borders/Border-radius_generator": { + "modified": "2019-03-23T23:07:37.174Z", "contributors": [ - "jhonnymoreira" + "Torto" ] }, - "Web/JavaScript/Reference/Global_Objects/encodeURI": { - "modified": "2020-10-19T23:50:41.182Z", + "Web/CSS/actual_value": { + "modified": "2019-03-23T22:09:29.249Z", "contributors": [ - "FernandoKGA" + "Fernandolrs" ] }, - "Web/JavaScript/Reference/Global_Objects/encodeURIComponent": { - "modified": "2020-03-12T19:42:13.212Z", + "Web/CSS/computed_value": { + "modified": "2019-03-23T22:09:29.149Z", "contributors": [ - "duduindo", - "lucascosta", - "fabriciofrontarolli", - "TiagoNeves" + "Fernandolrs" ] }, - "Web/JavaScript/Reference/Global_Objects/escape": { - "modified": "2020-03-12T19:43:31.007Z", + "Web/CSS/specified_value": { + "modified": "2019-03-23T22:09:23.838Z", "contributors": [ - "KennyMack" + "Fernandolrs" ] }, - "Web/JavaScript/Reference/Global_Objects/eval": { - "modified": "2020-03-12T19:40:58.698Z", + "Web/CSS/initial_value": { + "modified": "2020-02-01T14:54:00.506Z", "contributors": [ - "hmschreiner", - "helton-mori-dev", - "davilmaster", - "NicholasBraga", - "soter19", - "michaelycus", - "dayvsonlima" + "marlonveiga-santos", + "Fernandolrs" ] }, - "Web/JavaScript/Reference/Global_Objects/globalThis": { - "modified": "2020-10-15T22:14:46.227Z", + "Web/CSS/resolved_value": { + "modified": "2019-03-23T22:09:21.295Z", "contributors": [ - "Rondinelly" + "Fernandolrs" ] }, - "Web/JavaScript/Reference/Global_Objects/isFinite": { - "modified": "2020-03-12T19:42:41.771Z", + "Web/CSS/used_value": { + "modified": "2019-03-23T22:09:30.061Z", "contributors": [ - "ronysilvati", - "kelvys" + "Fernandolrs" ] }, - "Web/JavaScript/Reference/Global_Objects/isNaN": { - "modified": "2020-10-15T21:27:25.549Z", + "Web/CSS/overflow-wrap": { + "modified": "2019-03-23T23:34:13.390Z", "contributors": [ - "MarcosNakamine", - "helton-mori-dev", - "nilocoelhojunior", - "bartolomeu.gusella", - "SphinxKnight", + "fscholz", "teoli", - "nasviana" + "marcoscoelho" ] }, - "Web/JavaScript/Reference/Global_Objects/null": { - "modified": "2020-03-12T19:40:38.603Z", + "Web/API/Window/beforeunload_event": { + "modified": "2019-04-30T13:57:03.306Z", "contributors": [ - "angelorubin", - "trestini" + "wbamberg", + "LeoNicolas" ] }, - "Web/JavaScript/Reference/Global_Objects/parseFloat": { - "modified": "2020-03-12T19:43:31.757Z", + "Web/API/Element/blur_event": { + "modified": "2019-03-23T22:07:32.725Z", "contributors": [ - "KennyMack" + "fscholz", + "erikseyti", + "Fusseldieb" ] }, - "Web/JavaScript/Reference/Global_Objects/parseInt": { - "modified": "2020-03-12T19:39:16.771Z", + "Web/API/Window/DOMContentLoaded_event": { + "modified": "2019-03-18T20:53:06.319Z", "contributors": [ - "einstenj", - "odahcam", - "SphinxKnight", - "teoli", - "oshiroam" + "helton-mori-dev", + "fscholz", + "greevin", + "macalha" ] }, - "Web/JavaScript/Reference/Global_Objects/undefined": { - "modified": "2020-03-12T19:40:39.962Z", + "Web/API/Element/focus_event": { + "modified": "2019-03-23T22:03:56.654Z", "contributors": [ - "trestini" + "fscholz", + "erikseyti" ] }, - "Web/JavaScript/Reference/Global_Objects/unescape": { - "modified": "2020-03-12T19:46:40.592Z", + "Web/API/Element/focusin_event": { + "modified": "2019-03-23T22:03:40.133Z", "contributors": [ - "IsmaelEzequiel" + "MarcoBrunoBR", + "fscholz", + "erikseyti" ] }, - "Web/JavaScript/Reference/Global_Objects/uneval": { - "modified": "2020-03-12T19:42:19.284Z", + "Web/API/Element/focusout_event": { + "modified": "2019-03-23T22:03:46.833Z", "contributors": [ - "teoli", - "ffabiosales" + "fscholz", + "erikseyti" ] }, - "Web/JavaScript/Reference/Iteration_protocols": { - "modified": "2020-03-12T19:46:49.209Z", + "Web/API/HTMLElement/input_event": { + "modified": "2019-03-23T22:14:30.766Z", "contributors": [ - "Rondinelly", - "danilosetubal" + "fscholz", + "heltonandreazza" ] }, - "Web/JavaScript/Reference/Lexical_grammar": { - "modified": "2020-03-12T19:46:38.568Z", + "Web/API/Window/load_event": { + "modified": "2019-03-18T20:53:32.628Z", "contributors": [ - "Danilo", - "ViniciusDutra" + "helton-mori-dev", + "fscholz", + "Maikoncanuto" ] }, - "Web/JavaScript/Reference/Operators": { - "modified": "2020-03-12T19:38:09.829Z", + "Web/API/Document/readystatechange_event": { + "modified": "2019-03-23T22:53:19.134Z", "contributors": [ - "ogilvieira", - "fortunatolf-tech", - "lazaroalvarenga", - "mahenrique", - "cris-luz-07", - "jorgeclesio", - "iCynthia", - "teoli", - "ethertank" + "fscholz", + "brunoczim", + "macalha" ] }, - "Web/JavaScript/Reference/Operators/Arithmetic_Operators": { - "modified": "2020-03-12T19:42:07.718Z", + "orphaned/Web/Guide/CSS/CSS_media_queries_(consultas_de_mídia_em_CSS)": { + "modified": "2019-03-23T23:08:21.480Z", "contributors": [ - "FernandaBernardo", - "AdeilsonSilva" + "dinaldojr" ] }, - "Web/JavaScript/Reference/Operators/Atribuicao_via_desestruturacao": { - "modified": "2020-11-23T07:49:53.825Z", + "Web/CSS/Media_Queries/Using_media_queries": { + "modified": "2019-03-23T23:04:07.760Z", "contributors": [ - "filipetorres", - "gabriel_cadu", - "LucasGabrielSI", - "candinhojr", - "felipeolliveira", - "kdex", - "colares" + "HugoRibeiro", + "angeliski", + "dailsoncampos", + "nieckarz", + "Sebastianz", + "mrstork", + "malayaleecoder", + "davidcorbetta", + "jorgeclesio", + "Pedrinho", + "brunoeduardo", + "fabianosantos.net" ] }, - "Web/JavaScript/Reference/Operators/Bitwise_Operators": { - "modified": "2020-10-15T22:16:59.619Z", + "Web/CSS/CSS_Positioning/Understanding_z_index": { + "modified": "2019-03-23T22:59:23.481Z", "contributors": [ - "vanilsonbr", - "mak213k" + "songbird159", + "teoli", + "MaxWilliamJF" ] }, - "Web/JavaScript/Reference/Operators/Bitwise_XOR": { - "modified": "2020-10-15T22:31:57.374Z", + "Web/Guide/Events/Creating_and_triggering_events": { + "modified": "2019-03-23T22:11:33.073Z", "contributors": [ - "joaopedroaats" + "JefersonOliveira90" ] }, - "Web/JavaScript/Reference/Operators/Grouping": { - "modified": "2020-03-12T19:39:46.309Z", + "Web/API/Touch_events": { + "modified": "2019-03-23T23:21:11.070Z", "contributors": [ - "SphinxKnight", - "cirocosta" + "alipseight", + "Estupendo", + "fellyph" ] }, - "Web/JavaScript/Reference/Operators/Inicializador_Objeto": { - "modified": "2020-03-12T19:45:20.526Z", + "Web/Guide/Graphics": { + "modified": "2019-03-23T23:24:23.146Z", "contributors": [ - "holandajunior" + "julio-elipse", + "MarceloBRN", + "LucasPrado", + "MatCAlv" ] }, - "Web/JavaScript/Reference/Operators/Operador_Condicional": { - "modified": "2020-03-12T19:39:26.164Z", + "Web/API/Canvas_API/Tutorial/Advanced_animations": { + "modified": "2019-03-23T22:19:02.957Z", "contributors": [ - "monnacs", - "flaviomicheletti", - "SphinxKnight" + "mak213k" ] }, - "Web/JavaScript/Reference/Operators/Operador_Virgula": { - "modified": "2020-03-12T19:39:21.823Z", + "Web/API/Canvas_API/Tutorial/Applying_styles_and_colors": { + "modified": "2020-09-23T19:39:01.390Z", "contributors": [ - "SphinxKnight", - "haskellcamargo", - "teoli" + "viniciusfinger", + "AdelinoGonzalesEscobar", + "thulioph", + "MarceloBRN" ] }, - "Web/JavaScript/Reference/Operators/Operadores_Logicos": { - "modified": "2020-03-12T19:39:41.335Z", + "Web/API/Canvas_API/Tutorial/Basic_animations": { + "modified": "2019-03-18T21:15:02.453Z", "contributors": [ - "raphaelhenrique", - "Julyemerson", - "raulfernando", - "bugal", - "edumsilveira", - "atjoelson", - "SphinxKnight", - "eduardo_neto" + "LeandroLS", + "claromes", + "CarlosEduR", + "augustoroc" ] }, - "Web/JavaScript/Reference/Operators/Operadores_de_comparação": { - "modified": "2020-10-19T13:25:39.993Z", + "Web/API/Canvas_API/Tutorial/Compositing/Example": { + "modified": "2019-03-18T21:37:01.783Z", "contributors": [ - "lucas-andre", - "GeloSeco", - "adrianovictor" + "CarlosRodrigues" ] }, - "Web/JavaScript/Reference/Operators/Operator_Precedence": { - "modified": "2020-03-12T19:39:59.148Z", + "Web/API/Canvas_API/Tutorial/Compositing": { + "modified": "2019-03-23T22:12:17.031Z", "contributors": [ - "ShadYueh" + "CarlosRodrigues", + "Fernandolrs", + "mak213k" ] }, - "Web/JavaScript/Reference/Operators/Optional_chaining": { - "modified": "2020-11-27T11:24:17.100Z", + "Web/API/Canvas_API/Tutorial/Finale": { + "modified": "2019-03-18T21:36:59.449Z", "contributors": [ - "myke-oliveira", - "gabrieluizramos", - "agusmao720919" + "CarlosRodrigues" ] }, - "Web/JavaScript/Reference/Operators/Pipeline_operator": { - "modified": "2020-10-15T22:12:37.977Z", + "Web/API/Canvas_API/Tutorial/Drawing_shapes": { + "modified": "2020-06-20T19:01:22.926Z", "contributors": [ - "murillodmiranda" + "luizsanches", + "yMegaM", + "MarceloBRN", + "RuanAragao", + "lucas-lambda", + "charlesjamil", + "hellks", + "thiagoao", + "patrickwreis", + "augustoroc" ] }, - "Web/JavaScript/Reference/Operators/Property_Accessors": { - "modified": "2020-03-12T19:44:40.050Z", + "Web/API/Canvas_API/Tutorial/Drawing_text": { + "modified": "2019-03-23T22:16:08.231Z", "contributors": [ - "matheussilvasantos" + "surprise102", + "Joao-Maciel", + "netoguimaraes" ] }, - "Web/JavaScript/Reference/Operators/Spread_operator": { - "modified": "2020-03-12T19:42:48.466Z", + "Web/API/Canvas_API/Tutorial": { + "modified": "2019-03-23T23:13:39.145Z", "contributors": [ - "maniero", - "danvitoriano", - "kdex", - "cassioscabral" + "CarlosRodrigues", + "Halcance", + "MarceloBRN", + "angelosds", + "Claudiovascaino", + "gxovano", + "gutierri", + "trevorh" + ] + }, + "Web/API/Canvas_API/Tutorial/Optimizing_canvas": { + "modified": "2019-03-18T21:35:40.184Z", + "contributors": [ + "fabianosantos.net" ] }, - "Web/JavaScript/Reference/Operators/Spread_syntax": { - "modified": "2020-10-15T22:02:07.859Z", + "Web/API/Canvas_API/Tutorial/Using_images": { + "modified": "2019-10-15T16:17:36.192Z", "contributors": [ - "jdanielnd", - "ederknd", - "fabio.rachid", - "d3m4", - "klassmann" + "JIrismar" ] }, - "Web/JavaScript/Reference/Operators/async_function": { - "modified": "2020-03-12T19:46:14.006Z", + "Web/API/Canvas_API/Tutorial/Basic_usage": { + "modified": "2019-03-23T23:13:44.390Z", "contributors": [ - "alefesouza", - "HugoOliveira" + "MarceloBRN", + "RuanAragao", + "FilipeSilva", + "lucaspedroza" ] }, - "Web/JavaScript/Reference/Operators/await": { - "modified": "2020-03-12T19:46:38.624Z", + "Web/Guide/HTML/Content_categories": { + "modified": "2019-03-18T21:16:20.736Z", "contributors": [ - "alefesouza" + "ygormaximo" ] }, - "Web/JavaScript/Reference/Operators/class": { - "modified": "2020-03-12T19:46:36.744Z", + "Web/Guide/HTML/Editable_content": { + "modified": "2019-03-23T22:43:02.407Z", "contributors": [ - "alefesouza" + "expalmer", + "fellyph" ] }, - "Web/JavaScript/Reference/Operators/function": { - "modified": "2020-10-15T21:41:22.699Z", + "Learn/Forms/Form_validation": { + "modified": "2020-07-16T22:21:52.226Z", "contributors": [ - "GPrimola", - "nadineouro", - "ti.marcosdias" + "LisandroTSilva", + "JEricFarias", + "JeffersonSotto", + "GeysaPriscila" ] }, - "Web/JavaScript/Reference/Operators/function*": { - "modified": "2020-03-12T19:46:36.669Z", + "Learn/Forms/How_to_build_custom_form_controls": { + "modified": "2020-07-16T22:21:57.640Z", "contributors": [ - "alefesouza" + "italorangel" ] }, - "Web/JavaScript/Reference/Operators/in": { - "modified": "2020-10-15T22:00:04.247Z", + "Learn/Forms/How_to_structure_a_web_form": { + "modified": "2020-08-25T09:42:10.924Z", "contributors": [ - "colares" + "Camila-Isabela", + "Rondinelly", + "mqdev", + "itamarsilva", + "fscholz", + "rafaelblink", + "Renancp01", + "Danilson_Veloso", + "angellica.araujo", + "Sheppy" ] }, - "Web/JavaScript/Reference/Operators/instanceof": { - "modified": "2020-03-12T19:41:08.081Z", + "Learn/Forms": { + "modified": "2020-07-16T22:21:01.260Z", "contributors": [ - "antonio-damaso" + "Magela", + "psergiojr", + "felipez3r0", + "jaimemaretoli", + "eduardobona", + "frankfarias", + "jgborges", + "SilvEiRax", + "sjmiles" ] }, - "Web/JavaScript/Reference/Operators/new": { - "modified": "2020-03-12T19:44:36.405Z", + "Learn/Forms/Your_first_form": { + "modified": "2020-07-16T22:21:06.348Z", "contributors": [ - "jra", - "dime2lo" + "italorangel", + "itamarsilva", + "fabiobasso", + "samlopes_br", + "Victorfm2167", + "WagnerSilveira", + "melostbr", + "wesleey", + "khiby" ] }, - "Web/JavaScript/Reference/Operators/new.target": { - "modified": "2020-10-15T22:00:16.053Z", + "Learn/Forms/Basic_native_form_controls": { + "modified": "2020-07-16T22:21:22.988Z", "contributors": [ - "SauloNunes", - "LucasGabrielSI" + "danncam", + "VictorGom3s" ] }, - "Web/JavaScript/Reference/Operators/operador_de_coalescencia_nula": { - "modified": "2020-10-15T22:27:35.360Z", + "Learn/Forms/Sending_and_retrieving_form_data": { + "modified": "2020-07-16T22:21:28.510Z", "contributors": [ - "mateusvelleda", - "yagoag", - "marlonveiga-santos" + "Gus-fm", + "iClarkSi", + "filipetorres", + "Victorfm2167" ] }, - "Web/JavaScript/Reference/Operators/super": { - "modified": "2020-05-28T22:55:58.719Z", + "Learn/HTML/Howto/Use_data_attributes": { + "modified": "2020-07-16T22:22:37.008Z", "contributors": [ - "Pedrodotcom", - "GabrielSpada", - "alexxmde", - "alexnum", - "nicematt", - "iFgR" + "marcos.m.ventura", + "soutomario", + "thomas-adriano", + "danielmelogpi" ] }, - "Web/JavaScript/Reference/Operators/this": { - "modified": "2020-03-12T19:43:04.728Z", + "Web/Guide/Introduction_to_Web_development": { + "modified": "2019-07-28T16:57:13.368Z", "contributors": [ - "JVFeijo", - "CarlosRodrigues", - "LucasGabrielSI", - "hadnet" + "rvenson" ] }, - "Web/JavaScript/Reference/Operators/typeof": { - "modified": "2020-03-12T19:38:14.288Z", + "Web/API/Canvas_API/A_basic_ray-caster": { + "modified": "2019-03-23T22:18:52.140Z", "contributors": [ - "ffaneto", - "felini", - "aldovitch", - "douglasquintanilha", - "teoli", - "HenriqueSilverio" + "alipseight", + "juniorgarcia" ] }, - "Web/JavaScript/Reference/Operators/void": { - "modified": "2020-03-12T19:41:22.522Z", + "Web/API/Canvas_API": { + "modified": "2020-01-16T19:34:10.555Z", "contributors": [ - "angelorubin", - "raphaelhenrique", - "alexrohleder", - "carlosdelfino", - "schlagi123", - "fernandojupaes", - "leandro2103" + "marlonveiga-santos", + "alexandreab", + "besopmac", + "MarceloBRN", + "alipseight", + "juniorgarcia", + "erickzanardo", + "teoli", + "matheusmariano" ] }, - "Web/JavaScript/Reference/Operators/yield": { - "modified": "2020-03-12T19:46:36.407Z", + "Web/HTML/CORS_enabled_image": { + "modified": "2019-03-23T22:20:56.821Z", "contributors": [ - "thedjmarcelo", - "alefesouza" + "mak213k" ] }, - "Web/JavaScript/Reference/Operators/yield*": { - "modified": "2020-03-12T19:46:39.660Z", + "Learn/HTML/Howto/Author_fast-loading_HTML_pages": { + "modified": "2020-07-16T22:22:33.399Z", "contributors": [ - "alefesouza" + "teoli", + "gmerencio" ] }, - "Web/JavaScript/Reference/Statements": { - "modified": "2020-10-19T15:09:34.949Z", + "orphaned/Web/HTML/Element/command": { + "modified": "2019-03-23T23:38:57.259Z", "contributors": [ - "VitorCampos11", - "vinicius0022", - "ivan2209", + "wbamberg", "teoli", - "trevorh" + "LeonardoPacheco" ] }, - "Web/JavaScript/Reference/Statements/Empty": { - "modified": "2020-10-15T21:41:12.853Z", + "Web/HTML/Element/content": { + "modified": "2020-10-15T22:25:22.827Z", "contributors": [ - "SphinxKnight", - "RZDeveloper", - "joao_sanches" + "IsaqueFelipe" ] }, - "Web/JavaScript/Reference/Statements/block": { - "modified": "2020-03-12T19:46:44.788Z", + "Web/HTML/Element/figure": { + "modified": "2019-03-23T23:22:45.109Z", "contributors": [ - "alefesouza" + "wbamberg", + "jorgeclesio", + "teoli", + "Graffitti" ] }, - "Web/JavaScript/Reference/Statements/break": { - "modified": "2020-03-12T19:40:00.144Z", + "Web/HTML/Element/input/date": { + "modified": "2019-03-18T20:52:31.949Z", "contributors": [ - "LucasSan" + "SphinxKnight", + "badarojr", + "beeblebrox3", + "marcelobonatto", + "mtsgeneroso", + "Ermesoml", + "alipseight" ] }, - "Web/JavaScript/Reference/Statements/class": { - "modified": "2020-10-15T21:38:06.149Z", + "Web/HTML/Block-level_elements": { + "modified": "2020-02-07T04:59:22.048Z", "contributors": [ - "fscholz", "SphinxKnight", - "AlanCezarAraujo", - "Selminha" + "rcsilvadev", + "klisostom", + "jorgeclesio", + "MarcoBrunoBR", + "jaimemaretoli" ] }, - "Web/JavaScript/Reference/Statements/const": { - "modified": "2020-10-17T21:41:42.745Z", + "orphaned/Web/HTML/favicon": { + "modified": "2019-05-05T00:27:21.844Z", "contributors": [ - "tassni", - "Beel132", - "panoramix360", - "SphinxKnight", - "DanielMarques", - "caiocaly", - "claudio-cavalcante", - "Klauswk", - "GianWinckler", - "AlanCezarAraujo", - "angellica.araujo" + "willianpascoal" ] }, - "Web/JavaScript/Reference/Statements/continue": { - "modified": "2020-03-12T19:45:02.135Z", + "Web/Guide/HTML/HTML5": { + "modified": "2019-11-20T18:24:04.168Z", "contributors": [ - "Deniscapp", - "jfsiebel", - "sheldonled" + "sambrmg", + "Fernandolrs", + "matheussilvasantos", + "netoguimaraes", + "jaimemaretoli", + "macalha", + "teoli", + "lfelipev", + "leandro2103", + "rodrigopadula", + "mauricio.araldi", + "PedroFelipe", + "phenriqueleao", + "apereira2001", + "RodrigoAlmeidaSp" ] }, - "Web/JavaScript/Reference/Statements/debugger": { - "modified": "2020-10-15T21:39:08.215Z", + "Web/Guide/HTML/HTML5/Introduction_to_HTML5": { + "modified": "2019-03-23T23:38:50.368Z", "contributors": [ - "felipelube", - "rands0n" + "flmidia", + "teoli", + "eduardodx" ] }, - "Web/JavaScript/Reference/Statements/default": { - "modified": "2020-03-12T19:46:41.506Z", + "Web/HTML/Inline_elements": { + "modified": "2019-03-23T23:13:50.417Z", "contributors": [ - "alefesouza" + "rennan.martini" ] }, - "Web/JavaScript/Reference/Statements/do...while": { - "modified": "2020-04-16T16:34:01.857Z", + "Web/HTML/microformats": { + "modified": "2019-09-03T11:27:26.864Z", "contributors": [ - "eng.danielsoares", - "danimai", - "rubenmarcus", - "matheussilvasantos", - "brunoeduardo" + "luisfvieira" ] }, - "Web/JavaScript/Reference/Statements/export": { - "modified": "2020-10-15T21:50:01.385Z", + "Glossary/speculative_parsing": { + "modified": "2019-03-23T23:35:26.036Z", "contributors": [ - "frispoli", - "romulocintra", - "helton-mori-dev", - "rodolphopicolo", - "jomarcardoso", - "renamed", - "nicematt" + "teoli", + "claudio.adalberto.silva" ] }, - "Web/JavaScript/Reference/Statements/for": { - "modified": "2020-11-10T12:40:17.530Z", + "Web/HTML/Reference": { + "modified": "2019-09-09T07:19:45.753Z", "contributors": [ - "duartegabriel68", - "sad1502", - "matheussouza89", - "mateuscqueiros", - "brevvi", - "raduq", - "PedroTorresMaschio" + "SphinxKnight", + "julio-elipse", + "wbamberg", + "dricupello", + "fabianosantos.net" ] }, - "Web/JavaScript/Reference/Statements/for-await...of": { - "modified": "2020-10-15T22:23:08.933Z", + "Web/HTTP/Basics_of_HTTP/Identifying_resources_on_the_Web": { + "modified": "2019-03-23T22:04:02.281Z", "contributors": [ - "alexandreab", - "deadkff01" + "krisfertig", + "rbertoche", + "marciioluucas" ] }, - "Web/JavaScript/Reference/Statements/for...in": { - "modified": "2020-03-12T19:43:06.159Z", + "Web/HTTP/Basics_of_HTTP": { + "modified": "2019-03-18T20:54:14.334Z", "contributors": [ - "WaGjUb", - "samir.araujo", - "Gutemberg" + "mauromattos00", + "wdot789" ] }, - "Web/JavaScript/Reference/Statements/for...of": { - "modified": "2020-03-12T19:43:02.972Z", + "Web/HTTP/Basics_of_HTTP/MIME_types/Common_types": { + "modified": "2019-03-23T22:04:21.860Z", "contributors": [ - "emilianocarvalho", - "malukenho", - "filipetorres", - "tiagocedrim", - "cezaraugusto", - "michaelycus", - "mfelippi", - "oliveirarthur" + "khalid_ait", + "berbare", + "lpdouglas" ] }, - "Web/JavaScript/Reference/Statements/funcoes_assincronas": { - "modified": "2020-10-15T21:52:41.900Z", + "Web/HTTP/Basics_of_HTTP/MIME_types": { + "modified": "2019-12-16T17:35:45.160Z", "contributors": [ - "mateusvelleda", - "alisonbento", - "pedroaugusto19", - "zscaiosi", - "byxande", - "trestini", - "feserafim", - "VPagani" + "JpOnline", + "hugojunior", + "marcusedu" ] }, - "Web/JavaScript/Reference/Statements/function": { - "modified": "2020-03-12T19:43:06.976Z", + "Web/HTTP/Compression": { + "modified": "2019-03-18T21:19:41.947Z", "contributors": [ - "Helder-JR", - "diegolaquino", - "YurePereira" + "krisfertig" ] }, - "Web/JavaScript/Reference/Statements/function*": { - "modified": "2020-10-15T21:33:49.171Z", + "Web/HTTP/CORS": { + "modified": "2020-10-15T21:51:46.835Z", "contributors": [ - "gabrielrleal", + "kenchen12", + "herculan0", + "joao-rafael", "Rondinelly", - "marcusdacoregio", - "GabrielBarbosaGV", - "SphinxKnight", - "cezaraugusto", - "AlanCezarAraujo" + "lshumbleprogrammer", + "rbuzatto", + "paulocoe", + "marcosalpereira", + "rodolphopicolo", + "guilhermeiobbi", + "art", + "xikaos", + "andrekutianski" ] }, - "Web/JavaScript/Reference/Statements/if...else": { - "modified": "2020-03-12T19:43:02.168Z", + "Web/HTTP/Connection_management_in_HTTP_1.x": { + "modified": "2019-03-23T22:25:52.431Z", "contributors": [ - "cezaraugusto", - "Gutemberg" + "Fernandolrs", + "DiegoTelles" ] }, - "Web/JavaScript/Reference/Statements/import": { - "modified": "2020-10-15T21:38:22.321Z", + "Web/HTTP/Headers/Connection": { + "modified": "2020-10-15T22:08:10.001Z", "contributors": [ - "impadalko", - "helton-mori-dev", - "filipemarins", - "Rondinelly", - "cezaraugusto", - "PauloNevesF", - "tamorim" + "FernandoKGA", + "duduindo", + "mrseoliveira" ] }, - "Web/JavaScript/Reference/Statements/import.meta": { - "modified": "2020-10-15T22:30:56.248Z", + "Web/HTTP/Headers/Location": { + "modified": "2020-10-15T22:25:31.903Z", "contributors": [ - "joaopclima" + "FernandoKGA" ] }, - "Web/JavaScript/Reference/Statements/label": { - "modified": "2020-03-12T19:39:09.854Z", + "Web/HTTP/Caching": { + "modified": "2020-01-20T16:42:39.746Z", "contributors": [ - "teoli", - "cirocosta" + "Neiva07", + "henry700", + "GPrimola", + "coloringa" ] }, - "Web/JavaScript/Reference/Statements/let": { - "modified": "2020-09-29T14:52:23.571Z", + "Web/HTTP/Messages": { + "modified": "2020-04-19T17:43:58.667Z", "contributors": [ - "guialtran", - "rafaelcavalcante", - "eltonmesquita", - "teoli", - "ftonato", - "kazumi" + "satoLG", + "jamrocha" ] }, - "Web/JavaScript/Reference/Statements/return": { - "modified": "2020-03-12T19:46:40.874Z", + "Web/HTTP/Redirections": { + "modified": "2019-03-18T21:39:38.468Z", "contributors": [ - "wcqueiroz", - "joelwallis", - "renoirsousa", - "alefesouza" + "FelipeBergmann" ] }, - "Web/JavaScript/Reference/Statements/switch": { - "modified": "2020-03-12T19:40:26.448Z", + "Web/JavaScript/Enumerability_and_ownership_of_properties": { + "modified": "2020-03-12T19:44:27.885Z", "contributors": [ - "helton-mori-dev", - "FelipeFernandesLeandro", - "raulfernando", - "cezaraugusto", - "AlanCezarAraujo" + "jaimemaretoli", + "cantoniazzi" ] }, - "Web/JavaScript/Reference/Statements/throw": { - "modified": "2020-03-12T19:44:28.525Z", + "Web/JavaScript/Closures": { + "modified": "2020-04-07T04:11:27.586Z", "contributors": [ - "dime2lo" + "henriquegeremia", + "KarineLiuti", + "eduardothemoura", + "babieste", + "wbamberg", + "Qiua", + "vagnerleitte", + "welitonderesende", + "akfzambrana", + "AlanCezarAraujo", + "dansoah", + "cirocosta", + "teoli", + "ffrulani", + "carlosrberto", + "Machado" ] }, - "Web/JavaScript/Reference/Statements/try...catch": { - "modified": "2020-03-12T19:39:26.996Z", + "orphaned/Web/JavaScript/Guide/Coleções_chaveadas": { + "modified": "2020-03-12T19:42:42.934Z", "contributors": [ - "VitorFlora", - "danilofarias", - "rmalveis", - "pbcjr", - "teoli", - "xhximenes" + "Franck_Moreira" ] }, - "Web/JavaScript/Reference/Statements/var": { - "modified": "2020-03-12T19:40:01.397Z", + "Web/JavaScript/Guide/Control_flow_and_error_handling": { + "modified": "2020-03-12T19:39:22.758Z", "contributors": [ - "doomsterinc", - "angellica.araujo", - "teoli", - "antonio-damaso" + "igormmatos", + "TheMrHetch", + "viniciusdacal", + "mahenrique", + "Franck_Moreira", + "DiegoGrande", + "MarceloBRN", + "pkelbert" ] }, - "Web/JavaScript/Reference/Statements/while": { - "modified": "2020-03-12T19:43:47.406Z", + "Web/JavaScript/Guide/Details_of_the_Object_Model": { + "modified": "2020-10-29T17:14:14.553Z", "contributors": [ - "DiegoVictor" + "pedropaulo91", + "FranklynKleiton", + "igorsmasc", + "wbamberg", + "nailtonvieira", + "rsr90", + "tassionoronha", + "MuralhadeAdriano", + "victor-borges", + "fabiomiranda", + "AlanCezarAraujo", + "teoli", + "lisy", + "alexandresn" ] }, - "Web/JavaScript/Reference/Statements/with": { - "modified": "2020-03-12T19:46:40.073Z", + "Web/JavaScript/Guide/Text_formatting": { + "modified": "2020-03-12T19:42:35.835Z", "contributors": [ - "LucasSouza6", - "alefesouza" + "Franck_Moreira", + "odisseumau", + "reuel.jonathan" ] }, - "Web/JavaScript/Reference/Strict_mode": { - "modified": "2020-03-12T19:43:28.549Z", + "Web/JavaScript/Guide/Functions": { + "modified": "2020-03-12T19:40:21.813Z", "contributors": [ - "srthiagos", - "henriquemazer", - "rdasilva", - "arturhns", - "matheusr", - "RenanBirck", - "jjmars" + "webfelipemaia", + "MateusHirt", + "arxdsilva", + "luc4smoreira", + "martinusso", + "hctsantos", + "Franck_Moreira", + "odisseumau", + "lfelipev", + "melostbr", + "rvNN", + "fabianobn", + "ewertonorg" ] }, - "Web/JavaScript/Reference/template_strings": { - "modified": "2020-10-15T21:30:13.673Z", + "Web/JavaScript/Inheritance_and_the_prototype_chain": { + "modified": "2020-03-12T19:39:21.410Z", "contributors": [ - "devgabrieldejesus", - "GuilhermePiovesan", - "mgumiero9", - "SphinxKnight", - "frega", - "GabrielAmazonas", - "edkf", - "kdex", - "LawfulHacker", - "trestini", - "lucasmedeiros" + "deadkff01", + "duduindo", + "lms7", + "lucgauer", + "Timer00", + "melostbr", + "VinicioSantos", + "everton3x", + "hudsontavares", + "ericcristhiano", + "Felipe_Baravieira", + "luisfmsouza", + "LucasCaixeta", + "antoniomquadrosfilho" ] }, - "Web/JavaScript/Typed_arrays": { - "modified": "2020-03-12T19:45:33.922Z", + "Web/JavaScript/Guide/Iterators_and_Generators": { + "modified": "2020-08-05T20:59:34.854Z", "contributors": [ - "pauloantonelli", - "andrevargas" + "jonas-alves", + "lcelso", + "lesimoes", + "MarceloFAugusto", + "emersonlaurentino", + "upnic", + "iFgR", + "felipetesc" ] }, - "Web/Manifest": { - "modified": "2019-06-02T15:51:05.029Z", + "Web/JavaScript/Guide/Loops_and_iteration": { + "modified": "2020-03-12T19:41:00.064Z", "contributors": [ - "Rondinelly", - "Felipe-Marin", - "enriquerenebr", - "Gauzzi", - "philippesilva" + "SphinxKnight", + "odjr", + "Killdragon", + "Gregory", + "Franck_Moreira", + "odisseumau", + "alinehx", + "Felipe_Baravieira" ] }, - "Web/MathML": { - "modified": "2020-06-20T18:00:14.899Z", + "Web/JavaScript/Guide/Modules": { + "modified": "2020-10-15T22:31:27.603Z", "contributors": [ - "luizsanches", - "julio-elipse", - "michaeldouglas", - "rodrigopadula", - "fred.wang", - "Dyvik" + "LucioCarvalhoDev", + "brasmon8351" ] }, - "Web/MathML/Element": { - "modified": "2019-03-23T23:15:05.305Z", + "Web/JavaScript/Guide/Numbers_and_dates": { + "modified": "2020-11-19T03:04:52.069Z", "contributors": [ - "non", - "splewako" + "SphinxKnight", + "bragaus", + "Franck_Moreira", + "fabiobasso", + "felipebool", + "odisseumau", + "thiagosaife", + "lfelipev", + "TiagoAmaral", + "MarceloBRN" ] }, - "Web/MathML/Element/math": { - "modified": "2019-03-23T23:15:04.481Z", + "orphaned/Web/JavaScript/Guide/Sintaxe_e_tipos": { + "modified": "2020-03-12T19:42:40.865Z", "contributors": [ - "Haroldohc" + "Franck_Moreira" ] }, - "Web/MathML/Exemplos": { - "modified": "2019-03-23T23:19:30.922Z", + "Web/JavaScript/Guide/Working_with_Objects": { + "modified": "2019-10-02T09:41:18.709Z", "contributors": [ - "raniere" + "reinaldoamaralstudio", + "Marcustap", + "diegolaquino", + "thienry", + "caio687", + "SphinxKnight", + "everton0991", + "andre-violin", + "camposdev", + "daliannyvieira", + "cezaraugusto", + "raphaellima8", + "Danilson_Veloso", + "jigs12", + "LucasRamos", + "teoli", + "fernando.karpinski" ] }, - "Web/Performance": { - "modified": "2020-01-02T12:25:47.809Z", + "Web/JavaScript/Guide/Using_promises": { + "modified": "2020-04-19T11:41:18.110Z", "contributors": [ - "chrisdavidmills" + "RodrigoWebDev", + "lopesboa", + "marciioluucas", + "alexat13", + "joao-rafael", + "Jeovano", + "Tiagosb" ] }, - "Web/Performance/caminho_de_renderizacao_critico": { - "modified": "2020-01-02T12:25:48.732Z", + "Web/JavaScript/Guide/Grammar_and_types": { + "modified": "2020-10-29T14:01:41.068Z", "contributors": [ - "Lukas1013" + "wcqueiroz", + "PieterVeldman", + "Dikz", + "dbconrado", + "mahenrique", + "Franck_Moreira", + "MichelMentzFernandes", + "rodrigo-designer", + "melostbr", + "Domicio", + "raduq", + "werikson.h@gmail.com", + "Jonathanfk", + "ewertonorg", + "felipe.uliana", + "pkelbert", + "teoli", + "raphaelfabeni", + "arielserafini" ] }, - "Web/Progressive_web_apps": { - "modified": "2020-04-06T10:15:30.355Z", + "Web/JavaScript/Reference/Errors/Missing_parenthesis_after_argument_list": { + "modified": "2020-03-12T19:45:19.574Z", "contributors": [ - "R-Santtos", - "chrisdavidmills", - "mfuji09" + "re-andrade1987", + "Tiagoc8402" ] }, - "Web/Progressive_web_apps/Introdução": { - "modified": "2019-03-18T20:52:09.829Z", + "Web/JavaScript/Reference/Errors/Missing_curly_after_property_list": { + "modified": "2020-03-12T19:47:22.337Z", "contributors": [ - "chrisdavidmills", - "rodolfo.ghiggi" + "marcelobonatto" ] }, - "Web/Reference": { - "modified": "2020-09-10T17:40:01.881Z", + "Web/JavaScript/Reference/Errors/Not_defined": { + "modified": "2020-03-12T19:45:05.709Z", "contributors": [ - "Luscas", - "jose.elias.0703", - "julio-elipse", - "Schieck", - "leonardocoelho", - "luizmassa", - "eliveltoncristiano" + "eduardovivi", + "emilianocarvalho", + "Fernandolrs", + "FelipeLima" ] }, - "Web/Reference/API": { - "modified": "2019-03-23T22:46:47.941Z", + "Web/JavaScript/Reference/Errors/Unnamed_function_statement": { + "modified": "2020-03-12T19:47:57.308Z", "contributors": [ - "julio-elipse", - "Anderson-Vasques", - "devmessias", - "angelorubin", - "amoedoamorim", - "takahan", - "pcf-pcf" + "LucianoCalsolari", + "re-andrade1987" ] }, - "Web/SVG": { - "modified": "2019-06-09T13:24:36.730Z", + "Web/JavaScript/Reference/Functions/Method_definitions": { + "modified": "2020-10-15T21:41:38.555Z", "contributors": [ - "wcqueiroz", - "julio-elipse", - "macalha", - "teoli", - "Joshua-S" + "LuizinGustavo", + "michael-nishikawa" ] }, - "Web/SVG/Applying_SVG_effects_to_HTML_content": { - "modified": "2019-03-23T22:45:26.414Z", + "Web/JavaScript/Reference/Functions/Default_parameters": { + "modified": "2020-11-16T09:54:39.736Z", "contributors": [ - "teoli", - "takahan" + "mateusvelleda", + "rafaelcavalcante", + "Roger-Melo", + "SphinxKnight", + "alissonperez", + "fernandosavio", + "KennyMack", + "AlanCezarAraujo" ] }, - "Web/SVG/Attribute": { - "modified": "2019-03-23T22:58:41.365Z", + "Web/JavaScript/Reference/Global_Objects/Array/includes": { + "modified": "2020-10-15T21:30:32.690Z", "contributors": [ - "averdion" + "mateusvelleda", + "wbamberg", + "RodolfoSilva", + "emmanueldaher", + "cirocosta" ] }, - "Web/SVG/Attribute/class": { - "modified": "2019-03-23T22:58:45.630Z", + "Web/JavaScript/Reference/Global_Objects/Array/filter": { + "modified": "2020-10-15T21:36:30.999Z", "contributors": [ - "caio" + "chrisdavidmills", + "mateusvelleda", + "FelipeMarra", + "leonardooliveira95", + "junagao", + "mtaribeiro", + "RodrigoReis", + "alexandresn", + "erikvinicius5", + "lotharthesavior", + "felipecaputo" ] }, - "Web/SVG/Attribute/contentStyleType": { - "modified": "2019-03-23T22:58:38.907Z", + "orphaned/Web/JavaScript/Reference/Global_Objects/Array/prototype": { + "modified": "2019-03-23T23:05:21.611Z", "contributors": [ - "caio" + "medeirosmarcus", + "rodrigofazenda", + "DevStanki", + "gutoribeiro", + "danielbastos" ] }, - "Web/SVG/Attribute/fill": { - "modified": "2020-10-15T22:34:04.647Z", + "orphaned/Web/JavaScript/Reference/Global_Objects/BigInt/prototype": { + "modified": "2020-10-15T22:29:51.823Z", "contributors": [ - "littlebru" + "LuisAraujo" ] }, - "Web/SVG/Attribute/keyTimes": { - "modified": "2020-10-15T22:29:23.505Z", + "Web/JavaScript/Reference/Operators/Destructuring_assignment": { + "modified": "2020-11-23T07:49:53.825Z", "contributors": [ - "MarcosNakamine" + "filipetorres", + "gabriel_cadu", + "LucasGabrielSI", + "candinhojr", + "felipeolliveira", + "kdex", + "colares" ] }, - "Web/SVG/Attribute/preserveAspectRatio": { - "modified": "2020-04-16T18:21:49.688Z", + "Web/JavaScript/Reference/Operators/Object_initializer": { + "modified": "2020-03-12T19:45:20.526Z", "contributors": [ - "MarcosNakamine" + "holandajunior" ] }, - "Web/SVG/Attribute/stroke": { - "modified": "2020-10-15T21:44:52.165Z", + "Web/JavaScript/Reference/Operators/Conditional_Operator": { + "modified": "2020-03-12T19:39:26.164Z", "contributors": [ - "MarcosNakamine", - "gabiduarte" + "monnacs", + "flaviomicheletti", + "SphinxKnight" ] }, - "Web/SVG/Attribute/stroke-dashoffset": { - "modified": "2019-03-23T22:07:45.957Z", + "Web/JavaScript/Reference/Operators/Nullish_coalescing_operator": { + "modified": "2020-10-15T22:27:35.360Z", "contributors": [ - "brunoalv-s" + "mateusvelleda", + "yagoag", + "marlonveiga-santos" ] }, - "Web/SVG/Attribute/style": { - "modified": "2019-03-23T22:58:27.562Z", + "Web/JavaScript/Reference/Operators/Comma_Operator": { + "modified": "2020-03-12T19:39:21.823Z", "contributors": [ - "caio" + "SphinxKnight", + "haskellcamargo", + "teoli" ] }, - "Web/SVG/Attribute/version": { - "modified": "2020-10-15T22:29:15.866Z", + "Web/JavaScript/Reference/Statements/async_function": { + "modified": "2020-10-15T21:52:41.900Z", "contributors": [ - "MarcosNakamine" + "mateusvelleda", + "alisonbento", + "pedroaugusto19", + "zscaiosi", + "byxande", + "trestini", + "feserafim", + "VPagani" ] }, - "Web/SVG/Attribute/viewBox": { - "modified": "2020-04-16T18:40:16.127Z", + "Web/JavaScript/Reference/Template_literals": { + "modified": "2020-10-15T21:30:13.673Z", "contributors": [ - "MarcosNakamine" + "devgabrieldejesus", + "GuilhermePiovesan", + "mgumiero9", + "SphinxKnight", + "frega", + "GabrielAmazonas", + "edkf", + "kdex", + "LawfulHacker", + "trestini", + "lucasmedeiros" ] }, - "Web/SVG/Attribute/width": { - "modified": "2019-03-23T22:12:36.682Z", + "Web/MathML/Examples": { + "modified": "2019-03-23T23:19:30.922Z", "contributors": [ - "webmasterdro" + "raniere" ] }, - "Web/SVG/Compatibility_sources": { - "modified": "2019-03-23T22:45:22.788Z", + "Web/Performance/Critical_rendering_path": { + "modified": "2020-01-02T12:25:48.732Z", "contributors": [ - "takahan" + "Lukas1013" ] }, - "Web/SVG/Content_type": { - "modified": "2019-03-23T22:58:44.489Z", + "Web/Progressive_web_apps/Introduction": { + "modified": "2019-03-18T20:52:09.829Z", "contributors": [ - "caio" + "chrisdavidmills", + "rodolfo.ghiggi" ] }, - "Web/SVG/Element": { - "modified": "2019-06-18T23:26:07.906Z", + "orphaned/Web/Security/Information_Security_Basics": { + "modified": "2019-03-23T22:21:46.780Z", "contributors": [ - "wcqueiroz", - "caio", - "teoli", - "ethertank" + "julio-elipse", + "cassiodeveloper", + "trombini77" ] }, - "Web/SVG/Element/a": { - "modified": "2020-10-15T21:34:48.646Z", + "Web/SVG/Namespaces_Crash_Course": { + "modified": "2019-03-18T21:37:37.311Z", "contributors": [ - "MarcosNakamine", - "Sebastianz", - "caio" + "coloringa" ] }, - "Web/SVG/Element/altGlyph": { - "modified": "2019-03-23T22:57:23.875Z", + "Web/Tutorials": { + "modified": "2019-09-04T15:11:38.918Z", "contributors": [ - "Sebastianz", - "caio" + "brasmon8351", + "wcqueiroz", + "G_Nascimento", + "italorangel", + "julio-elipse", + "rakiraota", + "rejunges", + "duduindo", + "vasconcelos", + "jcjesus", + "MarceloBRN", + "macalha", + "rbrandao", + "teoli", + "MatCAlv" ] }, - "Web/SVG/Element/altGlyphDef": { - "modified": "2019-03-23T22:57:26.729Z", + "Web/Web_Components/Using_custom_elements": { + "modified": "2020-08-16T18:27:57.469Z", "contributors": [ - "Sebastianz", - "caio" + "GuilhermePiovesan" ] }, - "Web/SVG/Element/altGlyphItem": { - "modified": "2019-03-23T22:57:25.735Z", + "Web/API/Battery_Status_API": { + "modified": "2019-03-23T23:17:01.638Z", "contributors": [ - "Sebastianz", - "caio" + "mariozuany", + "eliezerb", + "rbrandao" ] }, - "Web/SVG/Element/animate": { - "modified": "2020-10-15T21:34:48.794Z", + "Web/API/Network_Information_API": { + "modified": "2019-03-23T23:21:58.235Z", "contributors": [ - "MarcosNakamine", - "wbamberg", - "Sebastianz", - "caio" + "gabrieltobi", + "jlamim", + "Fabio.Magnoni" ] }, - "Web/SVG/Element/animateColor": { - "modified": "2019-03-23T22:57:25.579Z", + "WebAssembly/Understanding_the_text_format": { + "modified": "2019-03-23T22:10:32.734Z", "contributors": [ - "wbamberg", - "Sebastianz", - "caio" + "gabrielcarneiro97", + "AlanCezarAraujo" ] }, - "Web/SVG/Element/animateMotion": { - "modified": "2019-03-23T22:57:26.608Z", + "WebAssembly/Using_the_JavaScript_API": { + "modified": "2019-05-16T10:09:22.456Z", "contributors": [ - "wbamberg", - "Sebastianz", - "caio" + "alexalannunes", + "AlanCezarAraujo" ] }, - "Web/SVG/Element/animateTransform": { - "modified": "2019-03-23T22:57:23.127Z", + "Web/API/WebSockets_API/Writing_WebSocket_client_applications": { + "modified": "2020-11-10T12:00:26.972Z", "contributors": [ - "Sebastianz", - "caio" + "botogoske", + "manoelbjr", + "adrianowead" ] }, - "Web/SVG/Element/circle": { - "modified": "2019-03-23T22:57:10.633Z", + "Web/API/WebSockets_API": { + "modified": "2020-08-25T09:26:59.941Z", "contributors": [ - "wbamberg", - "Sebastianz", - "caio" + "manoelbjr", + "marcosvexter", + "Fernandolrs", + "hdvianna" ] }, - "Web/SVG/Element/color-profile": { - "modified": "2019-03-23T22:57:13.667Z", + "Web/API/WebSockets_API/Writing_WebSocket_server": { + "modified": "2019-03-23T22:48:53.915Z", "contributors": [ - "Sebastianz", - "caio" + "CbarretoSUD", + "rufinorenato", + "Renancp01", + "philippesilva" ] }, - "Web/SVG/Element/defs": { - "modified": "2019-03-23T22:58:41.965Z", + "Web/API/WebSockets_API/Writing_WebSocket_servers": { + "modified": "2020-02-08T13:08:26.204Z", "contributors": [ - "Sebastianz", - "caio" + "Lukas1013", + "willian.zilli", + "jhserodio", + "Martinho9818", + "UzumakiArtanis", + "wallacemaxters" ] }, - "Web/SVG/Element/desc": { - "modified": "2019-03-23T23:34:02.707Z", + "Glossary/XHTML": { + "modified": "2019-03-23T23:39:12.153Z", "contributors": [ - "Sebastianz", - "caio", - "fscholz", - "teoli", - "pedrofsn" + "-", + "LeonardoPacheco", + "fvargaspf@gmail.com" ] }, - "Web/SVG/Element/ellipse": { - "modified": "2019-03-23T22:57:25.451Z", + "conflicting/Mozilla/Add-ons": { + "modified": "2019-03-23T23:05:15.518Z", "contributors": [ - "wbamberg", - "Sebastianz", - "caio" + "rodrigopadula" ] }, - "Web/SVG/Element/filter": { - "modified": "2019-03-23T22:57:12.383Z", + "conflicting/Web/CSS/CSS_Flexible_Box_Layout/Basic_Concepts_of_Flexbox": { + "modified": "2019-09-08T09:50:19.292Z", "contributors": [ - "Sebastianz", - "caio" + "emaia", + "gabrielbarros28", + "FernandaBernardo", + "rvNN", + "trestini", + "afonsopacifer", + "brunoqueiros", + "deaballe" ] }, - "Web/SVG/Element/g": { - "modified": "2020-10-15T21:34:51.514Z", + "conflicting/Web/Guide": { + "modified": "2019-03-23T23:28:22.836Z", "contributors": [ - "MarcosNakamine", - "Sebastianz", - "teoli", - "caio" + "talitagoulart" ] }, - "Web/SVG/Element/glyph": { - "modified": "2019-03-23T22:51:14.283Z", + "conflicting/Web/API/Document_Object_Model": { + "modified": "2019-03-23T23:35:40.503Z", "contributors": [ - "Sebastianz", - "caio" + "teoli" ] }, - "Web/SVG/Element/glyphRef": { - "modified": "2019-03-23T22:51:12.926Z", + "conflicting/Web/API/HTML_Drag_and_Drop_API": { + "modified": "2019-03-23T23:34:35.791Z", "contributors": [ - "Sebastianz", - "caio" + "drewp" ] }, - "Web/SVG/Element/hkern": { - "modified": "2019-03-23T22:51:14.130Z", + "orphaned/Mozilla/Add-ons/WebExtensions/Temporary_Installation_in_Firefox": { + "modified": "2019-03-18T21:15:50.836Z", "contributors": [ - "Sebastianz", - "caio" + "lubarino" ] }, - "Web/SVG/Element/image": { - "modified": "2020-10-15T21:34:49.162Z", + "conflicting/MDN/Contribute/Getting_started": { + "modified": "2019-03-23T23:38:18.895Z", "contributors": [ - "MarcosNakamine", - "Sebastianz", + "hlays", + "wbamberg", "teoli", - "caio" + "jaydson", + "jswisher" ] }, - "Web/SVG/Element/line": { - "modified": "2019-03-23T22:57:18.810Z", + "Tools/Debugger/How_to/Set_Watch_Expressions": { + "modified": "2020-07-16T22:35:13.183Z", "contributors": [ "wbamberg", - "Sebastianz", - "caio" + "mak213k" ] }, - "Web/SVG/Element/linearGradient": { - "modified": "2019-03-23T23:12:58.688Z", + "conflicting/Mozilla/Firefox/Releases": { + "modified": "2020-07-16T22:35:56.858Z", "contributors": [ "wbamberg", - "Sebastianz", - "caio", - "eltonmesquita" + "fabianosantos.net", + "-" ] }, - "Web/SVG/Element/marker": { - "modified": "2019-03-23T22:51:15.955Z", + "conflicting/Web/Progressive_web_apps": { + "modified": "2020-08-27T09:35:40.497Z", "contributors": [ - "wbamberg", - "Sebastianz", - "caio" + "bermarques", + "clebermatheus1" ] }, - "Web/SVG/Element/mask": { - "modified": "2019-03-23T22:51:15.170Z", + "conflicting/Web/Guide/Mobile": { + "modified": "2019-03-23T23:28:19.402Z", "contributors": [ - "wbamberg", - "Sebastianz", - "caio" + "clebermatheus1", + "wbamberg" ] }, - "Web/SVG/Element/metadata": { - "modified": "2019-03-23T22:51:15.500Z", + "conflicting/Web/Accessibility": { + "modified": "2019-03-23T22:45:20.334Z", "contributors": [ - "Sebastianz", - "caio" + "Aschlla", + "takahan" ] }, - "Web/SVG/Element/missing-glyph": { - "modified": "2019-03-23T22:50:49.615Z", + "conflicting/Web/API/CryptoKey": { + "modified": "2019-03-23T22:02:41.629Z", "contributors": [ - "Sebastianz", - "caio" + "Hikashii" ] }, - "Web/SVG/Element/mpath": { - "modified": "2019-03-23T22:57:24.178Z", + "conflicting/Web/API/CryptoKey_53ae81677f4d9298717f2f245ae4da0d": { + "modified": "2019-03-23T22:02:42.520Z", "contributors": [ - "Sebastianz", - "caio" + "Hikashii" ] }, - "Web/SVG/Element/path": { - "modified": "2019-03-23T22:58:43.505Z", + "conflicting/Web/API/CryptoKey_33bd21ca8f20b4cd8c7b8c762e2fc597": { + "modified": "2019-03-23T22:02:48.076Z", "contributors": [ - "Sebastianz", - "reebr", - "caio" + "Hikashii" ] }, - "Web/SVG/Element/pattern": { - "modified": "2019-03-23T22:50:49.027Z", + "conflicting/Web/API/CryptoKey_f39d256ef7fbd1cf0a1f26de1e887ae7": { + "modified": "2019-03-23T22:02:45.135Z", "contributors": [ - "wbamberg", - "Sebastianz", - "caio" + "Hikashii" ] }, - "Web/SVG/Element/polygon": { - "modified": "2019-03-23T22:57:10.306Z", + "Web/API/DeviceMotionEventAcceleration": { + "modified": "2019-03-23T22:09:29.028Z", "contributors": [ - "wbamberg", - "Sebastianz", - "caio" + "Fernandolrs" ] }, - "Web/SVG/Element/polyline": { - "modified": "2019-03-23T22:57:19.114Z", + "Web/API/DeviceMotionEventRotationRate": { + "modified": "2019-03-23T22:09:26.114Z", "contributors": [ - "wbamberg", - "Sebastianz", - "caio" + "Fernandolrs" ] }, - "Web/SVG/Element/radialGradient": { - "modified": "2019-03-23T22:51:15.349Z", + "Web/API/DocumentOrShadowRoot/activeElement": { + "modified": "2019-03-23T22:24:43.471Z", "contributors": [ "wbamberg", - "Sebastianz", - "caio" + "fscholz", + "fernandosavio", + "DiegoYungh" ] }, - "Web/SVG/Element/rect": { - "modified": "2020-10-15T21:34:48.350Z", + "Web/API/DocumentOrShadowRoot/elementFromPoint": { + "modified": "2019-03-23T22:29:17.399Z", "contributors": [ - "MarcosNakamine", - "wbamberg", - "Sebastianz", - "caio" + "cezaraugusto" ] }, - "Web/SVG/Element/script": { - "modified": "2019-03-23T22:51:13.840Z", + "Web/API/DocumentOrShadowRoot/getSelection": { + "modified": "2019-03-23T22:54:15.369Z", "contributors": [ - "Sebastianz", - "caio" + "expalmer" ] }, - "Web/SVG/Element/set": { - "modified": "2019-03-18T21:15:52.031Z", + "Web/API/HTMLElement/accessKey": { + "modified": "2019-03-23T22:27:15.059Z", "contributors": [ - "Sebastianz", - "caio" + "DiasNetoJ" ] }, - "Web/SVG/Element/stop": { - "modified": "2019-03-18T21:15:53.395Z", + "conflicting/Web/API": { + "modified": "2019-03-23T22:18:12.202Z", "contributors": [ - "Sebastianz", - "caio" + "RafaelGiordanno" ] }, - "Web/SVG/Element/style": { - "modified": "2019-03-23T22:58:43.006Z", + "conflicting/Web/API/Crypto/getRandomValues": { + "modified": "2019-03-23T22:43:17.216Z", "contributors": [ - "Sebastianz", - "caio" + "Hikashii", + "Jeremie" ] }, - "Web/SVG/Element/svg": { - "modified": "2020-10-15T21:28:10.159Z", + "Web/API/SVGAElement/target": { + "modified": "2019-03-18T21:38:17.281Z", + "contributors": [ + "Shadowlast14" + ] + }, + "conflicting/Web/API/GlobalEventHandlers/onscroll": { + "modified": "2019-03-23T23:31:45.467Z", "contributors": [ - "MarcosNakamine", - "Sebastianz", - "caio", "teoli", - "Haroldohc" + "khalid32", + "Leeehandro" ] }, - "Web/SVG/Element/switch": { - "modified": "2019-03-23T22:50:51.303Z", + "conflicting/Web/API/URL": { + "modified": "2019-03-23T22:04:44.414Z", "contributors": [ - "Sebastianz", - "caio" + "jika" ] }, - "Web/SVG/Element/symbol": { - "modified": "2019-03-23T22:52:08.134Z", + "conflicting/Web/API/WindowOrWorkerGlobalScope": { + "modified": "2019-03-23T22:33:40.909Z", "contributors": [ - "Sebastianz", - "caio", - "dayanyrec" + "teoli" ] }, - "Web/SVG/Element/text": { - "modified": "2020-10-15T21:27:11.261Z", + "conflicting/Web/API/WindowOrWorkerGlobalScope_e2691f7ad05781a30c5fc5bb3b3f633a": { + "modified": "2019-03-23T23:01:45.978Z", "contributors": [ - "MarcosNakamine", - "Sebastianz", - "teoli", - "caio", - "unreleasedmix" + "teoli" ] }, - "Web/SVG/Element/textPath": { - "modified": "2019-03-23T22:50:48.585Z", + "Web/CSS/box-ordinal-group": { + "modified": "2019-03-18T21:20:02.652Z", "contributors": [ - "Sebastianz", - "caio" + "dekxside" ] }, - "Web/SVG/Element/title": { - "modified": "2019-03-18T21:25:13.519Z", + "conflicting/Web/CSS/cursor": { + "modified": "2019-03-18T21:15:19.786Z", "contributors": [ - "Sebastianz", - "caio" + "dekxside" ] }, - "Web/SVG/Element/tref": { - "modified": "2019-03-23T22:57:16.290Z", + "Web/CSS/CSS_Backgrounds_and_Borders": { + "modified": "2019-03-23T22:44:11.690Z", "contributors": [ - "Sebastianz", - "caio" + "teoli" ] }, - "Web/SVG/Element/tspan": { - "modified": "2020-10-15T21:34:49.043Z", + "Web/CSS/CSS_Backgrounds_and_Borders/Using_multiple_backgrounds": { + "modified": "2019-03-23T23:39:08.214Z", "contributors": [ - "MarcosNakamine", - "wbamberg", - "Sebastianz", - "caio" + "teoli", + "Aleuck" ] }, - "Web/SVG/Element/use": { - "modified": "2019-03-23T22:57:25.260Z", + "conflicting/Learn/CSS/Building_blocks/Cascade_and_inheritance": { + "modified": "2019-03-23T22:55:03.103Z", "contributors": [ - "ed1nh0", - "Sebastianz", - "caio" + "agathasilva28", + "RafaelRNunes", + "Gregory", + "dhaack" ] }, - "Web/SVG/Element/view": { - "modified": "2020-10-15T21:34:47.580Z", + "conflicting/Learn/CSS/First_steps/How_CSS_works": { + "modified": "2019-03-23T22:58:47.568Z", "contributors": [ - "MarcosNakamine", - "Sebastianz", - "caio" + "RafaelRNunes", + "Gregory", + "Hudson_Lima" ] }, - "Web/SVG/Element/vkern": { - "modified": "2019-03-23T22:51:15.049Z", + "conflicting/Learn/CSS/First_steps": { + "modified": "2019-03-23T23:39:06.753Z", "contributors": [ - "Sebastianz", - "caio" + "julio-elipse", + "agathasilva28", + "Hudson_Lima", + "teoli", + "ethertank", + "netfuzzer55", + "eduardocastro" ] }, - "Web/SVG/Intensivo_de_Namespaces": { - "modified": "2019-03-18T21:37:37.311Z", + "Learn/JavaScript/Client-side_web_APIs/Manipulating_documents": { + "modified": "2019-03-23T23:28:40.266Z", "contributors": [ - "coloringa" + "teoli", + "nah_luquiari" ] }, - "Web/SVG/Tutorial": { - "modified": "2020-05-06T15:49:36.834Z", + "Learn/CSS/Styling_text/Styling_lists": { + "modified": "2019-03-23T22:45:33.735Z", "contributors": [ - "gilmargn", - "mauriciosoares01", - "rogeralbinoi" + "Gregory", + "teoli", + "jorgeclesio" ] }, - "Web/SVG/Tutorial/Introduction": { - "modified": "2019-03-18T20:34:25.046Z", + "conflicting/Learn/CSS/First_steps/How_CSS_works_199dae2aa1447fa94457a213c989744d": { + "modified": "2019-03-23T23:29:17.129Z", "contributors": [ - "kafnjr", - "mauriciosoares01", - "Anizio", - "FelipeAlvim" + "agathasilva28", + "rogeralbinoi", + "teoli", + "nickollas.coelho" ] }, - "Web/Security": { - "modified": "2019-09-10T16:44:48.056Z", + "conflicting/Learn/CSS/First_steps/How_CSS_works_61240ddc35a4ddd533ea33cc8ccf1c87": { + "modified": "2019-03-23T22:59:16.068Z", "contributors": [ - "SphinxKnight", - "julio-elipse", - "ygormaximo", - "takahan", - "Fulanodigital" + "rogeralbinoi" ] }, - "Web/Security/Básico_de_Segurança_da_Informação": { - "modified": "2019-03-23T22:21:46.780Z", + "conflicting/Learn/CSS/Building_blocks/Selectors": { + "modified": "2019-11-18T18:22:11.556Z", "contributors": [ - "julio-elipse", - "cassiodeveloper", - "trombini77" + "Ericsson-Araujo", + "onsistec", + "dehmirandac2", + "c0elha", + "RafaelRNunes", + "Gregory", + "macarena", + "agathasilva28" ] }, - "Web/Security/Securing_your_site": { - "modified": "2019-03-23T22:41:54.591Z", + "Web/API/HTMLMediaElement/abort_event": { + "modified": "2019-04-30T14:23:25.544Z", "contributors": [ - "julio-elipse", - "ygormaximo", - "marumari" + "wbamberg", + "KaykyB", + "tinogomes" ] }, - "Web/Security/Securing_your_site/Turning_off_form_autocompletion": { - "modified": "2019-03-23T22:41:55.986Z", + "Web/CSS/CSS_Backgrounds_and_Borders/Resizing_background_images": { + "modified": "2019-03-23T22:59:50.758Z", "contributors": [ - "VitorTakara", - "allanfoppa", - "cloudcon", - "Jerffersonferreira", - "iversonfariascosta", - "mfelippi", - "marcoiai" + "mrstork", + "MarcosNakamine" ] }, - "Web/Tutoriais": { - "modified": "2019-09-04T15:11:38.918Z", + "Web/HTML/Global_attributes/spellcheck": { + "modified": "2019-03-23T22:27:29.620Z", "contributors": [ - "brasmon8351", - "wcqueiroz", - "G_Nascimento", - "italorangel", - "julio-elipse", - "rakiraota", - "rejunges", - "duduindo", - "vasconcelos", - "jcjesus", - "MarceloBRN", - "macalha", - "rbrandao", - "teoli", - "MatCAlv" + "sheldonled" ] }, - "Web/Web_Components": { - "modified": "2020-08-16T18:35:27.844Z", + "Web/Media/Formats": { + "modified": "2019-03-23T22:44:08.372Z", "contributors": [ - "GuilhermePiovesan", - "alexongarato", - "burn-c", - "luan0ap", - "cristiano-soares" + "MarceloBonifazio", + "yuriploc", + "brunoeduardo" ] }, - "Web/Web_Components/Usando_custom_elements": { - "modified": "2020-08-16T18:27:57.469Z", + "conflicting/Learn/HTML/Multimedia_and_embedding/Video_and_audio_content": { + "modified": "2019-03-23T23:39:05.441Z", "contributors": [ - "GuilhermePiovesan" + "diogocezar", + "rubensnovaes", + "teoli", + "just_peter", + "Junior201313", + "eduardodx", + "LeonardoPacheco" ] }, - "Web/XSLT": { - "modified": "2019-03-23T22:02:56.256Z", + "conflicting/Web/HTTP/CORS": { + "modified": "2020-04-19T11:26:06.291Z", "contributors": [ - "lfaraone" + "marcio1002" ] }, - "WebAPI": { - "modified": "2019-03-23T23:26:12.246Z", + "conflicting/Web/JavaScript/Equality_comparisons_and_sameness": { + "modified": "2019-03-23T23:25:15.038Z", "contributors": [ - "wbamberg", - "fscholz", - "etc_william", - "Fabio.Magnoni", - "EvandroZanatta", - "ccarruitero" + "teoli", + "fernando.karpinski" ] }, - "WebAPI/Battery_Status": { - "modified": "2019-03-23T23:17:01.638Z", + "conflicting/Learn/JavaScript/Objects": { + "modified": "2020-06-07T23:51:22.220Z", "contributors": [ - "mariozuany", - "eliezerb", - "rbrandao" + "thalesruan", + "lucasinocente", + "Janjos", + "mensonones", + "lourencoccc", + "victormaestri", + "caio_araujo", + "raphaellima8", + "leandroruel", + "filipetorres", + "filipeluiz", + "dragonares5", + "marvin52", + "caioguedes", + "ronybezerra", + "GabrielLidenor", + "pabloff9", + "ti.marcosdias", + "Webysther", + "brunoeduardo", + "DolbyCpp", + "RebeloX", + "mateusleon", + "ewertonorg", + "phillippimenta", + "masimao", + "lucaspedroza", + "teoli", + "acaua", + "FilipeLinhares", + "augustowebd" ] }, - "WebAPI/Network_Information": { - "modified": "2019-03-23T23:21:58.235Z", + "conflicting/Web/JavaScript/Reference/Global_Objects/Boolean": { + "modified": "2019-03-23T22:47:24.930Z", "contributors": [ - "gabrieltobi", - "jlamim", - "Fabio.Magnoni" + "raduq" ] }, - "WebAssembly": { - "modified": "2019-03-23T22:13:27.780Z", + "conflicting/Web/JavaScript/Reference/Global_Objects/Function": { + "modified": "2020-10-15T22:06:36.377Z", "contributors": [ - "cstipkovic", - "Fernandolrs", - "AlanCezarAraujo" + "GuilhermeVazz", + "leo-ls" ] }, - "WebAssembly/Concepts": { - "modified": "2020-06-28T19:04:25.686Z", + "conflicting/Web/JavaScript/Reference/Global_Objects/Intl/NumberFormat": { + "modified": "2020-04-21T09:08:10.648Z", "contributors": [ - "VictorGom3s", - "jhserodio", - "luan0ap", - "thiagosaife" + "fscholz", + "marcelobonatto" ] }, - "WebAssembly/Entendendo_o_formato_textual_do_WebAssembly": { - "modified": "2019-03-23T22:10:32.734Z", + "conflicting/Web/JavaScript/Reference/Global_Objects/Map": { + "modified": "2019-03-23T22:13:49.481Z", "contributors": [ - "gabrielcarneiro97", - "AlanCezarAraujo" + "renatoluna" ] }, - "WebAssembly/Usando_a_API_JavaScript_do_WebAssembly": { - "modified": "2019-05-16T10:09:22.456Z", + "conflicting/Web/JavaScript/Reference/Global_Objects/Number": { + "modified": "2019-03-23T22:11:17.514Z", "contributors": [ - "alexalannunes", - "AlanCezarAraujo" + "matAlmeida", + "gutoribeiro" ] }, - "WebRTC": { - "modified": "2019-03-23T23:30:19.566Z", + "conflicting/Web/JavaScript/Reference/Global_Objects/Object": { + "modified": "2019-03-23T23:02:44.390Z", "contributors": [ - "Fernandolrs", - "Sheppy" + "runys", + "viniciuslacerda", + "melostbr", + "dafnk", + "gabefurlan", + "igorapa" ] }, - "WebSockets": { - "modified": "2020-08-25T09:26:59.941Z", + "conflicting/Web/JavaScript/Reference/Global_Objects/Promise": { + "modified": "2019-03-23T23:07:56.583Z", "contributors": [ - "manoelbjr", - "marcosvexter", - "Fernandolrs", - "hdvianna" + "SphinxKnight", + "dowgssss", + "BrOrlandi", + "keuller" ] }, - "WebSockets/Escrevendo_aplicacoes_cliente_WebSocket": { - "modified": "2020-11-10T12:00:26.972Z", + "conflicting/Web/JavaScript/Reference/Global_Objects/Set": { + "modified": "2020-10-15T21:58:44.990Z", "contributors": [ - "botogoske", - "manoelbjr", - "adrianowead" + "thayssn" ] }, - "WebSockets/Writing_WebSocket_server": { - "modified": "2019-03-23T22:48:53.915Z", + "conflicting/Web/JavaScript/Reference/Global_Objects/String": { + "modified": "2020-10-15T21:58:05.452Z", "contributors": [ - "CbarretoSUD", - "rufinorenato", - "Renancp01", - "philippesilva" + "akinncar", + "coloringa", + "Perrottacooking", + "brunopulis" ] }, - "WebSockets/Writing_WebSocket_servers": { - "modified": "2020-02-08T13:08:26.204Z", + "conflicting/Web/JavaScript/Reference/Global_Objects/WeakMap": { + "modified": "2019-03-23T23:15:16.502Z", "contributors": [ - "Lukas1013", - "willian.zilli", - "jhserodio", - "Martinho9818", - "UzumakiArtanis", - "wallacemaxters" + "SphinxKnight", + "teoli", + "gabrielrubens" ] }, - "Web_Development/Mobile": { - "modified": "2019-03-23T23:28:19.402Z", + "conflicting/Web/JavaScript/Reference/Operators": { + "modified": "2020-03-12T19:42:07.718Z", "contributors": [ - "clebermatheus1", - "wbamberg" + "FernandaBernardo", + "AdeilsonSilva" ] }, - "Web_Development/Mobile/Design_responsivo": { - "modified": "2020-08-27T09:35:40.497Z", + "conflicting/Web/JavaScript/Reference/Operators_7c8eb9475d97a4a734c5991857698560": { + "modified": "2020-10-15T22:16:59.619Z", "contributors": [ - "bermarques", - "clebermatheus1" + "vanilsonbr", + "mak213k" ] }, - "Web_Development/Mobile/Mobile-friendliness": { - "modified": "2019-03-23T23:28:21.815Z", + "conflicting/Web/JavaScript/Reference/Operators_0d2e4b8154642b5a9dbd76a2a48cf96a": { + "modified": "2020-10-19T13:25:39.993Z", "contributors": [ - "clebermatheus1" + "lucas-andre", + "GeloSeco", + "adrianovictor" ] }, - "Web_Development/Mobile/Sites_separados": { - "modified": "2019-03-23T23:28:15.359Z", + "conflicting/Web/JavaScript/Reference/Operators_8fa8b34b0547a749514637a15d386886": { + "modified": "2020-03-12T19:39:41.335Z", "contributors": [ - "clebermatheus1" + "raphaelhenrique", + "Julyemerson", + "raulfernando", + "bugal", + "edumsilveira", + "atjoelson", + "SphinxKnight", + "eduardo_neto" ] }, - "XHTML": { - "modified": "2019-03-23T23:39:12.153Z", + "conflicting/Web/JavaScript/Reference/Operators/Spread_syntax": { + "modified": "2020-03-12T19:42:48.466Z", "contributors": [ - "-", - "LeonardoPacheco", - "fvargaspf@gmail.com" + "maniero", + "danvitoriano", + "kdex", + "cassioscabral" ] }, - "desenvolvimento_web": { - "modified": "2019-03-23T23:28:22.836Z", + "conflicting/Web/JavaScript/Reference/Statements/switch": { + "modified": "2020-03-12T19:46:41.506Z", "contributors": [ - "talitagoulart" + "alefesouza" ] }, - "dez_anos_de_MDN": { - "modified": "2019-03-23T22:47:39.647Z", + "conflicting/Web/API_dd04ca1265cb79b990b8120e5f5070d3": { + "modified": "2019-03-23T23:26:12.246Z", "contributors": [ - "meldenne" + "wbamberg", + "fscholz", + "etc_william", + "Fabio.Magnoni", + "EvandroZanatta", + "ccarruitero" ] }, - "mask": { - "modified": "2019-03-23T22:47:38.213Z", + "conflicting/Web/API/WebRTC_API": { + "modified": "2019-03-23T23:30:19.566Z", "contributors": [ - "teoli", - "Sebastianz", - "yagosrocha" + "Fernandolrs", + "Sheppy" ] } } \ No newline at end of file diff --git a/files/pt-br/conflicting/learn/css/building_blocks/cascade_and_inheritance/index.html b/files/pt-br/conflicting/learn/css/building_blocks/cascade_and_inheritance/index.html index 7880e00f6d..24d7a8a170 100644 --- a/files/pt-br/conflicting/learn/css/building_blocks/cascade_and_inheritance/index.html +++ b/files/pt-br/conflicting/learn/css/building_blocks/cascade_and_inheritance/index.html @@ -1,11 +1,12 @@ --- title: Cascata e herança -slug: Web/CSS/Getting_Started/Cascading_and_inheritance +slug: conflicting/Learn/CSS/Building_blocks/Cascade_and_inheritance tags: - Guía - Iniciante translation_of: Learn/CSS/Building_blocks/Cascade_and_inheritance translation_of_original: Web/Guide/CSS/Getting_started/Cascading_and_inheritance +original_slug: Web/CSS/Getting_Started/Cascading_and_inheritance ---

{{ CSSTutorialTOC() }}

diff --git a/files/pt-br/conflicting/learn/css/building_blocks/selectors/index.html b/files/pt-br/conflicting/learn/css/building_blocks/selectors/index.html index 3870c68936..a04b285c4e 100644 --- a/files/pt-br/conflicting/learn/css/building_blocks/selectors/index.html +++ b/files/pt-br/conflicting/learn/css/building_blocks/selectors/index.html @@ -1,8 +1,9 @@ --- title: Seletores -slug: Web/CSS/Getting_Started/Seletores +slug: conflicting/Learn/CSS/Building_blocks/Selectors translation_of: Learn/CSS/Building_blocks/Selectors translation_of_original: Web/Guide/CSS/Getting_started/Selectors +original_slug: Web/CSS/Getting_Started/Seletores ---

{{ CSSTutorialTOC() }}

diff --git a/files/pt-br/conflicting/learn/css/first_steps/how_css_works/index.html b/files/pt-br/conflicting/learn/css/first_steps/how_css_works/index.html index 2ead5ccae7..6a66017083 100644 --- a/files/pt-br/conflicting/learn/css/first_steps/how_css_works/index.html +++ b/files/pt-br/conflicting/learn/css/first_steps/how_css_works/index.html @@ -1,13 +1,14 @@ --- title: Como o CSS funciona -slug: Web/CSS/Getting_Started/Como_CSS_funciona +slug: conflicting/Learn/CSS/First_steps/How_CSS_works tags: - - 'CSS:PrimeirosPassos' + - CSS:PrimeirosPassos - Guía - Iniciante - Web translation_of: Learn/CSS/First_steps/How_CSS_works translation_of_original: Web/Guide/CSS/Getting_started/How_CSS_works +original_slug: Web/CSS/Getting_Started/Como_CSS_funciona ---

{{ CSSTutorialTOC() }}

diff --git a/files/pt-br/conflicting/learn/css/first_steps/how_css_works_199dae2aa1447fa94457a213c989744d/index.html b/files/pt-br/conflicting/learn/css/first_steps/how_css_works_199dae2aa1447fa94457a213c989744d/index.html index 1ccc04f0ce..8050022bae 100644 --- a/files/pt-br/conflicting/learn/css/first_steps/how_css_works_199dae2aa1447fa94457a213c989744d/index.html +++ b/files/pt-br/conflicting/learn/css/first_steps/how_css_works_199dae2aa1447fa94457a213c989744d/index.html @@ -1,8 +1,10 @@ --- title: O que é CSS -slug: Web/CSS/Getting_Started/Oque_é_CSS +slug: >- + conflicting/Learn/CSS/First_steps/How_CSS_works_199dae2aa1447fa94457a213c989744d translation_of: Learn/CSS/First_steps/How_CSS_works translation_of_original: Web/Guide/CSS/Getting_started/What_is_CSS +original_slug: Web/CSS/Getting_Started/Oque_é_CSS ---

{{ CSSTutorialTOC() }}

diff --git a/files/pt-br/conflicting/learn/css/first_steps/how_css_works_61240ddc35a4ddd533ea33cc8ccf1c87/index.html b/files/pt-br/conflicting/learn/css/first_steps/how_css_works_61240ddc35a4ddd533ea33cc8ccf1c87/index.html index 453aa4c966..cf66eb6b51 100644 --- a/files/pt-br/conflicting/learn/css/first_steps/how_css_works_61240ddc35a4ddd533ea33cc8ccf1c87/index.html +++ b/files/pt-br/conflicting/learn/css/first_steps/how_css_works_61240ddc35a4ddd533ea33cc8ccf1c87/index.html @@ -1,8 +1,10 @@ --- title: Por que usar CSS? -slug: Web/CSS/Getting_Started/Porque_usar_CSS +slug: >- + conflicting/Learn/CSS/First_steps/How_CSS_works_61240ddc35a4ddd533ea33cc8ccf1c87 translation_of: Learn/CSS/First_steps/How_CSS_works translation_of_original: Web/Guide/CSS/Getting_started/Why_use_CSS +original_slug: Web/CSS/Getting_Started/Porque_usar_CSS ---

{{ CSSTutorialTOC() }}

diff --git a/files/pt-br/conflicting/learn/css/first_steps/index.html b/files/pt-br/conflicting/learn/css/first_steps/index.html index 389962ab07..c5d5ad680c 100644 --- a/files/pt-br/conflicting/learn/css/first_steps/index.html +++ b/files/pt-br/conflicting/learn/css/first_steps/index.html @@ -1,6 +1,6 @@ --- title: Iniciando com o CSS -slug: Web/CSS/Getting_Started +slug: conflicting/Learn/CSS/First_steps tags: - CSS - Guia(2) @@ -9,6 +9,7 @@ tags: - Web translation_of: Learn/CSS/First_steps translation_of_original: Web/Guide/CSS/Getting_started +original_slug: Web/CSS/Getting_Started ---

 

diff --git a/files/pt-br/conflicting/learn/html/multimedia_and_embedding/video_and_audio_content/index.html b/files/pt-br/conflicting/learn/html/multimedia_and_embedding/video_and_audio_content/index.html index 4577341105..6b1c4dcec9 100644 --- a/files/pt-br/conflicting/learn/html/multimedia_and_embedding/video_and_audio_content/index.html +++ b/files/pt-br/conflicting/learn/html/multimedia_and_embedding/video_and_audio_content/index.html @@ -1,8 +1,9 @@ --- title: Utilizando áudio e vídeo com HTML5 -slug: Web/HTML/Using_HTML5_audio_and_video +slug: conflicting/Learn/HTML/Multimedia_and_embedding/Video_and_audio_content translation_of: Learn/HTML/Multimedia_and_embedding/Video_and_audio_content translation_of_original: Web/Guide/HTML/Using_HTML5_audio_and_video +original_slug: Web/HTML/Using_HTML5_audio_and_video ---

O HTML5 introduz o suporte de mídia embutido por meio dos elementos {{ HTMLElement("audio") }} e {{ HTMLElement("video") }}, oferecendo a possibilidade de incorporar facilmente mídia em documentos HTML.

diff --git a/files/pt-br/conflicting/learn/javascript/objects/index.html b/files/pt-br/conflicting/learn/javascript/objects/index.html index aaab9150b3..76ab6bff3d 100644 --- a/files/pt-br/conflicting/learn/javascript/objects/index.html +++ b/files/pt-br/conflicting/learn/javascript/objects/index.html @@ -1,6 +1,6 @@ --- title: Introdução ao JavaScript Orientado a Objeto -slug: Web/JavaScript/Introduction_to_Object-Oriented_JavaScript +slug: conflicting/Learn/JavaScript/Objects tags: - Construtor - Encapsular @@ -12,6 +12,7 @@ tags: - POO translation_of: Learn/JavaScript/Objects translation_of_original: Web/JavaScript/Introduction_to_Object-Oriented_JavaScript +original_slug: Web/JavaScript/Introduction_to_Object-Oriented_JavaScript ---

JavaScript tem fortes capacidades de programação orientada a objetos, apesar de ocorrerem algumas discussões devido às diferenças da orientação a objetos no JavaScript em comparação com outras linguagens.

diff --git a/files/pt-br/conflicting/mdn/contribute/getting_started/index.html b/files/pt-br/conflicting/mdn/contribute/getting_started/index.html index 26ae1e7a9a..da98995df7 100644 --- a/files/pt-br/conflicting/mdn/contribute/getting_started/index.html +++ b/files/pt-br/conflicting/mdn/contribute/getting_started/index.html @@ -1,8 +1,9 @@ --- title: Como ajudar a MDN -slug: 'Projeto:Como_ajudar_com_MDN' +slug: conflicting/MDN/Contribute/Getting_started translation_of: MDN/Contribute/Getting_started translation_of_original: MDN/Contribute/Tasks +original_slug: Projeto:Como_ajudar_com_MDN ---
{{MDNSidebar}}
diff --git a/files/pt-br/conflicting/mozilla/add-ons/index.html b/files/pt-br/conflicting/mozilla/add-ons/index.html index 9661e309ae..7cce58b45b 100644 --- a/files/pt-br/conflicting/mozilla/add-ons/index.html +++ b/files/pt-br/conflicting/mozilla/add-ons/index.html @@ -1,12 +1,13 @@ --- title: Construindo um complemento -slug: Construindo_um_complemento +slug: conflicting/Mozilla/Add-ons tags: - Add-ons - Complementos - Tutorial translation_of: Mozilla/Add-ons translation_of_original: Building_an_Extension +original_slug: Construindo_um_complemento ---

Introdução

This tutorial will take you through the steps required to build a very basic extension - one which adds a status bar panel to the Firefox browser containing the text "Hello, World!".

diff --git a/files/pt-br/conflicting/mozilla/firefox/releases/index.html b/files/pt-br/conflicting/mozilla/firefox/releases/index.html index c74b2f5b90..91ec12dec7 100644 --- a/files/pt-br/conflicting/mozilla/firefox/releases/index.html +++ b/files/pt-br/conflicting/mozilla/firefox/releases/index.html @@ -1,10 +1,11 @@ --- title: Notas de lançamento -slug: Tools/Notas_de_lancamento +slug: conflicting/Mozilla/Firefox/Releases tags: - Notas de lançamento translation_of: Mozilla/Firefox/Releases translation_of_original: Tools/Release_notes +original_slug: Tools/Notas_de_lancamento ---
{{ToolsSidebar}}

Firefox 53

diff --git a/files/pt-br/conflicting/web/accessibility/index.html b/files/pt-br/conflicting/web/accessibility/index.html index 51a4ad7843..98cab87efa 100644 --- a/files/pt-br/conflicting/web/accessibility/index.html +++ b/files/pt-br/conflicting/web/accessibility/index.html @@ -1,6 +1,6 @@ --- title: Desenvolvimento Web -slug: Web/Acessibilidade/Desenvolvimento_Web +slug: conflicting/Web/Accessibility tags: - ARIA - Accessibility @@ -12,6 +12,7 @@ tags: - XUL translation_of: Web/Accessibility translation_of_original: Web/Accessibility/Web_Development +original_slug: Web/Acessibilidade/Desenvolvimento_Web ---

Este documento oferece mais informações para os desenvolvedores sobre as acessibilidades web e XUL

diff --git a/files/pt-br/conflicting/web/api/crypto/getrandomvalues/index.html b/files/pt-br/conflicting/web/api/crypto/getrandomvalues/index.html index e0dbd0a970..77f6ade2cc 100644 --- a/files/pt-br/conflicting/web/api/crypto/getrandomvalues/index.html +++ b/files/pt-br/conflicting/web/api/crypto/getrandomvalues/index.html @@ -1,6 +1,6 @@ --- title: RandomSource -slug: Web/API/RandomSource +slug: conflicting/Web/API/Crypto/getRandomValues tags: - API - Interface @@ -9,6 +9,7 @@ tags: - Web Crypto API translation_of: Web/API/Crypto/getRandomValues translation_of_original: Web/API/RandomSource +original_slug: Web/API/RandomSource ---

{{APIRef("Web Crypto API")}}

diff --git a/files/pt-br/conflicting/web/api/cryptokey/index.html b/files/pt-br/conflicting/web/api/cryptokey/index.html index d80199a4ed..c3357ad127 100644 --- a/files/pt-br/conflicting/web/api/cryptokey/index.html +++ b/files/pt-br/conflicting/web/api/cryptokey/index.html @@ -1,6 +1,6 @@ --- title: CryptoKey.algorithm -slug: Web/API/CryptoKey/algorithm +slug: conflicting/Web/API/CryptoKey tags: - API - CryptoKey @@ -10,6 +10,7 @@ tags: - Web Crypto API translation_of: Web/API/CryptoKey translation_of_original: Web/API/CryptoKey/algorithm +original_slug: Web/API/CryptoKey/algorithm ---

{{APIRef("Web Crypto API")}}

diff --git a/files/pt-br/conflicting/web/api/cryptokey_33bd21ca8f20b4cd8c7b8c762e2fc597/index.html b/files/pt-br/conflicting/web/api/cryptokey_33bd21ca8f20b4cd8c7b8c762e2fc597/index.html index 666de87d23..aa0e144712 100644 --- a/files/pt-br/conflicting/web/api/cryptokey_33bd21ca8f20b4cd8c7b8c762e2fc597/index.html +++ b/files/pt-br/conflicting/web/api/cryptokey_33bd21ca8f20b4cd8c7b8c762e2fc597/index.html @@ -1,6 +1,6 @@ --- title: CryptoKey.type -slug: Web/API/CryptoKey/type +slug: conflicting/Web/API/CryptoKey_33bd21ca8f20b4cd8c7b8c762e2fc597 tags: - API - Apenas Leitura @@ -10,6 +10,7 @@ tags: - Web Crypto API translation_of: Web/API/CryptoKey translation_of_original: Web/API/CryptoKey/type +original_slug: Web/API/CryptoKey/type ---

{{APIRef("Web Crypto API")}}

diff --git a/files/pt-br/conflicting/web/api/cryptokey_53ae81677f4d9298717f2f245ae4da0d/index.html b/files/pt-br/conflicting/web/api/cryptokey_53ae81677f4d9298717f2f245ae4da0d/index.html index 4fe2885cbc..ef55c0bd81 100644 --- a/files/pt-br/conflicting/web/api/cryptokey_53ae81677f4d9298717f2f245ae4da0d/index.html +++ b/files/pt-br/conflicting/web/api/cryptokey_53ae81677f4d9298717f2f245ae4da0d/index.html @@ -1,6 +1,6 @@ --- title: CryptoKey.extractable -slug: Web/API/CryptoKey/extractable +slug: conflicting/Web/API/CryptoKey_53ae81677f4d9298717f2f245ae4da0d tags: - API - CryptoKey @@ -10,6 +10,7 @@ tags: - Web Crypto API translation_of: Web/API/CryptoKey translation_of_original: Web/API/CryptoKey/extractable +original_slug: Web/API/CryptoKey/extractable ---

{{APIRef("Web Crypto API")}}

diff --git a/files/pt-br/conflicting/web/api/cryptokey_f39d256ef7fbd1cf0a1f26de1e887ae7/index.html b/files/pt-br/conflicting/web/api/cryptokey_f39d256ef7fbd1cf0a1f26de1e887ae7/index.html index c74a658a32..af426c976c 100644 --- a/files/pt-br/conflicting/web/api/cryptokey_f39d256ef7fbd1cf0a1f26de1e887ae7/index.html +++ b/files/pt-br/conflicting/web/api/cryptokey_f39d256ef7fbd1cf0a1f26de1e887ae7/index.html @@ -1,6 +1,6 @@ --- title: CryptoKey.usages -slug: Web/API/CryptoKey/usages +slug: conflicting/Web/API/CryptoKey_f39d256ef7fbd1cf0a1f26de1e887ae7 tags: - API - CryptoKey @@ -10,6 +10,7 @@ tags: - Web Crypto API translation_of: Web/API/CryptoKey translation_of_original: Web/API/CryptoKey/usages +original_slug: Web/API/CryptoKey/usages ---

{{APIRef("Web Crypto API")}}

diff --git a/files/pt-br/conflicting/web/api/document_object_model/index.html b/files/pt-br/conflicting/web/api/document_object_model/index.html index 4b8372f55d..ef2930bbcb 100644 --- a/files/pt-br/conflicting/web/api/document_object_model/index.html +++ b/files/pt-br/conflicting/web/api/document_object_model/index.html @@ -1,6 +1,6 @@ --- title: Document Object Model (DOM) -slug: DOM +slug: conflicting/Web/API/Document_Object_Model tags: - DOM - NeedsTranslation @@ -8,6 +8,7 @@ tags: - TopicStub translation_of: Web/API/Document_Object_Model translation_of_original: DOM +original_slug: DOM ---
Using the W3C DOM Level 1 Core
diff --git a/files/pt-br/conflicting/web/api/globaleventhandlers/onscroll/index.html b/files/pt-br/conflicting/web/api/globaleventhandlers/onscroll/index.html index e5e756482a..03eb4f79de 100644 --- a/files/pt-br/conflicting/web/api/globaleventhandlers/onscroll/index.html +++ b/files/pt-br/conflicting/web/api/globaleventhandlers/onscroll/index.html @@ -1,8 +1,9 @@ --- title: window.onscroll -slug: Web/API/Window/onscroll +slug: conflicting/Web/API/GlobalEventHandlers/onscroll translation_of: Web/API/GlobalEventHandlers/onscroll translation_of_original: Web/API/Window/onscroll +original_slug: Web/API/Window/onscroll ---

{{ ApiRef() }}

Sumário

diff --git a/files/pt-br/conflicting/web/api/html_drag_and_drop_api/index.html b/files/pt-br/conflicting/web/api/html_drag_and_drop_api/index.html index 292b860888..e8dd96166b 100644 --- a/files/pt-br/conflicting/web/api/html_drag_and_drop_api/index.html +++ b/files/pt-br/conflicting/web/api/html_drag_and_drop_api/index.html @@ -1,11 +1,12 @@ --- title: DragDrop -slug: DragDrop +slug: conflicting/Web/API/HTML_Drag_and_Drop_API tags: - NeedsTranslation - TopicStub translation_of: Web/API/HTML_Drag_and_Drop_API translation_of_original: DragDrop +original_slug: DragDrop ---

 

See https://developer.mozilla.org/en-US/docs/DragDrop/Drag_and_Drop

diff --git a/files/pt-br/conflicting/web/api/index.html b/files/pt-br/conflicting/web/api/index.html index 93f5faee9a..0755dab0cf 100644 --- a/files/pt-br/conflicting/web/api/index.html +++ b/files/pt-br/conflicting/web/api/index.html @@ -1,6 +1,6 @@ --- title: Element.name -slug: Web/API/Element/name +slug: conflicting/Web/API tags: - API - DOM @@ -12,6 +12,7 @@ tags: - Web translation_of: Web/API translation_of_original: Web/API/Element/name +original_slug: Web/API/Element/name ---

{{ APIRef("DOM") }}

diff --git a/files/pt-br/conflicting/web/api/url/index.html b/files/pt-br/conflicting/web/api/url/index.html index 1dec25bd24..a4ffb566f8 100644 --- a/files/pt-br/conflicting/web/api/url/index.html +++ b/files/pt-br/conflicting/web/api/url/index.html @@ -1,8 +1,9 @@ --- title: Window.URL -slug: Web/API/Window/URL +slug: conflicting/Web/API/URL translation_of: Web/API/URL translation_of_original: Web/API/Window/URL +original_slug: Web/API/Window/URL ---

{{ApiRef("Window")}}{{SeeCompatTable}}

diff --git a/files/pt-br/conflicting/web/api/webrtc_api/index.html b/files/pt-br/conflicting/web/api/webrtc_api/index.html index 9b1cff261d..5f6c532f3a 100644 --- a/files/pt-br/conflicting/web/api/webrtc_api/index.html +++ b/files/pt-br/conflicting/web/api/webrtc_api/index.html @@ -1,6 +1,6 @@ --- title: WebRTC -slug: WebRTC +slug: conflicting/Web/API/WebRTC_API tags: - Media - NeedsContent @@ -9,6 +9,7 @@ tags: - WebRTC translation_of: Web/API/WebRTC_API translation_of_original: WebRTC +original_slug: WebRTC ---

O RTC na WebRTC significa comunicações em tempo real, tecnologia que permite transmissão de áudio/vídeo e compartilhamento de dados entre navegador clientes (pares). Como um conjunto de padrões, a WebRTC fornece a qualquer navegador com à capacidade de compartilhar dados de aplicativos e realizar teleconferências de ponto a ponto, sem a necessidade de instalar plug-ins ou software de terceiros.

diff --git a/files/pt-br/conflicting/web/api/windoworworkerglobalscope/index.html b/files/pt-br/conflicting/web/api/windoworworkerglobalscope/index.html index f51b72c102..69bc73a64f 100644 --- a/files/pt-br/conflicting/web/api/windoworworkerglobalscope/index.html +++ b/files/pt-br/conflicting/web/api/windoworworkerglobalscope/index.html @@ -1,6 +1,6 @@ --- title: WindowBase64 -slug: Web/API/WindowBase64 +slug: conflicting/Web/API/WindowOrWorkerGlobalScope tags: - API - HTML-DOM @@ -10,6 +10,7 @@ tags: - WindowBase64 translation_of: Web/API/WindowOrWorkerGlobalScope translation_of_original: Web/API/WindowBase64 +original_slug: Web/API/WindowBase64 ---

{{APIRef("HTML DOM")}}

diff --git a/files/pt-br/conflicting/web/api/windoworworkerglobalscope_e2691f7ad05781a30c5fc5bb3b3f633a/index.html b/files/pt-br/conflicting/web/api/windoworworkerglobalscope_e2691f7ad05781a30c5fc5bb3b3f633a/index.html index 8be6ca7e8b..4fbad68ef6 100644 --- a/files/pt-br/conflicting/web/api/windoworworkerglobalscope_e2691f7ad05781a30c5fc5bb3b3f633a/index.html +++ b/files/pt-br/conflicting/web/api/windoworworkerglobalscope_e2691f7ad05781a30c5fc5bb3b3f633a/index.html @@ -1,8 +1,9 @@ --- title: WindowTimers -slug: Web/API/WindowTimers +slug: conflicting/Web/API/WindowOrWorkerGlobalScope_e2691f7ad05781a30c5fc5bb3b3f633a translation_of: Web/API/WindowOrWorkerGlobalScope translation_of_original: Web/API/WindowTimers +original_slug: Web/API/WindowTimers ---
{{APIRef("HTML DOM")}}
diff --git a/files/pt-br/conflicting/web/api_dd04ca1265cb79b990b8120e5f5070d3/index.html b/files/pt-br/conflicting/web/api_dd04ca1265cb79b990b8120e5f5070d3/index.html index c7eb86d426..f8041d40bb 100644 --- a/files/pt-br/conflicting/web/api_dd04ca1265cb79b990b8120e5f5070d3/index.html +++ b/files/pt-br/conflicting/web/api_dd04ca1265cb79b990b8120e5f5070d3/index.html @@ -1,6 +1,6 @@ --- title: WebAPI -slug: WebAPI +slug: conflicting/Web/API_dd04ca1265cb79b990b8120e5f5070d3 tags: - Apps - DOM @@ -8,6 +8,7 @@ tags: - Mobile translation_of: Web/API translation_of_original: WebAPI +original_slug: WebAPI ---

WebAPI é um termo usado para se referir a um conjunto de compatibilidade de dispositivos e acessar APIs que permitem que aplicativos Web e conteúdos para acessar o hardware do dispositivo (como o estado da bateria ou o hardware de vibração do dispositivo), bem como o acesso aos dados armazenados no dispositivo (como como o calendário ou lista de contatos). Ao acrescentar estas APIs, esperamos expandir o que a Web pode fazer hoje e apenas plataformas proprietárias foram capazes de fazer no passado.

diff --git a/files/pt-br/conflicting/web/css/css_flexible_box_layout/basic_concepts_of_flexbox/index.html b/files/pt-br/conflicting/web/css/css_flexible_box_layout/basic_concepts_of_flexbox/index.html index 00dbf6fca6..48fdec5b1a 100644 --- a/files/pt-br/conflicting/web/css/css_flexible_box_layout/basic_concepts_of_flexbox/index.html +++ b/files/pt-br/conflicting/web/css/css_flexible_box_layout/basic_concepts_of_flexbox/index.html @@ -1,8 +1,9 @@ --- title: Usando CSS flexible boxes (Caixas Flexíveis) -slug: CSS/Usando_caixas_flexiveis_css +slug: conflicting/Web/CSS/CSS_Flexible_Box_Layout/Basic_Concepts_of_Flexbox translation_of: Web/CSS/CSS_Flexible_Box_Layout/Basic_Concepts_of_Flexbox translation_of_original: Web/CSS/CSS_Flexible_Box_Layout/Using_CSS_flexible_boxes +original_slug: CSS/Usando_caixas_flexiveis_css ---

{{ SeeCompatTable() }}

diff --git a/files/pt-br/conflicting/web/css/cursor/index.html b/files/pt-br/conflicting/web/css/cursor/index.html index 6e5b44d286..868643493e 100644 --- a/files/pt-br/conflicting/web/css/cursor/index.html +++ b/files/pt-br/conflicting/web/css/cursor/index.html @@ -1,8 +1,9 @@ --- title: '-moz-cell' -slug: Web/CSS/-moz-cell +slug: conflicting/Web/CSS/cursor translation_of: Web/CSS/cursor translation_of_original: Web/CSS/-moz-cell +original_slug: Web/CSS/-moz-cell ---
{{CSSRef}} {{deprecated_header}}
diff --git a/files/pt-br/conflicting/web/guide/index.html b/files/pt-br/conflicting/web/guide/index.html index b98429a656..946da629f5 100644 --- a/files/pt-br/conflicting/web/guide/index.html +++ b/files/pt-br/conflicting/web/guide/index.html @@ -1,8 +1,9 @@ --- title: Desenvolvimento Web -slug: desenvolvimento_web +slug: conflicting/Web/Guide translation_of: Web/Guide translation_of_original: Web_Development +original_slug: desenvolvimento_web ---

Desenvolvimento web compreende todos os aspectos do desenvolvimento de um site ou aplicação web.

Aprenda a criar qualquer coisa desde um site simples até sites complexos e altamente interativos que incluem as mais recentes tecnologias da Web, lendo os artigos que você encontrará aqui.

diff --git a/files/pt-br/conflicting/web/guide/mobile/index.html b/files/pt-br/conflicting/web/guide/mobile/index.html index 6a651575dc..9396f67ed5 100644 --- a/files/pt-br/conflicting/web/guide/mobile/index.html +++ b/files/pt-br/conflicting/web/guide/mobile/index.html @@ -1,12 +1,13 @@ --- title: Desenvolvimento Web móvel -slug: Web_Development/Mobile +slug: conflicting/Web/Guide/Mobile tags: - Mobile - TopicStub - Web Development translation_of: Web/Guide/Mobile translation_of_original: Web_Development/Mobile +original_slug: Web_Development/Mobile ---

Desenvolvimento de sites para ser visualizado em dispositivos móveis requer abordagens que certifique-se de que um site funciona também em dispositivos móveis, como faz em navegadores desktop. Os seguintes artigos descrevem algumas dessas abordagens.

    diff --git a/files/pt-br/conflicting/web/http/cors/index.html b/files/pt-br/conflicting/web/http/cors/index.html index b1cb255383..a0062279d9 100644 --- a/files/pt-br/conflicting/web/http/cors/index.html +++ b/files/pt-br/conflicting/web/http/cors/index.html @@ -1,8 +1,9 @@ --- title: Controle de Acesso do lado do servidor (CORS) -slug: Web/HTTP/Server-Side_Access_Control +slug: conflicting/Web/HTTP/CORS translation_of: Web/HTTP/CORS translation_of_original: Web/HTTP/Server-Side_Access_Control +original_slug: Web/HTTP/Server-Side_Access_Control ---

    Os sistemas de controle de acesso realizam   identificação de autorizaçãoautenticação , aprovação de acesso e prestação de contas de entidades por meio de credenciais de login, incluindo  senhas , números de identificação pessoal (PINs),   varreduras biométricas e chaves físicas ou eletrônicas.

    diff --git a/files/pt-br/conflicting/web/javascript/equality_comparisons_and_sameness/index.html b/files/pt-br/conflicting/web/javascript/equality_comparisons_and_sameness/index.html index 57f1c2fdcc..6248d01153 100644 --- a/files/pt-br/conflicting/web/javascript/equality_comparisons_and_sameness/index.html +++ b/files/pt-br/conflicting/web/javascript/equality_comparisons_and_sameness/index.html @@ -1,8 +1,9 @@ --- title: Igualdade em JavaScript -slug: Web/JavaScript/Guide/Igualdade +slug: conflicting/Web/JavaScript/Equality_comparisons_and_sameness translation_of: Web/JavaScript/Equality_comparisons_and_sameness translation_of_original: Web/JavaScript/Guide/Sameness +original_slug: Web/JavaScript/Guide/Igualdade ---

    A ES6 possui três facilidades internas para determinar se algum x e algum y são "os mesmos". Elas são: igualdade ou "igual duplo" (==), igualdade rigorosa ou "igual triplo" (===), e Object.is. (Note que Object.is foi adicionado na ES6. Ambos igual duplo e igual triplo existiam antes da ES6, e seu comportamento permanece o mesmo.)

    Visão geral

    diff --git a/files/pt-br/conflicting/web/javascript/reference/global_objects/boolean/index.html b/files/pt-br/conflicting/web/javascript/reference/global_objects/boolean/index.html index 99603a019f..7a36613082 100644 --- a/files/pt-br/conflicting/web/javascript/reference/global_objects/boolean/index.html +++ b/files/pt-br/conflicting/web/javascript/reference/global_objects/boolean/index.html @@ -1,8 +1,9 @@ --- title: Boolean.prototype -slug: Web/JavaScript/Reference/Global_Objects/Boolean/prototype +slug: conflicting/Web/JavaScript/Reference/Global_Objects/Boolean translation_of: Web/JavaScript/Reference/Global_Objects/Boolean translation_of_original: Web/JavaScript/Reference/Global_Objects/Boolean/prototype +original_slug: Web/JavaScript/Reference/Global_Objects/Boolean/prototype ---
    {{JSRef}}
    diff --git a/files/pt-br/conflicting/web/javascript/reference/global_objects/function/index.html b/files/pt-br/conflicting/web/javascript/reference/global_objects/function/index.html index 3b45ee5fe2..5e125e3e0b 100644 --- a/files/pt-br/conflicting/web/javascript/reference/global_objects/function/index.html +++ b/files/pt-br/conflicting/web/javascript/reference/global_objects/function/index.html @@ -1,8 +1,9 @@ --- title: Function.prototype -slug: Web/JavaScript/Reference/Global_Objects/Function/prototype +slug: conflicting/Web/JavaScript/Reference/Global_Objects/Function translation_of: Web/JavaScript/Reference/Global_Objects/Function translation_of_original: Web/JavaScript/Reference/Global_Objects/Function/prototype +original_slug: Web/JavaScript/Reference/Global_Objects/Function/prototype ---
    {{JSRef}}
    diff --git a/files/pt-br/conflicting/web/javascript/reference/global_objects/intl/numberformat/index.html b/files/pt-br/conflicting/web/javascript/reference/global_objects/intl/numberformat/index.html index dce89ef41e..50ffddd6b3 100644 --- a/files/pt-br/conflicting/web/javascript/reference/global_objects/intl/numberformat/index.html +++ b/files/pt-br/conflicting/web/javascript/reference/global_objects/intl/numberformat/index.html @@ -1,6 +1,6 @@ --- title: Intl.NumberFormat.prototype -slug: Web/JavaScript/Reference/Global_Objects/Intl/NumberFormat/prototype +slug: conflicting/Web/JavaScript/Reference/Global_Objects/Intl/NumberFormat tags: - Internacionalização - JavaScript @@ -11,6 +11,7 @@ tags: - Prototype translation_of: Web/JavaScript/Reference/Global_Objects/Intl/NumberFormat translation_of_original: Web/JavaScript/Reference/Global_Objects/Intl/NumberFormat/prototype +original_slug: Web/JavaScript/Reference/Global_Objects/Intl/NumberFormat/prototype ---
    {{JSRef}}
    diff --git a/files/pt-br/conflicting/web/javascript/reference/global_objects/map/index.html b/files/pt-br/conflicting/web/javascript/reference/global_objects/map/index.html index b20baf56cc..66e5c4d1c4 100644 --- a/files/pt-br/conflicting/web/javascript/reference/global_objects/map/index.html +++ b/files/pt-br/conflicting/web/javascript/reference/global_objects/map/index.html @@ -1,6 +1,6 @@ --- title: Map.prototype -slug: Web/JavaScript/Reference/Global_Objects/Map/prototype +slug: conflicting/Web/JavaScript/Reference/Global_Objects/Map tags: - ECMAScript 2015 - JavaScript @@ -8,6 +8,7 @@ tags: - Propriedade translation_of: Web/JavaScript/Reference/Global_Objects/Map translation_of_original: Web/JavaScript/Reference/Global_Objects/Map/prototype +original_slug: Web/JavaScript/Reference/Global_Objects/Map/prototype ---
    {{JSRef}}
    diff --git a/files/pt-br/conflicting/web/javascript/reference/global_objects/number/index.html b/files/pt-br/conflicting/web/javascript/reference/global_objects/number/index.html index 9dd96bc9b3..d034d79336 100644 --- a/files/pt-br/conflicting/web/javascript/reference/global_objects/number/index.html +++ b/files/pt-br/conflicting/web/javascript/reference/global_objects/number/index.html @@ -1,6 +1,6 @@ --- title: Number.prototype -slug: Web/JavaScript/Reference/Global_Objects/Number/prototype +slug: conflicting/Web/JavaScript/Reference/Global_Objects/Number tags: - JavaScript - Número @@ -8,6 +8,7 @@ tags: - Prototipo translation_of: Web/JavaScript/Reference/Global_Objects/Number translation_of_original: Web/JavaScript/Reference/Global_Objects/Number/prototype +original_slug: Web/JavaScript/Reference/Global_Objects/Number/prototype ---
    {{JSRef}}
    diff --git a/files/pt-br/conflicting/web/javascript/reference/global_objects/object/index.html b/files/pt-br/conflicting/web/javascript/reference/global_objects/object/index.html index d0c07076a0..d71b6247e2 100644 --- a/files/pt-br/conflicting/web/javascript/reference/global_objects/object/index.html +++ b/files/pt-br/conflicting/web/javascript/reference/global_objects/object/index.html @@ -1,12 +1,13 @@ --- title: Object.prototype -slug: Web/JavaScript/Reference/Global_Objects/Object/prototype +slug: conflicting/Web/JavaScript/Reference/Global_Objects/Object tags: - JavaScript - Objeto - Propriedade translation_of: Web/JavaScript/Reference/Global_Objects/Object translation_of_original: Web/JavaScript/Reference/Global_Objects/Object/prototype +original_slug: Web/JavaScript/Reference/Global_Objects/Object/prototype ---
    {{JSRef("Global_Objects", "Object")}}
    diff --git a/files/pt-br/conflicting/web/javascript/reference/global_objects/promise/index.html b/files/pt-br/conflicting/web/javascript/reference/global_objects/promise/index.html index d0be3d870c..4a914e3e34 100644 --- a/files/pt-br/conflicting/web/javascript/reference/global_objects/promise/index.html +++ b/files/pt-br/conflicting/web/javascript/reference/global_objects/promise/index.html @@ -1,8 +1,9 @@ --- title: Promise.prototype -slug: Web/JavaScript/Reference/Global_Objects/Promise/prototype +slug: conflicting/Web/JavaScript/Reference/Global_Objects/Promise translation_of: Web/JavaScript/Reference/Global_Objects/Promise translation_of_original: Web/JavaScript/Reference/Global_Objects/Promise/prototype +original_slug: Web/JavaScript/Reference/Global_Objects/Promise/prototype ---
    {{JSRef("Global_Objects", "Promise")}}
    diff --git a/files/pt-br/conflicting/web/javascript/reference/global_objects/set/index.html b/files/pt-br/conflicting/web/javascript/reference/global_objects/set/index.html index 1f2ca2c70b..955b187c6f 100644 --- a/files/pt-br/conflicting/web/javascript/reference/global_objects/set/index.html +++ b/files/pt-br/conflicting/web/javascript/reference/global_objects/set/index.html @@ -1,12 +1,13 @@ --- title: Set.prototype -slug: Web/JavaScript/Reference/Global_Objects/Set/prototype +slug: conflicting/Web/JavaScript/Reference/Global_Objects/Set tags: - Propriedade - Prototipo - set translation_of: Web/JavaScript/Reference/Global_Objects/Set translation_of_original: Web/JavaScript/Reference/Global_Objects/Set/prototype +original_slug: Web/JavaScript/Reference/Global_Objects/Set/prototype ---
    {{JSRef}}
    diff --git a/files/pt-br/conflicting/web/javascript/reference/global_objects/string/index.html b/files/pt-br/conflicting/web/javascript/reference/global_objects/string/index.html index a0df7b93ea..3426467889 100644 --- a/files/pt-br/conflicting/web/javascript/reference/global_objects/string/index.html +++ b/files/pt-br/conflicting/web/javascript/reference/global_objects/string/index.html @@ -1,8 +1,9 @@ --- title: String.prototype -slug: Web/JavaScript/Reference/Global_Objects/String/prototype +slug: conflicting/Web/JavaScript/Reference/Global_Objects/String translation_of: Web/JavaScript/Reference/Global_Objects/String translation_of_original: Web/JavaScript/Reference/Global_Objects/String/prototype +original_slug: Web/JavaScript/Reference/Global_Objects/String/prototype ---
    {{JSRef}}
    diff --git a/files/pt-br/conflicting/web/javascript/reference/global_objects/weakmap/index.html b/files/pt-br/conflicting/web/javascript/reference/global_objects/weakmap/index.html index c3e0334a3b..a6d5051c36 100644 --- a/files/pt-br/conflicting/web/javascript/reference/global_objects/weakmap/index.html +++ b/files/pt-br/conflicting/web/javascript/reference/global_objects/weakmap/index.html @@ -1,8 +1,9 @@ --- title: WeakMap.prototype -slug: Web/JavaScript/Reference/Global_Objects/WeakMap/prototype +slug: conflicting/Web/JavaScript/Reference/Global_Objects/WeakMap translation_of: Web/JavaScript/Reference/Global_Objects/WeakMap translation_of_original: Web/JavaScript/Reference/Global_Objects/WeakMap/prototype +original_slug: Web/JavaScript/Reference/Global_Objects/WeakMap/prototype ---
    {{JSRef("Global_Objects", "WeakMap")}}
    diff --git a/files/pt-br/conflicting/web/javascript/reference/operators/index.html b/files/pt-br/conflicting/web/javascript/reference/operators/index.html index 4ca87eaddd..d34dd06a28 100644 --- a/files/pt-br/conflicting/web/javascript/reference/operators/index.html +++ b/files/pt-br/conflicting/web/javascript/reference/operators/index.html @@ -1,11 +1,12 @@ --- title: Arithmetic operators -slug: Web/JavaScript/Reference/Operators/Arithmetic_Operators +slug: conflicting/Web/JavaScript/Reference/Operators tags: - JavaScript - Operadores translation_of: Web/JavaScript/Reference/Operators translation_of_original: Web/JavaScript/Reference/Operators/Arithmetic_Operators +original_slug: Web/JavaScript/Reference/Operators/Arithmetic_Operators ---
    {{jsSidebar("Operadores")}}
    diff --git a/files/pt-br/conflicting/web/javascript/reference/operators/spread_syntax/index.html b/files/pt-br/conflicting/web/javascript/reference/operators/spread_syntax/index.html index a877d131bc..dd25a185a7 100644 --- a/files/pt-br/conflicting/web/javascript/reference/operators/spread_syntax/index.html +++ b/files/pt-br/conflicting/web/javascript/reference/operators/spread_syntax/index.html @@ -1,11 +1,12 @@ --- title: Spread operator -slug: Web/JavaScript/Reference/Operators/Spread_operator +slug: conflicting/Web/JavaScript/Reference/Operators/Spread_syntax tags: - JavaScript - Operador translation_of: Web/JavaScript/Reference/Operators/Spread_syntax translation_of_original: Web/JavaScript/Reference/Operators/Spread_operator +original_slug: Web/JavaScript/Reference/Operators/Spread_operator ---
    {{jsSidebar("Operators")}}
    diff --git a/files/pt-br/conflicting/web/javascript/reference/operators_0d2e4b8154642b5a9dbd76a2a48cf96a/index.html b/files/pt-br/conflicting/web/javascript/reference/operators_0d2e4b8154642b5a9dbd76a2a48cf96a/index.html index d5e946a438..9069111aed 100644 --- a/files/pt-br/conflicting/web/javascript/reference/operators_0d2e4b8154642b5a9dbd76a2a48cf96a/index.html +++ b/files/pt-br/conflicting/web/javascript/reference/operators_0d2e4b8154642b5a9dbd76a2a48cf96a/index.html @@ -1,6 +1,7 @@ --- title: Operadores de comparação -slug: Web/JavaScript/Reference/Operators/Operadores_de_comparação +slug: >- + conflicting/Web/JavaScript/Reference/Operators_0d2e4b8154642b5a9dbd76a2a48cf96a tags: - Comparando String - Comparação @@ -9,6 +10,7 @@ tags: - Relacionais translation_of: Web/JavaScript/Reference/Operators translation_of_original: Web/JavaScript/Reference/Operators/Comparison_Operators +original_slug: Web/JavaScript/Reference/Operators/Operadores_de_comparação ---
    {{jsSidebar("Operators")}}
    diff --git a/files/pt-br/conflicting/web/javascript/reference/operators_7c8eb9475d97a4a734c5991857698560/index.html b/files/pt-br/conflicting/web/javascript/reference/operators_7c8eb9475d97a4a734c5991857698560/index.html index b8b2e654c4..dbffba6e21 100644 --- a/files/pt-br/conflicting/web/javascript/reference/operators_7c8eb9475d97a4a734c5991857698560/index.html +++ b/files/pt-br/conflicting/web/javascript/reference/operators_7c8eb9475d97a4a734c5991857698560/index.html @@ -1,8 +1,10 @@ --- title: Bitwise operators -slug: Web/JavaScript/Reference/Operators/Bitwise_Operators +slug: >- + conflicting/Web/JavaScript/Reference/Operators_7c8eb9475d97a4a734c5991857698560 translation_of: Web/JavaScript/Reference/Operators translation_of_original: Web/JavaScript/Reference/Operators/Bitwise_Operators +original_slug: Web/JavaScript/Reference/Operators/Bitwise_Operators ---
    {{jsSidebar("Operators")}}
    diff --git a/files/pt-br/conflicting/web/javascript/reference/operators_8fa8b34b0547a749514637a15d386886/index.html b/files/pt-br/conflicting/web/javascript/reference/operators_8fa8b34b0547a749514637a15d386886/index.html index e3a3ee6e8c..dd222f5285 100644 --- a/files/pt-br/conflicting/web/javascript/reference/operators_8fa8b34b0547a749514637a15d386886/index.html +++ b/files/pt-br/conflicting/web/javascript/reference/operators_8fa8b34b0547a749514637a15d386886/index.html @@ -1,6 +1,7 @@ --- title: Operadores Lógicos -slug: Web/JavaScript/Reference/Operators/Operadores_Logicos +slug: >- + conflicting/Web/JavaScript/Reference/Operators_8fa8b34b0547a749514637a15d386886 tags: - Operador - Operadores lógicos @@ -10,6 +11,7 @@ tags: - ou translation_of: Web/JavaScript/Reference/Operators translation_of_original: Web/JavaScript/Reference/Operators/Logical_Operators +original_slug: Web/JavaScript/Reference/Operators/Operadores_Logicos ---
    {{jsSidebar("Operators")}}
    diff --git a/files/pt-br/conflicting/web/javascript/reference/statements/switch/index.html b/files/pt-br/conflicting/web/javascript/reference/statements/switch/index.html index 8e0fb07927..769a86e29f 100644 --- a/files/pt-br/conflicting/web/javascript/reference/statements/switch/index.html +++ b/files/pt-br/conflicting/web/javascript/reference/statements/switch/index.html @@ -1,12 +1,13 @@ --- title: default -slug: Web/JavaScript/Reference/Statements/default +slug: conflicting/Web/JavaScript/Reference/Statements/switch tags: - JavaScript - Keyword - Palavra-chave translation_of: Web/JavaScript/Reference/Statements/switch translation_of_original: Web/JavaScript/Reference/Statements/default +original_slug: Web/JavaScript/Reference/Statements/default ---
    {{jsSidebar("Statements")}}
    diff --git a/files/pt-br/conflicting/web/progressive_web_apps/index.html b/files/pt-br/conflicting/web/progressive_web_apps/index.html index f379b2647a..43a6e52cbd 100644 --- a/files/pt-br/conflicting/web/progressive_web_apps/index.html +++ b/files/pt-br/conflicting/web/progressive_web_apps/index.html @@ -1,8 +1,9 @@ --- title: Design Responsivo -slug: Web_Development/Mobile/Design_responsivo +slug: conflicting/Web/Progressive_web_apps translation_of: Web/Progressive_web_apps translation_of_original: Web/Guide/Responsive_design +original_slug: Web_Development/Mobile/Design_responsivo ---

    Como uma reação aos problemas associados com a abordagem de sites separados para desenvolvimento de sites para celular e desktop, uma ideia relativamente nova (que é atualmente bastante antiga) está crescendo em popularidade: abandona a detecção do agente de usuário, e em vez disso faz sua pagína responder no lado cliente aos recursos do navegador. Esta abordagem, introduzida por Ethan Marcotte em seu artigo para A List Apart, veio a ser conhecido como Responsive Web Design. Como a abordagem de sites separados, WebDesgin Responsivo tem aspectos positivos e negativos.

    diff --git a/files/pt-br/games/introduction_to_html5_game_development/index.html b/files/pt-br/games/introduction_to_html5_game_development/index.html index 4401455ab9..316b42667f 100644 --- a/files/pt-br/games/introduction_to_html5_game_development/index.html +++ b/files/pt-br/games/introduction_to_html5_game_development/index.html @@ -1,6 +1,6 @@ --- title: Introduction to HTML5 Game Development (summary) -slug: Games/Introduction_to_HTML5_Game_Gevelopment_(summary) +slug: Games/Introduction_to_HTML5_Game_Development tags: - API - Desenvolvimento Web @@ -10,6 +10,7 @@ tags: - JavaScript - Jogos translation_of: Games/Introduction_to_HTML5_Game_Development_(summary) +original_slug: Games/Introduction_to_HTML5_Game_Gevelopment_(summary) ---
    {{GamesSidebar}}
    diff --git a/files/pt-br/glossary/404/index.html b/files/pt-br/glossary/404/index.html index bb287ab6ea..c7b791c307 100644 --- a/files/pt-br/glossary/404/index.html +++ b/files/pt-br/glossary/404/index.html @@ -1,12 +1,13 @@ --- title: '404' -slug: Glossario/404 +slug: Glossary/404 tags: - Erros HTTP - Glossário - Infraestrutura - Navegação translation_of: Glossary/404 +original_slug: Glossario/404 ---

    O 404 é um código de resposta padrão que significa que o {{Glossary("Server", "server")}} não consegue encontrar o recurso solicitado.

    diff --git a/files/pt-br/glossary/502/index.html b/files/pt-br/glossary/502/index.html index f2590b71fe..552a89f052 100644 --- a/files/pt-br/glossary/502/index.html +++ b/files/pt-br/glossary/502/index.html @@ -1,7 +1,8 @@ --- title: '502' -slug: Glossario/502 +slug: Glossary/502 translation_of: Glossary/502 +original_slug: Glossario/502 ---

    Um erro {{Glossary("HTTP")}}  que significa "Bad Gateway".

    diff --git a/files/pt-br/glossary/abstraction/index.html b/files/pt-br/glossary/abstraction/index.html index dc3b2df79e..5f8bbe720e 100644 --- a/files/pt-br/glossary/abstraction/index.html +++ b/files/pt-br/glossary/abstraction/index.html @@ -1,12 +1,13 @@ --- title: Abstração -slug: Glossario/Abstração +slug: Glossary/Abstraction tags: - Abstração - Glossário - Linguagem de Programação - Programação translation_of: Glossary/Abstraction +original_slug: Glossario/Abstração ---

    Abstração em {{Glossary("programação de computadores")}} é uma forma de reduzir a complexidade e tornar o projeto e a implementação mais eficientes em sistemas complexos de software. Ela esconde a complexidade técnica de um sistema por trás de uma {{Glossary("API", "APIs")}} mais simples.

    diff --git a/files/pt-br/glossary/accessibility/index.html b/files/pt-br/glossary/accessibility/index.html index 053c6be755..a53a3aec24 100644 --- a/files/pt-br/glossary/accessibility/index.html +++ b/files/pt-br/glossary/accessibility/index.html @@ -1,10 +1,11 @@ --- title: Acessibilidade -slug: Glossario/Acessibilidade +slug: Glossary/Accessibility tags: - Acessibilidade - Glossário translation_of: Glossary/Accessibility +original_slug: Glossario/Acessibilidade ---

    Acessibilidade na Web (Web Accessibility) (A11Y) refere-se às melhores práticas para manter um site útil, apesar das restrições físicas e técnicas. A acessibilidade da Web é formalmente definida e discutida no {{Glossary("W3C")}} através de {{Glossary("WAI","Web Accessibility Initiative")}} (WAI).

    diff --git a/files/pt-br/glossary/accessibility_tree/index.html b/files/pt-br/glossary/accessibility_tree/index.html index f05c237cf1..a177742c3c 100644 --- a/files/pt-br/glossary/accessibility_tree/index.html +++ b/files/pt-br/glossary/accessibility_tree/index.html @@ -1,6 +1,6 @@ --- title: Árvore de Acessibilidade -slug: Glossario/arvore_de_acessibilidade +slug: Glossary/Accessibility_tree tags: - AOM - Acessibilidade @@ -8,6 +8,7 @@ tags: - Glossário - Referencia translation_of: Glossary/Accessibility_tree +original_slug: Glossario/arvore_de_acessibilidade ---

    A árvore de acessibilidade contém informação relacionada à {{Glossary("accessibility", "acessibilidade")}} para a maioria dos elementos HTML.

    diff --git a/files/pt-br/glossary/adobe_flash/index.html b/files/pt-br/glossary/adobe_flash/index.html index 5699633794..a4906ed8a7 100644 --- a/files/pt-br/glossary/adobe_flash/index.html +++ b/files/pt-br/glossary/adobe_flash/index.html @@ -1,11 +1,12 @@ --- title: Adobe Flash -slug: Glossario/Adobe_Flash +slug: Glossary/Adobe_Flash tags: - Flash - Glossário - Infraestrutura translation_of: Glossary/Adobe_Flash +original_slug: Glossario/Adobe_Flash ---

    Flash é uma tecnologia obsolescente desenvolvida pela Adobe que possibilita aplicativos Web, gráficos de vetor e multimídia. Você precisa instalar o plugin certo para usar o Flash dentro de um {{Glossary("Navegador","navegador web")}}.

    diff --git a/files/pt-br/glossary/ajax/index.html b/files/pt-br/glossary/ajax/index.html index e83a091e72..128d2c2703 100644 --- a/files/pt-br/glossary/ajax/index.html +++ b/files/pt-br/glossary/ajax/index.html @@ -1,6 +1,6 @@ --- title: AJAX -slug: Glossario/AJAX +slug: Glossary/AJAX tags: - AJAX - Glossário @@ -8,6 +8,7 @@ tags: - Intro - Introdução translation_of: Glossary/AJAX +original_slug: Glossario/AJAX ---

    AJAX (Asynchronous {{glossary("JavaScript")}} e {{glossary("XML")}}) é uma prática de programação da combinação de {{glossary("HTML")}}, {{glossary("CSS")}}, JavaScript, o {{glossary("DOM")}}, e o XMLHttpRequest {{glossary("object")}} para a construção de páginas web mais complexas.

    diff --git a/files/pt-br/glossary/algorithm/index.html b/files/pt-br/glossary/algorithm/index.html index ed80819f54..c42c7be573 100644 --- a/files/pt-br/glossary/algorithm/index.html +++ b/files/pt-br/glossary/algorithm/index.html @@ -1,10 +1,11 @@ --- title: Algoritmo -slug: Glossario/Algoritmo +slug: Glossary/Algorithm tags: - CodingScripting - Glossário - Programação translation_of: Glossary/Algorithm +original_slug: Glossario/Algoritmo ---

    Um algoritmo é uma série de instruções independentes que executam uma função.

    diff --git a/files/pt-br/glossary/alignment_container/index.html b/files/pt-br/glossary/alignment_container/index.html index e181c3a0ca..1ca114a2d1 100644 --- a/files/pt-br/glossary/alignment_container/index.html +++ b/files/pt-br/glossary/alignment_container/index.html @@ -1,12 +1,13 @@ --- title: Contêiner de Alinhamento -slug: Glossario/conteiner_de_alinhamento +slug: Glossary/Alignment_Container tags: - Alinhamento de contêiner - CSS - Glossário - alinhamento translation_of: Glossary/Alignment_Container +original_slug: Glossario/conteiner_de_alinhamento ---

    O contêiner de alinhamento é um retângulo dentro do qual os tópicos de alinhamento são alinhados, isto é, definidos. Isso é definido pelo modelo de layout; geralmente é o bloco que contém o tópico de alinhamento, e assume o modo de escrita do box estabelecendo o bloco de conteúdo.

    diff --git a/files/pt-br/glossary/alignment_subject/index.html b/files/pt-br/glossary/alignment_subject/index.html index cfaebfb6ce..24c016f244 100644 --- a/files/pt-br/glossary/alignment_subject/index.html +++ b/files/pt-br/glossary/alignment_subject/index.html @@ -1,6 +1,6 @@ --- title: Tópico de Alinhamento -slug: Glossario/topico_de_alinhamento +slug: Glossary/Alignment_Subject tags: - CSS - Glossário @@ -8,6 +8,7 @@ tags: - assunto de alinhamento - tópico de alinhamento translation_of: Glossary/Alignment_Subject +original_slug: Glossario/topico_de_alinhamento ---

    No Alinhamento de Box do CSS, o tópico (assunto) de alinhamento é a coisa (ou coisas) que está sendo alinhada pelas propriedades.

    diff --git a/files/pt-br/glossary/alpha/index.html b/files/pt-br/glossary/alpha/index.html index 53b1e183ff..405f22c540 100644 --- a/files/pt-br/glossary/alpha/index.html +++ b/files/pt-br/glossary/alpha/index.html @@ -1,6 +1,6 @@ --- title: Alpha (canal alfa) -slug: Glossario/Alpha +slug: Glossary/Alpha tags: - Alfa - Canal Alfa @@ -17,6 +17,7 @@ tags: - graficos - pixel translation_of: Glossary/Alpha +original_slug: Glossario/Alpha ---

    Cores são representadas no formato digital como uma coleção de números, cada qual sinalizando o nível de força ou intensidade de dado componente da cor. Cada um desses componententes é chamado de canal. Num típico arquivo de imagem, o canais de cores descritos devem ser vermelho, verde e azul, que serão usados para definir a cor final. Para representar uma cor que através dela um plano de fundo possa ser visto, um quarto canal é adicionado a ela: o canal alfa. O canal alfa define o nível de opacidade da cor.

    diff --git a/files/pt-br/glossary/api/index.html b/files/pt-br/glossary/api/index.html index c964801e48..c490a4198a 100644 --- a/files/pt-br/glossary/api/index.html +++ b/files/pt-br/glossary/api/index.html @@ -1,9 +1,10 @@ --- title: API -slug: Glossario/API +slug: Glossary/API tags: - Glossario(2) translation_of: Glossary/API +original_slug: Glossario/API ---

    Uma API (Application Programming Interface) é um conjunto de características e regras existentes em uma aplicação que possibilitam interações com essa através de um software - ao contrário de uma interface de usuário humana. A API pode ser entendida como um simples contrato entre a aplicação que a fornece e outros itens, como outros componentes do software, ou software de terceiros.

    diff --git a/files/pt-br/glossary/apple_safari/index.html b/files/pt-br/glossary/apple_safari/index.html index d32aa243b2..750bdc49e6 100644 --- a/files/pt-br/glossary/apple_safari/index.html +++ b/files/pt-br/glossary/apple_safari/index.html @@ -1,11 +1,12 @@ --- title: Apple Safari -slug: Glossario/Apple_Safari +slug: Glossary/Apple_Safari tags: - Glossário - Mecanismos Web - Navegação translation_of: Glossary/Apple_Safari +original_slug: Glossario/Apple_Safari ---

    Safari é um {{Glossary("navegador","navegador Web")}} desenvolvido pela Apple e fornecido com ambos Mac OS X e iOS. Baseia-se com o mecanismo de código aberto WebKit.

    diff --git a/files/pt-br/glossary/argument/index.html b/files/pt-br/glossary/argument/index.html index 72e470fba0..43660669cf 100644 --- a/files/pt-br/glossary/argument/index.html +++ b/files/pt-br/glossary/argument/index.html @@ -1,11 +1,12 @@ --- title: Argumento -slug: Glossario/Argument +slug: Glossary/Argument tags: - EntendendoJS - Glossário - JavaScript translation_of: Glossary/Argument +original_slug: Glossario/Argument ---

    Um argumento é um {{glossary("valor")}} ({{Glossary("primitivo")}} ou um {{Glossary("objeto")}})  passado como um input (entrada) para uma {{Glossary("função")}}.

    diff --git a/files/pt-br/glossary/arpanet/index.html b/files/pt-br/glossary/arpanet/index.html index 19e9b45df4..ed3be5b10a 100644 --- a/files/pt-br/glossary/arpanet/index.html +++ b/files/pt-br/glossary/arpanet/index.html @@ -1,10 +1,11 @@ --- title: Arpanet -slug: Glossario/Arpanet +slug: Glossary/Arpanet tags: - Glossário - Infraestrutura translation_of: Glossary/Arpanet +original_slug: Glossario/Arpanet ---

    A ARPAnet (Advanced Research Projects Agency Network, em português, Rede da Agência de Pesquisas em Projetos Avançados) foi a primeira rede de computadores, construída em 1969 como um meio robusto para transmitir dados militares sigilosos e para interligar os departamentos de pesquisa por todo os Estados Unidos. ARPAnet primeiro executou NCP (Network Control Protocol, em português, Protocolo de Controle de Rede) e posteriormente a primeira versão do protocolo de internet ou o conjunto de protocolos {{glossary("TCP")}}/{{glossary("IPv6","IP")}} (Transmission Control Protocol/Internet Protocol, em português, Protocolo de Controle de Transmissão/Protocolo de Internet), fazendo da ARPAnet uma parte proeminente da nascente {{glossary("Internet")}}. ARPAnet foi fechado no início de 1990.

    diff --git a/files/pt-br/glossary/array/index.html b/files/pt-br/glossary/array/index.html index 4d1f3cf866..e4ba5d16f2 100644 --- a/files/pt-br/glossary/array/index.html +++ b/files/pt-br/glossary/array/index.html @@ -1,10 +1,11 @@ --- title: Array -slug: Glossario/array +slug: Glossary/array tags: - Iniciante - JavaScript translation_of: Glossary/array +original_slug: Glossario/array ---

    Um array (arranjo ou vetor) é um conjunto de dados (que pode assumir os mais diversos tipos, desde do tipo {{Glossary("primitivo")}}, a {{Glossary("objeto")}} dependendo da linguagem de programação). Arrays são utilizados para armazenar mais de um valor em uma única variável. Isso é comparável a uma variável que pode armazenar apenas um valor.

    diff --git a/files/pt-br/glossary/ascii/index.html b/files/pt-br/glossary/ascii/index.html index eee1f0d2c3..7ad4110f05 100644 --- a/files/pt-br/glossary/ascii/index.html +++ b/files/pt-br/glossary/ascii/index.html @@ -1,6 +1,6 @@ --- title: ASCII -slug: Glossario/ASCII +slug: Glossary/ASCII tags: - ASCII - Caracteres ASCII @@ -8,6 +8,7 @@ tags: - Padrão de codificação - Símbolos ASCII translation_of: Glossary/ASCII +original_slug: Glossario/ASCII ---

    ASCII (Código Padrão Americano para o Intercâmbio de Informação) é um dos mais populares métodos de codificação usado por computadores para converter letras, números, pontuações e códigos de controle dentro do formato digital. Desde 2007, UTF-8 substituiu-o na web.

    diff --git a/files/pt-br/glossary/asynchronous/index.html b/files/pt-br/glossary/asynchronous/index.html index 5fdc23acfc..2b6cef7278 100644 --- a/files/pt-br/glossary/asynchronous/index.html +++ b/files/pt-br/glossary/asynchronous/index.html @@ -1,11 +1,12 @@ --- title: Assíncrono -slug: Glossario/Assincrono +slug: Glossary/Asynchronous tags: - Glossário - Mecanismos Web - Web translation_of: Glossary/Asynchronous +original_slug: Glossario/Assincrono ---

    Assíncrono refere-se a um ambiente de comunicação onde cada parte recebe e processa mensagens quando for conveniente ou possível em vez de imediatamente.

    diff --git a/files/pt-br/glossary/attribute/index.html b/files/pt-br/glossary/attribute/index.html index f36e6f7fed..68d376eaeb 100644 --- a/files/pt-br/glossary/attribute/index.html +++ b/files/pt-br/glossary/attribute/index.html @@ -1,12 +1,13 @@ --- title: Atributo HTML -slug: Glossario/Atributo +slug: Glossary/Attribute tags: - Atributos - Glossário - HTML - Tags translation_of: Glossary/Attribute +original_slug: Glossario/Atributo ---

    Atributos estendem uma {{Glossary("tag")}} ("etiqueta"), modificando o comportamento dela ou fornecendo meta dados.
    Um atributo sempre tem a forma nome=valor (especificando o identificador do atributo e o valor associado a ele).

    diff --git a/files/pt-br/glossary/bandwidth/index.html b/files/pt-br/glossary/bandwidth/index.html index e986f11f4a..b9d2b3bf67 100644 --- a/files/pt-br/glossary/bandwidth/index.html +++ b/files/pt-br/glossary/bandwidth/index.html @@ -1,7 +1,8 @@ --- title: Bandwidth -slug: Glossario/Bandwidth +slug: Glossary/Bandwidth translation_of: Glossary/Bandwidth +original_slug: Glossario/Bandwidth ---

    Largura de banda é a medida de quanta informação pode trafegar através de uma conexão de dados, em um determinado espaço de tempo. É geralmente medida em multiplos de bits por segundo (bps),  por exemplo megabits por segundo (Mbps) ou gigabits por segundo (Gbps).

    diff --git a/files/pt-br/glossary/bigint/index.html b/files/pt-br/glossary/bigint/index.html index 004b5a3b80..73d25fc463 100644 --- a/files/pt-br/glossary/bigint/index.html +++ b/files/pt-br/glossary/bigint/index.html @@ -1,7 +1,8 @@ --- title: BigInt -slug: Glossario/BigInt +slug: Glossary/BigInt translation_of: Glossary/BigInt +original_slug: Glossario/BigInt ---

    No {{Glossary("JavaScript")}}, BigInt é um tipo de dado numérico que representa inteiros no formato de precisão arbritrária. Em outras linguagens de programação existem tipos numéricos diferentes, como por exemplo: Integers, Floats, Doubles ou Bignums.

    diff --git a/files/pt-br/glossary/boolean/index.html b/files/pt-br/glossary/boolean/index.html index f1b5a80c38..208c29c4e5 100644 --- a/files/pt-br/glossary/boolean/index.html +++ b/files/pt-br/glossary/boolean/index.html @@ -1,7 +1,8 @@ --- title: Booleano -slug: Glossario/Booleano +slug: Glossary/Boolean translation_of: Glossary/Boolean +original_slug: Glossario/Booleano ---

    Um booleano, em ciência da computação, é um tipo de dado lógico que pode ter apenas um de dois valores possíveis: verdadeiro ou falso. Por exemplo, em JavaScript, condicionais booleanas são usadas para decidir quais trechos do cógigo serão executados ou repetidas.

    diff --git a/files/pt-br/glossary/browser/index.html b/files/pt-br/glossary/browser/index.html index 7fa7f3cbaa..f431ce5bad 100644 --- a/files/pt-br/glossary/browser/index.html +++ b/files/pt-br/glossary/browser/index.html @@ -1,10 +1,11 @@ --- title: Navegador -slug: Glossario/Navegador +slug: Glossary/Browser tags: - Glossário - Navegação translation_of: Glossary/Browser +original_slug: Glossario/Navegador ---

    Um navegador Web é um programa que obtém e exibe páginas da {{Glossary("World Wide Web","Web")}}, e permite que os usuários acessem outras páginas através de {{Glossary("hyperlink","hyperlinks")}}.

    diff --git a/files/pt-br/glossary/cache/index.html b/files/pt-br/glossary/cache/index.html index 69fc7caf49..a4fca873d6 100644 --- a/files/pt-br/glossary/cache/index.html +++ b/files/pt-br/glossary/cache/index.html @@ -1,12 +1,13 @@ --- title: Cache -slug: Glossario/Cache +slug: Glossary/Cache tags: - Cache - Glossário - HTTP - web cache translation_of: Glossary/Cache +original_slug: Glossario/Cache ---

    O cache (web cache ou HTTP cache) é uma forma de armazenar dados que foram recebidos por respostas HTTP temporariamente para que possam ser usados em requisições HTTP subsequentes enquanto as condições de seu uso forem satisfeitas.

    diff --git a/files/pt-br/glossary/call_stack/index.html b/files/pt-br/glossary/call_stack/index.html index 73e99316be..772871f93d 100644 --- a/files/pt-br/glossary/call_stack/index.html +++ b/files/pt-br/glossary/call_stack/index.html @@ -1,7 +1,8 @@ --- title: Call stack (Pilha de chamadas) -slug: Glossario/Call_stack +slug: Glossary/Call_stack translation_of: Glossary/Call_stack +original_slug: Glossario/Call_stack ---

    A pilha de chamadas (call stack) é um mecanismo do interpretador de uma linguagem que organiza o funcionamento do script quando são chamadas muitas funções, qual função está sendo executada no momento, e quais serão chamadas dentro de alguma função, etc.

    diff --git a/files/pt-br/glossary/callback_function/index.html b/files/pt-br/glossary/callback_function/index.html index 42e67bcde6..277028662c 100644 --- a/files/pt-br/glossary/callback_function/index.html +++ b/files/pt-br/glossary/callback_function/index.html @@ -1,7 +1,8 @@ --- title: Função Callback -slug: Glossario/Callback_function +slug: Glossary/Callback_function translation_of: Glossary/Callback_function +original_slug: Glossario/Callback_function ---

    Uma função callback é uma função passada a outra função como argumento, que é então invocado dentro da função externa para completar algum tipo de rotina ou ação.

    diff --git a/files/pt-br/glossary/caret/index.html b/files/pt-br/glossary/caret/index.html index 584a1ae8f1..3dc4771fb5 100644 --- a/files/pt-br/glossary/caret/index.html +++ b/files/pt-br/glossary/caret/index.html @@ -1,7 +1,8 @@ --- title: caret -slug: Glossario/caret +slug: Glossary/caret translation_of: Glossary/caret +original_slug: Glossario/caret ---

    Um caret (às vezes chamado de "cursor de texto") é um indicador exibido na tela para indicar onde a entrada de texto será inserida. A maioria das interfaces de usuário representam o caret usando uma linha vertical fina ou uma caixa do tamanho de um caractere que pisca, mas isso pode variar. Este ponto do texto é chamado de ponto de inserção. A palavra "careta" diferencia o ponto de inserção de texto do cursor do mouse.

    diff --git a/files/pt-br/glossary/cdn/index.html b/files/pt-br/glossary/cdn/index.html index e539a279ae..b7611d6dbe 100644 --- a/files/pt-br/glossary/cdn/index.html +++ b/files/pt-br/glossary/cdn/index.html @@ -1,11 +1,12 @@ --- title: CDN -slug: Glossario/CDN +slug: Glossary/CDN tags: - Glossario(2) - Infraestrutura - Rede de fornecimento de conteúdo - cdn translation_of: Glossary/CDN +original_slug: Glossario/CDN ---

    CDN é a sigla para (Content Delivery Network) ou seja, Rede de Fornecimento de Conteúdo na tradução livre. É um grupo de servidores espalhados em muitos locais. Esses servidores armazenam cópias duplicadas de dados para que os servidores possam atender às solicitações de dados com base nos quais servidores estão mais próximos dos respectivos usuários finais. CDNs deixa os servidores menos sobrecarregados quando possuem alto tráfego de dados.

    diff --git a/files/pt-br/glossary/character/index.html b/files/pt-br/glossary/character/index.html index 7ce3a97b55..9a9de583a4 100644 --- a/files/pt-br/glossary/character/index.html +++ b/files/pt-br/glossary/character/index.html @@ -1,11 +1,12 @@ --- title: Caractere -slug: Glossario/Caractere +slug: Glossary/Character tags: - CodingScripting - Glossário - strings translation_of: Glossary/Character +original_slug: Glossario/Caractere ---

    Um caractere é um símbolo (letras, números, pontuação)  ou de controle não imprimível (por exemplo, carriage return ou hífen). {{glossary ("UTF-8")}} é o conjunto de caracteres mais comum e inclui os grafemas dos idiomas humanos mais populares.

    diff --git a/files/pt-br/glossary/character_encoding/index.html b/files/pt-br/glossary/character_encoding/index.html index b1748642cf..bc14288cbf 100644 --- a/files/pt-br/glossary/character_encoding/index.html +++ b/files/pt-br/glossary/character_encoding/index.html @@ -1,7 +1,8 @@ --- title: Character encoding -slug: Glossario/character_encoding +slug: Glossary/character_encoding translation_of: Glossary/character_encoding +original_slug: Glossario/character_encoding ---

    Uma codificação define um mapeamento entre bytes e texto. Uma sequência de bytes permite diferentes interpretações textuais. Ao especificar uma codificação específica (como UTF-8), especificamos como a sequência de bytes deve ser interpretada.

    diff --git a/files/pt-br/glossary/chrome/index.html b/files/pt-br/glossary/chrome/index.html index d16366cc3d..3f36d6d207 100644 --- a/files/pt-br/glossary/chrome/index.html +++ b/files/pt-br/glossary/chrome/index.html @@ -1,11 +1,12 @@ --- title: Chrome -slug: Glossario/Chrome +slug: Glossary/Chrome tags: - Chrome - Glossário - Navegador translation_of: Glossary/Chrome +original_slug: Glossario/Chrome ---

    Em um navegador, o chrome é qualquer aspecto visível do navegador aparte das páginas web (ex., barra de ferramentas, menus, abas). Não deve ser confundido com o {{glossary("Google Chrome")}} navegador.

    diff --git a/files/pt-br/glossary/class/index.html b/files/pt-br/glossary/class/index.html index 688df4d764..8bfd8005b6 100644 --- a/files/pt-br/glossary/class/index.html +++ b/files/pt-br/glossary/class/index.html @@ -1,10 +1,11 @@ --- title: Class -slug: Glossario/Class +slug: Glossary/Class tags: - Classe - Glossário translation_of: Glossary/Class +original_slug: Glossario/Class ---

    Em {{glossary("OOP","programação orientada a objeto")}}, uma classe define as características de um {{glossary("object","objecto")}}. A classe é uma definição de  modelo de {{glossary("property","propriedades")}} e {{glossary("method","metódos")}} de um objeto, o "projeto" a partir do qual outras instâncias mais específicas do objeto são desenhados.

    diff --git a/files/pt-br/glossary/cms/index.html b/files/pt-br/glossary/cms/index.html index e0501a2bbc..7c3944fcb6 100644 --- a/files/pt-br/glossary/cms/index.html +++ b/files/pt-br/glossary/cms/index.html @@ -1,11 +1,12 @@ --- title: CMS -slug: Glossario/CMS +slug: Glossary/CMS tags: - CMS - Glossário - Sistema de gerenciamento de conteúdo translation_of: Glossary/CMS +original_slug: Glossario/CMS ---

    O CMS da sigla em inglês( Content Management System) ou seja, Sistema de Gerenciamento de Conteúdo, é um software que permite usuários publicar, organizar, mudar ou remover vários tipos de conteúdo, não apenas textos mas também incorporação de imagens, vídeos , aúdios e códigos interativos

    diff --git a/files/pt-br/glossary/computer_programming/index.html b/files/pt-br/glossary/computer_programming/index.html index 34dff2ed11..5ee9bee417 100644 --- a/files/pt-br/glossary/computer_programming/index.html +++ b/files/pt-br/glossary/computer_programming/index.html @@ -1,11 +1,12 @@ --- title: Programação de Computadores -slug: Glossario/Programação_de_Computadores +slug: Glossary/Computer_Programming tags: - Linguagem de Programação - Programação - Programação de Computadores translation_of: Glossary/Computer_Programming +original_slug: Glossario/Programação_de_Computadores ---

    Programação é o processo que formula a solução de um problema computacional ou automatiza uma tarefa repetitiva na forma de uma série de instruções sequenciais em um programa executável.

    diff --git a/files/pt-br/glossary/cors/index.html b/files/pt-br/glossary/cors/index.html index 3fbec520a7..fdd042ce6b 100644 --- a/files/pt-br/glossary/cors/index.html +++ b/files/pt-br/glossary/cors/index.html @@ -1,6 +1,6 @@ --- title: CORS -slug: Glossario/CORS +slug: Glossary/CORS tags: - Glossary - Glossário @@ -9,6 +9,7 @@ tags: - Security - Segurança translation_of: Glossary/CORS +original_slug: Glossario/CORS ---

    CORS (Cross-Origin Resource Sharing) é um sistema que consiste na transmissão de {{Glossary("Header", "HTTP headers")}}, que determina se navegadores vão bloquear código JavaScript de acessarem respostas provindas de requisições entre origens.

    diff --git a/files/pt-br/glossary/crud/index.html b/files/pt-br/glossary/crud/index.html index 5a5ab4e30d..f241eaabac 100644 --- a/files/pt-br/glossary/crud/index.html +++ b/files/pt-br/glossary/crud/index.html @@ -1,10 +1,11 @@ --- title: CRUD -slug: Glossario/CRUD +slug: Glossary/CRUD tags: - Glossário - Infraestrutura translation_of: Glossary/CRUD +original_slug: Glossario/CRUD ---

    CRUD (Create, Read, Update, Delete) é um acrônimo para as maneiras de se operar em informação armazenada. É um mnemônico para as quatro operações básicas de armazenamento persistente. CRUD tipicamente refere-se a operações perfomadas em um banco de dados ou base de dados, mas também pode aplicar-se para funções de alto nível de uma aplicação, como exclusões reversíveis, onde a informação não é realmente deletada, mas é marcada como deletada via status.

    diff --git a/files/pt-br/glossary/css/index.html b/files/pt-br/glossary/css/index.html index f3efc39ca6..1914b79bc5 100644 --- a/files/pt-br/glossary/css/index.html +++ b/files/pt-br/glossary/css/index.html @@ -1,11 +1,12 @@ --- title: CSS -slug: Glossario/CSS +slug: Glossary/CSS tags: - CSS - Glossário - Web translation_of: Glossary/CSS +original_slug: Glossario/CSS ---

    CSS (Cascading Style Sheets) é uma linguagem declarativa que controla a apresentação visual de páginas web em um {{glossary("browser","navegador")}}. O navegador aplica as declarações de estilo CSS aos elementos selecionados para exibi-los apropriadamente. Uma declaração de estilo contem as propriedades e seus valores, que determinam a aparência de uma página web.

    diff --git a/files/pt-br/glossary/css_pixel/index.html b/files/pt-br/glossary/css_pixel/index.html index 327c7e0147..ddf101fec6 100644 --- a/files/pt-br/glossary/css_pixel/index.html +++ b/files/pt-br/glossary/css_pixel/index.html @@ -1,6 +1,6 @@ --- title: Pixel CSS -slug: Glossario/CSS_pixel +slug: Glossary/CSS_pixel tags: - CSS - Glossário @@ -12,6 +12,7 @@ tags: - tamanho - unidade translation_of: Glossary/CSS_pixel +original_slug: Glossario/CSS_pixel ---

    O Pixel CSS - denotado no {{Glossary("CSS")}} pelo sufixo px - é uma unidade de comprimento que corresponde aproximadamente a largura ou altura de um ponto único que pode ser confortavelmente visto pelos olhos humanos sem esforço, mas é o menor possível. Por definição, esse é o tamanho físico de um único píxel em uma densidade de 96 DPI, situado a um braço de distância dos olhos do observador.

    diff --git a/files/pt-br/glossary/css_preprocessor/index.html b/files/pt-br/glossary/css_preprocessor/index.html index d41fb8f1a5..2663a70f15 100644 --- a/files/pt-br/glossary/css_preprocessor/index.html +++ b/files/pt-br/glossary/css_preprocessor/index.html @@ -1,10 +1,11 @@ --- title: Pré-processador CSS -slug: Glossario/CSS_preprocessor +slug: Glossary/CSS_preprocessor tags: - CSS - Glossário translation_of: Glossary/CSS_preprocessor +original_slug: Glossario/CSS_preprocessor ---

    Um pré-processador CSS é um programa que permite você gerar {{Glossary("CSS")}} a partir de uma {{Glossary("syntax", "sintaxe")}} única desse pré-processador. Existem muitos pré-processadores CSS para escolha, no entanto, a maioria deles irá adicionar algumas funcionalidades extras que não existem no CSS puro, como um mixin, seletores aninhados, herança de seletores, e assim por diante. Essas funcionalidades fazem a estrutura do CSS mais legível e fácil de manter.

    diff --git a/files/pt-br/glossary/css_selector/index.html b/files/pt-br/glossary/css_selector/index.html index b45e0cdc77..e724bc1942 100644 --- a/files/pt-br/glossary/css_selector/index.html +++ b/files/pt-br/glossary/css_selector/index.html @@ -1,7 +1,8 @@ --- title: Selector (CSS) -slug: Glossario/CSS_Selector +slug: Glossary/CSS_Selector translation_of: Glossary/CSS_Selector +original_slug: Glossario/CSS_Selector ---

    O seletor CSS é parte da regra do CSS que lhe permite selecionar qual elemento(s) vai receber o estilo pela regra. Por exemplo:

    diff --git a/files/pt-br/glossary/cssom/index.html b/files/pt-br/glossary/cssom/index.html index 834f607810..6685d1a3f4 100644 --- a/files/pt-br/glossary/cssom/index.html +++ b/files/pt-br/glossary/cssom/index.html @@ -1,6 +1,6 @@ --- title: Modelo de Objeto CSS (CSSOM) -slug: Glossario/CSSOM +slug: Glossary/CSSOM tags: - CSS - CSSOM @@ -8,6 +8,7 @@ tags: - Glossário - Performance Web translation_of: Glossary/CSSOM +original_slug: Glossario/CSSOM ---

    O Modelo de Objeto CSS (CSSOM) é um mapeamento de todos os seletores CSS e propriedades relevantes para cada seletor no formato de árvore, com um nó raiz, irmão, descendente, filho e outro relacionamento. O CSSOM é muito similar ao {{glossary('DOM', 'Modelo de Objeto de Documento (DOM)')}}. Ambos são parte do caminho de renderização crítica, o qual é uma série de etapas que devem acontecer para renderizar o site corretamente.

    diff --git a/files/pt-br/glossary/doctype/index.html b/files/pt-br/glossary/doctype/index.html index f21ccfd7fd..550dd1f397 100644 --- a/files/pt-br/glossary/doctype/index.html +++ b/files/pt-br/glossary/doctype/index.html @@ -1,7 +1,8 @@ --- title: Doctype -slug: Glossario/Doctype +slug: Glossary/Doctype translation_of: Glossary/Doctype +original_slug: Glossario/Doctype ---

    No {{Glossary("HTML")}}, o doctype é a introdução "<!DOCTYPE html>" encontrada no topo de todos os documentos. Seu único propósito é evitar que o {{Glossary("browser")}} mude para os chamados “quirks mode” quando renderizar um documento; isto é, o "<!DOCTYPE html>" doctype garante que o browser faça um esforço na tentativa de seguir as especificações relevantes, em vez de usar um modo de renderização diferente e que seja incompatível com algumas especificações.

    diff --git a/files/pt-br/glossary/dom/index.html b/files/pt-br/glossary/dom/index.html index 0b6954aad3..0d79e1b063 100644 --- a/files/pt-br/glossary/dom/index.html +++ b/files/pt-br/glossary/dom/index.html @@ -1,10 +1,11 @@ --- title: DOM -slug: Glossario/DOM +slug: Glossary/DOM tags: - DOM - Glossário translation_of: Glossary/DOM +original_slug: Glossario/DOM ---

    O Modelo de Objeto de Documentos (do inglês Document Object Model, DOM) é uma {{Glossary("API")}} definida pelo {{Glossary("W3C")}} para representar e interagir com qualquer documento {{Glossary("HTML")}} ou {{Glossary("XML")}}.

    diff --git a/files/pt-br/glossary/domain/index.html b/files/pt-br/glossary/domain/index.html index 11aceba517..63754a1894 100644 --- a/files/pt-br/glossary/domain/index.html +++ b/files/pt-br/glossary/domain/index.html @@ -1,6 +1,6 @@ --- title: Domínio -slug: Glossario/Domínio +slug: Glossary/Domain tags: - Domínio - Glossário @@ -8,6 +8,7 @@ tags: - Navegador - Networking translation_of: Glossary/Domain +original_slug: Glossario/Domínio ---

    Um domínio é uma autoridade na internet que controla seus próprios recursos. Seu "nome de domínio" é uma forma de endereçar essa autoridade como parte da hierarquia de uma {{Glossary("URL")}} — normalmente a parte mais memorável dela, por exemplo por ser uma marca.

    diff --git a/files/pt-br/glossary/domain_name/index.html b/files/pt-br/glossary/domain_name/index.html index 26b2366540..428124e481 100644 --- a/files/pt-br/glossary/domain_name/index.html +++ b/files/pt-br/glossary/domain_name/index.html @@ -1,12 +1,13 @@ --- title: Nome de domínio -slug: Glossario/Nome_de_domínio +slug: Glossary/Domain_name tags: - Glossário - Mecanismos Web - Nome de domínio - Protocolo translation_of: Glossary/Domain_name +original_slug: Glossario/Nome_de_domínio ---

    Um nome de domínio é um endereço de uma página na {{Glossary("Internet")}}. Nomes de domínios são usados em {{Glossary("URL","URLs")}} para identificar a qual servidor uma página específica pertence. O domínio consiste de uma sequência hierárquica de nomes (rótulo) separados por períodos (pontos) e terminando com uma {{Glossary("TLD","extensão")}}.

    diff --git a/files/pt-br/glossary/dynamic_programming_language/index.html b/files/pt-br/glossary/dynamic_programming_language/index.html index 8932c14227..db3c63df3a 100644 --- a/files/pt-br/glossary/dynamic_programming_language/index.html +++ b/files/pt-br/glossary/dynamic_programming_language/index.html @@ -1,11 +1,12 @@ --- title: Linguagem de programação dinâmica -slug: Glossario/Linguagem_de_programação_dinâmica +slug: Glossary/Dynamic_programming_language tags: - Glossário - Iniciante - ScriptingDeCodificação translation_of: Glossary/Dynamic_programming_language +original_slug: Glossario/Linguagem_de_programação_dinâmica ---

    Uma linguagem de programação dinâmica é uma linguagem de programação na qual determinadas operações podem ser feitas em tempo de execução em vez de em tempo de compilação. Por exemplo, em JavaScript é possível mudar o tipo de uma variável ou adicionar novas propriedades ou métodos a um objeto enquanto o programa está sendo executado.

    diff --git a/files/pt-br/glossary/ecma/index.html b/files/pt-br/glossary/ecma/index.html index 4e51c82b8c..3f63f51fb1 100644 --- a/files/pt-br/glossary/ecma/index.html +++ b/files/pt-br/glossary/ecma/index.html @@ -1,10 +1,11 @@ --- title: ECMA -slug: Glossario/ECMA +slug: Glossary/ECMA tags: - Glossário - Mecanismos Web translation_of: Glossary/ECMA +original_slug: Glossario/ECMA ---

    Ecma International (oficialmente Associação Européia dos Fabricantes de Computadores) é uma organização sem fins lucrativos que desenvolve os padrões para hardware de computadores, comunicações e linguagens de programação.

    diff --git a/files/pt-br/glossary/element/index.html b/files/pt-br/glossary/element/index.html index 70420db414..b010df4780 100644 --- a/files/pt-br/glossary/element/index.html +++ b/files/pt-br/glossary/element/index.html @@ -1,11 +1,12 @@ --- title: Elemento -slug: Glossario/Elemento +slug: Glossary/Element tags: - Codificação de Scripts - Glossário - HTML translation_of: Glossary/Element +original_slug: Glossario/Elemento ---

    Um elemento é parte de uma página web. Em XML e HTML, um elemento pode conter um item de dados, ou um bloco de texto, ou uma imagem, ou talvez nada. Um elemento típico inclui uma tag de abertura com alguns atributos, o conteúdo de texto incluído e uma tag de fechamento.
    Example: in <p class="nice">Hello world!</p>, '<p class="nice">' is an opening tag, 'class="nice"' is an attribute and its value, 'Hello world!' is enclosed text content, and '</p>' is a closing tag.

    diff --git a/files/pt-br/glossary/endianness/index.html b/files/pt-br/glossary/endianness/index.html index f08312ce91..60d2ba2ba6 100644 --- a/files/pt-br/glossary/endianness/index.html +++ b/files/pt-br/glossary/endianness/index.html @@ -1,11 +1,12 @@ --- title: Endianness -slug: Glossario/Endianness +slug: Glossary/Endianness tags: - Coding - CodingScripting - Glossary translation_of: Glossary/Endianness +original_slug: Glossario/Endianness ---

    "Endian" and "endianness" (ou "ordem-de-bytes") descrevem como os computadores organizam os bytes que compõem os números.

    diff --git a/files/pt-br/glossary/entity_header/index.html b/files/pt-br/glossary/entity_header/index.html index 8c49620d03..f1247aae36 100644 --- a/files/pt-br/glossary/entity_header/index.html +++ b/files/pt-br/glossary/entity_header/index.html @@ -1,7 +1,8 @@ --- title: Cabeçalho de entidade -slug: Glossario/Entity_header +slug: Glossary/Entity_header translation_of: Glossary/Entity_header +original_slug: Glossario/Entity_header ---

    Um cabeçalho de entidade é um {{glossary("header", "HTTP header")}} descrevendo o conteúdo do corpo da mensagem. Cabeçalhos da entidade são usados em ambos, respostas e requerimentos HTTP. Cabeçalhos como {{HTTPHeader("Content-Length")}}, {{HTTPHeader("Content-Language")}}, {{HTTPHeader("Content-Encoding")}} são cabeçalhos de entidade.

    diff --git a/files/pt-br/glossary/falsy/index.html b/files/pt-br/glossary/falsy/index.html index 977b819979..eb74e0e7cf 100644 --- a/files/pt-br/glossary/falsy/index.html +++ b/files/pt-br/glossary/falsy/index.html @@ -1,7 +1,8 @@ --- title: Falsy -slug: Glossario/Falsy +slug: Glossary/Falsy translation_of: Glossary/Falsy +original_slug: Glossario/Falsy ---

    Um valor falsy é um valor que se traduz em falso quando avaliado em um contexto {{Glossary("Boolean")}}.

    diff --git a/files/pt-br/glossary/first-class_function/index.html b/files/pt-br/glossary/first-class_function/index.html index 552b841dfa..b8dca95711 100644 --- a/files/pt-br/glossary/first-class_function/index.html +++ b/files/pt-br/glossary/first-class_function/index.html @@ -1,7 +1,8 @@ --- title: Função First-class -slug: Glossario/Funcao-First-class +slug: Glossary/First-class_Function translation_of: Glossary/First-class_Function +original_slug: Glossario/Funcao-First-class ---

    Entede-se que uma linguagem de programação tem Função First-class quando suas funções são tratadas como qualquer outra variável. Por exemplo, numa linguagem desse tipo, a função pode ser passada como argumento pra outras funções, ser retornada por outra função e pode ser atribuída como um valor à uma variável.

    diff --git a/files/pt-br/glossary/flex/index.html b/files/pt-br/glossary/flex/index.html index 08bd53ec1a..bbbce501cd 100644 --- a/files/pt-br/glossary/flex/index.html +++ b/files/pt-br/glossary/flex/index.html @@ -1,7 +1,8 @@ --- title: Flex -slug: Glossario/Flex +slug: Glossary/Flex translation_of: Glossary/Flex +original_slug: Glossario/Flex ---

    flex é um novo valor adicionado à propriedade {{cssxref("display")}}. Junto com o inline-flex, este valor faz com que o elemento aplicado seja um {{glossary("flex container")}}, e seus filhos se transformem então em {{glossary("flex item")}}.Os itens então farão parte de um layout flex, e todas as propriedades definidas no CSS Flexbox poderão ser aplicadas.

    diff --git a/files/pt-br/glossary/forbidden_header_name/index.html b/files/pt-br/glossary/forbidden_header_name/index.html index 0eef8a148a..3536cbc76a 100644 --- a/files/pt-br/glossary/forbidden_header_name/index.html +++ b/files/pt-br/glossary/forbidden_header_name/index.html @@ -1,7 +1,8 @@ --- title: Nome de cabeçalho proibido -slug: Glossario/Forbidden_header_name +slug: Glossary/Forbidden_header_name translation_of: Glossary/Forbidden_header_name +original_slug: Glossario/Forbidden_header_name ---

    Um nome de cabeçalho proibido é o nome de qualquer cabeçalho HTTP que não pode ser modificado programaticamente; especificamente, um nome de cabeçalho de solicitação HTTP (em contraste com um {{Glossary("Forbidden response header name")}}).

    diff --git a/files/pt-br/glossary/forbidden_response_header_name/index.html b/files/pt-br/glossary/forbidden_response_header_name/index.html index 4acb9a5835..3d92d900ac 100644 --- a/files/pt-br/glossary/forbidden_response_header_name/index.html +++ b/files/pt-br/glossary/forbidden_response_header_name/index.html @@ -1,12 +1,13 @@ --- title: Forbidden response header name -slug: Glossario/Forbidden_response_header_name +slug: Glossary/Forbidden_response_header_name tags: - Glossário - HTTP - Response - forbidden translation_of: Glossary/Forbidden_response_header_name +original_slug: Glossario/Forbidden_response_header_name ---

    Um nome de cabeçalho de resposta proibido é um  nome de cabeçalho HTTP  (ou `Set-Cookie` ou ` Set-Cookie2`) que não pode ser modificado programaticamente.

    diff --git a/files/pt-br/glossary/function/index.html b/files/pt-br/glossary/function/index.html index e3a195cabd..ce23a6d719 100644 --- a/files/pt-br/glossary/function/index.html +++ b/files/pt-br/glossary/function/index.html @@ -1,12 +1,13 @@ --- title: Função -slug: Glossario/Função +slug: Glossary/Function tags: - Glossário - Iniciante - Intro - JavaScript translation_of: Glossary/Function +original_slug: Glossario/Função ---

     

    diff --git a/files/pt-br/glossary/fuzzing/index.html b/files/pt-br/glossary/fuzzing/index.html index 6d6a97581a..3c57581b4e 100644 --- a/files/pt-br/glossary/fuzzing/index.html +++ b/files/pt-br/glossary/fuzzing/index.html @@ -1,6 +1,6 @@ --- title: Teste de Fuzzing -slug: Glossario/Fuzzing +slug: Glossary/Fuzzing tags: - Firefox - Fuzzing @@ -9,6 +9,7 @@ tags: - Segurança - Teste translation_of: Glossary/Fuzzing +original_slug: Glossario/Fuzzing ---

    O Fuzzing é uma técnica para testar o software usando ferramentas automáticas para fornecer entradas inválidas ou inesperadas para um programa ou função em um programa, logo verificando os resultados para ver se o programa falha ou age de forma inapropriada. Essa é uma forma importante para garantir que o software está estável, confiável e seguro, e nós usamos muito o fuzzing no Mozilla.

    diff --git a/files/pt-br/glossary/gecko/index.html b/files/pt-br/glossary/gecko/index.html index 4de4954dda..02c23e836b 100644 --- a/files/pt-br/glossary/gecko/index.html +++ b/files/pt-br/glossary/gecko/index.html @@ -1,6 +1,6 @@ --- title: Gecko -slug: Glossario/Gecko +slug: Glossary/Gecko tags: - Firefox OS - Gecko @@ -9,6 +9,7 @@ tags: - Intro - Mozilla translation_of: Glossary/Gecko +original_slug: Glossario/Gecko ---

    Gecko é um motor de layout desenvolvido pela Mozilla Project e utilizado em vários apps/dispositivos, incluindo {{glossary("Mozilla Firefox","Firefox")}} e {{glossary("Firefox OS")}}.

    diff --git a/files/pt-br/glossary/general_header/index.html b/files/pt-br/glossary/general_header/index.html index c86f962300..cc21ec5dc5 100644 --- a/files/pt-br/glossary/general_header/index.html +++ b/files/pt-br/glossary/general_header/index.html @@ -1,7 +1,8 @@ --- title: Cabeçalho Genérico -slug: Glossario/General_header +slug: Glossary/General_header translation_of: Glossary/General_header +original_slug: Glossario/General_header ---

    Um cabeçalho genérico  é um {{glossary('Header', ' cabeçalho HTTP')}} que pode ser de mensagens de solicitação e resposta, mas isso não é aplicado ao seu conteúdo. De acordo com o contexto em que são usados, podem ser cabeçalho de {{glossary("Response header", "resposta")}} ou de {{glossary("request header", "Requisição")}}. Entranto, não são {{glossary("entity header", "cabeçalhos de entidade")}}.

    diff --git a/files/pt-br/glossary/global_object/index.html b/files/pt-br/glossary/global_object/index.html index 85302bf2cc..9d262a0d16 100644 --- a/files/pt-br/glossary/global_object/index.html +++ b/files/pt-br/glossary/global_object/index.html @@ -1,7 +1,8 @@ --- title: Global object -slug: Glossario/Global_object +slug: Glossary/Global_object translation_of: Glossary/Global_object +original_slug: Glossario/Global_object ---

    Um objeto global é um {{Glossary("objeto")}} que sempre está definido no {{Glossary("escopo global")}}.

    diff --git a/files/pt-br/glossary/graceful_degradation/index.html b/files/pt-br/glossary/graceful_degradation/index.html index 42655ffe1e..ec0a588454 100644 --- a/files/pt-br/glossary/graceful_degradation/index.html +++ b/files/pt-br/glossary/graceful_degradation/index.html @@ -1,7 +1,8 @@ --- title: Degradação graciosa -slug: Glossario/degradação_graciosa +slug: Glossary/Graceful_degradation translation_of: Glossary/Graceful_degradation +original_slug: Glossario/degradação_graciosa ---

    Degradação graciosa é uma filosofia de design centrada na tentativa de criar um site/aplicativo moderno que funcione nos navegadores mais recentes, mas recorre a uma experiência que, embora não tão boa, ainda oferece conteúdo e funcionalidade essenciais para os navegadores antigos.

    diff --git a/files/pt-br/glossary/grid/index.html b/files/pt-br/glossary/grid/index.html index ee60bf19a9..a34050d2e4 100644 --- a/files/pt-br/glossary/grid/index.html +++ b/files/pt-br/glossary/grid/index.html @@ -1,7 +1,8 @@ --- title: Grade -slug: Glossario/Grade +slug: Glossary/Grid translation_of: Glossary/Grid +original_slug: Glossario/Grade ---

    Uma grade no CSS é definida usando o valor grid da propriedade {{cssxref("display")}}; você pode definir colunas e linhas na sua grade usando as propridades {{cssxref("grid-template-rows")}} e {{cssxref("grid-template-columns")}}.

    diff --git a/files/pt-br/glossary/grid_areas/index.html b/files/pt-br/glossary/grid_areas/index.html index 0e9969dd3d..54cb138df8 100644 --- a/files/pt-br/glossary/grid_areas/index.html +++ b/files/pt-br/glossary/grid_areas/index.html @@ -1,7 +1,8 @@ --- title: Grid Areas -slug: Glossario/Grid_Areas +slug: Glossary/Grid_Areas translation_of: Glossary/Grid_Areas +original_slug: Glossario/Grid_Areas ---

    Um  grid area  é um ou mais {{glossary("grid cell", "grid cells")}} que compõem uma área retangular do grid.  As Grid Areas quando se coloca um item  usando line-based placement (posicionamento baseado em colunas e linha)ou quando define áreas usando named grid areas(substituindo o nome).

    diff --git a/files/pt-br/glossary/hoisting/index.html b/files/pt-br/glossary/hoisting/index.html index a60854cad1..74d818ea26 100644 --- a/files/pt-br/glossary/hoisting/index.html +++ b/files/pt-br/glossary/hoisting/index.html @@ -1,7 +1,8 @@ --- title: Hoisting -slug: Glossario/Hoisting +slug: Glossary/Hoisting translation_of: Glossary/Hoisting +original_slug: Glossario/Hoisting ---

    Hoisting (içamento, em português) é um termo que você não encontrará usado em nenhuma prosa de especificação normativa antes da especificação de idioma do ECMAScript® 2015. Hoisting foi pensado como uma maneira geral de pensar sobre como os contextos de execução (especificamente as fases de criação e execução) funcionam em JavaScript. No entanto, o conceito pode ser um pouco confuso a princípio.

    diff --git a/files/pt-br/glossary/hsts/index.html b/files/pt-br/glossary/hsts/index.html index 0ea7646bd3..c959425c1b 100644 --- a/files/pt-br/glossary/hsts/index.html +++ b/files/pt-br/glossary/hsts/index.html @@ -1,11 +1,12 @@ --- title: HSTS -slug: Glossario/HSTS +slug: Glossary/HSTS tags: - HSTS - HTTP - Segurança translation_of: Glossary/HSTS +original_slug: Glossario/HSTS ---

    O HTTP Strict Transport Security permite que um site informe ao navegador que ele nunca deve carregar o site usando HTTP e deve converter automaticamente todas as tentativas de acessar o site usando HTTP para solicitações HTTPS. Consiste em um cabeçalho HTTP Strict-Transport-Security, enviado de volta pelo servidor com o recurso.

    diff --git a/files/pt-br/glossary/html/index.html b/files/pt-br/glossary/html/index.html index ed6e0dfc0d..6526123fb7 100644 --- a/files/pt-br/glossary/html/index.html +++ b/files/pt-br/glossary/html/index.html @@ -1,12 +1,13 @@ --- title: HTML -slug: Glossario/HTML +slug: Glossary/HTML tags: - Glossário - HTML - Web - scripts translation_of: Glossary/HTML +original_slug: Glossario/HTML ---

    HTML (HyperText Markup Language) é uma linguagem descritiva que especifica a estrutura de uma página web.

    diff --git a/files/pt-br/glossary/http/index.html b/files/pt-br/glossary/http/index.html index 6e3ea45f9c..c9f926c680 100644 --- a/files/pt-br/glossary/http/index.html +++ b/files/pt-br/glossary/http/index.html @@ -1,6 +1,6 @@ --- title: HTTP -slug: Glossario/HTTP +slug: Glossary/HTTP tags: - Glossário - HTTP @@ -8,6 +8,7 @@ tags: - Iniciante - Protocolos translation_of: Glossary/HTTP +original_slug: Glossario/HTTP ---

     

    diff --git a/files/pt-br/glossary/http_2/index.html b/files/pt-br/glossary/http_2/index.html index d1884d16d3..49063fa674 100644 --- a/files/pt-br/glossary/http_2/index.html +++ b/files/pt-br/glossary/http_2/index.html @@ -1,14 +1,15 @@ --- title: HTTP/2 -slug: Glossario/HTTP_2 +slug: Glossary/HTTP_2 tags: - Glossário - HTTP - Infraestrutura - Performance na Web - Referencia - - 'l10n:prioridade' + - l10n:prioridade translation_of: Glossary/HTTP_2 +original_slug: Glossario/HTTP_2 ---

    HTTP/2 é a principal revisão do protocolo de rede HTTP. Os princiais objetivos do HTTP/2 são reduzir a latência, permitindo a multiplexação total das requisições e respostas, minimizar a sobrecarga do protocolo por meio da compactação eficiente dos campos do cabeçalho HTTP e adicionar suporte para priorização de requisições e notificações dos servidores.

    diff --git a/files/pt-br/glossary/http_header/index.html b/files/pt-br/glossary/http_header/index.html index 24bbb51bb6..ba2fc63046 100644 --- a/files/pt-br/glossary/http_header/index.html +++ b/files/pt-br/glossary/http_header/index.html @@ -1,6 +1,6 @@ --- title: Cabeçalho HTTP -slug: Glossario/Cabecalho_HTTP +slug: Glossary/HTTP_header tags: - Cabeçalho HTTP - Glossary @@ -9,6 +9,7 @@ tags: - Mecânicas da Web - WebMechanics translation_of: Glossary/HTTP_header +original_slug: Glossario/Cabecalho_HTTP ---

    Um Cabeçalho HTTP é um campo de uma requisição ou resposta HTTP que passa informações adicionais, alterando ou melhorando a precisão da semântica da mensagem ou do corpo. Cabeçalhos são case-insensitive, iniciam-se no começo da linha e são seguidos imediamente por um ':' e um valor dependendo do cabeçalho em si. O valor termina no próximo CRLF ou no fim da mensagem.

    diff --git a/files/pt-br/glossary/https/index.html b/files/pt-br/glossary/https/index.html index 577c1d37c8..31ac2fcad2 100644 --- a/files/pt-br/glossary/https/index.html +++ b/files/pt-br/glossary/https/index.html @@ -1,12 +1,13 @@ --- title: HTTPS -slug: Glossario/https +slug: Glossary/https tags: - Glossário - HTTPS - Infraestrutura - Segurança translation_of: Glossary/https +original_slug: Glossario/https ---

    HTTPS (HTTP Secure) é uma versão do protocolo {{Glossary("HTTP")}} criptografado. É normalmente usado {{Glossary("SSL")}} ou {{Glossary("TLS")}} para criptografar toda a comunicação entre um cliente e um servidor. Essa conexão segura permite aos clientes trocar com segurança dados confidenciais com o servidor, por exemplo, para atividades bancárias ou compras online.

    diff --git a/files/pt-br/glossary/idempotent/index.html b/files/pt-br/glossary/idempotent/index.html index 8966157c34..8a23e78e11 100644 --- a/files/pt-br/glossary/idempotent/index.html +++ b/files/pt-br/glossary/idempotent/index.html @@ -1,12 +1,13 @@ --- title: Idempotente -slug: Glossario/Idempotente +slug: Glossary/Idempotent tags: - Glossary - Glossário - Mecânicas da Web - WebMechanics translation_of: Glossary/Idempotent +original_slug: Glossario/Idempotente ---

    Um método HTTP é idempotente se uma requisição idêntica pode ser feita uma ou mais vezes em sequência com o mesmo efeito enquanto deixa o servidor no mesmo estado. Em outras palavras, um método idempotente não deveria possuir nenhum efeito colateral (exceto para manter estatísticas). Implementados corretamente, o {{HTTPMethod("GET")}}, {{HTTPMethod("HEAD")}}, {{HTTPMethod("PUT")}}, e {{HTTPMethod("DELETE")}} são métodos idempotentes, mas não o método {{HTTPMethod("POST")}}. Todos os métodos  {{glossary("seguro")}}s também são idempotentes.

    diff --git a/files/pt-br/glossary/identifier/index.html b/files/pt-br/glossary/identifier/index.html index a94516e145..fa293979da 100644 --- a/files/pt-br/glossary/identifier/index.html +++ b/files/pt-br/glossary/identifier/index.html @@ -1,11 +1,12 @@ --- title: Identificador (Identifier) -slug: Glossario/Identificador +slug: Glossary/Identifier tags: - Compatilhando - Glossário - Iniciante translation_of: Glossary/Identifier +original_slug: Glossario/Identificador ---

    Uma sequência de caracteres no código, que identifica uma {{glossary("variável")}}, {{glossary("função")}}, ou {{glossary("propriedade")}}.

    diff --git a/files/pt-br/glossary/iife/index.html b/files/pt-br/glossary/iife/index.html index cff1519346..1a50dae6c9 100644 --- a/files/pt-br/glossary/iife/index.html +++ b/files/pt-br/glossary/iife/index.html @@ -1,11 +1,12 @@ --- title: IIFE -slug: Glossario/IIFE +slug: Glossary/IIFE tags: - DesignPattern - Glossário - JavaScript translation_of: Glossary/IIFE +original_slug: Glossario/IIFE ---

    IIFE (Immediately Invoked Function Expression) é uma função em {{glossary("JavaScript")}} que é executada assim que definida.

    diff --git a/files/pt-br/glossary/index.html b/files/pt-br/glossary/index.html index 48bbbd527d..7d40a959c8 100644 --- a/files/pt-br/glossary/index.html +++ b/files/pt-br/glossary/index.html @@ -1,10 +1,11 @@ --- title: Glossário -slug: Glossario +slug: Glossary tags: - Glossário - Iniciante translation_of: Glossary +original_slug: Glossario ---
    {{LearnBox({"title":"Aprenda um novo termo:"})}}
    diff --git a/files/pt-br/glossary/indexeddb/index.html b/files/pt-br/glossary/indexeddb/index.html index 94bd23015a..7e81f4ecae 100644 --- a/files/pt-br/glossary/indexeddb/index.html +++ b/files/pt-br/glossary/indexeddb/index.html @@ -1,12 +1,13 @@ --- title: IndexedDB -slug: Glossario/IndexedDB +slug: Glossary/IndexedDB tags: - API - Banco de Dados - Glossário - Sql translation_of: Glossary/IndexedDB +original_slug: Glossario/IndexedDB ---

    IndexedDB é uma {{glossary("API")}} de web para armazenar volumosas estruturas de dados dentro dos navegadores e indexá-los para buscas de alta performance. Sendo um RDBMS baseado em {{glossary("SQL")}}, IndexedDB é um sistema de banco de dados transacionais. Porém ele usa objetos {{glossary("JavaScript")}} ao invés de tabelas em colunas fixas para armazenar os dados.

    diff --git a/files/pt-br/glossary/internet/index.html b/files/pt-br/glossary/internet/index.html index c03661d276..bc6ccd4c9e 100644 --- a/files/pt-br/glossary/internet/index.html +++ b/files/pt-br/glossary/internet/index.html @@ -1,6 +1,6 @@ --- title: Internet -slug: Glossario/Internet +slug: Glossary/Internet tags: - Glossário - Guía @@ -11,6 +11,7 @@ tags: - Tutorial - Web translation_of: Glossary/Internet +original_slug: Glossario/Internet ---

    A Internet é a rede mundial de redes que utiliza o conjunto de protocolos da Internet (também chamado {{glossary("TCP")}}/{{glossary("IPv6","IP")}} dos seus dois mais importantes {{glossary("protocol","protocolos")}}).

    diff --git a/files/pt-br/glossary/ip_address/index.html b/files/pt-br/glossary/ip_address/index.html index a6d7fb91c1..004f8a0b01 100644 --- a/files/pt-br/glossary/ip_address/index.html +++ b/files/pt-br/glossary/ip_address/index.html @@ -1,12 +1,13 @@ --- title: Endereço IP -slug: Glossario/Endereco_IP +slug: Glossary/IP_Address tags: - Glossário - Infraestrutura - Iniciante - Web translation_of: Glossary/IP_Address +original_slug: Glossario/Endereco_IP ---

    Um endereço IP é um número atribuído a cada dispositivo conectado a uma rede que usa o protocolo de Internet.

    diff --git a/files/pt-br/glossary/ipv4/index.html b/files/pt-br/glossary/ipv4/index.html index 909b8fe17d..79ab6668db 100644 --- a/files/pt-br/glossary/ipv4/index.html +++ b/files/pt-br/glossary/ipv4/index.html @@ -1,6 +1,6 @@ --- title: IPv4 -slug: Glossario/IPv4 +slug: Glossary/IPv4 tags: - Glossário - IPv4 @@ -8,6 +8,7 @@ tags: - Protocolo - Protocolo de Internet translation_of: Glossary/IPv4 +original_slug: Glossario/IPv4 ---

    IPv4 é a quarta versão do {{Glossary("protocolo")}} de comunicação subjacente à {{glossary("Internet")}} e a primeira versão a ser amplamente implantada.

    diff --git a/files/pt-br/glossary/ipv6/index.html b/files/pt-br/glossary/ipv6/index.html index a301ed653e..0a754ba147 100644 --- a/files/pt-br/glossary/ipv6/index.html +++ b/files/pt-br/glossary/ipv6/index.html @@ -1,6 +1,6 @@ --- title: IPv6 -slug: Glossario/IPv6 +slug: Glossary/IPv6 tags: - Glossário - IPv6 @@ -9,6 +9,7 @@ tags: - Web - WebMechanics translation_of: Glossary/IPv6 +original_slug: Glossario/IPv6 ---

    IPv6 é a versão mais atual do {{glossary("protocol","protocolo")}} de comunicação subjacente da {{glossary("Internet")}}. Lentamente o IPv6 está substituindo o {{Glossary("IPv4")}}, dentre outras razões porque o IPv6 permite vários {{Glossary("Endereço IP","endereços IPs")}} diferentes.

    diff --git a/files/pt-br/glossary/irc/index.html b/files/pt-br/glossary/irc/index.html index 6cf5f86f06..d3ae9cb1a5 100644 --- a/files/pt-br/glossary/irc/index.html +++ b/files/pt-br/glossary/irc/index.html @@ -1,6 +1,6 @@ --- title: IRC -slug: Glossario/IRC +slug: Glossary/IRC tags: - Glossário - Infraestrutura @@ -8,6 +8,7 @@ tags: - Sistema de Chat - irc translation_of: Glossary/IRC +original_slug: Glossario/IRC ---

    O IRC (Internet Relay Chat) é um sistema de chat mundial que requer uma conexão à Internet e um cliente de IRC, que envia e recebe mensagens através do servidor de IRC.

    diff --git a/files/pt-br/glossary/iso/index.html b/files/pt-br/glossary/iso/index.html index 7781a2109f..17df4a5123 100644 --- a/files/pt-br/glossary/iso/index.html +++ b/files/pt-br/glossary/iso/index.html @@ -1,11 +1,12 @@ --- title: ISO -slug: Glossario/ISO +slug: Glossary/ISO tags: - ISO - Normas - padrões translation_of: Glossary/ISO +original_slug: Glossario/ISO ---

    A Organização Internacional de Padronização, popularmente conhecida como ISO (em inglês: International Organization for Standardization), é uma organização internacional que cria padrões/normas para cada tipo de indústria, visando uma melhor coordenação e união internacional. Atualmente 164 países fazem parte da ISO.

    diff --git a/files/pt-br/glossary/jank/index.html b/files/pt-br/glossary/jank/index.html index 0b52d83572..808e87e327 100644 --- a/files/pt-br/glossary/jank/index.html +++ b/files/pt-br/glossary/jank/index.html @@ -1,10 +1,11 @@ --- title: Jank -slug: Glossario/Jank +slug: Glossary/Jank tags: - CodingScripting - Glosário(2) - Performance translation_of: Glossary/Jank +original_slug: Glossario/Jank ---

    Jank se refere à lentidão em uma interface de usuário, geralmente causado por execução de tarefas longas na Thread principal, o bloqueio de renderização, ou esforço demais do processador com processos em segundo plano.

    diff --git a/files/pt-br/glossary/javascript/index.html b/files/pt-br/glossary/javascript/index.html index de5987ece0..38af9394c7 100644 --- a/files/pt-br/glossary/javascript/index.html +++ b/files/pt-br/glossary/javascript/index.html @@ -1,6 +1,6 @@ --- title: JavaScript -slug: Glossario/JavaScript +slug: Glossary/JavaScript tags: - ECMAScript6 - Glossario(2) @@ -10,6 +10,7 @@ tags: - JavaScript - scripts translation_of: Glossary/JavaScript +original_slug: Glossario/JavaScript ---

    Sumário

    diff --git a/files/pt-br/glossary/jpeg/index.html b/files/pt-br/glossary/jpeg/index.html index b875385242..42e8799186 100644 --- a/files/pt-br/glossary/jpeg/index.html +++ b/files/pt-br/glossary/jpeg/index.html @@ -1,11 +1,12 @@ --- title: JPEG -slug: Glossario/JPEG +slug: Glossary/jpeg tags: - Glossário - Iniciante - JPEG translation_of: Glossary/jpeg +original_slug: Glossario/JPEG ---

    JPEG (Joint Photographic Experts Group) é um método de compreensão com perda geralmente usado para imagens digitais.

    diff --git a/files/pt-br/glossary/jquery/index.html b/files/pt-br/glossary/jquery/index.html index 8eb1ccaffb..cf8e0427f9 100644 --- a/files/pt-br/glossary/jquery/index.html +++ b/files/pt-br/glossary/jquery/index.html @@ -1,9 +1,10 @@ --- title: jQuery -slug: Glossario/jQuery +slug: Glossary/jQuery tags: - Jquery em português translation_of: Glossary/jQuery +original_slug: Glossario/jQuery ---

    jQuery é uma {{Glossary("Biblioteca")}} {{Glossary("JavaScript")}} que visa a simplificação na manipulação do {{Glossary("DOM")}} , nas chamadas de {{Glossary("AJAX")}} e no gerenciamento de {{Glossary("Eventos")}} . É muito utilizado por desenvolvedores de Javascript.

    diff --git a/files/pt-br/glossary/json/index.html b/files/pt-br/glossary/json/index.html index 5212f7c589..33dc530de0 100644 --- a/files/pt-br/glossary/json/index.html +++ b/files/pt-br/glossary/json/index.html @@ -1,7 +1,8 @@ --- title: JSON -slug: JSON +slug: Glossary/JSON translation_of: Glossary/JSON +original_slug: JSON ---

    JSON (Notação de Objetos JavaScript) e um formato de dados permutável. Ele assemelha - se próximo a um sub tipo da sintaxe do JavaScript, mas ele não é um tipo de script. (Veja JSON em Referências JavaScript para todos os detalhes). Isto é útil quando escrevemos qualquer tipo de aplicação baseada em JavaScript, incluindo web sites e extensões de navegadores. Por exemplo, você pode armazenar informações no formato em JSON no formato de cookies, ou você pode armazenar as preferências de extensões em JSON como valor de texto nas preferências do navegador.

    JSON e capaz de representar números, booleanos, textos, vazios, e listas (sequência ordenada de valores) e objetos (mapeamento de valores de texto) composto por estes valores (ou por outras listas e objetos). Ele não representa nativamente tipos complexos de dados como funções, expressões regulares, datas, e muito mais. (Objetos de dados por padrão inicializam como texto contendo os dados no formato ISO, enquanto eles não mudam, a informação não é completamente perdida.) Se você precisa preservar muitos valores, você pode transformar valores como eles são inicializados, ou prioritariamente descontinuados, para habilitar JSON para representar tipos de dados adicionais.

    diff --git a/files/pt-br/glossary/key/index.html b/files/pt-br/glossary/key/index.html index d4c5a998d0..13a98eae44 100644 --- a/files/pt-br/glossary/key/index.html +++ b/files/pt-br/glossary/key/index.html @@ -1,11 +1,12 @@ --- title: Key -slug: Glossario/Key +slug: Glossary/Key tags: - Criptografía - Glossário - Segurança translation_of: Glossary/Key +original_slug: Glossario/Key ---

    Uma key é uma parte de informação utilizada por um {{Glossary("cipher")}} para {{Glossary("encryption")}} e/ou {{Glossary("decryption")}}.Mensagens criptografadas devem permanecer seguras mesmo se tudo envolvendo o {{Glossary("cryptosystem")}}, com exceção da key, for de caráter público.

    diff --git a/files/pt-br/glossary/keyword/index.html b/files/pt-br/glossary/keyword/index.html index d50fe81350..f268acbdcb 100644 --- a/files/pt-br/glossary/keyword/index.html +++ b/files/pt-br/glossary/keyword/index.html @@ -1,6 +1,6 @@ --- title: Palavra-chave -slug: Glossario/Palavra-chave +slug: Glossary/Keyword tags: - Busca palavra-chave - Glossário @@ -8,6 +8,7 @@ tags: - Search - busca translation_of: Glossary/Keyword +original_slug: Glossario/Palavra-chave ---

    Uma palavra-chave é a palavra ou a frase que descreve conteúdo. Palavras-chave on-line são utilizadas como pistas para buscadores ou como um conjunto de palavras que identifica e sintetiza o conteúdo dos sites.

    diff --git a/files/pt-br/glossary/localization/index.html b/files/pt-br/glossary/localization/index.html index 42a6f72865..86322fb27e 100644 --- a/files/pt-br/glossary/localization/index.html +++ b/files/pt-br/glossary/localization/index.html @@ -1,7 +1,8 @@ --- title: Localização -slug: Localização +slug: Glossary/Localization translation_of: Glossary/Localization +original_slug: Localização ---

    Localização (L10n) é o processo de tradução de interfaces de software a partir de uma língua para outra e adaptá-lo para atender a uma cultura estrangeira. Esses recursos são para qualquer pessoa com interesse nos aspectos técnicos envolvidos na localização. Eles são para os desenvolvedores e todos os colaboradores.

    diff --git a/files/pt-br/glossary/markup/index.html b/files/pt-br/glossary/markup/index.html index aea536f5c9..53218c2a2a 100644 --- a/files/pt-br/glossary/markup/index.html +++ b/files/pt-br/glossary/markup/index.html @@ -1,11 +1,12 @@ --- title: marcação -slug: Glossario/marcação +slug: Glossary/markup tags: - Glossário - Intro - Marcação translation_of: Glossary/markup +original_slug: Glossario/marcação ---

    Uma linguagem de marcação é aquela projetada para definir e apresentar textos. diff --git a/files/pt-br/glossary/metadata/index.html b/files/pt-br/glossary/metadata/index.html index 8877d38c2e..3cd3fe5dc6 100644 --- a/files/pt-br/glossary/metadata/index.html +++ b/files/pt-br/glossary/metadata/index.html @@ -1,12 +1,13 @@ --- title: Metadata -slug: Glossario/Metadata +slug: Glossary/Metadata tags: - Glossário - HTML - Script de codificação - metadados translation_of: Glossary/Metadata +original_slug: Glossario/Metadata ---

    Os metadados são — em sua definição mais simples — dados que descrevem dados. Por exemplo, um documento {{glossary("HTML")}} é um dado, mas o HTML, também, pode conter metadados em seu elemento {{htmlelement("head")}} que descreve o documento — por exemplo, quem o escreveu e seu resumo.

    diff --git a/files/pt-br/glossary/mozilla_firefox/index.html b/files/pt-br/glossary/mozilla_firefox/index.html index 4150cbe75e..3e871acdd6 100644 --- a/files/pt-br/glossary/mozilla_firefox/index.html +++ b/files/pt-br/glossary/mozilla_firefox/index.html @@ -1,6 +1,6 @@ --- title: Mozilla Firefox -slug: Glossario/Mozilla_Firefox +slug: Glossary/Mozilla_Firefox tags: - Browser - Firefox @@ -9,6 +9,7 @@ tags: - Mozilla - Mozilla Firefox translation_of: Glossary/Mozilla_Firefox +original_slug: Glossario/Mozilla_Firefox ---

    Mozilla Firefox é um {{Glossary("browser")}} open-source cujo desenvolvimento é supervisionado pela Mozilla Corporation. Firefox roda em Windows, OS X, Linux, e Android.

    diff --git a/files/pt-br/glossary/mutable/index.html b/files/pt-br/glossary/mutable/index.html index fa45a08981..72e05a6384 100644 --- a/files/pt-br/glossary/mutable/index.html +++ b/files/pt-br/glossary/mutable/index.html @@ -1,9 +1,10 @@ --- title: Mutável -slug: Glossario/Mutavel +slug: Glossary/Mutable tags: - mutavel translation_of: Glossary/Mutable +original_slug: Glossario/Mutavel ---

    Mutável é o tipo da variável que pode ser alterada. Em {{glossary("JavaScript")}}, somente {{Glossary("Object","objetos")}} e {{Glossary("Array","arrays")}} são mutáveis, {{Glossary("primitive", "valores primitivos")}} não.

    diff --git a/files/pt-br/glossary/node.js/index.html b/files/pt-br/glossary/node.js/index.html index 647ebaa66e..415256fd49 100644 --- a/files/pt-br/glossary/node.js/index.html +++ b/files/pt-br/glossary/node.js/index.html @@ -1,12 +1,13 @@ --- title: Node.js -slug: Glossario/Node.js +slug: Glossary/Node.js tags: - Glossário - Infraestrutura - JavaScript - node.js translation_of: Glossary/Node.js +original_slug: Glossario/Node.js ---

    Node.js é um ambiente de execução multi-plataforma em {{Glossary("JavaScript")}} que permite aos desenvolvedores produzirem aplicações para rede e {{Glossary("Servidor","server-side")}} usando o JavaScript.

    diff --git a/files/pt-br/glossary/null/index.html b/files/pt-br/glossary/null/index.html index 0a0983a944..dcd7c221b6 100644 --- a/files/pt-br/glossary/null/index.html +++ b/files/pt-br/glossary/null/index.html @@ -1,7 +1,8 @@ --- title: Nulo -slug: Glossario/Nulo +slug: Glossary/Null translation_of: Glossary/Null +original_slug: Glossario/Nulo ---

    Em ciência da computação, um valor nulo representa uma referencia que aponta, geralmente de maneira intencional, para um objeto ou endereço de memória inválido ou inexistente. O significado do valor nulo varia entre as implementações das linguagens.

    diff --git a/files/pt-br/glossary/number/index.html b/files/pt-br/glossary/number/index.html index 958172fc8c..0426453ff4 100644 --- a/files/pt-br/glossary/number/index.html +++ b/files/pt-br/glossary/number/index.html @@ -1,7 +1,8 @@ --- title: Number -slug: Glossario/Número +slug: Glossary/Number translation_of: Glossary/Number +original_slug: Glossario/Número ---

    No {{Glossary("JavaScript")}}, Number é um tipo de dado numérico no double-precision 64-bit floating point format (IEEE 754). Em outras linguagens de programação diferentes tipos numéricos podem existir, por exemplo: Integers (Inteiros), Floats (Pontos Flutuantes), Doubles (Dobros), ou Bignums.

    diff --git a/files/pt-br/glossary/object/index.html b/files/pt-br/glossary/object/index.html index bf4c959e18..3ad3c17e3e 100644 --- a/files/pt-br/glossary/object/index.html +++ b/files/pt-br/glossary/object/index.html @@ -1,10 +1,11 @@ --- title: Objeto -slug: Glossario/Objeto +slug: Glossary/Object tags: - Glossário - Objeto translation_of: Glossary/Object +original_slug: Glossario/Objeto ---

    Objeto refere-se a uma estrutura de dados contendo dados e instruções para se trabalhar com estes dados. Objetos algumas vezes se referem a coisas do mundo real, por exemplo um objeto de carro ou um mapa em um jogo de corrida. {{glossary("JavaScript")}}, Java, C++, Python, e Ruby são exemplos de Linguagens orientadas à objeto ({{glossary("OOP","object-oriented programming")}}).

    diff --git a/files/pt-br/glossary/oop/index.html b/files/pt-br/glossary/oop/index.html index edfde266bf..8d931488d8 100644 --- a/files/pt-br/glossary/oop/index.html +++ b/files/pt-br/glossary/oop/index.html @@ -1,7 +1,8 @@ --- title: OOP -slug: Glossario/OOP +slug: Glossary/OOP translation_of: Glossary/OOP +original_slug: Glossario/OOP ---

    OOP (Object-Oriented Programming) é uma abordagem na programação em qual os dados são encapsulados em {{glossary("object","objects")}} e o proprio objeto é operado, em vez de suas partes componentes.

    diff --git a/files/pt-br/glossary/opengl/index.html b/files/pt-br/glossary/opengl/index.html index 91bea9c670..3c7190cf4b 100644 --- a/files/pt-br/glossary/opengl/index.html +++ b/files/pt-br/glossary/opengl/index.html @@ -1,10 +1,11 @@ --- title: OpenGL -slug: Glossario/OpenGL +slug: Glossary/OpenGL tags: - Glossário - OpenGL translation_of: Glossary/OpenGL +original_slug: Glossario/OpenGL ---

    OpenGL (Open Graphics Library) é uma API (Application Programming Interface) multiplataforma e multilíngue para renderizar gráficos vetoriais 2D e 3D. A API é normalmente usada para interagir com uma GPU (Graphics Processing Unit) para obter renderização acelerada por hardware.

    diff --git a/files/pt-br/glossary/opera_browser/index.html b/files/pt-br/glossary/opera_browser/index.html index 7d90528cb8..9a7c20e956 100644 --- a/files/pt-br/glossary/opera_browser/index.html +++ b/files/pt-br/glossary/opera_browser/index.html @@ -1,6 +1,6 @@ --- title: Navegador Opera -slug: Glossario/Navegador_Opera +slug: Glossary/Opera_Browser tags: - Glossário - Navegador @@ -8,6 +8,7 @@ tags: - Navegação - Opera translation_of: Glossary/Opera_Browser +original_slug: Glossario/Navegador_Opera ---

    Opera é o quinto {{glossary("navegador")}} web mais usado, publicamente lançado em 1996 e inicialmente executando somente em Windows. Opera usa {{glossary("Blink")}} como seu mecanismo de layout desde 2013 (antes disso, {{glossary("Presto")}}). Opera também existe nas versões móveis e tablets.

    diff --git a/files/pt-br/glossary/operand/index.html b/files/pt-br/glossary/operand/index.html index 9f460ea876..b25318d0d7 100644 --- a/files/pt-br/glossary/operand/index.html +++ b/files/pt-br/glossary/operand/index.html @@ -1,7 +1,8 @@ --- title: Operando -slug: Glossario/Operando +slug: Glossary/Operand translation_of: Glossary/Operand +original_slug: Glossario/Operando ---

    An operand is the part of an instruction representing the data manipulated by the {{glossary("operator")}}. For example, when you add two numbers, the numbers are the operand and "+" is the operator.

    diff --git a/files/pt-br/glossary/operator/index.html b/files/pt-br/glossary/operator/index.html index 77d2d7c306..35967097a7 100644 --- a/files/pt-br/glossary/operator/index.html +++ b/files/pt-br/glossary/operator/index.html @@ -1,10 +1,11 @@ --- title: Operador -slug: Glossario/Operador +slug: Glossary/Operator tags: - Codificação de Scripts - Glossário translation_of: Glossary/Operator +original_slug: Glossario/Operador ---

    Sintaxe reservada que consiste em pontuação ou caracteres alfanuméricos que executam a funcionalidade incorporada. Por exemplo, em JavaScript, o operador de adição ("+") soma números juntos e concatena strings, enquanto o operador "não" ("!") nega uma expressão — por exemplo, fazendo uma declaração verdadeira retornar falso.

    diff --git a/files/pt-br/glossary/origin/index.html b/files/pt-br/glossary/origin/index.html index f1aae2640b..b8dedcea0a 100644 --- a/files/pt-br/glossary/origin/index.html +++ b/files/pt-br/glossary/origin/index.html @@ -1,6 +1,6 @@ --- title: Origem -slug: Glossario/Origem +slug: Glossary/Origin tags: - Glossary - Glossário @@ -10,6 +10,7 @@ tags: - WebMechanics - origin translation_of: Glossary/Origin +original_slug: Glossario/Origem ---

    O conteúdo de origem é definido pelo esquema (protocolo), host (domínio), e porta da {{Glossary("URL")}} usada para acessá-lo. Dois objetos tem a mesma origem somente quando o esquema, host, e porta batem.

    diff --git a/files/pt-br/glossary/ota/index.html b/files/pt-br/glossary/ota/index.html index a8680d0871..a602c5e365 100644 --- a/files/pt-br/glossary/ota/index.html +++ b/files/pt-br/glossary/ota/index.html @@ -1,6 +1,6 @@ --- title: OTA -slug: Glossario/OTA +slug: Glossary/OTA tags: - Glossário - Infraestrutura @@ -8,6 +8,7 @@ tags: - Wireless - updates translation_of: Glossary/OTA +original_slug: Glossario/OTA ---

    Over-The-Air (OTA ou "Pelo-Ar") refere-se à atualização automática de programas de dispositivos conectados a partir de um servidor central. Todos os proprietários de dispositivos recebendo um determinado conjunto de atualizações estão sob o mesmo "canal"; e cada dispositivo pode amiúde acessar vários canais (e.g. para "builds" de produção ou engenharia).

    diff --git a/files/pt-br/glossary/php/index.html b/files/pt-br/glossary/php/index.html index 19370528dc..9716d08604 100644 --- a/files/pt-br/glossary/php/index.html +++ b/files/pt-br/glossary/php/index.html @@ -1,12 +1,13 @@ --- title: PHP -slug: Glossario/PHP +slug: Glossary/PHP tags: - Back End - Iniciante - Introdução - PHP translation_of: Glossary/PHP +original_slug: Glossario/PHP ---

    PHP (um inicialismo recursivo para PHP: Hypertext Preprocessor) é uma linguagem de script do lado do servidor de código aberto que pode ser ultilizada junto com HTML para construir aplicações web e sites dinâmicos.

    diff --git a/files/pt-br/glossary/pixel/index.html b/files/pt-br/glossary/pixel/index.html index 4940fb76fb..0f871c955d 100644 --- a/files/pt-br/glossary/pixel/index.html +++ b/files/pt-br/glossary/pixel/index.html @@ -1,9 +1,10 @@ --- title: Pixel -slug: Glossario/Pixel +slug: Glossary/Pixel tags: - Glossário translation_of: Glossary/Pixel +original_slug: Glossario/Pixel ---

    Um pixel é o menor elemento de um dispositivo de exibição como, por exemplo, um monitor.

    diff --git a/files/pt-br/glossary/polyfill/index.html b/files/pt-br/glossary/polyfill/index.html index 706abd976c..536c7e54f8 100644 --- a/files/pt-br/glossary/polyfill/index.html +++ b/files/pt-br/glossary/polyfill/index.html @@ -1,10 +1,11 @@ --- title: Polyfill -slug: Glossario/Polyfill +slug: Glossary/Polyfill tags: - ECMAScript6 - polyfill translation_of: Glossary/Polyfill +original_slug: Glossario/Polyfill ---

    Um polyfill é um pedaço de código (geralmente JavaScript na Web) usado para fornecer funcionalidades modernas em navegadores mais antigos que não o suportam nativamente.

    diff --git a/files/pt-br/glossary/port/index.html b/files/pt-br/glossary/port/index.html index cc28a9ebae..b543559255 100644 --- a/files/pt-br/glossary/port/index.html +++ b/files/pt-br/glossary/port/index.html @@ -1,11 +1,12 @@ --- title: Port -slug: Glossario/Port +slug: Glossary/Port tags: - porta - porta segura - portas de comunicação translation_of: Glossary/Port +original_slug: Glossario/Port ---

    Porta

    diff --git a/files/pt-br/glossary/preflight_request/index.html b/files/pt-br/glossary/preflight_request/index.html index 4e70aced76..2d9717b2ce 100644 --- a/files/pt-br/glossary/preflight_request/index.html +++ b/files/pt-br/glossary/preflight_request/index.html @@ -1,6 +1,6 @@ --- title: Requisição Preflight -slug: Glossario/Preflight_request +slug: Glossary/Preflight_request tags: - CORS - Glossário @@ -8,6 +8,7 @@ tags: - Preflight - requisição translation_of: Glossary/Preflight_request +original_slug: Glossario/Preflight_request ---

    Uma requisição preflight de CORS é uma requisição de {{Glossary ("CORS")}} que verifica se o protocolo {{Glossary ("CORS")}} é entendido e se o servidor aguarda o método e cabeçalhos('headers') especificados.

    diff --git a/files/pt-br/glossary/primitive/index.html b/files/pt-br/glossary/primitive/index.html index 0ae1f362d5..88a842d809 100644 --- a/files/pt-br/glossary/primitive/index.html +++ b/files/pt-br/glossary/primitive/index.html @@ -1,7 +1,8 @@ --- title: Primitivo -slug: Glossario/Primitivo +slug: Glossary/Primitive translation_of: Glossary/Primitive +original_slug: Glossario/Primitivo ---

    Resumo

    diff --git a/files/pt-br/glossary/progressive_web_apps/index.html b/files/pt-br/glossary/progressive_web_apps/index.html index 93105b3b30..c4dd7ffbb7 100644 --- a/files/pt-br/glossary/progressive_web_apps/index.html +++ b/files/pt-br/glossary/progressive_web_apps/index.html @@ -1,11 +1,12 @@ --- title: Progressive web apps -slug: Glossario/Progressive_web_apps +slug: Glossary/Progressive_web_apps tags: - Composição - Glossário - Progressive web apps translation_of: Glossary/Progressive_web_apps +original_slug: Glossario/Progressive_web_apps ---

    Progressive web apps é um termo usado para descrever o estado moderno do desenvolvimento de aplicações web. Isso envolve pegar web sites/apps que aproveitam de todas as melhores partes da Web - como descobertas por mecanismos de busca, tornando-se linkaveis via {{Glossary("URL")}}s, e trabalho em vários fatores de formas - e sobrecarregá-los com APIs modernas (como Service Works e Push) e funcionalidades que conferem outros benefícios comumente atribuídos para apps nativos.

    diff --git a/files/pt-br/glossary/property/css/index.html b/files/pt-br/glossary/property/css/index.html index 748f37002d..24b4e1b93f 100644 --- a/files/pt-br/glossary/property/css/index.html +++ b/files/pt-br/glossary/property/css/index.html @@ -1,10 +1,11 @@ --- title: Propriedade (CSS) -slug: Glossario/property/CSS +slug: Glossary/property/CSS tags: - CodingScripting - Glossário translation_of: Glossary/property/CSS +original_slug: Glossario/property/CSS ---

    Uma propriedade CSS é uma característica (como a cor) cujo valor define o aspecto de como o navegador deve exibir o elemento.

    diff --git a/files/pt-br/glossary/property/index.html b/files/pt-br/glossary/property/index.html index a837434992..990966ebd1 100644 --- a/files/pt-br/glossary/property/index.html +++ b/files/pt-br/glossary/property/index.html @@ -1,10 +1,11 @@ --- title: Propriedade -slug: Glossario/property +slug: Glossary/property tags: - Desambiguação - Glossário translation_of: Glossary/property +original_slug: Glossario/property ---

    O termo propriedade (property) pode ter diversos siginificados depenedendo do contexto. Ele pode se referir a:

    diff --git a/files/pt-br/glossary/property/javascript/index.html b/files/pt-br/glossary/property/javascript/index.html index 94cb51484f..69f314bca1 100644 --- a/files/pt-br/glossary/property/javascript/index.html +++ b/files/pt-br/glossary/property/javascript/index.html @@ -1,10 +1,11 @@ --- title: Propriedade (JavaScript) -slug: Glossario/property/JavaScript +slug: Glossary/property/JavaScript tags: - CodingScripting - Glossário translation_of: Glossary/property/JavaScript +original_slug: Glossario/property/JavaScript ---

    Uma propriedade Javascript é uma característica de um objeto, frequentemente descrita como atributos associados à uma estrutura de dados.

    diff --git a/files/pt-br/glossary/protocol/index.html b/files/pt-br/glossary/protocol/index.html index 95d78f010f..967922564a 100644 --- a/files/pt-br/glossary/protocol/index.html +++ b/files/pt-br/glossary/protocol/index.html @@ -1,10 +1,11 @@ --- title: Protocolo -slug: Glossario/Protocolo +slug: Glossary/Protocol tags: - Infraestrutura - Protocolos translation_of: Glossary/Protocol +original_slug: Glossario/Protocolo ---

    Um protocolo é um sistema de regras que define como o dado é trafegado dentro ou entre computadores. Comunicações entre dispositivos requer que estes concordem com o formato do dado que estiver sendo trafegado. O conjunto de regras que define esse formato é chamado de protocolo.

    diff --git a/files/pt-br/glossary/prototype/index.html b/files/pt-br/glossary/prototype/index.html index e2d05ee2ba..7f3e5f7625 100644 --- a/files/pt-br/glossary/prototype/index.html +++ b/files/pt-br/glossary/prototype/index.html @@ -1,7 +1,8 @@ --- title: Prototype -slug: Glossario/Prototype +slug: Glossary/Prototype translation_of: Glossary/Prototype +original_slug: Glossario/Prototype ---

    A prototype é um modelo que exibe a aparência e o comportamento de um aplicativo ou produto no início do ciclo de vida do desenvolvimento.

    diff --git a/files/pt-br/glossary/proxy_server/index.html b/files/pt-br/glossary/proxy_server/index.html index 0748080f16..7b5d1e09f9 100644 --- a/files/pt-br/glossary/proxy_server/index.html +++ b/files/pt-br/glossary/proxy_server/index.html @@ -1,7 +1,8 @@ --- title: Proxy server -slug: Glossario/Proxy_server +slug: Glossary/Proxy_server translation_of: Glossary/Proxy_server +original_slug: Glossario/Proxy_server ---

    Um servidor proxy é um computador ou programa intermediário usado ao navegar em conexões de internet diferentes. Eles facilitam o acesso ao conteúdo na rede mundial de computadores. Um proxy intercepta pedidos e exibe respostas; pode encaminhar os pedidos, ou não (por exemplo no caso de uma cache), e pode modificá-los (por exemplo alterando cabeçalhos, no limite entre duas redes)

    diff --git a/files/pt-br/glossary/pseudo-class/index.html b/files/pt-br/glossary/pseudo-class/index.html index 6221c38d62..38129e514c 100644 --- a/files/pt-br/glossary/pseudo-class/index.html +++ b/files/pt-br/glossary/pseudo-class/index.html @@ -1,12 +1,13 @@ --- title: Pseudo-class -slug: Glossario/Pseudo-class +slug: Glossary/Pseudo-class tags: - CSS - Codificação de Scripts - Glossário - Seletor translation_of: Glossary/Pseudo-class +original_slug: Glossario/Pseudo-class ---

    No CSS, um seletor do tipo pseudo-classe referencia um elemento dependendo do seu estado e não de informações da arvore do documento. Por exemplo, o seletor a{{ cssxref(":visited") }} aplica estilo somente aos links que o usuário já visitou

    diff --git a/files/pt-br/glossary/pseudo-element/index.html b/files/pt-br/glossary/pseudo-element/index.html index 6f28c4d702..9360b3e1e8 100644 --- a/files/pt-br/glossary/pseudo-element/index.html +++ b/files/pt-br/glossary/pseudo-element/index.html @@ -1,7 +1,8 @@ --- title: Pseudo-element -slug: Glossario/Pseudo-element +slug: Glossary/Pseudo-element translation_of: Glossary/Pseudo-element +original_slug: Glossario/Pseudo-element ---

    Em CSS, um seletor pseudo-element aplica estilos em partes do conteúdo do seu documento em cenários onde não há elementos HTML específicos para selecionar. Por exemplo, em vez de colocar a primeira letra para cada parágrafo em seu próprio elemento. você pode estilizá-los todos com p{{ Cssxref("::first-letter") }}.

    diff --git a/files/pt-br/glossary/python/index.html b/files/pt-br/glossary/python/index.html index e4f254553c..a56f535a98 100644 --- a/files/pt-br/glossary/python/index.html +++ b/files/pt-br/glossary/python/index.html @@ -1,6 +1,6 @@ --- title: Python -slug: Glossario/Python +slug: Glossary/Python tags: - Codificação de Scripts - Glossário @@ -8,6 +8,7 @@ tags: - Programação - Python translation_of: Glossary/Python +original_slug: Glossario/Python ---

    Python é uma linguagem de programação de alto nível e de uso geral. Ele usa uma abordagem multi-paradigma, o que significa que ele suporta procedural, orientação a objetos, e algumas construções de programação funcional.

    diff --git a/files/pt-br/glossary/recursion/index.html b/files/pt-br/glossary/recursion/index.html index eb43639f84..71188f7c77 100644 --- a/files/pt-br/glossary/recursion/index.html +++ b/files/pt-br/glossary/recursion/index.html @@ -1,11 +1,12 @@ --- title: Recursão -slug: Glossario/Recursão +slug: Glossary/Recursion tags: - Glossário - Iniciante - Programando translation_of: Glossary/Recursion +original_slug: Glossario/Recursão ---

    Um ato de uma função invocando a si mesma. A recursão é usada para resolver problemas que contêm subproblemas menores. Uma função recursiva pode receber dois inputs (entradas): um caso base (termina a recursão) ou um caso recursivo (continua a recursão).

    diff --git a/files/pt-br/glossary/reflow/index.html b/files/pt-br/glossary/reflow/index.html index 3df9513d4d..15fcc23ff3 100644 --- a/files/pt-br/glossary/reflow/index.html +++ b/files/pt-br/glossary/reflow/index.html @@ -1,7 +1,8 @@ --- title: Reflow -slug: Glossario/Reflow +slug: Glossary/Reflow translation_of: Glossary/Reflow +original_slug: Glossario/Reflow ---

    Reflow acontece quando o {{glossary("browser")}} deve processar e desenhar parte ou toda a página novamente, como após uma atualização em  um site interativo.

    diff --git a/files/pt-br/glossary/request_header/index.html b/files/pt-br/glossary/request_header/index.html index f8c72a0f4c..2a7d34e93f 100644 --- a/files/pt-br/glossary/request_header/index.html +++ b/files/pt-br/glossary/request_header/index.html @@ -1,7 +1,8 @@ --- title: Cabeçalho de Requisição -slug: Glossario/Request_header +slug: Glossary/Request_header translation_of: Glossary/Request_header +original_slug: Glossario/Request_header ---

    Um cabeçalho de requisição é um {{glossary("header", "cabeçalho HTTP")}} que pode ser utilizado em uma requisição HTTP, e não é relacionado ao conteúdo da mensagem. Cabeçalhos de requisição, como {{HTTPHeader("Accept")}}, {{HTTPHeader("Accept-Language", "Accept-*")}}, ou ainda {{HTTPHeader("If-Modified-Since", "If-*")}} permitem realizar requisições condicionais; outros como {{HTTPHeader("Cookie")}}, {{HTTPHeader("User-Agent")}} ou {{HTTPHeader("Referer")}} deixa o contexto mais preciso para que o servidor possa adaptar melhor a resposta.

    diff --git a/files/pt-br/glossary/responsive_web_design/index.html b/files/pt-br/glossary/responsive_web_design/index.html index 602e2ba05a..f9cb26f3d2 100644 --- a/files/pt-br/glossary/responsive_web_design/index.html +++ b/files/pt-br/glossary/responsive_web_design/index.html @@ -1,12 +1,13 @@ --- title: Web Design Responsivo -slug: Glossario/Responsive_web_design +slug: Glossary/Responsive_web_design tags: - Acessibilidade - Design - Glossário - Web Design Responsivo translation_of: Glossary/Responsive_web_design +original_slug: Glossario/Responsive_web_design ---

    Web Design Responsivo (RWD em Inglês) é um conceito de desenvolvimento Web focado em fazer a experiência e comportamento de websites mais otimizada para todos os dispositivos, desde o desktop até um dispositivo móvel.

    diff --git a/files/pt-br/glossary/rest/index.html b/files/pt-br/glossary/rest/index.html index 1a7346bee1..61879c59e4 100644 --- a/files/pt-br/glossary/rest/index.html +++ b/files/pt-br/glossary/rest/index.html @@ -1,6 +1,6 @@ --- title: REST -slug: Glossario/REST +slug: Glossary/REST tags: - Arquitetura - Glossário @@ -8,6 +8,7 @@ tags: - Iniciante - Rest translation_of: Glossary/REST +original_slug: Glossario/REST ---

    REST (Representational State Transfer) refere-se a um grupo de restrições de design dentro da arquitetura de software que geram sistemas distribuídos eficientes, confiáveis e escaláveis. Um sistema é denominado RESTful quando adere a todas essas restrições.

    diff --git a/files/pt-br/glossary/ruby/index.html b/files/pt-br/glossary/ruby/index.html index b247016e17..7bb2da5560 100644 --- a/files/pt-br/glossary/ruby/index.html +++ b/files/pt-br/glossary/ruby/index.html @@ -1,10 +1,11 @@ --- title: Ruby -slug: Glossario/Ruby +slug: Glossary/Ruby tags: - Glossário - Ruby translation_of: Glossary/Ruby +original_slug: Glossario/Ruby ---

    Ruby é uma linguagem de programação de código aberto. Em um contexto {{glossary("world wide web","Web")}}, Ruby é geralmente usado em servidores com o framework Ruby On Rails (ROR) para produzir websites/apps.

    diff --git a/files/pt-br/glossary/safe/index.html b/files/pt-br/glossary/safe/index.html index bb16dc429c..c9d92ea203 100644 --- a/files/pt-br/glossary/safe/index.html +++ b/files/pt-br/glossary/safe/index.html @@ -1,12 +1,13 @@ --- title: Seguro -slug: Glossario/seguro +slug: Glossary/safe tags: - Glossary - Glossário - Mecânicas da Web - WebMechanics translation_of: Glossary/safe +original_slug: Glossario/seguro ---

    Um método HTTP é seguro se ele não altera o estado do servidor. Em outras palavras, um método é seguro se ele leva a uma operação de somente leitura. Diversos métodos de HTTP são seguros: {{HTTPMethod("GET")}}, {{HTTPMethod("HEAD")}}, ou {{HTTPMethod("OPTIONS")}}. Todos os métodos seguros também são {{glossary("idempotente")}}s, mas nem todos os métodos idempotentes são seguros. Por exemplo, {{HTTPMethod("PUT")}} e {{HTTPMethod("DELETE")}} são ambos idempotentes, entretanto são inseguros.

    diff --git a/files/pt-br/glossary/scope/index.html b/files/pt-br/glossary/scope/index.html index 5dc1b896c0..aa48e43525 100644 --- a/files/pt-br/glossary/scope/index.html +++ b/files/pt-br/glossary/scope/index.html @@ -1,9 +1,10 @@ --- title: Escopo -slug: Glossario/Escopo +slug: Glossary/Scope tags: - Glossary translation_of: Glossary/Scope +original_slug: Glossario/Escopo ---

    É o contexto atual de {{glossary("execute","execução")}}, em que {{glossary("valor","valores")}} e expressões são "visíveis" ou podem ser referenciadas. Se uma variável ou outra expressão não estiver "no escopo atual", então não está disponível para uso. Os escopos também podem ser em camadas em uma hierarquia, de modo que os escopos filhos tenham acesso aos escopos pais, mas não vice-versa.

    diff --git a/files/pt-br/glossary/sdp/index.html b/files/pt-br/glossary/sdp/index.html index 71c8d86e5a..e311e3b13f 100644 --- a/files/pt-br/glossary/sdp/index.html +++ b/files/pt-br/glossary/sdp/index.html @@ -1,6 +1,6 @@ --- title: SDP -slug: Glossario/SDP +slug: Glossary/SDP tags: - Avançado - Colaborativo @@ -9,6 +9,7 @@ tags: - Ponto a ponto - Tempo Real translation_of: Glossary/SDP +original_slug: Glossario/SDP ---

    SDP (Session Description {{glossary("Protocol")}}) é o padrão que descreve uma conexão {{Glossary("P2P","ponto a ponto")}}. SDP contém o {{Glossary("codec")}}, o endereço de origem e as informações de tempo de áudio e vídeo.

    diff --git a/files/pt-br/glossary/self-executing_anonymous_function/index.html b/files/pt-br/glossary/self-executing_anonymous_function/index.html index 06f693ba9a..762dbf98b0 100644 --- a/files/pt-br/glossary/self-executing_anonymous_function/index.html +++ b/files/pt-br/glossary/self-executing_anonymous_function/index.html @@ -1,7 +1,8 @@ --- title: Self-Executing Anonymous Function -slug: Glossario/Self-Executing_Anonymous_Function +slug: Glossary/Self-Executing_Anonymous_Function translation_of: Glossary/Self-Executing_Anonymous_Function +original_slug: Glossario/Self-Executing_Anonymous_Function ---

    (Self-Executing Anonymous Function) é uma função {{glossary("JavaScript")}} que é executada assim que definida. Ela também é conhecida como IIFE (Immediately Invoked Function Expression).

    diff --git a/files/pt-br/glossary/semantics/index.html b/files/pt-br/glossary/semantics/index.html index db39cb33a2..c22d183b04 100644 --- a/files/pt-br/glossary/semantics/index.html +++ b/files/pt-br/glossary/semantics/index.html @@ -1,12 +1,13 @@ --- title: Semântica -slug: Glossario/Semantica +slug: Glossary/Semantics tags: - Codificação de Script - Glossário - HTML - semántica translation_of: Glossary/Semantics +original_slug: Glossario/Semantica ---

    Na programação, a Semântica se refere ao significado de um trecho de código — por exemplo, "que efeito tem a execução dessa linha de JavaScript?", Ou "que finalidade ou função esse elemento HTML tem" (em vez de "como ele se parece?").

    diff --git a/files/pt-br/glossary/seo/index.html b/files/pt-br/glossary/seo/index.html index bd71aa5856..a913aa26c1 100644 --- a/files/pt-br/glossary/seo/index.html +++ b/files/pt-br/glossary/seo/index.html @@ -1,6 +1,6 @@ --- title: SEO - Otimização dos Mecanismos de Buscas -slug: Glossario/SEO +slug: Glossary/SEO tags: - Beginner - Glossário @@ -10,6 +10,7 @@ tags: - Search - pesquisa translation_of: Glossary/SEO +original_slug: Glossario/SEO ---

    SEO (Search Engine Optimization - Otimização dos Mecanismos de Pesquisa) é o processo de fazer com que um sítio fique mais visível nos resultados da procura, também denominado melhoramento na classificação da busca.

    diff --git a/files/pt-br/glossary/server/index.html b/files/pt-br/glossary/server/index.html index 4275c0496c..6652818cca 100644 --- a/files/pt-br/glossary/server/index.html +++ b/files/pt-br/glossary/server/index.html @@ -1,6 +1,6 @@ --- title: Servidor -slug: Glossario/Servidor +slug: Glossary/Server tags: - Glossário - Infraestrutura @@ -8,6 +8,7 @@ tags: - Rede - Servidor translation_of: Glossary/Server +original_slug: Glossario/Servidor ---

    Um servidor hardware é um computador compartilhado em uma rede que provê serviços a clientes. Um servidor software é um programa que provê serviços a programas clientes.

    diff --git a/files/pt-br/glossary/sgml/index.html b/files/pt-br/glossary/sgml/index.html index ceca8484b7..650ba38915 100644 --- a/files/pt-br/glossary/sgml/index.html +++ b/files/pt-br/glossary/sgml/index.html @@ -1,7 +1,8 @@ --- title: SGML -slug: Glossario/SGML +slug: Glossary/SGML translation_of: Glossary/SGML +original_slug: Glossario/SGML ---

    O Standard Generalized Markup Language (SGML) é uma {{Glossary("ISO")}} especificação que veio para definir as declarações/sintaxe Linguagens de Marcação.

    diff --git a/files/pt-br/glossary/sloppy_mode/index.html b/files/pt-br/glossary/sloppy_mode/index.html index 09d9dd3dc4..d1cb31086c 100644 --- a/files/pt-br/glossary/sloppy_mode/index.html +++ b/files/pt-br/glossary/sloppy_mode/index.html @@ -1,12 +1,13 @@ --- title: Sloppy mode -slug: Glossario/Sloppy_mode +slug: Glossary/Sloppy_mode tags: - CodingScripting - Glossário - JavaScript - Sloppy translation_of: Glossary/Sloppy_mode +original_slug: Glossario/Sloppy_mode ---

    A partir do {{Glossary("ECMAScript")}} 5 é possível optar pelo novo strict mode (modo estrito), que altera a semântica do JavaScript de várias maneiras para melhorar sua resiliência e facilitar a compreensão do que está acontecendo quando há problemas.

    diff --git a/files/pt-br/glossary/speculative_parsing/index.html b/files/pt-br/glossary/speculative_parsing/index.html index 5da1c3efa2..3a6c4495ff 100644 --- a/files/pt-br/glossary/speculative_parsing/index.html +++ b/files/pt-br/glossary/speculative_parsing/index.html @@ -1,7 +1,8 @@ --- title: Optimizing your pages for speculative parsing -slug: Web/HTML/Optimizing_your_pages_for_speculative_parsing +slug: Glossary/speculative_parsing translation_of: Glossary/speculative_parsing +original_slug: Web/HTML/Optimizing_your_pages_for_speculative_parsing ---

    Traditionally in browsers the HTML parser has run on the main thread and has blocked after a </script> tag until the script has been retrieved from the network and executed. The HTML parser in Firefox 4 and later supports speculative parsing off the main thread. It parses ahead while scripts are being downloaded and executed. As in Firefox 3.5 and 3.6, the HTML parser starts speculative loads for scripts, style sheets and images it finds ahead in the stream. However, in Firefox 4 and later the HTML parser also runs the HTML tree construction algorithm speculatively. The upside is that when a speculation succeeds, there's no need to reparse the part of the incoming file that was already scanned for scripts, style sheets and images. The downside is that there's more work lost when the speculation fails.

    This document helps you avoid the kind of things that make speculation fail and slow down the loading of your page.

    diff --git a/files/pt-br/glossary/stacking_context/index.html b/files/pt-br/glossary/stacking_context/index.html index 19e5be1656..f1225cd971 100644 --- a/files/pt-br/glossary/stacking_context/index.html +++ b/files/pt-br/glossary/stacking_context/index.html @@ -1,7 +1,8 @@ --- title: Stacking context -slug: Glossario/Stacking_context +slug: Glossary/Stacking_context translation_of: Glossary/Stacking_context +original_slug: Glossario/Stacking_context ---

    Stacking context refere-se refere a como elementos de uma página se empilham sobre outros elementos, assim como você pode organizar cards em cima de sua mesa, lado a lado ou sobrepostas.

    diff --git a/files/pt-br/glossary/statement/index.html b/files/pt-br/glossary/statement/index.html index aada0eeb58..11cb4ef753 100644 --- a/files/pt-br/glossary/statement/index.html +++ b/files/pt-br/glossary/statement/index.html @@ -1,11 +1,12 @@ --- title: Declaração -slug: Glossario/Declaração +slug: Glossary/Statement tags: - Glossário - Iniciante - declarações translation_of: Glossary/Statement +original_slug: Glossario/Declaração ---

    Em uma linguagem de programação, uma declaração é uma linha de código que dá comando para execução de uma tarefa. Cada programa é composto por uma sequência de declarações.

    diff --git a/files/pt-br/glossary/string/index.html b/files/pt-br/glossary/string/index.html index d825d3a869..677c87cc4c 100644 --- a/files/pt-br/glossary/string/index.html +++ b/files/pt-br/glossary/string/index.html @@ -1,12 +1,13 @@ --- title: String -slug: Glossario/String +slug: Glossary/String tags: - CodingScript - Glossário - Iniciante - String translation_of: Glossary/String +original_slug: Glossario/String ---

    Em qualquer linguagem de programação, uma string é uma sequência de {{Glossary("character","caracteres")}} usados para representar texto

    diff --git a/files/pt-br/glossary/svg/index.html b/files/pt-br/glossary/svg/index.html index dc2c942196..36922c8135 100644 --- a/files/pt-br/glossary/svg/index.html +++ b/files/pt-br/glossary/svg/index.html @@ -1,13 +1,14 @@ --- title: SVG -slug: Glossario/SVG +slug: Glossary/SVG tags: - Glossário - Iniciante - SVG - graficos - - 'l10n:priority' + - l10n:priority translation_of: Glossary/SVG +original_slug: Glossario/SVG ---

    Scalable Vector Graphics (SVG) é um formato de imagem vetorial 2D baseado em uma sintaxe {{Glossary("XML")}}.

    diff --git a/files/pt-br/glossary/symbol/index.html b/files/pt-br/glossary/symbol/index.html index 82309a12e5..4aa071ed23 100644 --- a/files/pt-br/glossary/symbol/index.html +++ b/files/pt-br/glossary/symbol/index.html @@ -1,7 +1,8 @@ --- title: Symbol -slug: Glossario/Symbol +slug: Glossary/Symbol translation_of: Glossary/Symbol +original_slug: Glossario/Symbol ---

    Esse termo do glossário descreve tanto o tipo de dados chamado "symbol", quando a função/classe "{{jsxref("Symbol")}}()", que entre outras coisas, cria instâncias do tipo de dados symbol.

    diff --git a/files/pt-br/glossary/synchronous/index.html b/files/pt-br/glossary/synchronous/index.html index f37257d974..4689532799 100644 --- a/files/pt-br/glossary/synchronous/index.html +++ b/files/pt-br/glossary/synchronous/index.html @@ -1,11 +1,12 @@ --- title: Síncrono -slug: Glossario/Sincrono +slug: Glossary/Synchronous tags: - Glossário - Mecanismos Web - Web translation_of: Glossary/Synchronous +original_slug: Glossario/Sincrono ---

    Síncrono refere-se a comunicação em tempo real onde cada parte recebe ( e se necessário, processa e responde) mensagens instantaneamente (ou o mais próximo possível do instantâneo).

    diff --git a/files/pt-br/glossary/tag/index.html b/files/pt-br/glossary/tag/index.html index 23182eef2d..a604f08b7d 100644 --- a/files/pt-br/glossary/tag/index.html +++ b/files/pt-br/glossary/tag/index.html @@ -1,12 +1,13 @@ --- title: Tag -slug: Glossario/Tag +slug: Glossary/Tag tags: - Codificação de Scripts - Glossário - HTML - Introdução translation_of: Glossary/Tag +original_slug: Glossario/Tag ---

    Em {{Glossary("HTML")}} a tag é usada para criar um {{Glossary("element", "elemento")}}.  O nome de um elemento HTML é o nome usado entre colchetes angulares como "<p>" para criar parágrafos. Note que ao fechar uma tag ela tem uma barra antes de seu nome, "</p>" , e que em elementos vazios a tag final não é requirida e nem permitida. Se os {{Glossary("Attribute", "atributos")}} não forem mencionados, os valores padrões serão usados em cada caso.

    diff --git a/files/pt-br/glossary/tcp/index.html b/files/pt-br/glossary/tcp/index.html index 56247facce..e2a35ee7c4 100644 --- a/files/pt-br/glossary/tcp/index.html +++ b/files/pt-br/glossary/tcp/index.html @@ -1,6 +1,6 @@ --- title: TCP -slug: Glossario/TCP +slug: Glossary/TCP tags: - Glossário - Infraestrutura @@ -9,6 +9,7 @@ tags: - Transmission Control Protocol - dados translation_of: Glossary/TCP +original_slug: Glossario/TCP ---

    TCP (Transmission Control Protocol, em português, Protocolo de Controle de Transmissão) é um importante {{Glossary("protocol", "protocolo")}} de rede que permite dois hosts se conectem e troquem dados. TCP garante a entrega de dados e pacotes na mesma ordem que foram enviados. Vint Cerf e Bob Kahn, que na época eram cientistas da DARPA (Defense Advanced Research Projects Agency, em português, Agência de Pesquisas em Projetos Avançados de Defesa), projetaram TCP na década de 1970.

    diff --git a/files/pt-br/glossary/three_js/index.html b/files/pt-br/glossary/three_js/index.html index 8d3415b661..6a1419be57 100644 --- a/files/pt-br/glossary/three_js/index.html +++ b/files/pt-br/glossary/three_js/index.html @@ -1,6 +1,6 @@ --- title: Three js -slug: Glossario/Three_js +slug: Glossary/Three_js tags: - CodingScripting - JavaScript @@ -8,6 +8,7 @@ tags: - Navegador - three.js translation_of: Glossary/Three_js +original_slug: Glossario/Three_js ---

    three.js é um motor {{Glossary("WebGL")}} baseado em {{Glossary("JavaScript")}} que pode executar jogos movidos com GPU ou outros aplicativos gráficos diretamente do {{Glossary("navegador")}}. A biblioteca three.js fornece várias funções e {{Glossary("API","APIs")}} para desenhar cenas 3D em seu navegador.

    diff --git a/files/pt-br/glossary/tls/index.html b/files/pt-br/glossary/tls/index.html index 4cfbc209ee..cfa2dc0168 100644 --- a/files/pt-br/glossary/tls/index.html +++ b/files/pt-br/glossary/tls/index.html @@ -1,12 +1,13 @@ --- title: TLS -slug: Glossario/TLS +slug: Glossary/TLS tags: - Criptografía - Glossário - Infraestrutura - Segurança translation_of: Glossary/TLS +original_slug: Glossario/TLS ---

    Transport Layer Security (TLS), previamente conhecido como Secure Sockets Layer (SSL), é um {{Glossary("protocolo")}} usado por aplicativos para se comunicar de forma segura em toda a rede, evitando adulteração e espionagem no email, navegador, mensagens e outros protocolos.

    diff --git a/files/pt-br/glossary/truthy/index.html b/files/pt-br/glossary/truthy/index.html index 872e53df91..dfa1535328 100644 --- a/files/pt-br/glossary/truthy/index.html +++ b/files/pt-br/glossary/truthy/index.html @@ -1,11 +1,12 @@ --- title: Truthy -slug: Glossario/Truthy +slug: Glossary/Truthy tags: - CodingScripting - Glossário - JavaScript translation_of: Glossary/Truthy +original_slug: Glossario/Truthy ---

    Em {{Glossary("JavaScript")}}, um valor truthy é um valor que se traduz em verdadeiro quando avaliado em um contexto {{Glossary("Booleano")}}. Todos os valores são truthy a menos que eles sejam definidos como {{Glossary("Falsy", "falsy")}} (ou seja., exceto para false, 0, "", null, undefined, e NaN).

    diff --git a/files/pt-br/glossary/type_conversion/index.html b/files/pt-br/glossary/type_conversion/index.html index 7c105b70ae..cd38f69ca7 100644 --- a/files/pt-br/glossary/type_conversion/index.html +++ b/files/pt-br/glossary/type_conversion/index.html @@ -1,7 +1,8 @@ --- title: Conversão de Tipo -slug: Glossario/Conversao_de_Tipo +slug: Glossary/Type_Conversion translation_of: Glossary/Type_Conversion +original_slug: Glossario/Conversao_de_Tipo ---

    Conversão de Tipo (ou typecasting) significa transferência de dados de um tipo de dado para o outro. A conversão implícita ocorre quando o compilador atribui automaticamente os tipos de dados, mas o código fonte também pode explicitamente exigir uma conversão de tipo. Por exemplo, dada a instrução 5+2.0, o float 2.0 será implicitamente convertido para integer, mas dada a instrução Number("0x11"), a string  "0x11" será explicitamente convertida para o número 17.

    diff --git a/files/pt-br/glossary/undefined/index.html b/files/pt-br/glossary/undefined/index.html index cda7c27ea3..5e363ae334 100644 --- a/files/pt-br/glossary/undefined/index.html +++ b/files/pt-br/glossary/undefined/index.html @@ -1,7 +1,8 @@ --- title: undefined -slug: Glossario/undefined +slug: Glossary/undefined translation_of: Glossary/undefined +original_slug: Glossario/undefined ---

    Um valor  {{Glossary("primitive")}} automaticamente atribuido para variaveis que foram recentemente declaradas ou para {{Glossary("Argument","arguments")}} formais para qual não existem argumentos atualmente.

    diff --git a/files/pt-br/glossary/uri/index.html b/files/pt-br/glossary/uri/index.html index 50c9ede26d..5fc05e75d7 100644 --- a/files/pt-br/glossary/uri/index.html +++ b/files/pt-br/glossary/uri/index.html @@ -1,7 +1,8 @@ --- title: URI -slug: Glossario/URI +slug: Glossary/URI translation_of: Glossary/URI +original_slug: Glossario/URI ---

    A URI (Uniform Resource Identifier, ou Identificador Uniforme de Recursos) é uma string (sequência de caracteres) que se refere a um recurso. A mais comum é a {{Glossary("URL")}}, que identifica o recurso localizando-o na Web. {{Glossary("URN","URNs")}}, em contraste, refere-se a um recurso pelo nome, em dado namespace. Ex: o ISBN de um livro.

    diff --git a/files/pt-br/glossary/url/index.html b/files/pt-br/glossary/url/index.html index 1012b7004e..9fd0b8ec32 100644 --- a/files/pt-br/glossary/url/index.html +++ b/files/pt-br/glossary/url/index.html @@ -1,10 +1,11 @@ --- title: URL -slug: Glossario/URL +slug: Glossary/URL tags: - Glossário - Infraestrutura translation_of: Glossary/URL +original_slug: Glossario/URL ---

    Uniform Resource Locator (URL) é uma sequência de texto que especifica onde um recurso pode ser encontrado na Internet.

    diff --git a/files/pt-br/glossary/utf-8/index.html b/files/pt-br/glossary/utf-8/index.html index a056fe392a..bf2330c204 100644 --- a/files/pt-br/glossary/utf-8/index.html +++ b/files/pt-br/glossary/utf-8/index.html @@ -1,7 +1,8 @@ --- title: UTF-8 -slug: Glossario/UTF-8 +slug: Glossary/UTF-8 translation_of: Glossary/UTF-8 +original_slug: Glossario/UTF-8 ---

    UTF-8 (UCS Transformation Format 8) é a codificação de caracteres mais comum da World Wide Web. Cada caractere é representado por um a quatro bytes. UTF-8 é compatível com versões anteriores do ASCII e pode representar qualquer caractere Unicode padrão.

    diff --git a/files/pt-br/glossary/ux/index.html b/files/pt-br/glossary/ux/index.html index b2037753e6..ce53f9aff6 100644 --- a/files/pt-br/glossary/ux/index.html +++ b/files/pt-br/glossary/ux/index.html @@ -1,6 +1,6 @@ --- title: UX -slug: Glossario/UX +slug: Glossary/UX tags: - Acessibilidade - Composição @@ -8,6 +8,7 @@ tags: - Glossário - Navegação translation_of: Glossary/UX +original_slug: Glossario/UX ---

    UX é um acrônimo que significa experiência do usuário (User eXperience). É o estudo da interação entre usuários e um sistema. Seu objetivo é tornar um sistema fácil de interagir do ponto de vista do usuário.

    diff --git a/files/pt-br/glossary/value/index.html b/files/pt-br/glossary/value/index.html index b03c28a030..1a6ac583f6 100644 --- a/files/pt-br/glossary/value/index.html +++ b/files/pt-br/glossary/value/index.html @@ -1,9 +1,10 @@ --- title: Valor -slug: Glossario/Valor +slug: Glossary/Value tags: - Glossário translation_of: Glossary/Value +original_slug: Glossario/Valor ---

    No contexto de dados ou um objeto {{Glossary("Wrapper", "wrapper")}} em torno desses dados, o valor é um {{Glossary("Primitive","valor primitivo")}} que contém o wrapper do objeto. No contexto de uma {{Glossary("Variável","variável")}} ou {{Glossary("Property","propriedade")}}, o valor pode ser primitivo ou {{Glossary("Object reference","refêrencia de um objeto")}}.

    diff --git a/files/pt-br/glossary/variable/index.html b/files/pt-br/glossary/variable/index.html index 6daf0decae..5e96df11cd 100644 --- a/files/pt-br/glossary/variable/index.html +++ b/files/pt-br/glossary/variable/index.html @@ -1,10 +1,11 @@ --- title: Variável -slug: Glossario/Variável +slug: Glossary/Variable tags: - JavaScript - Programando translation_of: Glossary/Variable +original_slug: Glossario/Variável ---

    Uma variável (variable) é um local nomeado para armazenar um {{Glossary("Valor", "valor")}}. Dessa forma, um valor pode ser acessado através de um nome predeterminado.

    diff --git a/files/pt-br/glossary/vendor_prefix/index.html b/files/pt-br/glossary/vendor_prefix/index.html index d1cc0fe991..74ab03741b 100644 --- a/files/pt-br/glossary/vendor_prefix/index.html +++ b/files/pt-br/glossary/vendor_prefix/index.html @@ -1,9 +1,10 @@ --- title: Prefixos vendor -slug: Glossario/Prefixos_vendor +slug: Glossary/Vendor_Prefix tags: - Glossário translation_of: Glossary/Vendor_Prefix +original_slug: Glossario/Prefixos_vendor ---

    Os fabricantes de browsers, por vezes, adicionam prefixos às propriedades experimentais ou fora dos padrões CSS, de modo que os desenvolvedores podem experimentá-las, enquanto —em teoria— as mudanças no comportamento dos navegadores não quebrarão o código durante o processo de padonização. Os desenvolvedores devem esperar para incluir a propriedade não pré-fixada até que o comportamento do navegador seja padronizado.

    diff --git a/files/pt-br/glossary/viewport/index.html b/files/pt-br/glossary/viewport/index.html index b8a740ac92..0d7ffbc9e8 100644 --- a/files/pt-br/glossary/viewport/index.html +++ b/files/pt-br/glossary/viewport/index.html @@ -1,12 +1,13 @@ --- title: Viewport -slug: Glossario/Viewport +slug: Glossary/Viewport tags: - Glossário - Tradução - pt-br - viewport translation_of: Glossary/Viewport +original_slug: Glossario/Viewport ---

    Uma viewport representa uma área poligonal (normalmente retangular) que está sendo exibida no momento. Em termos de navegador web, se refere a parte do documento que é exibida na janela (ou tela, se o documento estiver exibido em modo tela-cheia). Conteúdos fora da viewport não são visíveis na janela/tela até que seja rolado para sua área de visualização.

    diff --git a/files/pt-br/glossary/w3c/index.html b/files/pt-br/glossary/w3c/index.html index eafc150620..1517fd1f89 100644 --- a/files/pt-br/glossary/w3c/index.html +++ b/files/pt-br/glossary/w3c/index.html @@ -1,6 +1,6 @@ --- title: W3C -slug: Glossario/W3C +slug: Glossary/W3C tags: - Comunidade - Consórcio @@ -9,6 +9,7 @@ tags: - Introdução - W3C translation_of: Glossary/W3C +original_slug: Glossario/W3C ---

    O Consórcio da Rede Mundial (tradução livre de World Wide Web Consortium), ou simplesmente W3C é uma sociedade internacional que mantém as regras e  frameworks {{Glossary("World Wide Web", "relacionadas à Web")}}

    diff --git a/files/pt-br/glossary/webp/index.html b/files/pt-br/glossary/webp/index.html index c323b6a3de..df44552265 100644 --- a/files/pt-br/glossary/webp/index.html +++ b/files/pt-br/glossary/webp/index.html @@ -1,7 +1,8 @@ --- title: WebP -slug: Glossario/webp +slug: Glossary/webp translation_of: Glossary/webp +original_slug: Glossario/webp ---

    WebP é um formato de compressão de imagem lossless e lossy desenvolvido pelo Google.

    diff --git a/files/pt-br/glossary/websockets/index.html b/files/pt-br/glossary/websockets/index.html index bb0f72368c..e423a8c15d 100644 --- a/files/pt-br/glossary/websockets/index.html +++ b/files/pt-br/glossary/websockets/index.html @@ -1,7 +1,8 @@ --- title: WebSockets -slug: Glossario/WebSockets +slug: Glossary/WebSockets translation_of: Glossary/WebSockets +original_slug: Glossario/WebSockets ---

    WebSocket é um {{Glossary("protocolo")}} que permite persistir conexões {{Glossary("TCP")}} entre o {{Glossary("servidor")}} e o cliente de modo que se possa trocar dados a qualquer momento.

    diff --git a/files/pt-br/glossary/whatwg/index.html b/files/pt-br/glossary/whatwg/index.html index e743a0543a..551b9788a0 100644 --- a/files/pt-br/glossary/whatwg/index.html +++ b/files/pt-br/glossary/whatwg/index.html @@ -1,6 +1,6 @@ --- title: WHATWG -slug: Glossario/WHATWG +slug: Glossary/WHATWG tags: - Comunidade - GRUTTAH @@ -11,6 +11,7 @@ tags: - WHATWG - Web translation_of: Glossary/WHATWG +original_slug: Glossario/WHATWG ---

    O GRUTTAH (WHATWG - sigla em inglês) (Grupo de Trabalho da Tecnologia de Aplicação Hipertexto da Web tradução livre de Web Hypertext Application Working Group) é uma organização que mantém e desenvolve o {{Glossary("HTML")}} e as {{Glossary("API", "APIs")}} para aplicações Web. Antigos funcionários da Apple, Mozilla e Opera, estabeleceram o GRUTTAH em 2004.

    diff --git a/files/pt-br/glossary/wrapper/index.html b/files/pt-br/glossary/wrapper/index.html index 1af1581d67..4fac6000df 100644 --- a/files/pt-br/glossary/wrapper/index.html +++ b/files/pt-br/glossary/wrapper/index.html @@ -1,11 +1,12 @@ --- title: Wrapper -slug: Glossario/Wrapper +slug: Glossary/Wrapper tags: - CodingScripting - Glossary - Wrapper translation_of: Glossary/Wrapper +original_slug: Glossario/Wrapper ---

    Em linguagens de programação, como o JavaScript, um wrapper é uma função destinada a chamar uma ou mais funções, às vezes diretamente por conveniência, e às vezes adaptá-las para fazer uma tarefa ligeiramente diferente no processo.

    diff --git a/files/pt-br/glossary/xhr_(xmlhttprequest)/index.html b/files/pt-br/glossary/xhr_(xmlhttprequest)/index.html index 0b39fd44f1..f949878f41 100644 --- a/files/pt-br/glossary/xhr_(xmlhttprequest)/index.html +++ b/files/pt-br/glossary/xhr_(xmlhttprequest)/index.html @@ -1,7 +1,8 @@ --- title: XHR (XMLHttpRequest) -slug: Glossario/XHR_(XMLHttpRequest) +slug: Glossary/XHR_(XMLHttpRequest) translation_of: Glossary/XHR_(XMLHttpRequest) +original_slug: Glossario/XHR_(XMLHttpRequest) ---

    {{domxref("XMLHttpRequest")}} (XHR) é uma {{Glossary("API")}} {{Glossary("JavaScript")}} para criar requisições {{Glossary("AJAX")}}. Os métodos desta API fornecem opções para enviar requisições entre o {{Glossary("browser")}} e o {{Glossary("server")}}.

    diff --git a/files/pt-br/glossary/xhtml/index.html b/files/pt-br/glossary/xhtml/index.html index 17c42549eb..875c59871c 100644 --- a/files/pt-br/glossary/xhtml/index.html +++ b/files/pt-br/glossary/xhtml/index.html @@ -1,7 +1,8 @@ --- title: XHTML -slug: XHTML +slug: Glossary/XHTML translation_of: Glossary/XHTML +original_slug: XHTML ---

    O HTML pode ser transferido através da internet para o navegador usando duas sintaxes: sintaxe HTML e sintaxe XML, também conhecido como XHTML.

    diff --git a/files/pt-br/glossary/xml/index.html b/files/pt-br/glossary/xml/index.html index 76e5938dc0..c266ccc6d5 100644 --- a/files/pt-br/glossary/xml/index.html +++ b/files/pt-br/glossary/xml/index.html @@ -1,10 +1,11 @@ --- title: XML -slug: Glossario/XML +slug: Glossary/XML tags: - Glossário - XML translation_of: Glossary/XML +original_slug: Glossario/XML ---

    eXtensible Markup Language (XML) é uma linguagem de marcação genérica especificada pela W3C. A indústria de tecnologia da informação (TI) utiliza várias linguagens baseadas em XML para descrição de dados.

    diff --git a/files/pt-br/learn/accessibility/accessibility_troubleshooting/index.html b/files/pt-br/learn/accessibility/accessibility_troubleshooting/index.html index 727433531a..69aab0c3cb 100644 --- a/files/pt-br/learn/accessibility/accessibility_troubleshooting/index.html +++ b/files/pt-br/learn/accessibility/accessibility_troubleshooting/index.html @@ -1,6 +1,6 @@ --- title: 'Avaliação: solucionando problemas de acessibilidade' -slug: Learn/Accessibility/Acessibilidade_problemas +slug: Learn/Accessibility/Accessibility_troubleshooting tags: - Acessibilidade - Avaliação @@ -12,6 +12,7 @@ tags: - WAI-ARIA - aprendizado translation_of: Learn/Accessibility/Accessibility_troubleshooting +original_slug: Learn/Accessibility/Acessibilidade_problemas ---
    {{LearnSidebar}}
    diff --git a/files/pt-br/learn/accessibility/css_and_javascript/index.html b/files/pt-br/learn/accessibility/css_and_javascript/index.html index f0d8a728c5..2f7d7895b1 100644 --- a/files/pt-br/learn/accessibility/css_and_javascript/index.html +++ b/files/pt-br/learn/accessibility/css_and_javascript/index.html @@ -1,6 +1,6 @@ --- title: CSS e JavaScript - melhores práticas de acessibilidade -slug: Learn/Accessibility/CSS_e_JavaScript +slug: Learn/Accessibility/CSS_and_JavaScript tags: - Acessibilidade - Artigo @@ -9,6 +9,7 @@ tags: - color - contraste translation_of: Learn/Accessibility/CSS_and_JavaScript +original_slug: Learn/Accessibility/CSS_e_JavaScript ---
    {{LearnSidebar}}
    diff --git a/files/pt-br/learn/common_questions/how_do_you_host_your_website_on_google_app_engine/index.html b/files/pt-br/learn/common_questions/how_do_you_host_your_website_on_google_app_engine/index.html index 762169926c..7d3ca535c1 100644 --- a/files/pt-br/learn/common_questions/how_do_you_host_your_website_on_google_app_engine/index.html +++ b/files/pt-br/learn/common_questions/how_do_you_host_your_website_on_google_app_engine/index.html @@ -1,7 +1,8 @@ --- title: Como você hospeda seu site no Google App Engine? -slug: Learn/Common_questions/Como_voce_hospeda_seu_site_Google_App_Engine +slug: Learn/Common_questions/How_do_you_host_your_website_on_Google_App_Engine translation_of: Learn/Common_questions/How_do_you_host_your_website_on_Google_App_Engine +original_slug: Learn/Common_questions/Como_voce_hospeda_seu_site_Google_App_Engine ---

    Google App Engine é uma plataforma poderosa que lhe permite construir e rodar aplicações na infraestrutura do Google —  se você precisa criar um aplicativo da web de várias camadas do zero ou hospedar um site estático. Aqui está um guia passo a passo para hospedar seu site no Google App Engine.

    diff --git a/files/pt-br/learn/common_questions/how_does_the_internet_work/index.html b/files/pt-br/learn/common_questions/how_does_the_internet_work/index.html index 6bc88ac21f..4db463d2e5 100644 --- a/files/pt-br/learn/common_questions/how_does_the_internet_work/index.html +++ b/files/pt-br/learn/common_questions/how_does_the_internet_work/index.html @@ -1,12 +1,13 @@ --- title: Como a Internet funciona? -slug: Learn/Common_questions/Como_a_internet_funciona +slug: Learn/Common_questions/How_does_the_Internet_work tags: - Iniciante - Mecanismos Web - Tutorial - Web translation_of: Learn/Common_questions/How_does_the_Internet_work +original_slug: Learn/Common_questions/Como_a_internet_funciona ---

    Este artigo discute sobre o que é e como funciona a internet.

    diff --git a/files/pt-br/learn/common_questions/how_much_does_it_cost/index.html b/files/pt-br/learn/common_questions/how_much_does_it_cost/index.html index 7c92c2fb03..360c8c4d61 100644 --- a/files/pt-br/learn/common_questions/how_much_does_it_cost/index.html +++ b/files/pt-br/learn/common_questions/how_much_does_it_cost/index.html @@ -1,7 +1,8 @@ --- title: Quanto custa fazer algo na Web? -slug: Learn/Common_questions/Quanto_custa_fazer_algo_web +slug: Learn/Common_questions/How_much_does_it_cost translation_of: Learn/Common_questions/How_much_does_it_cost +original_slug: Learn/Common_questions/Quanto_custa_fazer_algo_web ---

    Getting involved on the Web isn't as cheap as it looks. In this article we discuss how much you may have to spend, and why.

    diff --git a/files/pt-br/learn/common_questions/set_up_a_local_testing_server/index.html b/files/pt-br/learn/common_questions/set_up_a_local_testing_server/index.html index 83b4f50a41..f5f9f76913 100644 --- a/files/pt-br/learn/common_questions/set_up_a_local_testing_server/index.html +++ b/files/pt-br/learn/common_questions/set_up_a_local_testing_server/index.html @@ -1,6 +1,6 @@ --- title: Como configurar um servidor de testes local -slug: Learn/Common_questions/Como_configurar_um_servidor_de_testes_local +slug: Learn/Common_questions/set_up_a_local_testing_server tags: - Aprender - Express @@ -13,6 +13,7 @@ tags: - lamp - servidores translation_of: Learn/Common_questions/set_up_a_local_testing_server +original_slug: Learn/Common_questions/Como_configurar_um_servidor_de_testes_local ---

    Este artigo explica como configurar um simples servidor de testes local em seu computador e o básico para utiliza-lo.

    diff --git a/files/pt-br/learn/common_questions/thinking_before_coding/index.html b/files/pt-br/learn/common_questions/thinking_before_coding/index.html index 342692db46..aff4551e54 100644 --- a/files/pt-br/learn/common_questions/thinking_before_coding/index.html +++ b/files/pt-br/learn/common_questions/thinking_before_coding/index.html @@ -1,10 +1,11 @@ --- title: Como eu começo a criar meu site? -slug: Learn/Common_questions/Pensando_antes_de_codificar +slug: Learn/Common_questions/Thinking_before_coding tags: - Composição - Iniciante translation_of: Learn/Common_questions/Thinking_before_coding +original_slug: Learn/Common_questions/Pensando_antes_de_codificar ---

    Este artigo abrange o primeiro passo, muito importante, de cada projeto: definir o que você deseja realizar com ele.

    diff --git a/files/pt-br/learn/common_questions/what_are_browser_developer_tools/index.html b/files/pt-br/learn/common_questions/what_are_browser_developer_tools/index.html index 80df8f9ddf..c117e2caa8 100644 --- a/files/pt-br/learn/common_questions/what_are_browser_developer_tools/index.html +++ b/files/pt-br/learn/common_questions/what_are_browser_developer_tools/index.html @@ -1,7 +1,8 @@ --- title: O que são as ferramentas de desenvolvimento do navegador -slug: Learn/Common_questions/ferramentas_de_desenvolvimento_do_navegador +slug: Learn/Common_questions/What_are_browser_developer_tools translation_of: Learn/Common_questions/What_are_browser_developer_tools +original_slug: Learn/Common_questions/ferramentas_de_desenvolvimento_do_navegador ---
    {{IncludeSubnav("/en-US/Learn")}}
    diff --git a/files/pt-br/learn/common_questions/what_are_hyperlinks/index.html b/files/pt-br/learn/common_questions/what_are_hyperlinks/index.html index 5cfb905389..c2e2a9ca4f 100644 --- a/files/pt-br/learn/common_questions/what_are_hyperlinks/index.html +++ b/files/pt-br/learn/common_questions/what_are_hyperlinks/index.html @@ -1,7 +1,8 @@ --- title: O que são hyperlinks? -slug: Learn/Common_questions/O_que_são_hyperlinks +slug: Learn/Common_questions/What_are_hyperlinks translation_of: Learn/Common_questions/What_are_hyperlinks +original_slug: Learn/Common_questions/O_que_são_hyperlinks ---

    Neste artigo, veremos o que são hiperlinks e por que eles são importantes.

    diff --git a/files/pt-br/learn/common_questions/what_is_a_web_server/index.html b/files/pt-br/learn/common_questions/what_is_a_web_server/index.html index f963103480..2f87b0d0ae 100644 --- a/files/pt-br/learn/common_questions/what_is_a_web_server/index.html +++ b/files/pt-br/learn/common_questions/what_is_a_web_server/index.html @@ -1,12 +1,13 @@ --- title: O que é um servidor web (web server)? -slug: Learn/Common_questions/o_que_e_um_web_server +slug: Learn/Common_questions/What_is_a_web_server tags: - HTTP - Infraestrutura - Iniciante - servidor web translation_of: Learn/Common_questions/What_is_a_web_server +original_slug: Learn/Common_questions/o_que_e_um_web_server ---

    Neste artigo vamos revisar o que são web servers, como eles funcionam, e por que eles são importantes.

    diff --git a/files/pt-br/learn/common_questions/what_software_do_i_need/index.html b/files/pt-br/learn/common_questions/what_software_do_i_need/index.html index 392b7fd03a..b4fdedba95 100644 --- a/files/pt-br/learn/common_questions/what_software_do_i_need/index.html +++ b/files/pt-br/learn/common_questions/what_software_do_i_need/index.html @@ -1,9 +1,10 @@ --- title: Que software eu preciso para construir um site? -slug: Learn/Common_questions/Que_software_eu_preciso +slug: Learn/Common_questions/What_software_do_I_need tags: - Iniciante translation_of: Learn/Common_questions/What_software_do_I_need +original_slug: Learn/Common_questions/Que_software_eu_preciso ---
    diff --git a/files/pt-br/learn/css/building_blocks/cascade_and_inheritance/index.html b/files/pt-br/learn/css/building_blocks/cascade_and_inheritance/index.html index b3988ca69b..019a15c65e 100644 --- a/files/pt-br/learn/css/building_blocks/cascade_and_inheritance/index.html +++ b/files/pt-br/learn/css/building_blocks/cascade_and_inheritance/index.html @@ -1,7 +1,8 @@ --- title: Cascade and inheritance -slug: Aprender/CSS/Construindo_blocos/Cascade_and_inheritance +slug: Learn/CSS/Building_blocks/Cascade_and_inheritance translation_of: Learn/CSS/Building_blocks/Cascade_and_inheritance +original_slug: Aprender/CSS/Construindo_blocos/Cascade_and_inheritance ---
    {{LearnSidebar}}{{NextMenu("Learn/CSS/Building_blocks/Selectors", "Learn/CSS/Building_blocks")}}
    diff --git a/files/pt-br/learn/css/building_blocks/index.html b/files/pt-br/learn/css/building_blocks/index.html index b79de8baa0..ae7d8d42a7 100644 --- a/files/pt-br/learn/css/building_blocks/index.html +++ b/files/pt-br/learn/css/building_blocks/index.html @@ -1,7 +1,8 @@ --- title: Construindo blocos CSS -slug: Aprender/CSS/Construindo_blocos +slug: Learn/CSS/Building_blocks translation_of: Learn/CSS/Building_blocks +original_slug: Aprender/CSS/Construindo_blocos ---
    {{LearnSidebar}}
    diff --git a/files/pt-br/learn/css/building_blocks/the_box_model/index.html b/files/pt-br/learn/css/building_blocks/the_box_model/index.html index 841540a8f0..dcfe23eb84 100644 --- a/files/pt-br/learn/css/building_blocks/the_box_model/index.html +++ b/files/pt-br/learn/css/building_blocks/the_box_model/index.html @@ -1,7 +1,8 @@ --- title: The box model -slug: Aprender/CSS/Construindo_blocos/The_box_model +slug: Learn/CSS/Building_blocks/The_box_model translation_of: Learn/CSS/Building_blocks/The_box_model +original_slug: Aprender/CSS/Construindo_blocos/The_box_model ---
    {{LearnSidebar}}{{PreviousMenuNext("Learn/CSS/Building_blocks/Selectors/Combinators", "Learn/CSS/Building_blocks/Backgrounds_and_borders", "Learn/CSS/Building_blocks")}}
    diff --git a/files/pt-br/learn/css/css_layout/introduction/index.html b/files/pt-br/learn/css/css_layout/introduction/index.html index 9314e8efd3..db8e49c6ab 100644 --- a/files/pt-br/learn/css/css_layout/introduction/index.html +++ b/files/pt-br/learn/css/css_layout/introduction/index.html @@ -1,7 +1,8 @@ --- title: Introdução ao leiaute com CSS -slug: Learn/CSS/CSS_layout/Intro_leiaute_CSS +slug: Learn/CSS/CSS_layout/Introduction translation_of: Learn/CSS/CSS_layout/Introduction +original_slug: Learn/CSS/CSS_layout/Intro_leiaute_CSS ---
    {{LearnSidebar}}
    diff --git a/files/pt-br/learn/css/css_layout/multiple-column_layout/index.html b/files/pt-br/learn/css/css_layout/multiple-column_layout/index.html index 2605843ff4..9c1f90a5e1 100644 --- a/files/pt-br/learn/css/css_layout/multiple-column_layout/index.html +++ b/files/pt-br/learn/css/css_layout/multiple-column_layout/index.html @@ -1,7 +1,8 @@ --- title: Layout de varias colunas -slug: Learn/CSS/CSS_layout/Layout_de_varias_colunas +slug: Learn/CSS/CSS_layout/Multiple-column_Layout translation_of: Learn/CSS/CSS_layout/Multiple-column_Layout +original_slug: Learn/CSS/CSS_layout/Layout_de_varias_colunas ---
    {{LearnSidebar}}
    diff --git a/files/pt-br/learn/css/css_layout/normal_flow/index.html b/files/pt-br/learn/css/css_layout/normal_flow/index.html index c27a403fa7..68c838a54b 100644 --- a/files/pt-br/learn/css/css_layout/normal_flow/index.html +++ b/files/pt-br/learn/css/css_layout/normal_flow/index.html @@ -1,7 +1,8 @@ --- title: Fluxo Normal -slug: Learn/CSS/CSS_layout/Fluxo_Normal +slug: Learn/CSS/CSS_layout/Normal_Flow translation_of: Learn/CSS/CSS_layout/Normal_Flow +original_slug: Learn/CSS/CSS_layout/Fluxo_Normal ---
    {{LearnSidebar}}
    diff --git a/files/pt-br/learn/css/first_steps/getting_started/index.html b/files/pt-br/learn/css/first_steps/getting_started/index.html index a9a5218e98..c3ba793680 100644 --- a/files/pt-br/learn/css/first_steps/getting_started/index.html +++ b/files/pt-br/learn/css/first_steps/getting_started/index.html @@ -1,6 +1,6 @@ --- title: Iniciando com CSS -slug: Learn/CSS/First_steps/Iniciando +slug: Learn/CSS/First_steps/Getting_started tags: - Aprender - CSS @@ -11,6 +11,7 @@ tags: - Seletores - Sintaxe translation_of: Learn/CSS/First_steps/Getting_started +original_slug: Learn/CSS/First_steps/Iniciando ---
    {{LearnSidebar}}
    diff --git a/files/pt-br/learn/css/first_steps/how_css_is_structured/index.html b/files/pt-br/learn/css/first_steps/how_css_is_structured/index.html index 4084647920..3974af9c99 100644 --- a/files/pt-br/learn/css/first_steps/how_css_is_structured/index.html +++ b/files/pt-br/learn/css/first_steps/how_css_is_structured/index.html @@ -1,7 +1,8 @@ --- title: Como CSS é estruturado -slug: Learn/CSS/First_steps/Como_CSS_e_estruturado +slug: Learn/CSS/First_steps/How_CSS_is_structured translation_of: Learn/CSS/First_steps/How_CSS_is_structured +original_slug: Learn/CSS/First_steps/Como_CSS_e_estruturado ---
    {{LearnSidebar}}
    diff --git a/files/pt-br/learn/css/first_steps/what_is_css/index.html b/files/pt-br/learn/css/first_steps/what_is_css/index.html index 41980dfee6..faffe455fb 100644 --- a/files/pt-br/learn/css/first_steps/what_is_css/index.html +++ b/files/pt-br/learn/css/first_steps/what_is_css/index.html @@ -1,6 +1,6 @@ --- title: O que é CSS? -slug: Learn/CSS/First_steps/O_que_e_CSS +slug: Learn/CSS/First_steps/What_is_CSS tags: - Aprender - CSS @@ -10,6 +10,7 @@ tags: - Sintaxe - especificação translation_of: Learn/CSS/First_steps/What_is_CSS +original_slug: Learn/CSS/First_steps/O_que_e_CSS ---
    {{LearnSidebar}}
    diff --git a/files/pt-br/learn/css/howto/css_faq/index.html b/files/pt-br/learn/css/howto/css_faq/index.html index f3febd4637..a00f5ee395 100644 --- a/files/pt-br/learn/css/howto/css_faq/index.html +++ b/files/pt-br/learn/css/howto/css_faq/index.html @@ -1,6 +1,6 @@ --- title: CSS - Perguntas frequentes -slug: Learn/CSS/Howto/CSS_Perguntas_Frequentes +slug: Learn/CSS/Howto/CSS_FAQ tags: - CSS - Exemplo @@ -10,6 +10,7 @@ tags: - Perguntas Frequentes - Web translation_of: Learn/CSS/Howto/CSS_FAQ +original_slug: Learn/CSS/Howto/CSS_Perguntas_Frequentes ---

    Por que meu CSS, que é válido, não é renderizado corretamente?

    diff --git a/files/pt-br/learn/css/index.html b/files/pt-br/learn/css/index.html index f5004d47f3..aaaeeaec2b 100644 --- a/files/pt-br/learn/css/index.html +++ b/files/pt-br/learn/css/index.html @@ -1,12 +1,13 @@ --- title: Aprenda a estilizar HTML utilizando CSS -slug: Aprender/CSS +slug: Learn/CSS tags: - CSS - Folha de Estilos - Iniciante - especificação translation_of: Learn/CSS +original_slug: Aprender/CSS ---

    Cascading Stylesheets — ou {{glossary("CSS")}} — é a primeira tecnologia que você deve aprender após o {{glossary("HTML")}}. Enquanto o HTML é utilizado para definir a estrutura e semântica do seu conteúdo, o CSS é usado para estilizá-lo e desenhá-lo. Por exemplo, você pode usar o CSS para alterar a fonte, cor, tamanho e espaçamento do seu conteúdo, dividí-lo em multiplas colunas, ou adicionar animações e outros recursos decorativos.

    diff --git a/files/pt-br/learn/css/styling_text/index.html b/files/pt-br/learn/css/styling_text/index.html index b2eafa9f05..0a3deb1e0e 100644 --- a/files/pt-br/learn/css/styling_text/index.html +++ b/files/pt-br/learn/css/styling_text/index.html @@ -1,6 +1,6 @@ --- title: Estilizando texto -slug: Aprender/CSS/Estilizando_texto +slug: Learn/CSS/Styling_text tags: - CSS - Fontes @@ -10,6 +10,7 @@ tags: - listas - web fontes translation_of: Learn/CSS/Styling_text +original_slug: Aprender/CSS/Estilizando_texto ---
    {{LearnSidebar}}
    diff --git a/files/pt-br/learn/css/styling_text/styling_lists/index.html b/files/pt-br/learn/css/styling_text/styling_lists/index.html index 72dc8dc227..f62387343a 100644 --- a/files/pt-br/learn/css/styling_text/styling_lists/index.html +++ b/files/pt-br/learn/css/styling_text/styling_lists/index.html @@ -1,8 +1,9 @@ --- title: Manipulando Listas -slug: Web/CSS/Getting_Started/Lists +slug: Learn/CSS/Styling_text/Styling_lists translation_of: Learn/CSS/Styling_text/Styling_lists translation_of_original: Web/Guide/CSS/Getting_started/Lists +original_slug: Web/CSS/Getting_Started/Lists ---

    {{ CSSTutorialTOC() }}

    diff --git a/files/pt-br/learn/forms/basic_native_form_controls/index.html b/files/pt-br/learn/forms/basic_native_form_controls/index.html index ebefe55869..d0fad5e66a 100644 --- a/files/pt-br/learn/forms/basic_native_form_controls/index.html +++ b/files/pt-br/learn/forms/basic_native_form_controls/index.html @@ -1,6 +1,6 @@ --- title: Os widgets nativos -slug: Web/Guide/HTML/Forms/Os_widgets_nativos +slug: Learn/Forms/Basic_native_form_controls tags: - Aprender - Contrôles @@ -11,6 +11,7 @@ tags: - Intermediário - Web translation_of: Learn/Forms/Basic_native_form_controls +original_slug: Web/Guide/HTML/Forms/Os_widgets_nativos ---
    {{LearnSidebar}}
    diff --git a/files/pt-br/learn/forms/form_validation/index.html b/files/pt-br/learn/forms/form_validation/index.html index 7f9146d0a4..8cb1e2ace0 100644 --- a/files/pt-br/learn/forms/form_validation/index.html +++ b/files/pt-br/learn/forms/form_validation/index.html @@ -1,7 +1,8 @@ --- title: Form data validation -slug: Web/Guide/HTML/Forms/Form_validation +slug: Learn/Forms/Form_validation translation_of: Learn/Forms/Form_validation +original_slug: Web/Guide/HTML/Forms/Form_validation ---
    {{LearnSidebar}}{{PreviousMenuNext("Learn/HTML/Forms/Sending_and_retrieving_form_data", "Learn/HTML/Forms/How_to_build_custom_form_widgets", "Learn/HTML/Forms")}}
    diff --git a/files/pt-br/learn/forms/how_to_build_custom_form_controls/index.html b/files/pt-br/learn/forms/how_to_build_custom_form_controls/index.html index 76e202e685..0fdead0ece 100644 --- a/files/pt-br/learn/forms/how_to_build_custom_form_controls/index.html +++ b/files/pt-br/learn/forms/how_to_build_custom_form_controls/index.html @@ -1,7 +1,8 @@ --- title: How to build custom form widgets -slug: Web/Guide/HTML/Forms/How_to_build_custom_form_widgets +slug: Learn/Forms/How_to_build_custom_form_controls translation_of: Learn/Forms/How_to_build_custom_form_controls +original_slug: Web/Guide/HTML/Forms/How_to_build_custom_form_widgets ---
    {{LearnSidebar}}{{PreviousMenuNext("Learn/HTML/Forms/Form_validation", "Learn/HTML/Forms/Sending_forms_through_JavaScript", "Learn/HTML/Forms")}}
    diff --git a/files/pt-br/learn/forms/how_to_structure_a_web_form/index.html b/files/pt-br/learn/forms/how_to_structure_a_web_form/index.html index 33a562813c..2f73baf5e2 100644 --- a/files/pt-br/learn/forms/how_to_structure_a_web_form/index.html +++ b/files/pt-br/learn/forms/how_to_structure_a_web_form/index.html @@ -1,6 +1,6 @@ --- title: Como estruturar um formulário HTML -slug: Web/Guide/HTML/Forms/How_to_structure_an_HTML_form +slug: Learn/Forms/How_to_structure_a_web_form tags: - Beginner - CodingScripting @@ -12,6 +12,7 @@ tags: - Structure - Web translation_of: Learn/Forms/How_to_structure_a_web_form +original_slug: Web/Guide/HTML/Forms/How_to_structure_an_HTML_form ---

    {{LearnSidebar}}

    diff --git a/files/pt-br/learn/forms/index.html b/files/pt-br/learn/forms/index.html index 15bd243566..b7f87b52da 100644 --- a/files/pt-br/learn/forms/index.html +++ b/files/pt-br/learn/forms/index.html @@ -1,6 +1,6 @@ --- title: Formulários da Web - Trabalhando com dados do usuário -slug: Web/Guide/HTML/Forms +slug: Learn/Forms tags: - Aprender - Funcionalidades @@ -10,6 +10,7 @@ tags: - Web - formulários translation_of: Learn/Forms +original_slug: Web/Guide/HTML/Forms ---
    {{LearnSidebar}}
    diff --git a/files/pt-br/learn/forms/sending_and_retrieving_form_data/index.html b/files/pt-br/learn/forms/sending_and_retrieving_form_data/index.html index c6eaaee29b..6f83b45aa4 100644 --- a/files/pt-br/learn/forms/sending_and_retrieving_form_data/index.html +++ b/files/pt-br/learn/forms/sending_and_retrieving_form_data/index.html @@ -1,7 +1,8 @@ --- title: Sending form data -slug: Web/Guide/HTML/Forms/Sending_and_retrieving_form_data +slug: Learn/Forms/Sending_and_retrieving_form_data translation_of: Learn/Forms/Sending_and_retrieving_form_data +original_slug: Web/Guide/HTML/Forms/Sending_and_retrieving_form_data ---

    Em muitos casos, a finalidade de HTML Form Um é enviar dados para um servidor. O servidor processa os dados e envia uma resposta ao usuário. Isso parece simples, mas é importante manter algumas coisas em mente para garantir que os dados não danifiquem o servidor ou causem problemas para seus usuários.

    diff --git a/files/pt-br/learn/forms/your_first_form/index.html b/files/pt-br/learn/forms/your_first_form/index.html index 31ef58aa7c..8c1339a83a 100644 --- a/files/pt-br/learn/forms/your_first_form/index.html +++ b/files/pt-br/learn/forms/your_first_form/index.html @@ -1,7 +1,8 @@ --- title: Meu primeiro formulário HTML -slug: Web/Guide/HTML/Forms/Meu_primeiro_formulario_HTML +slug: Learn/Forms/Your_first_form translation_of: Learn/Forms/Your_first_form +original_slug: Web/Guide/HTML/Forms/Meu_primeiro_formulario_HTML ---

    Este é um artigo introdutório para formulários HTML. Através de um simples formulário de contato, nós veremos os requisitos básicos para construir formulários HTML. Esse artigo assume que você não sabe nada sobre formulários HTML, mas presume que você conhece o básico de HTML e CSS.

    diff --git a/files/pt-br/learn/front-end_web_developer/index.html b/files/pt-br/learn/front-end_web_developer/index.html index 67a73497ef..44b52ceb0a 100644 --- a/files/pt-br/learn/front-end_web_developer/index.html +++ b/files/pt-br/learn/front-end_web_developer/index.html @@ -1,6 +1,6 @@ --- title: Desenvolvedor Web Front-end -slug: Aprender/Front-end_web_developer +slug: Learn/Front-end_web_developer tags: - Aprender - CSS @@ -11,6 +11,7 @@ tags: - JavaScript - Padrões Web translation_of: Learn/Front-end_web_developer +original_slug: Aprender/Front-end_web_developer ---

    {{learnsidebar}}

    diff --git a/files/pt-br/learn/getting_started_with_the_web/css_basics/index.html b/files/pt-br/learn/getting_started_with_the_web/css_basics/index.html index 34d0eb95ad..a3f3c7f46c 100644 --- a/files/pt-br/learn/getting_started_with_the_web/css_basics/index.html +++ b/files/pt-br/learn/getting_started_with_the_web/css_basics/index.html @@ -1,6 +1,6 @@ --- title: CSS básico -slug: Aprender/Getting_started_with_the_web/CSS_basico +slug: Learn/Getting_started_with_the_web/CSS_basics tags: - Aprender - CSS @@ -8,8 +8,9 @@ tags: - Estilo - Iniciante - Web - - 'l10n:prioridade' + - l10n:prioridade translation_of: Learn/Getting_started_with_the_web/CSS_basics +original_slug: Aprender/Getting_started_with_the_web/CSS_basico ---
    {{LearnSidebar}}
    diff --git a/files/pt-br/learn/getting_started_with_the_web/dealing_with_files/index.html b/files/pt-br/learn/getting_started_with_the_web/dealing_with_files/index.html index a2d477a698..3061b41d1b 100644 --- a/files/pt-br/learn/getting_started_with_the_web/dealing_with_files/index.html +++ b/files/pt-br/learn/getting_started_with_the_web/dealing_with_files/index.html @@ -1,6 +1,6 @@ --- title: Lidando com arquivos -slug: Aprender/Getting_started_with_the_web/lidando_com_arquivos +slug: Learn/Getting_started_with_the_web/Dealing_with_files tags: - Arquivos - Codificação de Scripts @@ -8,9 +8,10 @@ tags: - HTML - Iniciante - Site - - 'l10:prioridade' + - l10:prioridade - teoria translation_of: Learn/Getting_started_with_the_web/Dealing_with_files +original_slug: Aprender/Getting_started_with_the_web/lidando_com_arquivos ---
    {{LearnSidebar}}
    diff --git a/files/pt-br/learn/getting_started_with_the_web/how_the_web_works/index.html b/files/pt-br/learn/getting_started_with_the_web/how_the_web_works/index.html index cf911dafc5..9589503e8a 100644 --- a/files/pt-br/learn/getting_started_with_the_web/how_the_web_works/index.html +++ b/files/pt-br/learn/getting_started_with_the_web/how_the_web_works/index.html @@ -1,6 +1,6 @@ --- title: Como a Web funciona -slug: Aprender/Getting_started_with_the_web/Como_a_Web_funciona +slug: Learn/Getting_started_with_the_web/How_the_Web_works tags: - Aprender - Cliente @@ -11,8 +11,9 @@ tags: - Iniciante - Servidor - TCP - - 'l10n:prioridade' + - l10n:prioridade translation_of: Learn/Getting_started_with_the_web/How_the_Web_works +original_slug: Aprender/Getting_started_with_the_web/Como_a_Web_funciona ---

    {{LearnSidebar}}

    diff --git a/files/pt-br/learn/getting_started_with_the_web/html_basics/index.html b/files/pt-br/learn/getting_started_with_the_web/html_basics/index.html index 534fc5b9c9..bd6ddd381b 100644 --- a/files/pt-br/learn/getting_started_with_the_web/html_basics/index.html +++ b/files/pt-br/learn/getting_started_with_the_web/html_basics/index.html @@ -1,14 +1,15 @@ --- title: HTML básico -slug: Aprender/Getting_started_with_the_web/HTML_basico +slug: Learn/Getting_started_with_the_web/HTML_basics tags: - Aprender - Codificação de Scripts - HTML - Iniciante - Web - - 'l10:prioridade' + - l10:prioridade translation_of: Learn/Getting_started_with_the_web/HTML_basics +original_slug: Aprender/Getting_started_with_the_web/HTML_basico ---
    {{LearnSidebar}}
    diff --git a/files/pt-br/learn/getting_started_with_the_web/index.html b/files/pt-br/learn/getting_started_with_the_web/index.html index ac40c9ed36..f752365442 100644 --- a/files/pt-br/learn/getting_started_with_the_web/index.html +++ b/files/pt-br/learn/getting_started_with_the_web/index.html @@ -1,17 +1,18 @@ --- title: Introdução à Web -slug: Aprender/Getting_started_with_the_web +slug: Learn/Getting_started_with_the_web tags: - CSS - Design - Guía - HTML - Iniciante - - 'l10:prioridade' + - l10:prioridade - publicação - teoria - Índice translation_of: Learn/Getting_started_with_the_web +original_slug: Aprender/Getting_started_with_the_web ---
    {{LearnSidebar}}
    diff --git a/files/pt-br/learn/getting_started_with_the_web/installing_basic_software/index.html b/files/pt-br/learn/getting_started_with_the_web/installing_basic_software/index.html index 0093c0a82d..cdb1f515f7 100644 --- a/files/pt-br/learn/getting_started_with_the_web/installing_basic_software/index.html +++ b/files/pt-br/learn/getting_started_with_the_web/installing_basic_software/index.html @@ -1,6 +1,6 @@ --- title: Instalando os programas básicos -slug: Aprender/Getting_started_with_the_web/instalando_programas_basicos +slug: Learn/Getting_started_with_the_web/Installing_basic_software tags: - Aprender - Ferramentas @@ -9,8 +9,9 @@ tags: - Navegador - configuração - editor de texto - - 'l10:prioridade' + - l10:prioridade translation_of: Learn/Getting_started_with_the_web/Installing_basic_software +original_slug: Aprender/Getting_started_with_the_web/instalando_programas_basicos ---
    {{LearnSidebar}}
    diff --git a/files/pt-br/learn/getting_started_with_the_web/javascript_basics/index.html b/files/pt-br/learn/getting_started_with_the_web/javascript_basics/index.html index a54cab793a..68b897a9a6 100644 --- a/files/pt-br/learn/getting_started_with_the_web/javascript_basics/index.html +++ b/files/pt-br/learn/getting_started_with_the_web/javascript_basics/index.html @@ -1,14 +1,15 @@ --- title: JavaScript básico -slug: Aprender/Getting_started_with_the_web/JavaScript_basico +slug: Learn/Getting_started_with_the_web/JavaScript_basics tags: - Aprender - Codificação de Script - Iniciante - JavaScript - Web - - 'l10:prioridade' + - l10:prioridade translation_of: Learn/Getting_started_with_the_web/JavaScript_basics +original_slug: Aprender/Getting_started_with_the_web/JavaScript_basico ---
    {{LearnSidebar}}
    diff --git a/files/pt-br/learn/getting_started_with_the_web/publishing_your_website/index.html b/files/pt-br/learn/getting_started_with_the_web/publishing_your_website/index.html index 7bc25089da..267dd30e49 100644 --- a/files/pt-br/learn/getting_started_with_the_web/publishing_your_website/index.html +++ b/files/pt-br/learn/getting_started_with_the_web/publishing_your_website/index.html @@ -1,6 +1,6 @@ --- title: Publicando seu site -slug: Aprender/Getting_started_with_the_web/Publicando_seu_site +slug: Learn/Getting_started_with_the_web/Publishing_your_website tags: - Codificação em Script - FTP @@ -8,10 +8,11 @@ tags: - Iniciante - Motor de Apps do Google - Web - - 'l10n:prioridade' + - l10n:prioridade - publicação - servidor web translation_of: Learn/Getting_started_with_the_web/Publishing_your_website +original_slug: Aprender/Getting_started_with_the_web/Publicando_seu_site ---

    {{LearnSidebar}}

    diff --git a/files/pt-br/learn/getting_started_with_the_web/the_web_and_web_standards/index.html b/files/pt-br/learn/getting_started_with_the_web/the_web_and_web_standards/index.html index 26de56ea06..08bcb4b64e 100644 --- a/files/pt-br/learn/getting_started_with_the_web/the_web_and_web_standards/index.html +++ b/files/pt-br/learn/getting_started_with_the_web/the_web_and_web_standards/index.html @@ -1,7 +1,8 @@ --- title: A web e seus padrões -slug: Aprender/Getting_started_with_the_web/A_web_e_seus_padrões +slug: Learn/Getting_started_with_the_web/The_web_and_web_standards translation_of: Learn/Getting_started_with_the_web/The_web_and_web_standards +original_slug: Aprender/Getting_started_with_the_web/A_web_e_seus_padrões ---

    {{learnsidebar}}

    diff --git a/files/pt-br/learn/getting_started_with_the_web/what_will_your_website_look_like/index.html b/files/pt-br/learn/getting_started_with_the_web/what_will_your_website_look_like/index.html index 62ad3bd27d..f6f6da8f8d 100644 --- a/files/pt-br/learn/getting_started_with_the_web/what_will_your_website_look_like/index.html +++ b/files/pt-br/learn/getting_started_with_the_web/what_will_your_website_look_like/index.html @@ -1,6 +1,6 @@ --- title: Com será o seu site? -slug: Aprender/Getting_started_with_the_web/com_que_seu_site_vai_parecer +slug: Learn/Getting_started_with_the_web/What_will_your_website_look_like tags: - Aprender - Ativos @@ -12,8 +12,9 @@ tags: - Iniciante - Passo a passo - Simples - - 'l10:prioridade' + - l10:prioridade translation_of: Learn/Getting_started_with_the_web/What_will_your_website_look_like +original_slug: Aprender/Getting_started_with_the_web/com_que_seu_site_vai_parecer ---
    {{LearnSidebar}}
    diff --git a/files/pt-br/learn/html/howto/author_fast-loading_html_pages/index.html b/files/pt-br/learn/html/howto/author_fast-loading_html_pages/index.html index e693b6fed8..b5bf80270c 100644 --- a/files/pt-br/learn/html/howto/author_fast-loading_html_pages/index.html +++ b/files/pt-br/learn/html/howto/author_fast-loading_html_pages/index.html @@ -1,9 +1,10 @@ --- title: Dicas para criar páginas HTML de carregamento rápido -slug: Web/HTML/Dicas_para_criar_páginas_HTML_de_carregamento_rápido +slug: Learn/HTML/Howto/Author_fast-loading_HTML_pages tags: - Performance translation_of: Learn/HTML/Howto/Author_fast-loading_HTML_pages +original_slug: Web/HTML/Dicas_para_criar_páginas_HTML_de_carregamento_rápido ---

    Estas dicas são baseadas em conhecimento comum e experimentação.

    Uma página web otimizada não apenas provê um site mais responsivo aos visitantes, como também reduz a carga sobre os servidores e a conexão com a Internet. Isso pode ser crucial para sites de grande volume ou sites que tenham um pico de tráfego devido a circunstâncias extraordinárias, como plantões de notícias urgentes.

    diff --git a/files/pt-br/learn/html/howto/index.html b/files/pt-br/learn/html/howto/index.html index 4d64f7d792..9ddbd6516a 100644 --- a/files/pt-br/learn/html/howto/index.html +++ b/files/pt-br/learn/html/howto/index.html @@ -1,7 +1,8 @@ --- title: Use HTML para resolver problemas comuns -slug: Aprender/HTML/como-fazer +slug: Learn/HTML/Howto translation_of: Learn/HTML/Howto +original_slug: Aprender/HTML/como-fazer ---
    {{LearnSidebar}}
    diff --git a/files/pt-br/learn/html/howto/use_data_attributes/index.html b/files/pt-br/learn/html/howto/use_data_attributes/index.html index 20daf02206..d1c6154dc1 100644 --- a/files/pt-br/learn/html/howto/use_data_attributes/index.html +++ b/files/pt-br/learn/html/howto/use_data_attributes/index.html @@ -1,7 +1,8 @@ --- title: Utilizando data attributes -slug: Web/Guide/HTML/Using_data_attributes +slug: Learn/HTML/Howto/Use_data_attributes translation_of: Learn/HTML/Howto/Use_data_attributes +original_slug: Web/Guide/HTML/Using_data_attributes ---

    HTML5 foi criado pensando na extensibilidade dos dados que precisam ser associados a um determinado elemento mas não necessariamente tem um significado definido.  Atributos data-* nos permite armazenar informações extras em elementos HTML padrões e semânticos, sem a necessidades de hacks como classList, atributos fora do padrão, propriedades extras no DOM ou o método depreciado setUserData.

    diff --git a/files/pt-br/learn/html/index.html b/files/pt-br/learn/html/index.html index 498ba9ab01..64fcae245a 100644 --- a/files/pt-br/learn/html/index.html +++ b/files/pt-br/learn/html/index.html @@ -1,6 +1,6 @@ --- title: Estruturando a web com HTML -slug: Aprender/HTML +slug: Learn/HTML tags: - Aprender - Guía @@ -9,6 +9,7 @@ tags: - Introdução - Tópico translation_of: Learn/HTML +original_slug: Aprender/HTML ---

    {{LearnSidebar}}

    diff --git a/files/pt-br/learn/html/introduction_to_html/advanced_text_formatting/index.html b/files/pt-br/learn/html/introduction_to_html/advanced_text_formatting/index.html index 3b5365b074..1fbb164bd4 100644 --- a/files/pt-br/learn/html/introduction_to_html/advanced_text_formatting/index.html +++ b/files/pt-br/learn/html/introduction_to_html/advanced_text_formatting/index.html @@ -1,6 +1,6 @@ --- title: Formatação avançada de texto -slug: Aprender/HTML/Introducao_ao_HTML/Formatacao_avancada_texto +slug: Learn/HTML/Introduction_to_HTML/Advanced_text_formatting tags: - Aprender - Guía @@ -11,6 +11,7 @@ tags: - lista de descrição - semântico translation_of: Learn/HTML/Introduction_to_HTML/Advanced_text_formatting +original_slug: Aprender/HTML/Introducao_ao_HTML/Formatacao_avancada_texto ---
    {{LearnSidebar}}
    diff --git a/files/pt-br/learn/html/introduction_to_html/creating_hyperlinks/index.html b/files/pt-br/learn/html/introduction_to_html/creating_hyperlinks/index.html index 1abbfa20c4..c58175af3c 100644 --- a/files/pt-br/learn/html/introduction_to_html/creating_hyperlinks/index.html +++ b/files/pt-br/learn/html/introduction_to_html/creating_hyperlinks/index.html @@ -1,6 +1,6 @@ --- title: Criando hyperlinks -slug: Aprender/HTML/Introducao_ao_HTML/Criando_hyperlinks +slug: Learn/HTML/Introduction_to_HTML/Creating_hyperlinks tags: - Guía - HTML @@ -13,6 +13,7 @@ tags: - hyperlinks - relativo translation_of: Learn/HTML/Introduction_to_HTML/Creating_hyperlinks +original_slug: Aprender/HTML/Introducao_ao_HTML/Criando_hyperlinks ---

    {{LearnSidebar}}

    diff --git a/files/pt-br/learn/html/introduction_to_html/debugging_html/index.html b/files/pt-br/learn/html/introduction_to_html/debugging_html/index.html index 4b518454d9..e57bb8810c 100644 --- a/files/pt-br/learn/html/introduction_to_html/debugging_html/index.html +++ b/files/pt-br/learn/html/introduction_to_html/debugging_html/index.html @@ -1,7 +1,8 @@ --- title: Debugging HTML -slug: Aprender/HTML/Introducao_ao_HTML/Debugging_HTML +slug: Learn/HTML/Introduction_to_HTML/Debugging_HTML translation_of: Learn/HTML/Introduction_to_HTML/Debugging_HTML +original_slug: Aprender/HTML/Introducao_ao_HTML/Debugging_HTML ---
    {{LearnSidebar}}
    diff --git a/files/pt-br/learn/html/introduction_to_html/document_and_website_structure/index.html b/files/pt-br/learn/html/introduction_to_html/document_and_website_structure/index.html index 825d2cec6e..3987dda3a6 100644 --- a/files/pt-br/learn/html/introduction_to_html/document_and_website_structure/index.html +++ b/files/pt-br/learn/html/introduction_to_html/document_and_website_structure/index.html @@ -1,7 +1,8 @@ --- title: Estrutura de documento e sites -slug: Aprender/HTML/Introducao_ao_HTML/Estrutura_de_documento_e_sites +slug: Learn/HTML/Introduction_to_HTML/Document_and_website_structure translation_of: Learn/HTML/Introduction_to_HTML/Document_and_website_structure +original_slug: Aprender/HTML/Introducao_ao_HTML/Estrutura_de_documento_e_sites ---
    {{LearnSidebar}}
    diff --git a/files/pt-br/learn/html/introduction_to_html/getting_started/index.html b/files/pt-br/learn/html/introduction_to_html/getting_started/index.html index ed79c15034..07f6c60450 100644 --- a/files/pt-br/learn/html/introduction_to_html/getting_started/index.html +++ b/files/pt-br/learn/html/introduction_to_html/getting_started/index.html @@ -1,6 +1,6 @@ --- title: Iniciando com HTML -slug: Aprender/HTML/Introducao_ao_HTML/Getting_started +slug: Learn/HTML/Introduction_to_HTML/Getting_started tags: - Codificação de Scripts - Comentário @@ -12,6 +12,7 @@ tags: - espaço em branco - referência de entidade translation_of: Learn/HTML/Introduction_to_HTML/Getting_started +original_slug: Aprender/HTML/Introducao_ao_HTML/Getting_started ---
    {{LearnSidebar}}
    diff --git a/files/pt-br/learn/html/introduction_to_html/html_text_fundamentals/index.html b/files/pt-br/learn/html/introduction_to_html/html_text_fundamentals/index.html index 47ca918b68..261e7d9437 100644 --- a/files/pt-br/learn/html/introduction_to_html/html_text_fundamentals/index.html +++ b/files/pt-br/learn/html/introduction_to_html/html_text_fundamentals/index.html @@ -1,6 +1,6 @@ --- title: Fundamentos do texto em HTML -slug: Aprender/HTML/Introducao_ao_HTML/Fundamentos_textuais_HTML +slug: Learn/HTML/Introduction_to_HTML/HTML_text_fundamentals tags: - Aprender - Guía @@ -12,6 +12,7 @@ tags: - parágrafo - semántica translation_of: Learn/HTML/Introduction_to_HTML/HTML_text_fundamentals +original_slug: Aprender/HTML/Introducao_ao_HTML/Fundamentos_textuais_HTML ---
    {{LearnSidebar}}
    diff --git a/files/pt-br/learn/html/introduction_to_html/index.html b/files/pt-br/learn/html/introduction_to_html/index.html index f0e69d61d4..8112ecfab0 100644 --- a/files/pt-br/learn/html/introduction_to_html/index.html +++ b/files/pt-br/learn/html/introduction_to_html/index.html @@ -1,6 +1,6 @@ --- title: Introdução ao HTML -slug: Aprender/HTML/Introducao_ao_HTML +slug: Learn/HTML/Introduction_to_HTML tags: - Codificação de Script - Estrutura @@ -12,6 +12,7 @@ tags: - cabeçalho - semántica translation_of: Learn/HTML/Introduction_to_HTML +original_slug: Aprender/HTML/Introducao_ao_HTML ---
    {{LearnSidebar}}
    diff --git a/files/pt-br/learn/html/introduction_to_html/test_your_skills_colon__html_text_basics/index.html b/files/pt-br/learn/html/introduction_to_html/test_your_skills_colon__html_text_basics/index.html index c6d49c4015..e6d0b589aa 100644 --- a/files/pt-br/learn/html/introduction_to_html/test_your_skills_colon__html_text_basics/index.html +++ b/files/pt-br/learn/html/introduction_to_html/test_your_skills_colon__html_text_basics/index.html @@ -1,13 +1,14 @@ --- title: 'Teste suas habilidades: Noções básicas de texto HTML' -slug: 'Aprender/HTML/Introducao_ao_HTML/Test_your_skills:_HTML_text_basics' +slug: Learn/HTML/Introduction_to_HTML/Test_your_skills:_HTML_text_basics tags: - HTML - Iniciante - Teste suas habilidades - Texto - aprendizado -translation_of: 'Learn/HTML/Introduction_to_HTML/Test_your_skills:_HTML_text_basics' +translation_of: Learn/HTML/Introduction_to_HTML/Test_your_skills:_HTML_text_basics +original_slug: Aprender/HTML/Introducao_ao_HTML/Test_your_skills:_HTML_text_basics ---
    {{learnsidebar}}
    diff --git a/files/pt-br/learn/html/introduction_to_html/the_head_metadata_in_html/index.html b/files/pt-br/learn/html/introduction_to_html/the_head_metadata_in_html/index.html index 66dd155c09..d0e6a90d81 100644 --- a/files/pt-br/learn/html/introduction_to_html/the_head_metadata_in_html/index.html +++ b/files/pt-br/learn/html/introduction_to_html/the_head_metadata_in_html/index.html @@ -1,6 +1,6 @@ --- title: O que está no cabeçalho? Metadados em HTML -slug: Aprender/HTML/Introducao_ao_HTML/The_head_metadata_in_HTML +slug: Learn/HTML/Introduction_to_HTML/The_head_metadata_in_HTML tags: - Guía - HTML @@ -9,6 +9,7 @@ tags: - lang - metadados translation_of: Learn/HTML/Introduction_to_HTML/The_head_metadata_in_HTML +original_slug: Aprender/HTML/Introducao_ao_HTML/The_head_metadata_in_HTML ---
    {{LearnSidebar}}
    diff --git a/files/pt-br/learn/html/multimedia_and_embedding/adding_vector_graphics_to_the_web/index.html b/files/pt-br/learn/html/multimedia_and_embedding/adding_vector_graphics_to_the_web/index.html index 2ebc971f42..ef64facfd5 100644 --- a/files/pt-br/learn/html/multimedia_and_embedding/adding_vector_graphics_to_the_web/index.html +++ b/files/pt-br/learn/html/multimedia_and_embedding/adding_vector_graphics_to_the_web/index.html @@ -1,7 +1,8 @@ --- title: Adicionando vetor gráfico na web -slug: Aprender/HTML/Multimedia_and_embedding/Adding_vector_graphics_to_the_Web +slug: Learn/HTML/Multimedia_and_embedding/Adding_vector_graphics_to_the_Web translation_of: Learn/HTML/Multimedia_and_embedding/Adding_vector_graphics_to_the_Web +original_slug: Aprender/HTML/Multimedia_and_embedding/Adding_vector_graphics_to_the_Web ---
    {{LearnSidebar}}
    diff --git a/files/pt-br/learn/html/multimedia_and_embedding/images_in_html/index.html b/files/pt-br/learn/html/multimedia_and_embedding/images_in_html/index.html index 4f463148c1..9f8ed743a3 100644 --- a/files/pt-br/learn/html/multimedia_and_embedding/images_in_html/index.html +++ b/files/pt-br/learn/html/multimedia_and_embedding/images_in_html/index.html @@ -1,6 +1,6 @@ --- title: Imagens no HTML -slug: Aprender/HTML/Multimedia_and_embedding/Images_in_HTML +slug: Learn/HTML/Multimedia_and_embedding/Images_in_HTML tags: - Guía - HTML @@ -11,6 +11,7 @@ tags: - figure - img translation_of: Learn/HTML/Multimedia_and_embedding/Images_in_HTML +original_slug: Aprender/HTML/Multimedia_and_embedding/Images_in_HTML ---
    {{LearnSidebar}}
    diff --git a/files/pt-br/learn/html/multimedia_and_embedding/index.html b/files/pt-br/learn/html/multimedia_and_embedding/index.html index d644018330..e4aebc5242 100644 --- a/files/pt-br/learn/html/multimedia_and_embedding/index.html +++ b/files/pt-br/learn/html/multimedia_and_embedding/index.html @@ -1,6 +1,6 @@ --- title: Multimídia e Incorporação -slug: Aprender/HTML/Multimedia_and_embedding +slug: Learn/HTML/Multimedia_and_embedding tags: - Acesso - Aprender @@ -16,6 +16,7 @@ tags: - Vídeo(2) - iframes translation_of: Learn/HTML/Multimedia_and_embedding +original_slug: Aprender/HTML/Multimedia_and_embedding ---

    {{LearnSidebar}}

    diff --git a/files/pt-br/learn/html/multimedia_and_embedding/other_embedding_technologies/index.html b/files/pt-br/learn/html/multimedia_and_embedding/other_embedding_technologies/index.html index 80299e4f72..5fbd02739a 100644 --- a/files/pt-br/learn/html/multimedia_and_embedding/other_embedding_technologies/index.html +++ b/files/pt-br/learn/html/multimedia_and_embedding/other_embedding_technologies/index.html @@ -1,7 +1,8 @@ --- title: Do objeto ao iframe - outras tecnologias de incorporação -slug: Aprender/HTML/Multimedia_and_embedding/Other_embedding_technologies +slug: Learn/HTML/Multimedia_and_embedding/Other_embedding_technologies translation_of: Learn/HTML/Multimedia_and_embedding/Other_embedding_technologies +original_slug: Aprender/HTML/Multimedia_and_embedding/Other_embedding_technologies ---
    {{LearnSidebar}}
    diff --git a/files/pt-br/learn/html/multimedia_and_embedding/responsive_images/index.html b/files/pt-br/learn/html/multimedia_and_embedding/responsive_images/index.html index 961ec6d82e..61e644eb64 100644 --- a/files/pt-br/learn/html/multimedia_and_embedding/responsive_images/index.html +++ b/files/pt-br/learn/html/multimedia_and_embedding/responsive_images/index.html @@ -1,7 +1,8 @@ --- title: Imagens responsivas -slug: Aprender/HTML/Multimedia_and_embedding/Responsive_images +slug: Learn/HTML/Multimedia_and_embedding/Responsive_images translation_of: Learn/HTML/Multimedia_and_embedding/Responsive_images +original_slug: Aprender/HTML/Multimedia_and_embedding/Responsive_images ---
    {{LearnSidebar}}
    diff --git a/files/pt-br/learn/html/multimedia_and_embedding/video_and_audio_content/index.html b/files/pt-br/learn/html/multimedia_and_embedding/video_and_audio_content/index.html index 2a894b7fd0..ae9111133f 100644 --- a/files/pt-br/learn/html/multimedia_and_embedding/video_and_audio_content/index.html +++ b/files/pt-br/learn/html/multimedia_and_embedding/video_and_audio_content/index.html @@ -1,6 +1,6 @@ --- title: Conteúdo de vídeo e áudio -slug: Aprender/HTML/Multimedia_and_embedding/Video_and_audio_content +slug: Learn/HTML/Multimedia_and_embedding/Video_and_audio_content tags: - Artigos - Audio @@ -8,6 +8,7 @@ tags: - HTML - Video translation_of: Learn/HTML/Multimedia_and_embedding/Video_and_audio_content +original_slug: Aprender/HTML/Multimedia_and_embedding/Video_and_audio_content ---
    {{LearnSidebar}}
    diff --git a/files/pt-br/learn/html/tables/basics/index.html b/files/pt-br/learn/html/tables/basics/index.html index 36dcaebfa7..d154c5d3ef 100644 --- a/files/pt-br/learn/html/tables/basics/index.html +++ b/files/pt-br/learn/html/tables/basics/index.html @@ -1,7 +1,8 @@ --- title: HTML table basics -slug: Aprender/HTML/Tables/Basics +slug: Learn/HTML/Tables/Basics translation_of: Learn/HTML/Tables/Basics +original_slug: Aprender/HTML/Tables/Basics ---
    {{LearnSidebar}}
    diff --git a/files/pt-br/learn/html/tables/index.html b/files/pt-br/learn/html/tables/index.html index 990e9ad438..9cb97abd27 100644 --- a/files/pt-br/learn/html/tables/index.html +++ b/files/pt-br/learn/html/tables/index.html @@ -1,9 +1,10 @@ --- title: Tabelas em HTML -slug: Aprender/HTML/Tables +slug: Learn/HTML/Tables tags: - tabelas translation_of: Learn/HTML/Tables +original_slug: Aprender/HTML/Tables ---
    {{LearnSidebar}}
    diff --git a/files/pt-br/learn/index.html b/files/pt-br/learn/index.html index cef65bb9c7..9c76dd4242 100644 --- a/files/pt-br/learn/index.html +++ b/files/pt-br/learn/index.html @@ -1,6 +1,6 @@ --- title: Aprendendo desenvolvimento web -slug: Aprender +slug: Learn tags: - Aprender - CSS @@ -11,6 +11,7 @@ tags: - Novato - Web translation_of: Learn +original_slug: Aprender ---

    {{LearnSidebar}}

    diff --git a/files/pt-br/learn/javascript/asynchronous/choosing_the_right_approach/index.html b/files/pt-br/learn/javascript/asynchronous/choosing_the_right_approach/index.html index 254bc41a99..e168a76aef 100644 --- a/files/pt-br/learn/javascript/asynchronous/choosing_the_right_approach/index.html +++ b/files/pt-br/learn/javascript/asynchronous/choosing_the_right_approach/index.html @@ -1,7 +1,8 @@ --- title: Escolhendo a abordagem correta -slug: Learn/JavaScript/Asynchronous/Escolhendo_abordagem_correta +slug: Learn/JavaScript/Asynchronous/Choosing_the_right_approach translation_of: Learn/JavaScript/Asynchronous/Choosing_the_right_approach +original_slug: Learn/JavaScript/Asynchronous/Escolhendo_abordagem_correta ---
    {{LearnSidebar}}
    diff --git a/files/pt-br/learn/javascript/asynchronous/concepts/index.html b/files/pt-br/learn/javascript/asynchronous/concepts/index.html index f2e6759f41..f8feca0ca9 100644 --- a/files/pt-br/learn/javascript/asynchronous/concepts/index.html +++ b/files/pt-br/learn/javascript/asynchronous/concepts/index.html @@ -1,7 +1,8 @@ --- title: Conceitos gerais da programação assíncrona -slug: Learn/JavaScript/Asynchronous/Conceitos +slug: Learn/JavaScript/Asynchronous/Concepts translation_of: Learn/JavaScript/Asynchronous/Concepts +original_slug: Learn/JavaScript/Asynchronous/Conceitos ---
    {{LearnSidebar}}{{NextMenu("Learn/JavaScript/Asynchronous/Introducing", "Learn/JavaScript/Asynchronous")}}
    diff --git a/files/pt-br/learn/javascript/asynchronous/introducing/index.html b/files/pt-br/learn/javascript/asynchronous/introducing/index.html index b95a88d35c..b37b28faf4 100644 --- a/files/pt-br/learn/javascript/asynchronous/introducing/index.html +++ b/files/pt-br/learn/javascript/asynchronous/introducing/index.html @@ -1,7 +1,8 @@ --- title: Introdução ao JavaScript Async -slug: Learn/JavaScript/Asynchronous/Introdução +slug: Learn/JavaScript/Asynchronous/Introducing translation_of: Learn/JavaScript/Asynchronous/Introducing +original_slug: Learn/JavaScript/Asynchronous/Introdução ---
    {{LearnSidebar}}
    diff --git a/files/pt-br/learn/javascript/building_blocks/build_your_own_function/index.html b/files/pt-br/learn/javascript/building_blocks/build_your_own_function/index.html index d701a63823..80f5faf9b3 100644 --- a/files/pt-br/learn/javascript/building_blocks/build_your_own_function/index.html +++ b/files/pt-br/learn/javascript/building_blocks/build_your_own_function/index.html @@ -1,7 +1,8 @@ --- title: Construa sua própria função -slug: Aprender/JavaScript/Elementos_construtivos/Build_your_own_function +slug: Learn/JavaScript/Building_blocks/Build_your_own_function translation_of: Learn/JavaScript/Building_blocks/Build_your_own_function +original_slug: Aprender/JavaScript/Elementos_construtivos/Build_your_own_function ---
    {{LearnSidebar}}
    diff --git a/files/pt-br/learn/javascript/building_blocks/conditionals/index.html b/files/pt-br/learn/javascript/building_blocks/conditionals/index.html index 0fec6d40e7..6f110ad3e0 100644 --- a/files/pt-br/learn/javascript/building_blocks/conditionals/index.html +++ b/files/pt-br/learn/javascript/building_blocks/conditionals/index.html @@ -1,11 +1,12 @@ --- title: Tomando decisões no seu código — condicionais -slug: Aprender/JavaScript/Elementos_construtivos/conditionals +slug: Learn/JavaScript/Building_blocks/conditionals tags: - Artigo - Condicionais - Iniciante translation_of: Learn/JavaScript/Building_blocks/conditionals +original_slug: Aprender/JavaScript/Elementos_construtivos/conditionals ---
    {{LearnSidebar}}
    diff --git a/files/pt-br/learn/javascript/building_blocks/events/index.html b/files/pt-br/learn/javascript/building_blocks/events/index.html index dd6e41f674..dfc25d3d2b 100644 --- a/files/pt-br/learn/javascript/building_blocks/events/index.html +++ b/files/pt-br/learn/javascript/building_blocks/events/index.html @@ -1,6 +1,6 @@ --- title: Introdução a eventos -slug: Aprender/JavaScript/Elementos_construtivos/Events +slug: Learn/JavaScript/Building_blocks/Events tags: - Aprender - Artigo @@ -10,6 +10,7 @@ tags: - Programando - eventos translation_of: Learn/JavaScript/Building_blocks/Events +original_slug: Aprender/JavaScript/Elementos_construtivos/Events ---
    {{LearnSidebar}}
    diff --git a/files/pt-br/learn/javascript/building_blocks/functions/index.html b/files/pt-br/learn/javascript/building_blocks/functions/index.html index 05e9ffcfea..cea5fdcf19 100644 --- a/files/pt-br/learn/javascript/building_blocks/functions/index.html +++ b/files/pt-br/learn/javascript/building_blocks/functions/index.html @@ -1,7 +1,8 @@ --- title: Funções — blocos reutilizáveis de código -slug: Aprender/JavaScript/Elementos_construtivos/Functions +slug: Learn/JavaScript/Building_blocks/Functions translation_of: Learn/JavaScript/Building_blocks/Functions +original_slug: Aprender/JavaScript/Elementos_construtivos/Functions ---
    {{LearnSidebar}}
    diff --git a/files/pt-br/learn/javascript/building_blocks/image_gallery/index.html b/files/pt-br/learn/javascript/building_blocks/image_gallery/index.html index 2e4fc27c4d..5780b9b97e 100644 --- a/files/pt-br/learn/javascript/building_blocks/image_gallery/index.html +++ b/files/pt-br/learn/javascript/building_blocks/image_gallery/index.html @@ -1,7 +1,8 @@ --- title: Galeria de Imagens -slug: Aprender/JavaScript/Elementos_construtivos/Image_gallery +slug: Learn/JavaScript/Building_blocks/Image_gallery translation_of: Learn/JavaScript/Building_blocks/Image_gallery +original_slug: Aprender/JavaScript/Elementos_construtivos/Image_gallery ---
    {{LearnSidebar}}
    diff --git a/files/pt-br/learn/javascript/building_blocks/index.html b/files/pt-br/learn/javascript/building_blocks/index.html index cb8deab502..44ac236d12 100644 --- a/files/pt-br/learn/javascript/building_blocks/index.html +++ b/files/pt-br/learn/javascript/building_blocks/index.html @@ -1,6 +1,6 @@ --- title: Elementos construtivos do Javascript -slug: Aprender/JavaScript/Elementos_construtivos +slug: Learn/JavaScript/Building_blocks tags: - Artigo - Condicionais @@ -11,6 +11,7 @@ tags: - Loops - eventos translation_of: Learn/JavaScript/Building_blocks +original_slug: Aprender/JavaScript/Elementos_construtivos ---
    {{LearnSidebar}}
    diff --git a/files/pt-br/learn/javascript/building_blocks/looping_code/index.html b/files/pt-br/learn/javascript/building_blocks/looping_code/index.html index 058ce0385c..7edb5ac4cd 100644 --- a/files/pt-br/learn/javascript/building_blocks/looping_code/index.html +++ b/files/pt-br/learn/javascript/building_blocks/looping_code/index.html @@ -1,6 +1,6 @@ --- title: Código em loop -slug: Aprender/JavaScript/Elementos_construtivos/Código_em_loop +slug: Learn/JavaScript/Building_blocks/Looping_code tags: - Artigo - CodingScripting @@ -14,6 +14,7 @@ tags: - for - while translation_of: Learn/JavaScript/Building_blocks/Looping_code +original_slug: Aprender/JavaScript/Elementos_construtivos/Código_em_loop ---
    {{LearnSidebar}}
    diff --git a/files/pt-br/learn/javascript/building_blocks/return_values/index.html b/files/pt-br/learn/javascript/building_blocks/return_values/index.html index 39d72a1660..4c40eea381 100644 --- a/files/pt-br/learn/javascript/building_blocks/return_values/index.html +++ b/files/pt-br/learn/javascript/building_blocks/return_values/index.html @@ -1,7 +1,8 @@ --- title: Valores de retorno de função -slug: Aprender/JavaScript/Elementos_construtivos/Return_values +slug: Learn/JavaScript/Building_blocks/Return_values translation_of: Learn/JavaScript/Building_blocks/Return_values +original_slug: Aprender/JavaScript/Elementos_construtivos/Return_values ---
    {{LearnSidebar}}
    diff --git a/files/pt-br/learn/javascript/client-side_web_apis/client-side_storage/index.html b/files/pt-br/learn/javascript/client-side_web_apis/client-side_storage/index.html index ce4d3c2a20..ad934caa43 100644 --- a/files/pt-br/learn/javascript/client-side_web_apis/client-side_storage/index.html +++ b/files/pt-br/learn/javascript/client-side_web_apis/client-side_storage/index.html @@ -1,7 +1,8 @@ --- title: Client-side storage -slug: Aprender/JavaScript/Client-side_web_APIs/Client-side_storage +slug: Learn/JavaScript/Client-side_web_APIs/Client-side_storage translation_of: Learn/JavaScript/Client-side_web_APIs/Client-side_storage +original_slug: Aprender/JavaScript/Client-side_web_APIs/Client-side_storage ---

    {{LearnSidebar}}

    diff --git a/files/pt-br/learn/javascript/client-side_web_apis/index.html b/files/pt-br/learn/javascript/client-side_web_apis/index.html index 03477c04af..cb2fe46cd9 100644 --- a/files/pt-br/learn/javascript/client-side_web_apis/index.html +++ b/files/pt-br/learn/javascript/client-side_web_apis/index.html @@ -1,6 +1,6 @@ --- title: APIs web do lado cliente -slug: Aprender/JavaScript/Client-side_web_APIs +slug: Learn/JavaScript/Client-side_web_APIs tags: - API - Aprender @@ -13,6 +13,7 @@ tags: - graficos - modulo translation_of: Learn/JavaScript/Client-side_web_APIs +original_slug: Aprender/JavaScript/Client-side_web_APIs ---
    {{LearnSidebar}}
    diff --git a/files/pt-br/learn/javascript/client-side_web_apis/introduction/index.html b/files/pt-br/learn/javascript/client-side_web_apis/introduction/index.html index dfab85143b..f5c75f9447 100644 --- a/files/pt-br/learn/javascript/client-side_web_apis/introduction/index.html +++ b/files/pt-br/learn/javascript/client-side_web_apis/introduction/index.html @@ -1,7 +1,8 @@ --- title: Introdução às Web APIs -slug: Aprender/JavaScript/Client-side_web_APIs/Introdução +slug: Learn/JavaScript/Client-side_web_APIs/Introduction translation_of: Learn/JavaScript/Client-side_web_APIs/Introduction +original_slug: Aprender/JavaScript/Client-side_web_APIs/Introdução ---
    {{LearnSidebar}}
    diff --git a/files/pt-br/learn/javascript/client-side_web_apis/manipulating_documents/index.html b/files/pt-br/learn/javascript/client-side_web_apis/manipulating_documents/index.html index 544deb8960..64e048a158 100644 --- a/files/pt-br/learn/javascript/client-side_web_apis/manipulating_documents/index.html +++ b/files/pt-br/learn/javascript/client-side_web_apis/manipulating_documents/index.html @@ -1,8 +1,9 @@ --- title: JavaScript e CSS -slug: Web/CSS/Getting_Started/JavaScript +slug: Learn/JavaScript/Client-side_web_APIs/Manipulating_documents translation_of: Learn/JavaScript/Client-side_web_APIs/Manipulating_documents translation_of_original: Web/Guide/CSS/Getting_started/JavaScript +original_slug: Web/CSS/Getting_Started/JavaScript ---

    {{ CSSTutorialTOC() }}

    Esta é a pirmeira sessão da Parte II do Tutorial de CSS. A parte II consém alguns exemplos que mostram o escopo do CSS usado com outras tecnologias web e Mozilla.

    diff --git a/files/pt-br/learn/javascript/first_steps/math/index.html b/files/pt-br/learn/javascript/first_steps/math/index.html index fce74528f7..7e0344a6c7 100644 --- a/files/pt-br/learn/javascript/first_steps/math/index.html +++ b/files/pt-br/learn/javascript/first_steps/math/index.html @@ -1,6 +1,6 @@ --- title: Matemática básica no JavaScript — números e operadores -slug: Learn/JavaScript/First_steps/Matematica +slug: Learn/JavaScript/First_steps/Math tags: - Artigo - Código @@ -15,6 +15,7 @@ tags: - incremento - modulo translation_of: Learn/JavaScript/First_steps/Math +original_slug: Learn/JavaScript/First_steps/Matematica ---
    {{LearnSidebar}}
    diff --git a/files/pt-br/learn/javascript/first_steps/silly_story_generator/index.html b/files/pt-br/learn/javascript/first_steps/silly_story_generator/index.html index cc8a8cc542..0e9e8e393c 100644 --- a/files/pt-br/learn/javascript/first_steps/silly_story_generator/index.html +++ b/files/pt-br/learn/javascript/first_steps/silly_story_generator/index.html @@ -1,7 +1,8 @@ --- title: Gerador de histórias bobas -slug: Learn/JavaScript/First_steps/Gerador_de_historias_bobas +slug: Learn/JavaScript/First_steps/Silly_story_generator translation_of: Learn/JavaScript/First_steps/Silly_story_generator +original_slug: Learn/JavaScript/First_steps/Gerador_de_historias_bobas ---
    {{LearnSidebar}}
    diff --git a/files/pt-br/learn/javascript/first_steps/test_your_skills_colon__variables/index.html b/files/pt-br/learn/javascript/first_steps/test_your_skills_colon__variables/index.html index 1a14c86630..bd8baa3341 100644 --- a/files/pt-br/learn/javascript/first_steps/test_your_skills_colon__variables/index.html +++ b/files/pt-br/learn/javascript/first_steps/test_your_skills_colon__variables/index.html @@ -1,6 +1,6 @@ --- title: 'Teste suas habilidades: variáveis' -slug: 'Learn/JavaScript/First_steps/Teste_suas_habilidades:_variaveis' +slug: Learn/JavaScript/First_steps/Test_your_skills:_variables tags: - Aprender - Habilidades @@ -8,7 +8,8 @@ tags: - JavaScript - Teste suas habilidades - Variáveis -translation_of: 'Learn/JavaScript/First_steps/Test_your_skills:_variables' +translation_of: Learn/JavaScript/First_steps/Test_your_skills:_variables +original_slug: Learn/JavaScript/First_steps/Teste_suas_habilidades:_variaveis ---
    {{learnsidebar}}
    diff --git a/files/pt-br/learn/javascript/first_steps/variables/index.html b/files/pt-br/learn/javascript/first_steps/variables/index.html index 1afd436622..88b45eaf8f 100644 --- a/files/pt-br/learn/javascript/first_steps/variables/index.html +++ b/files/pt-br/learn/javascript/first_steps/variables/index.html @@ -1,7 +1,8 @@ --- title: Armazenando as informações que você precisa — Variáveis -slug: Learn/JavaScript/First_steps/Variáveis +slug: Learn/JavaScript/First_steps/Variables translation_of: Learn/JavaScript/First_steps/Variables +original_slug: Learn/JavaScript/First_steps/Variáveis ---
    {{LearnSidebar}}
    diff --git a/files/pt-br/learn/javascript/first_steps/what_is_javascript/index.html b/files/pt-br/learn/javascript/first_steps/what_is_javascript/index.html index 771541b047..a5c8f00d91 100644 --- a/files/pt-br/learn/javascript/first_steps/what_is_javascript/index.html +++ b/files/pt-br/learn/javascript/first_steps/what_is_javascript/index.html @@ -1,6 +1,6 @@ --- title: O que é JavaScript? -slug: Learn/JavaScript/First_steps/O_que_e_JavaScript +slug: Learn/JavaScript/First_steps/What_is_JavaScript tags: - API - Aprender @@ -15,9 +15,10 @@ tags: - comentários - externo - inline - - 'l10n:prioridade' + - l10n:prioridade - terceiros translation_of: Learn/JavaScript/First_steps/What_is_JavaScript +original_slug: Learn/JavaScript/First_steps/O_que_e_JavaScript ---
    {{LearnSidebar}}
    diff --git a/files/pt-br/learn/javascript/howto/index.html b/files/pt-br/learn/javascript/howto/index.html index c06dbd4d3f..f3585cbf6e 100644 --- a/files/pt-br/learn/javascript/howto/index.html +++ b/files/pt-br/learn/javascript/howto/index.html @@ -1,7 +1,8 @@ --- title: Solve common problems in your JavaScript code -slug: Aprender/JavaScript/Howto +slug: Learn/JavaScript/Howto translation_of: Learn/JavaScript/Howto +original_slug: Aprender/JavaScript/Howto ---
    {{LearnSidebar}}
    diff --git a/files/pt-br/learn/javascript/index.html b/files/pt-br/learn/javascript/index.html index d1a9db5057..2d0226b691 100644 --- a/files/pt-br/learn/javascript/index.html +++ b/files/pt-br/learn/javascript/index.html @@ -1,6 +1,6 @@ --- title: JavaScript -slug: Aprender/JavaScript +slug: Learn/JavaScript tags: - Beginner - CodingScripting @@ -11,6 +11,7 @@ tags: - Tópico - modulo translation_of: Learn/JavaScript +original_slug: Aprender/JavaScript ---

    {{LearnSidebar}}

    diff --git a/files/pt-br/learn/javascript/objects/adding_bouncing_balls_features/index.html b/files/pt-br/learn/javascript/objects/adding_bouncing_balls_features/index.html index b0e0c0d534..e8f293e4d6 100644 --- a/files/pt-br/learn/javascript/objects/adding_bouncing_balls_features/index.html +++ b/files/pt-br/learn/javascript/objects/adding_bouncing_balls_features/index.html @@ -1,7 +1,8 @@ --- title: Adicionando recursos à nossa demonstração de bolas pulantes -slug: Aprender/JavaScript/Objetos/Adding_bouncing_balls_features +slug: Learn/JavaScript/Objects/Adding_bouncing_balls_features translation_of: Learn/JavaScript/Objects/Adding_bouncing_balls_features +original_slug: Aprender/JavaScript/Objetos/Adding_bouncing_balls_features ---
    {{LearnSidebar}}
    diff --git a/files/pt-br/learn/javascript/objects/basics/index.html b/files/pt-br/learn/javascript/objects/basics/index.html index ef9cb18c95..340fc9dd82 100644 --- a/files/pt-br/learn/javascript/objects/basics/index.html +++ b/files/pt-br/learn/javascript/objects/basics/index.html @@ -1,7 +1,8 @@ --- title: O básico sobre objetos JavaScript -slug: Aprender/JavaScript/Objetos/Básico +slug: Learn/JavaScript/Objects/Basics translation_of: Learn/JavaScript/Objects/Basics +original_slug: Aprender/JavaScript/Objetos/Básico ---
    {{LearnSidebar}}
    diff --git a/files/pt-br/learn/javascript/objects/index.html b/files/pt-br/learn/javascript/objects/index.html index 4c19a1956b..80036f250a 100644 --- a/files/pt-br/learn/javascript/objects/index.html +++ b/files/pt-br/learn/javascript/objects/index.html @@ -1,11 +1,12 @@ --- title: Introdução a objetos em Javascript -slug: Aprender/JavaScript/Objetos +slug: Learn/JavaScript/Objects tags: - Iniciante - JavaScript - Objetos translation_of: Learn/JavaScript/Objects +original_slug: Aprender/JavaScript/Objetos ---
    {{LearnSidebar}}
    diff --git a/files/pt-br/learn/javascript/objects/inheritance/index.html b/files/pt-br/learn/javascript/objects/inheritance/index.html index 81acc88a92..032e574d6e 100644 --- a/files/pt-br/learn/javascript/objects/inheritance/index.html +++ b/files/pt-br/learn/javascript/objects/inheritance/index.html @@ -1,7 +1,8 @@ --- title: Herança em JavaScript -slug: Aprender/JavaScript/Objetos/Herança +slug: Learn/JavaScript/Objects/Inheritance translation_of: Learn/JavaScript/Objects/Inheritance +original_slug: Aprender/JavaScript/Objetos/Herança ---
    {{LearnSidebar}}
    diff --git a/files/pt-br/learn/javascript/objects/json/index.html b/files/pt-br/learn/javascript/objects/json/index.html index e10e3e27a6..3f28b6d5ab 100644 --- a/files/pt-br/learn/javascript/objects/json/index.html +++ b/files/pt-br/learn/javascript/objects/json/index.html @@ -1,11 +1,12 @@ --- title: Trabalhando com JSON -slug: Aprender/JavaScript/Objetos/JSON +slug: Learn/JavaScript/Objects/JSON tags: - JSON - JavaScript - assíncrono translation_of: Learn/JavaScript/Objects/JSON +original_slug: Aprender/JavaScript/Objetos/JSON ---
    {{LearnSidebar}}
    diff --git a/files/pt-br/learn/javascript/objects/object-oriented_js/index.html b/files/pt-br/learn/javascript/objects/object-oriented_js/index.html index 7772eec5cf..ead7aaa74e 100644 --- a/files/pt-br/learn/javascript/objects/object-oriented_js/index.html +++ b/files/pt-br/learn/javascript/objects/object-oriented_js/index.html @@ -1,7 +1,8 @@ --- title: JavaScript orientado a objetos para iniciantes -slug: Aprender/JavaScript/Objetos/Object-oriented_JS +slug: Learn/JavaScript/Objects/Object-oriented_JS translation_of: Learn/JavaScript/Objects/Object-oriented_JS +original_slug: Aprender/JavaScript/Objetos/Object-oriented_JS ---
    {{LearnSidebar}}
    diff --git a/files/pt-br/learn/javascript/objects/object_building_practice/index.html b/files/pt-br/learn/javascript/objects/object_building_practice/index.html index 4c4ab6c629..070fd6206f 100644 --- a/files/pt-br/learn/javascript/objects/object_building_practice/index.html +++ b/files/pt-br/learn/javascript/objects/object_building_practice/index.html @@ -1,7 +1,8 @@ --- title: Prática de construção de objetos -slug: Aprender/JavaScript/Objetos/Object_building_practice +slug: Learn/JavaScript/Objects/Object_building_practice translation_of: Learn/JavaScript/Objects/Object_building_practice +original_slug: Aprender/JavaScript/Objetos/Object_building_practice ---
    {{LearnSidebar}}
    diff --git a/files/pt-br/learn/javascript/objects/object_prototypes/index.html b/files/pt-br/learn/javascript/objects/object_prototypes/index.html index c574781301..a781e65a04 100644 --- a/files/pt-br/learn/javascript/objects/object_prototypes/index.html +++ b/files/pt-br/learn/javascript/objects/object_prototypes/index.html @@ -1,7 +1,8 @@ --- title: Protótipos de objetos -slug: Aprender/JavaScript/Objetos/Object_prototypes +slug: Learn/JavaScript/Objects/Object_prototypes translation_of: Learn/JavaScript/Objects/Object_prototypes +original_slug: Aprender/JavaScript/Objetos/Object_prototypes ---
    {{LearnSidebar}}
    diff --git a/files/pt-br/learn/learning_and_getting_help/index.html b/files/pt-br/learn/learning_and_getting_help/index.html index 39d219bae4..03e6584c15 100644 --- a/files/pt-br/learn/learning_and_getting_help/index.html +++ b/files/pt-br/learn/learning_and_getting_help/index.html @@ -1,7 +1,8 @@ --- title: Learning and getting help -slug: Aprender/Learning_and_getting_help +slug: Learn/Learning_and_getting_help translation_of: Learn/Learning_and_getting_help +original_slug: Aprender/Learning_and_getting_help ---

    {{learnsidebar}}{{draft}}

    diff --git a/files/pt-br/learn/release_notes/index.html b/files/pt-br/learn/release_notes/index.html index d90c63c81b..017349a842 100644 --- a/files/pt-br/learn/release_notes/index.html +++ b/files/pt-br/learn/release_notes/index.html @@ -1,7 +1,8 @@ --- title: Learning area release notes -slug: Aprender/Release_notes +slug: Learn/Release_notes translation_of: Learn/Release_notes +original_slug: Aprender/Release_notes ---
    {{learnsidebar}}
    diff --git a/files/pt-br/learn/server-side/django/deployment/index.html b/files/pt-br/learn/server-side/django/deployment/index.html index baa2217b71..1c4b766923 100644 --- a/files/pt-br/learn/server-side/django/deployment/index.html +++ b/files/pt-br/learn/server-side/django/deployment/index.html @@ -1,6 +1,6 @@ --- title: 'Tutorial Django Parte 11: Hospedando Django para produção' -slug: Learn/Server-side/Django/Hospedagem +slug: Learn/Server-side/Django/Deployment tags: - Codificação de Scripts - Deploy do django @@ -9,6 +9,7 @@ tags: - django - servidor web translation_of: Learn/Server-side/Django/Deployment +original_slug: Learn/Server-side/Django/Hospedagem ---
    {{LearnSidebar}}
    diff --git a/files/pt-br/learn/server-side/django/development_environment/index.html b/files/pt-br/learn/server-side/django/development_environment/index.html index 101d1a15ad..0e7de5a07b 100644 --- a/files/pt-br/learn/server-side/django/development_environment/index.html +++ b/files/pt-br/learn/server-side/django/development_environment/index.html @@ -1,6 +1,6 @@ --- title: Configurando um ambiente de desenvolvimento Django -slug: Learn/Server-side/Django/ambiente_de_desenvolvimento +slug: Learn/Server-side/Django/development_environment tags: - Ambiente de desenvolvimento - Aprender @@ -10,6 +10,7 @@ tags: - Python - django translation_of: Learn/Server-side/Django/development_environment +original_slug: Learn/Server-side/Django/ambiente_de_desenvolvimento ---
    {{LearnSidebar}}
    diff --git a/files/pt-br/learn/server-side/django/introduction/index.html b/files/pt-br/learn/server-side/django/introduction/index.html index 9258d18dc6..d92152c3ee 100644 --- a/files/pt-br/learn/server-side/django/introduction/index.html +++ b/files/pt-br/learn/server-side/django/introduction/index.html @@ -1,6 +1,6 @@ --- title: Introdução ao Django -slug: Learn/Server-side/Django/Introdução +slug: Learn/Server-side/Django/Introduction tags: - Aprender - Codificação @@ -10,6 +10,7 @@ tags: - Python - django translation_of: Learn/Server-side/Django/Introduction +original_slug: Learn/Server-side/Django/Introdução ---
    {{LearnSidebar}}
    diff --git a/files/pt-br/learn/server-side/django/sessions/index.html b/files/pt-br/learn/server-side/django/sessions/index.html index f2f16b521f..f631b77795 100644 --- a/files/pt-br/learn/server-side/django/sessions/index.html +++ b/files/pt-br/learn/server-side/django/sessions/index.html @@ -1,6 +1,6 @@ --- title: 'Tutorial Django Parte 7: Sessões' -slug: Learn/Server-side/Django/Sessões +slug: Learn/Server-side/Django/Sessions tags: - Artigo - Iniciante @@ -15,6 +15,7 @@ tags: - server-side - sessões django translation_of: Learn/Server-side/Django/Sessions +original_slug: Learn/Server-side/Django/Sessões ---
    {{LearnSidebar}}
    diff --git a/files/pt-br/learn/server-side/django/tutorial_local_library_website/index.html b/files/pt-br/learn/server-side/django/tutorial_local_library_website/index.html index da69f5c9de..9866a10987 100644 --- a/files/pt-br/learn/server-side/django/tutorial_local_library_website/index.html +++ b/files/pt-br/learn/server-side/django/tutorial_local_library_website/index.html @@ -1,6 +1,6 @@ --- title: 'Tutorial Django: Website da Biblioteca Local' -slug: Learn/Server-side/Django/Tutorial_website_biblioteca_local +slug: Learn/Server-side/Django/Tutorial_local_library_website tags: - Artigo - Guía @@ -8,6 +8,7 @@ tags: - Tutorial - django translation_of: Learn/Server-side/Django/Tutorial_local_library_website +original_slug: Learn/Server-side/Django/Tutorial_website_biblioteca_local ---
    {{LearnSidebar}}
    diff --git a/files/pt-br/learn/server-side/express_nodejs/development_environment/index.html b/files/pt-br/learn/server-side/express_nodejs/development_environment/index.html index 289af21dde..8bcab4e87d 100644 --- a/files/pt-br/learn/server-side/express_nodejs/development_environment/index.html +++ b/files/pt-br/learn/server-side/express_nodejs/development_environment/index.html @@ -1,6 +1,6 @@ --- title: Configurando o Node como ambiente de desenvolvimento -slug: Learn/Server-side/Express_Nodejs/ambiente_de_desenvolvimento +slug: Learn/Server-side/Express_Nodejs/development_environment tags: - Express - Iniciante @@ -11,6 +11,7 @@ tags: - server-side - web server translation_of: Learn/Server-side/Express_Nodejs/development_environment +original_slug: Learn/Server-side/Express_Nodejs/ambiente_de_desenvolvimento ---
    {{LearnSidebar}}
    diff --git a/files/pt-br/learn/server-side/express_nodejs/introduction/index.html b/files/pt-br/learn/server-side/express_nodejs/introduction/index.html index 15ccfc6145..4508f6d4c2 100644 --- a/files/pt-br/learn/server-side/express_nodejs/introduction/index.html +++ b/files/pt-br/learn/server-side/express_nodejs/introduction/index.html @@ -1,6 +1,6 @@ --- title: Introdução Express/Node -slug: Learn/Server-side/Express_Nodejs/Introdução +slug: Learn/Server-side/Express_Nodejs/Introduction tags: - Aprender - Express @@ -11,6 +11,7 @@ tags: - Tutorial - nodejs translation_of: Learn/Server-side/Express_Nodejs/Introduction +original_slug: Learn/Server-side/Express_Nodejs/Introdução ---
    {{LearnSidebar}}
    diff --git a/files/pt-br/learn/server-side/first_steps/introduction/index.html b/files/pt-br/learn/server-side/first_steps/introduction/index.html index e5cc0b991c..74df85c0ae 100644 --- a/files/pt-br/learn/server-side/first_steps/introduction/index.html +++ b/files/pt-br/learn/server-side/first_steps/introduction/index.html @@ -1,6 +1,6 @@ --- title: Introdução ao lado servidor -slug: Learn/Server-side/First_steps/Introdução +slug: Learn/Server-side/First_steps/Introduction tags: - Desenvolvimento Web - Iniciante @@ -10,6 +10,7 @@ tags: - Servidor - programação do lado do cliente translation_of: Learn/Server-side/First_steps/Introduction +original_slug: Learn/Server-side/First_steps/Introdução ---
    {{LearnSidebar}}
    diff --git a/files/pt-br/learn/server-side/first_steps/website_security/index.html b/files/pt-br/learn/server-side/first_steps/website_security/index.html index 12a11cf641..e32ac4fa3b 100644 --- a/files/pt-br/learn/server-side/first_steps/website_security/index.html +++ b/files/pt-br/learn/server-side/first_steps/website_security/index.html @@ -1,6 +1,6 @@ --- title: Segurança em aplicação web -slug: Learn/Server-side/First_steps/Seguranca_site +slug: Learn/Server-side/First_steps/Website_security tags: - Aprendizagem - Guía @@ -11,6 +11,7 @@ tags: - Segurança em aplicações web - Segurança web translation_of: Learn/Server-side/First_steps/Website_security +original_slug: Learn/Server-side/First_steps/Seguranca_site ---
    {{LearnSidebar}}
    diff --git a/files/pt-br/learn/tools_and_testing/client-side_javascript_frameworks/react_getting_started/index.html b/files/pt-br/learn/tools_and_testing/client-side_javascript_frameworks/react_getting_started/index.html index 5c1798518d..11f6a493e6 100644 --- a/files/pt-br/learn/tools_and_testing/client-side_javascript_frameworks/react_getting_started/index.html +++ b/files/pt-br/learn/tools_and_testing/client-side_javascript_frameworks/react_getting_started/index.html @@ -1,8 +1,10 @@ --- title: Começando com React -slug: Learn/Tools_and_testing/Client-side_JavaScript_frameworks/Comecando_com_React +slug: >- + Learn/Tools_and_testing/Client-side_JavaScript_frameworks/React_getting_started translation_of: >- Learn/Tools_and_testing/Client-side_JavaScript_frameworks/React_getting_started +original_slug: Learn/Tools_and_testing/Client-side_JavaScript_frameworks/Comecando_com_React ---
    {{LearnSidebar}}
    diff --git a/files/pt-br/learn/tools_and_testing/client-side_javascript_frameworks/vue_getting_started/index.html b/files/pt-br/learn/tools_and_testing/client-side_javascript_frameworks/vue_getting_started/index.html index 607b876a2e..047ed8a804 100644 --- a/files/pt-br/learn/tools_and_testing/client-side_javascript_frameworks/vue_getting_started/index.html +++ b/files/pt-br/learn/tools_and_testing/client-side_javascript_frameworks/vue_getting_started/index.html @@ -1,7 +1,8 @@ --- title: Iniciando com Vue -slug: Learn/Tools_and_testing/Client-side_JavaScript_frameworks/Vue_iniciando +slug: Learn/Tools_and_testing/Client-side_JavaScript_frameworks/Vue_getting_started translation_of: Learn/Tools_and_testing/Client-side_JavaScript_frameworks/Vue_getting_started +original_slug: Learn/Tools_and_testing/Client-side_JavaScript_frameworks/Vue_iniciando ---
    {{LearnSidebar}}
    diff --git a/files/pt-br/learn/tools_and_testing/index.html b/files/pt-br/learn/tools_and_testing/index.html index 5f1a76dbf7..b3f2b10859 100644 --- a/files/pt-br/learn/tools_and_testing/index.html +++ b/files/pt-br/learn/tools_and_testing/index.html @@ -1,6 +1,6 @@ --- title: Ferramentas e teste -slug: Aprender/Ferramentas_e_teste +slug: Learn/Tools_and_testing tags: - Acessibilidade - Aprendizagem @@ -16,6 +16,7 @@ tags: - Testes do usuário - Tópico translation_of: Learn/Tools_and_testing +original_slug: Aprender/Ferramentas_e_teste ---
    {{LearnSidebar}}
    diff --git a/files/pt-br/mdn/at_ten/index.html b/files/pt-br/mdn/at_ten/index.html index 4955a114d4..47d115085c 100644 --- a/files/pt-br/mdn/at_ten/index.html +++ b/files/pt-br/mdn/at_ten/index.html @@ -1,10 +1,11 @@ --- title: 10 anos de MDN -slug: dez_anos_de_MDN +slug: MDN/At_ten tags: - História - MDN translation_of: MDN_at_ten +original_slug: dez_anos_de_MDN ---
    Celebrando 10 anos documentando sua Web.
    diff --git a/files/pt-br/mdn/contribute/howto/convert_code_samples_to_be_live/index.html b/files/pt-br/mdn/contribute/howto/convert_code_samples_to_be_live/index.html index 7bd11477fe..8d266b195d 100644 --- a/files/pt-br/mdn/contribute/howto/convert_code_samples_to_be_live/index.html +++ b/files/pt-br/mdn/contribute/howto/convert_code_samples_to_be_live/index.html @@ -1,12 +1,13 @@ --- title: Como converter exemplos de codigos para funcionar "ao vivo" -slug: MDN/Contribute/guia/Converter_exemplos_codigo_para_ao_vivo +slug: MDN/Contribute/Howto/Convert_code_samples_to_be_live tags: - Começando - Como - Contribuindo - Documentação translation_of: MDN/Contribute/Howto/Convert_code_samples_to_be_live +original_slug: MDN/Contribute/guia/Converter_exemplos_codigo_para_ao_vivo ---
    {{MDNSidebar}}

    A MDN agora possui um sistema de "exemplos ao vivo", onde a amostra de código e exibida em uma página que é diretamente utilizado para exibir a saída dessa amostra. No entanto, muitos artigos existentes possuem exemplos de código que ainda não utilizam este sistema, e precisam ser convertidos.

    diff --git a/files/pt-br/mdn/contribute/howto/create_an_interactive_exercise_to_help_learning_the_web/distant_example/index.html b/files/pt-br/mdn/contribute/howto/create_an_interactive_exercise_to_help_learning_the_web/distant_example/index.html index 13d6745c3f..70853525ca 100644 --- a/files/pt-br/mdn/contribute/howto/create_an_interactive_exercise_to_help_learning_the_web/distant_example/index.html +++ b/files/pt-br/mdn/contribute/howto/create_an_interactive_exercise_to_help_learning_the_web/distant_example/index.html @@ -1,9 +1,11 @@ --- title: distant example slug: >- - MDN/Contribute/guia/Create_an_interactive_exercise_to_help_learning_the_web/distant_example + MDN/Contribute/Howto/Create_an_interactive_exercise_to_help_learning_the_web/distant_example translation_of: >- MDN/Contribute/Howto/Create_an_interactive_exercise_to_help_learning_the_web/distant_example +original_slug: >- + MDN/Contribute/guia/Create_an_interactive_exercise_to_help_learning_the_web/distant_example ---
    {{MDNSidebar}}

    O exemplo

    diff --git a/files/pt-br/mdn/contribute/howto/create_an_interactive_exercise_to_help_learning_the_web/index.html b/files/pt-br/mdn/contribute/howto/create_an_interactive_exercise_to_help_learning_the_web/index.html index 948da8d3f6..4dd71d8770 100644 --- a/files/pt-br/mdn/contribute/howto/create_an_interactive_exercise_to_help_learning_the_web/index.html +++ b/files/pt-br/mdn/contribute/howto/create_an_interactive_exercise_to_help_learning_the_web/index.html @@ -1,9 +1,10 @@ --- title: Como criar um exercício de aprendizado interativo -slug: MDN/Contribute/guia/Create_an_interactive_exercise_to_help_learning_the_web +slug: MDN/Contribute/Howto/Create_an_interactive_exercise_to_help_learning_the_web tags: - Guía translation_of: MDN/Contribute/Howto/Create_an_interactive_exercise_to_help_learning_the_web +original_slug: MDN/Contribute/guia/Create_an_interactive_exercise_to_help_learning_the_web ---
    {{MDNSidebar}}
    diff --git a/files/pt-br/mdn/contribute/howto/create_and_edit_pages/index.html b/files/pt-br/mdn/contribute/howto/create_and_edit_pages/index.html index 85f02f9231..5b8979a5ab 100644 --- a/files/pt-br/mdn/contribute/howto/create_and_edit_pages/index.html +++ b/files/pt-br/mdn/contribute/howto/create_and_edit_pages/index.html @@ -1,6 +1,6 @@ --- title: Criando e editando páginas -slug: MDN/Contribute/criando_e_editando_paginas +slug: MDN/Contribute/Howto/Create_and_edit_pages tags: - Colaborando - Colaborar @@ -10,6 +10,7 @@ tags: - MDN - nova pagina translation_of: MDN/Contribute/Howto/Create_and_edit_pages +original_slug: MDN/Contribute/criando_e_editando_paginas ---
    {{MDNSidebar}}
    diff --git a/files/pt-br/mdn/contribute/howto/index.html b/files/pt-br/mdn/contribute/howto/index.html index 7a8e36996a..582632ca4b 100644 --- a/files/pt-br/mdn/contribute/howto/index.html +++ b/files/pt-br/mdn/contribute/howto/index.html @@ -1,7 +1,8 @@ --- title: Guia de contribuição -slug: MDN/Contribute/guia +slug: MDN/Contribute/Howto translation_of: MDN/Contribute/Howto +original_slug: MDN/Contribute/guia ---
    {{MDNSidebar}}

    Os seguintes artigos fornecem orientações passo-a-passo para realização de tarefas específicas no MDN.

    diff --git a/files/pt-br/mdn/contribute/howto/tag/index.html b/files/pt-br/mdn/contribute/howto/tag/index.html index 541d31ff6e..65a6084668 100644 --- a/files/pt-br/mdn/contribute/howto/tag/index.html +++ b/files/pt-br/mdn/contribute/howto/tag/index.html @@ -1,6 +1,6 @@ --- title: Como adicionar etiquetas às páginas corretamente -slug: MDN/Contribute/guia/Como-marcar-as-paginas-corretamente +slug: MDN/Contribute/Howto/Tag tags: - Contribua - Etiquetas @@ -14,6 +14,7 @@ tags: - Tags - Tutorial translation_of: MDN/Contribute/Howto/Tag +original_slug: MDN/Contribute/guia/Como-marcar-as-paginas-corretamente ---
    {{MDNSidebar}}
    {{IncludeSubnav("/pt-BR/docs/MDN")}}
    diff --git a/files/pt-br/mdn/contribute/processes/index.html b/files/pt-br/mdn/contribute/processes/index.html index bfac34ce26..72ba36fde9 100644 --- a/files/pt-br/mdn/contribute/processes/index.html +++ b/files/pt-br/mdn/contribute/processes/index.html @@ -1,6 +1,7 @@ --- title: Processos de documentação -slug: MDN/Contribute/Processos +slug: MDN/Contribute/Processes translation_of: MDN/Contribute/Processes +original_slug: MDN/Contribute/Processos ---
    {{MDNSidebar}}

    O projeto de documentação do MDN é enorme; há um grande número de tecnologias para cobrir e nós temos centenas de colaboradores em todo o mundo. Para ajudar a trazer ordem ao caos, temos processos padrões a seguir quando se trabalha em tarefas específicas relacionadas com a documentação. Aqui você vai encontrar os guias para esses processos.

    diff --git a/files/pt-br/mdn/guidelines/writing_style_guide/index.html b/files/pt-br/mdn/guidelines/writing_style_guide/index.html index 3776744cbd..2e2ec48824 100644 --- a/files/pt-br/mdn/guidelines/writing_style_guide/index.html +++ b/files/pt-br/mdn/guidelines/writing_style_guide/index.html @@ -1,7 +1,8 @@ --- title: Guia de estilo de escrita -slug: MDN/Guidelines/Style_guide +slug: MDN/Guidelines/Writing_style_guide translation_of: MDN/Guidelines/Writing_style_guide +original_slug: MDN/Guidelines/Style_guide ---
    {{MDNSidebar}}
    diff --git a/files/pt-br/mdn/tools/kumascript/troubleshooting/index.html b/files/pt-br/mdn/tools/kumascript/troubleshooting/index.html index 56053d6468..e289b49979 100644 --- a/files/pt-br/mdn/tools/kumascript/troubleshooting/index.html +++ b/files/pt-br/mdn/tools/kumascript/troubleshooting/index.html @@ -1,6 +1,6 @@ --- title: Solucionando problemas de erros de KumaScript -slug: MDN/Tools/KumaScript/Solucionando_problemas_de_erros_de_KumaScript +slug: MDN/Tools/KumaScript/Troubleshooting tags: - Erros - Ferramentas @@ -8,6 +8,7 @@ tags: - KumaScript - MDN Meta translation_of: MDN/Tools/KumaScript/Troubleshooting +original_slug: MDN/Tools/KumaScript/Solucionando_problemas_de_erros_de_KumaScript ---
    {{MDNSidebar}}

    Erros de KumaScript aparecendo numa página podem ser muito desagradáveis aos leitores, mostrando grandes e medonhas caixas vermelhas, mas felizmente qualquer pessoa com uma conta MDN pode editar um documento e consertar tais tipos de erros. Quando uma página possui algum erro, ela é adicionada na lista de documentos com erros. Editores do site passam por essa lista regularmente para achar e consertar erros. Este artigo detalha os quatro tipos de erros de KumaScript, e alguns passos que você pode fazer para consertá-los.

    diff --git a/files/pt-br/mdn/yari/index.html b/files/pt-br/mdn/yari/index.html index 6fd43defb2..672ea624ff 100644 --- a/files/pt-br/mdn/yari/index.html +++ b/files/pt-br/mdn/yari/index.html @@ -1,9 +1,10 @@ --- title: 'Kuma: MDN''s wiki platform' -slug: MDN/Kuma +slug: MDN/Yari tags: - projeto kuma translation_of: MDN/Kuma +original_slug: MDN/Kuma ---
    {{MDNSidebar}}
    diff --git a/files/pt-br/mozilla/add-ons/webextensions/anatomy_of_a_webextension/index.html b/files/pt-br/mozilla/add-ons/webextensions/anatomy_of_a_webextension/index.html index 231797ec59..8ec220eb48 100644 --- a/files/pt-br/mozilla/add-ons/webextensions/anatomy_of_a_webextension/index.html +++ b/files/pt-br/mozilla/add-ons/webextensions/anatomy_of_a_webextension/index.html @@ -1,10 +1,11 @@ --- title: Anatomia de uma WebExtension -slug: Mozilla/Add-ons/WebExtensions/Anatomia_de_uma_WebExtension +slug: Mozilla/Add-ons/WebExtensions/Anatomy_of_a_WebExtension tags: - Extensões - WebExtensions translation_of: Mozilla/Add-ons/WebExtensions/Anatomy_of_a_WebExtension +original_slug: Mozilla/Add-ons/WebExtensions/Anatomia_de_uma_WebExtension ---

    Uma extensão consiste de uma coleção de arquivos, empacotados para distribuição e instalação. Nesse artigo vamos falar rapidamente sobre os arquivos que podem estar presentes em uma extensão.

    diff --git a/files/pt-br/mozilla/add-ons/webextensions/api/theme/index.html b/files/pt-br/mozilla/add-ons/webextensions/api/theme/index.html index 4eb0dc1b8d..4eeadc06fb 100644 --- a/files/pt-br/mozilla/add-ons/webextensions/api/theme/index.html +++ b/files/pt-br/mozilla/add-ons/webextensions/api/theme/index.html @@ -1,6 +1,6 @@ --- title: tema -slug: Mozilla/Add-ons/WebExtensions/API/tema +slug: Mozilla/Add-ons/WebExtensions/API/theme tags: - Aplicativo - Extensões @@ -10,6 +10,7 @@ tags: - add-on - extensão translation_of: Mozilla/Add-ons/WebExtensions/API/theme +original_slug: Mozilla/Add-ons/WebExtensions/API/tema ---
    {{AddonSidebar}}
    diff --git a/files/pt-br/mozilla/add-ons/webextensions/manifest.json/permissions/index.html b/files/pt-br/mozilla/add-ons/webextensions/manifest.json/permissions/index.html index 41312323b4..270b52134e 100644 --- a/files/pt-br/mozilla/add-ons/webextensions/manifest.json/permissions/index.html +++ b/files/pt-br/mozilla/add-ons/webextensions/manifest.json/permissions/index.html @@ -1,7 +1,8 @@ --- title: permissões -slug: Mozilla/Add-ons/WebExtensions/manifest.json/permissões +slug: Mozilla/Add-ons/WebExtensions/manifest.json/permissions translation_of: Mozilla/Add-ons/WebExtensions/manifest.json/permissions +original_slug: Mozilla/Add-ons/WebExtensions/manifest.json/permissões ---
    {{AddonSidebar}}
    diff --git a/files/pt-br/mozilla/add-ons/webextensions/prerequisites/index.html b/files/pt-br/mozilla/add-ons/webextensions/prerequisites/index.html index 4e7e854644..2629a1dbfb 100644 --- a/files/pt-br/mozilla/add-ons/webextensions/prerequisites/index.html +++ b/files/pt-br/mozilla/add-ons/webextensions/prerequisites/index.html @@ -1,7 +1,8 @@ --- title: Pré-requisitos -slug: Mozilla/Add-ons/WebExtensions/pre-requisitos +slug: Mozilla/Add-ons/WebExtensions/Prerequisites translation_of: Mozilla/Add-ons/WebExtensions/Prerequisites +original_slug: Mozilla/Add-ons/WebExtensions/pre-requisitos ---

    Para desenvolver utilizando as APIs de uma WebExtension, você precisa de uma configuração mínima.

    diff --git a/files/pt-br/mozilla/add-ons/webextensions/user_interface/context_menu_items/index.html b/files/pt-br/mozilla/add-ons/webextensions/user_interface/context_menu_items/index.html index cf8e2d7198..b74d21bdbe 100644 --- a/files/pt-br/mozilla/add-ons/webextensions/user_interface/context_menu_items/index.html +++ b/files/pt-br/mozilla/add-ons/webextensions/user_interface/context_menu_items/index.html @@ -1,9 +1,10 @@ --- title: Itens do menu de contexto -slug: Mozilla/Add-ons/WebExtensions/user_interface/Itens_do_menu_de_contexto +slug: Mozilla/Add-ons/WebExtensions/user_interface/Context_menu_items tags: - WebExtensions translation_of: Mozilla/Add-ons/WebExtensions/user_interface/Context_menu_items +original_slug: Mozilla/Add-ons/WebExtensions/user_interface/Itens_do_menu_de_contexto ---
    {{AddonSidebar}}
    diff --git a/files/pt-br/mozilla/add-ons/webextensions/what_next_/index.html b/files/pt-br/mozilla/add-ons/webextensions/what_next_/index.html index 7050516e82..d2b04083d7 100644 --- a/files/pt-br/mozilla/add-ons/webextensions/what_next_/index.html +++ b/files/pt-br/mozilla/add-ons/webextensions/what_next_/index.html @@ -1,7 +1,8 @@ --- title: O que vem a seguir ? -slug: Mozilla/Add-ons/WebExtensions/O_que_vem_a_seguir_ +slug: Mozilla/Add-ons/WebExtensions/What_next_ translation_of: Mozilla/Add-ons/WebExtensions/What_next_ +original_slug: Mozilla/Add-ons/WebExtensions/O_que_vem_a_seguir_ ---
    {{AddonSidebar}}
    diff --git a/files/pt-br/mozilla/add-ons/webextensions/your_first_webextension/index.html b/files/pt-br/mozilla/add-ons/webextensions/your_first_webextension/index.html index 9d3045e28a..976985f917 100644 --- a/files/pt-br/mozilla/add-ons/webextensions/your_first_webextension/index.html +++ b/files/pt-br/mozilla/add-ons/webextensions/your_first_webextension/index.html @@ -1,7 +1,8 @@ --- title: Sua primeira extensão -slug: Mozilla/Add-ons/WebExtensions/sua_primeira_WebExtension +slug: Mozilla/Add-ons/WebExtensions/Your_first_WebExtension translation_of: Mozilla/Add-ons/WebExtensions/Your_first_WebExtension +original_slug: Mozilla/Add-ons/WebExtensions/sua_primeira_WebExtension ---
    {{AddonSidebar}}
    diff --git a/files/pt-br/mozilla/add-ons/webextensions/your_second_webextension/index.html b/files/pt-br/mozilla/add-ons/webextensions/your_second_webextension/index.html index 1e49d92e3c..25b1613b55 100644 --- a/files/pt-br/mozilla/add-ons/webextensions/your_second_webextension/index.html +++ b/files/pt-br/mozilla/add-ons/webextensions/your_second_webextension/index.html @@ -1,11 +1,12 @@ --- title: Passo-a-Passo -slug: Mozilla/Add-ons/WebExtensions/Passo-a-Passo +slug: Mozilla/Add-ons/WebExtensions/Your_second_WebExtension tags: - Extensões Web - extensões firefox - passo-a-passo translation_of: Mozilla/Add-ons/WebExtensions/Your_second_WebExtension +original_slug: Mozilla/Add-ons/WebExtensions/Passo-a-Passo ---

    Neste artigo iremos criar uma Extensão para Firefox do início ao fim.

    diff --git a/files/pt-br/mozilla/developer_guide/source_code/index.html b/files/pt-br/mozilla/developer_guide/source_code/index.html index 7d56685269..e279c02e6e 100644 --- a/files/pt-br/mozilla/developer_guide/source_code/index.html +++ b/files/pt-br/mozilla/developer_guide/source_code/index.html @@ -1,7 +1,8 @@ --- title: Trabalhando com o código-fonte Mozilla -slug: Mozilla/Developer_guide/Codigo_Fonte +slug: Mozilla/Developer_guide/Source_Code translation_of: Mozilla/Developer_guide/Source_Code +original_slug: Mozilla/Developer_guide/Codigo_Fonte ---

    Os artigos abaixo vão ajuda-lo a obter o código-fonte Mozilla, aprender a navegar pelo código e como ter as suas modificações aceitas para inclusão no repositório principal.

    diff --git a/files/pt-br/mozilla/firefox/experimental_features/index.html b/files/pt-br/mozilla/firefox/experimental_features/index.html index 12a4aa7c23..55691e1e31 100644 --- a/files/pt-br/mozilla/firefox/experimental_features/index.html +++ b/files/pt-br/mozilla/firefox/experimental_features/index.html @@ -1,7 +1,8 @@ --- title: Novas funcionalidades no Firefox -slug: Mozilla/Firefox/Novas_funcionalidades +slug: Mozilla/Firefox/Experimental_features translation_of: Mozilla/Firefox/Experimental_features +original_slug: Mozilla/Firefox/Novas_funcionalidades ---
    {{FirefoxSidebar}}

    Em ordem para testar as novas funcionalidades, a Mozilla publica uma versão de testes do navegador Firefox, Firefox Nightly, diariamente. Funcionalidades experimentais, for example implementations of proposed Web platform standards, are available. This page lists features that are in Nightly versions of Firefox along with information on how to activate them, if necessary. You can test your Web sites and applications before these features get released and ensure everything will still work with the latest Web technology capabilities.

    diff --git a/files/pt-br/mozilla/firefox/releases/3/full_page_zoom/index.html b/files/pt-br/mozilla/firefox/releases/3/full_page_zoom/index.html index 1a22edfb92..4ccf19d195 100644 --- a/files/pt-br/mozilla/firefox/releases/3/full_page_zoom/index.html +++ b/files/pt-br/mozilla/firefox/releases/3/full_page_zoom/index.html @@ -1,11 +1,12 @@ --- title: Zoom de página inteira -slug: Mozilla/Firefox/Releases/3/Zoom_de_página_inteira +slug: Mozilla/Firefox/Releases/3/Full_page_zoom tags: - Extensões - Firefox 3 - XUL translation_of: Mozilla/Firefox/Releases/3/Full_page_zoom +original_slug: Mozilla/Firefox/Releases/3/Zoom_de_página_inteira ---
    {{FirefoxSidebar}}
    diff --git "a/files/pt-br/orphaned/glossary/tratando_formul\303\241rios_com_php/index.html" "b/files/pt-br/orphaned/glossary/tratando_formul\303\241rios_com_php/index.html" index db1791d5e7..fc4c7baa22 100644 --- "a/files/pt-br/orphaned/glossary/tratando_formul\303\241rios_com_php/index.html" +++ "b/files/pt-br/orphaned/glossary/tratando_formul\303\241rios_com_php/index.html" @@ -1,10 +1,11 @@ --- title: Tratando Formulários com PHP -slug: Glossario/Tratando_Formulários_com_PHP +slug: orphaned/Glossary/Tratando_Formulários_com_PHP tags: - Método POST - PHP translation_of: Glossary/Tratando_Formulários_com_PHP +original_slug: Glossario/Tratando_Formulários_com_PHP ---

    Uma das características mais fortes do PHP é o jeito como ele trata formulários HTML. O conceito básico que é importante entender é que qualquer elemento de formulário irá automaticamente ficar disponível para seus scripts PHP. Por favor leia a seção Variáveis externas do PHP para mais informações e exemplos de como usar formulários com PHP. Aqui vai um exemplo de formulário HTML:

    diff --git a/files/pt-br/orphaned/hello_world_rust/index.html b/files/pt-br/orphaned/hello_world_rust/index.html index f472f6a3e9..baef01d161 100644 --- a/files/pt-br/orphaned/hello_world_rust/index.html +++ b/files/pt-br/orphaned/hello_world_rust/index.html @@ -1,6 +1,6 @@ --- title: Hello World Rust -slug: Hello_World_Rust +slug: orphaned/Hello_World_Rust tags: - Performance - baixo-nível @@ -15,6 +15,7 @@ tags: - rust - rustontherocks - servo +original_slug: Hello_World_Rust ---

    Hello, World!

    diff --git a/files/pt-br/orphaned/instalando_rust/index.html b/files/pt-br/orphaned/instalando_rust/index.html index 883144991d..5f23d27f9b 100644 --- a/files/pt-br/orphaned/instalando_rust/index.html +++ b/files/pt-br/orphaned/instalando_rust/index.html @@ -1,6 +1,6 @@ --- title: Instalando Rust -slug: Instalando_Rust +slug: orphaned/Instalando_Rust tags: - Linux - Tutorial @@ -15,6 +15,7 @@ tags: - rust - rustontherocks - system language +original_slug: Instalando_Rust ---

    Instalando o Rust

    diff --git a/files/pt-br/orphaned/learn/how_to_contribute/index.html b/files/pt-br/orphaned/learn/how_to_contribute/index.html index 8b9cdfb15b..63586e3320 100644 --- a/files/pt-br/orphaned/learn/how_to_contribute/index.html +++ b/files/pt-br/orphaned/learn/how_to_contribute/index.html @@ -1,6 +1,6 @@ --- title: Como contribuir para a área de aprendizagem da MDN -slug: Aprender/Como_contribuir +slug: orphaned/Learn/How_to_contribute tags: - Documentação - Guia(2) @@ -11,6 +11,7 @@ tags: - prioridde - pt-br translation_of: Learn/How_to_contribute +original_slug: Aprender/Como_contribuir ---

    Se você está aqui pela primeira vez ou após uma pesquisa mais aprofundada, é porque provavelmente você está interessado em contribuir para a área de aprendizado da MDN. Isto é uma excelente notícia!

    diff --git a/files/pt-br/orphaned/learn/html/forms/html5_updates/index.html b/files/pt-br/orphaned/learn/html/forms/html5_updates/index.html index 7508276c28..40721d4f3c 100644 --- a/files/pt-br/orphaned/learn/html/forms/html5_updates/index.html +++ b/files/pt-br/orphaned/learn/html/forms/html5_updates/index.html @@ -1,7 +1,8 @@ --- title: Formulários em HTML -slug: HTML/Forms_in_HTML +slug: orphaned/Learn/HTML/Forms/HTML5_updates translation_of: Learn/HTML/Forms/HTML5_updates +original_slug: HTML/Forms_in_HTML ---

    {{ gecko_minversion_header("2") }}

    diff --git a/files/pt-br/orphaned/mdn/community/index.html b/files/pt-br/orphaned/mdn/community/index.html index 5157192748..7f0ccafa6d 100644 --- a/files/pt-br/orphaned/mdn/community/index.html +++ b/files/pt-br/orphaned/mdn/community/index.html @@ -1,11 +1,12 @@ --- title: Participe da comunidade MDN -slug: MDN/Comunidade +slug: orphaned/MDN/Community tags: - Comunidade - Guia(2) - Iniciando translation_of: MDN/Community +original_slug: MDN/Comunidade ---
    {{MDNSidebar}}
    diff --git a/files/pt-br/orphaned/mdn/community/whats_happening/index.html b/files/pt-br/orphaned/mdn/community/whats_happening/index.html index 93783e777f..abf003caf3 100644 --- a/files/pt-br/orphaned/mdn/community/whats_happening/index.html +++ b/files/pt-br/orphaned/mdn/community/whats_happening/index.html @@ -1,7 +1,8 @@ --- title: Siga o que está acontecendo -slug: MDN/Comunidade/Whats_happening +slug: orphaned/MDN/Community/Whats_happening translation_of: MDN/Community/Whats_happening +original_slug: MDN/Comunidade/Whats_happening ---
    {{MDNSidebar}}

    MDN is brought to you by Mozilla's Developer Engagement community. Here are some ways to that we share information about what we're doing.

    diff --git a/files/pt-br/orphaned/mdn/community/working_in_community/index.html b/files/pt-br/orphaned/mdn/community/working_in_community/index.html index 38d851532d..09ede56d3c 100644 --- a/files/pt-br/orphaned/mdn/community/working_in_community/index.html +++ b/files/pt-br/orphaned/mdn/community/working_in_community/index.html @@ -1,7 +1,8 @@ --- title: Trabalhando em comunidade -slug: MDN/Comunidade/Trabalhando_em_comunidade +slug: orphaned/MDN/Community/Working_in_community translation_of: MDN/Community/Working_in_community +original_slug: MDN/Comunidade/Trabalhando_em_comunidade ---
    {{MDNSidebar}}
    diff --git a/files/pt-br/orphaned/mdn/contribute/howto/create_an_mdn_account/index.html b/files/pt-br/orphaned/mdn/contribute/howto/create_an_mdn_account/index.html index 369f018ce5..10410e5a37 100644 --- a/files/pt-br/orphaned/mdn/contribute/howto/create_an_mdn_account/index.html +++ b/files/pt-br/orphaned/mdn/contribute/howto/create_an_mdn_account/index.html @@ -1,6 +1,6 @@ --- title: Como criar uma conta na MDN -slug: MDN/Contribute/guia/Create_an_MDN_account +slug: orphaned/MDN/Contribute/Howto/Create_an_MDN_account tags: - Conta - Guia(2) @@ -8,6 +8,7 @@ tags: - Novato - como fazer translation_of: MDN/Contribute/Howto/Create_an_MDN_account +original_slug: MDN/Contribute/guia/Create_an_MDN_account ---
    {{MDNSidebar}}
    diff --git a/files/pt-br/orphaned/mdn/contribute/howto/do_a_technical_review/index.html b/files/pt-br/orphaned/mdn/contribute/howto/do_a_technical_review/index.html index 45d49fbc55..2651c5f134 100644 --- a/files/pt-br/orphaned/mdn/contribute/howto/do_a_technical_review/index.html +++ b/files/pt-br/orphaned/mdn/contribute/howto/do_a_technical_review/index.html @@ -1,6 +1,6 @@ --- title: Como fazer uma revisão técnica -slug: MDN/Contribute/guia/Do_a_technical_review +slug: orphaned/MDN/Contribute/Howto/Do_a_technical_review tags: - Documentação - Guía @@ -8,6 +8,7 @@ tags: - Revisão - como fazer translation_of: MDN/Contribute/Howto/Do_a_technical_review +original_slug: MDN/Contribute/guia/Do_a_technical_review ---
    {{MDNSidebar}}

    Uma Revisão técnica consiste em revisar a precisão técnica e a integridade de um artigo e corrigi-lo, se necessário. Se um escritor de um artigo procura alguém para verificar o conteúdo técnico do artigo, então ele marca a opção "Análise técnica" durante a edição. Muitas vezes, o escritor contata um engenheiro específico para realizar a revisão técnica, mas qualquer pessoa com experiência técnica no tópico pode fazer um.

    diff --git a/files/pt-br/orphaned/mdn/contribute/howto/do_an_editorial_review/index.html b/files/pt-br/orphaned/mdn/contribute/howto/do_an_editorial_review/index.html index 687072f228..d1e9b29246 100644 --- a/files/pt-br/orphaned/mdn/contribute/howto/do_an_editorial_review/index.html +++ b/files/pt-br/orphaned/mdn/contribute/howto/do_an_editorial_review/index.html @@ -1,6 +1,6 @@ --- title: Como fazer uma revisão editorial -slug: MDN/Contribute/guia/Do_an_editorial_review +slug: orphaned/MDN/Contribute/Howto/Do_an_editorial_review tags: - Documentação - Guia(2) @@ -8,6 +8,7 @@ tags: - Revisão - como fazer translation_of: MDN/Contribute/Howto/Do_an_editorial_review +original_slug: MDN/Contribute/guia/Do_an_editorial_review ---
    {{MDNSidebar}}
    diff --git a/files/pt-br/orphaned/mdn/contribute/howto/set_the_summary_for_a_page/index.html b/files/pt-br/orphaned/mdn/contribute/howto/set_the_summary_for_a_page/index.html index 91ac82e8ea..0019d0a7e7 100644 --- a/files/pt-br/orphaned/mdn/contribute/howto/set_the_summary_for_a_page/index.html +++ b/files/pt-br/orphaned/mdn/contribute/howto/set_the_summary_for_a_page/index.html @@ -1,11 +1,12 @@ --- title: Como definir o resumo de uma página -slug: MDN/Contribute/guia/Set_the_summary_for_a_page +slug: orphaned/MDN/Contribute/Howto/Set_the_summary_for_a_page tags: - Como - Guia(2) - MDN Meta translation_of: MDN/Contribute/Howto/Set_the_summary_for_a_page +original_slug: MDN/Contribute/guia/Set_the_summary_for_a_page ---
    {{MDNSidebar}}

    Você pode definir o sumário de uma página no MDN, para ser usado de várias maneiras, incluindo em resultados de pesquisa, em outras páginas MDN como tópico de página de regiões, e em dicas. E o texto deve fazer sentido tanto ao contexto da página, como quando mostrado em outro contexto, sem o restante do conteúdo da página.

    diff --git a/files/pt-br/orphaned/mdn/contribute/howto/tag_javascript_pages/index.html b/files/pt-br/orphaned/mdn/contribute/howto/tag_javascript_pages/index.html index 7c6f94ac07..66db20d0e5 100644 --- a/files/pt-br/orphaned/mdn/contribute/howto/tag_javascript_pages/index.html +++ b/files/pt-br/orphaned/mdn/contribute/howto/tag_javascript_pages/index.html @@ -1,12 +1,13 @@ --- title: Como marcar páginas de JavaScript -slug: MDN/Contribute/guia/Tag_JavaScript_pages +slug: orphaned/MDN/Contribute/Howto/Tag_JavaScript_pages tags: - Como - Guia(2) - JavaScript - MDN Meta translation_of: MDN/Contribute/Howto/Tag_JavaScript_pages +original_slug: MDN/Contribute/guia/Tag_JavaScript_pages ---
    {{MDNSidebar}}

    O tagueamento consiste na adição de meta-informações para as páginas de modo que o conteúdo relacionado possa ser agrupado, como por exemplo em uma ferramenta de pesquisa.

    diff --git a/files/pt-br/orphaned/mdn/contribute/howto/write_an_article_to_help_learn_about_the_web/index.html b/files/pt-br/orphaned/mdn/contribute/howto/write_an_article_to_help_learn_about_the_web/index.html index 7754f741b6..6a8d7e9bb0 100644 --- a/files/pt-br/orphaned/mdn/contribute/howto/write_an_article_to_help_learn_about_the_web/index.html +++ b/files/pt-br/orphaned/mdn/contribute/howto/write_an_article_to_help_learn_about_the_web/index.html @@ -1,12 +1,13 @@ --- title: Como escrever um artigo para ajudar as pessoas aprender sobre a Web -slug: MDN/Contribute/guia/Escreva_um_artigo_para_ajudar_aprender_sobre_a_Web +slug: orphaned/MDN/Contribute/Howto/Write_an_article_to_help_learn_about_the_Web tags: - Guía - MDN Meta - aprendizado - como fazer translation_of: MDN/Contribute/Howto/Write_an_article_to_help_learn_about_the_Web +original_slug: MDN/Contribute/guia/Escreva_um_artigo_para_ajudar_aprender_sobre_a_Web ---
    {{MDNSidebar}}
    diff --git a/files/pt-br/orphaned/mdn/contribute/processes/cross-team_collaboration_tactics/index.html b/files/pt-br/orphaned/mdn/contribute/processes/cross-team_collaboration_tactics/index.html index 22b22715be..d87f3eacad 100644 --- a/files/pt-br/orphaned/mdn/contribute/processes/cross-team_collaboration_tactics/index.html +++ b/files/pt-br/orphaned/mdn/contribute/processes/cross-team_collaboration_tactics/index.html @@ -1,6 +1,6 @@ --- title: Táticas de colaboração intra equipe para documentação -slug: MDN/Contribute/Collaboration_tactics +slug: orphaned/MDN/Contribute/Processes/Cross-team_collaboration_tactics tags: - Documentação - Guia(2) @@ -8,6 +8,7 @@ tags: - MDN - Projeto MDC translation_of: MDN/Contribute/Processes/Cross-team_collaboration_tactics +original_slug: MDN/Contribute/Collaboration_tactics ---
    {{MDNSidebar}}
    diff --git a/files/pt-br/orphaned/mdn/dashboards/index.html b/files/pt-br/orphaned/mdn/dashboards/index.html index 0aab5076a9..ff496d8bbf 100644 --- a/files/pt-br/orphaned/mdn/dashboards/index.html +++ b/files/pt-br/orphaned/mdn/dashboards/index.html @@ -1,12 +1,13 @@ --- title: Painéis -slug: MDN/Paineis +slug: orphaned/MDN/Dashboards tags: - MDN Meta - Rascunho - Visão Geral - painéis translation_of: MDN/Dashboards +original_slug: MDN/Paineis ---
    {{MDNSidebar}}{{Draft}}
    diff --git a/files/pt-br/orphaned/mdn/editor/basics/index.html b/files/pt-br/orphaned/mdn/editor/basics/index.html index 5f06217a31..bc1805b308 100644 --- a/files/pt-br/orphaned/mdn/editor/basics/index.html +++ b/files/pt-br/orphaned/mdn/editor/basics/index.html @@ -1,7 +1,8 @@ --- title: Elementos de Interface do Editor -slug: MDN/Editor/Basics +slug: orphaned/MDN/Editor/Basics translation_of: MDN/Editor/Basics +original_slug: MDN/Editor/Basics ---
    {{MDNSidebar}}
    diff --git a/files/pt-br/orphaned/mdn/editor/index.html b/files/pt-br/orphaned/mdn/editor/index.html index 289d09b69f..dc516147af 100644 --- a/files/pt-br/orphaned/mdn/editor/index.html +++ b/files/pt-br/orphaned/mdn/editor/index.html @@ -1,7 +1,8 @@ --- title: Guia do editor MDN -slug: MDN/Editor +slug: orphaned/MDN/Editor translation_of: MDN/Editor +original_slug: MDN/Editor ---
    {{MDNSidebar}}

    O editor WYSIWYG (what-you-see-is-what-you-get) oferecido pela Mozilla Developer Network wiki torna fácil a contribuição de conteúdo novo. O guia de editor MDN fornece algumas informações sobre como usar o editor, assim como algumas informações sobre recursos úteis que podem melhorar sua produtividade. Por favor, certifique-se de ler (e está de acordo com) o Mozilla Terms antes de editar ou criar novas páginas.

    diff --git a/files/pt-br/orphaned/mdn/tools/page_regeneration/index.html b/files/pt-br/orphaned/mdn/tools/page_regeneration/index.html index 16808c9615..fed90e8565 100644 --- a/files/pt-br/orphaned/mdn/tools/page_regeneration/index.html +++ b/files/pt-br/orphaned/mdn/tools/page_regeneration/index.html @@ -1,12 +1,13 @@ --- title: Page regeneration -slug: MDN/Tools/Page_regeneration +slug: orphaned/MDN/Tools/Page_regeneration tags: - Ferramentas - Guia(2) - MDN Meta - Page-level translation_of: MDN/Tools/Page_regeneration +original_slug: MDN/Tools/Page_regeneration ---
    {{MDNSidebar}}

    O site da MDN cacheia as páginas para melhorar a performance. Como resultado, as mudanças que você salva nas páginas podem não aparecer imediatamente. Muitas vezes, mas nem sempre, o banner aparece na página indicando que uma atualização para aquela página está em progresso. Você pode fazer uma "atualização forçada" no seu navegador para recarregar a página do servidor, mas isso pode não ter efeito se a atualização no servidor não estiver completa.

    diff --git a/files/pt-br/orphaned/mozilla/add-ons/webextensions/temporary_installation_in_firefox/index.html b/files/pt-br/orphaned/mozilla/add-ons/webextensions/temporary_installation_in_firefox/index.html index 16e718fc9c..47eff12a4c 100644 --- a/files/pt-br/orphaned/mozilla/add-ons/webextensions/temporary_installation_in_firefox/index.html +++ b/files/pt-br/orphaned/mozilla/add-ons/webextensions/temporary_installation_in_firefox/index.html @@ -1,8 +1,9 @@ --- title: Empacotando e Instalando -slug: Mozilla/Add-ons/WebExtensions/Empacotando_e_instalando +slug: orphaned/Mozilla/Add-ons/WebExtensions/Temporary_Installation_in_Firefox translation_of: Mozilla/Add-ons/WebExtensions/Temporary_Installation_in_Firefox translation_of_original: Mozilla/Add-ons/WebExtensions/Packaging_and_installation +original_slug: Mozilla/Add-ons/WebExtensions/Empacotando_e_instalando ---

    Packaging your extension

    diff --git a/files/pt-br/orphaned/tools/add-ons/dom_inspector/index.html b/files/pt-br/orphaned/tools/add-ons/dom_inspector/index.html index 6e70f0a1f6..797450921e 100644 --- a/files/pt-br/orphaned/tools/add-ons/dom_inspector/index.html +++ b/files/pt-br/orphaned/tools/add-ons/dom_inspector/index.html @@ -1,9 +1,9 @@ --- title: DOM Inspector (Em Pt-Br) -slug: Tools/Add-ons/DOM_Inspector_Pt-Br +slug: orphaned/Tools/Add-ons/DOM_Inspector tags: - DOM - - 'DOM:Tools' + - DOM:Tools - DOM_Inspector - DOM_PT-BR - Extensions @@ -14,10 +14,11 @@ tags: - Web - Web Developer - XUL - - 'XUL:Tools' + - XUL:Tools - dev - xu translation_of: Tools/Add-ons/DOM_Inspector +original_slug: Tools/Add-ons/DOM_Inspector_Pt-Br ---
    {{ToolsSidebar}}

    O DOM Inspector (também conhecido como DOMi) é uma ferramenta de desennvolvimento usada para inspecionar, browse, e editar o DOM (Document Object Model) de documentos - usando páginas da web ou windows XUL . A hierarquia do DOM pode ser navegada usando dois paíneis (two-paned) janela que permite uma variedade de pontos de vista diferentes sobre o documento e todos os nós dentro.

    diff --git a/files/pt-br/orphaned/tools/add-ons/index.html b/files/pt-br/orphaned/tools/add-ons/index.html index 97b6d72ed1..095399ef16 100644 --- a/files/pt-br/orphaned/tools/add-ons/index.html +++ b/files/pt-br/orphaned/tools/add-ons/index.html @@ -1,12 +1,13 @@ --- title: Add-ons -slug: Tools/Add-ons +slug: orphaned/Tools/Add-ons tags: - Add-ons - Monitor de WebSocket - Mozilla - dev translation_of: Tools/Add-ons +original_slug: Tools/Add-ons ---
    {{ToolsSidebar}}

    Ferramenta de desenvolvimento não incorporados ao Firefox, mas envia complementos separados (Add-ons).

    diff --git a/files/pt-br/orphaned/tools/css_coverage/index.html b/files/pt-br/orphaned/tools/css_coverage/index.html index 31d1c8be34..e23e49f7f1 100644 --- a/files/pt-br/orphaned/tools/css_coverage/index.html +++ b/files/pt-br/orphaned/tools/css_coverage/index.html @@ -1,10 +1,11 @@ --- title: CSS Coverage -slug: Tools/CSS_Coverage +slug: orphaned/Tools/CSS_Coverage tags: - CSS - cobertura CSS translation_of: Tools/CSS_Coverage +original_slug: Tools/CSS_Coverage ---
    {{ToolsSidebar}}

    Este componente é experimental e não está ainda avaliado no Firefox

    diff --git a/files/pt-br/orphaned/tools/debugger_(before_firefox_52)/disable_breakpoints/index.html b/files/pt-br/orphaned/tools/debugger_(before_firefox_52)/disable_breakpoints/index.html index a4e9aa924c..d3a58117d7 100644 --- a/files/pt-br/orphaned/tools/debugger_(before_firefox_52)/disable_breakpoints/index.html +++ b/files/pt-br/orphaned/tools/debugger_(before_firefox_52)/disable_breakpoints/index.html @@ -1,10 +1,11 @@ --- title: Desabilitar breakpoints -slug: Tools/Debugger_(before_Firefox_52)/Disable_breakpoints +slug: orphaned/Tools/Debugger_(before_Firefox_52)/Disable_breakpoints tags: - breakpoint - breakpoints translation_of: Tools/Debugger_(before_Firefox_52)/Disable_breakpoints +original_slug: Tools/Debugger_(before_Firefox_52)/Disable_breakpoints ---
    {{ToolsSidebar}}

    Para desabilitar um breakpoint, desmarqueo check box próximo ao breakpoint's entrada no Source list pane:

    diff --git a/files/pt-br/orphaned/tools/debugger_(before_firefox_52)/index.html b/files/pt-br/orphaned/tools/debugger_(before_firefox_52)/index.html index 7d06312bdc..bd8046254a 100644 --- a/files/pt-br/orphaned/tools/debugger_(before_firefox_52)/index.html +++ b/files/pt-br/orphaned/tools/debugger_(before_firefox_52)/index.html @@ -1,10 +1,11 @@ --- title: Debugger (before Firefox 52) -slug: Tools/Debugger_(before_Firefox_52) +slug: orphaned/Tools/Debugger_(before_Firefox_52) tags: - NeedsTranslation - TopicStub translation_of: Tools/Debugger_(before_Firefox_52) +original_slug: Tools/Debugger_(before_Firefox_52) ---
    {{ToolsSidebar}}

    This page describes the JavaScript Debugger as it appears before Firefox 52.

    diff --git a/files/pt-br/orphaned/web/accessibility/jaws_issues_with_firefox/index.html b/files/pt-br/orphaned/web/accessibility/jaws_issues_with_firefox/index.html index 65fe989377..40fc26b856 100644 --- a/files/pt-br/orphaned/web/accessibility/jaws_issues_with_firefox/index.html +++ b/files/pt-br/orphaned/web/accessibility/jaws_issues_with_firefox/index.html @@ -1,10 +1,11 @@ --- title: Problemas com JAWS no Firefox -slug: Web/Acessibilidade/Problemas_com_JAWS_no_Firefox +slug: orphaned/Web/Accessibility/JAWS_Issues_with_Firefox tags: - Acessibilidade - Obsolento translation_of: Web/Accessibility/JAWS_Issues_with_Firefox +original_slug: Web/Acessibilidade/Problemas_com_JAWS_no_Firefox ---

    Problemas JAWS Firefox conhecidos

    diff --git "a/files/pt-br/orphaned/web/api/node/entendendo_o_uso_do_m\303\251todo_appendchild-javascript/index.html" "b/files/pt-br/orphaned/web/api/node/entendendo_o_uso_do_m\303\251todo_appendchild-javascript/index.html" index a05abeae88..a068a36455 100644 --- "a/files/pt-br/orphaned/web/api/node/entendendo_o_uso_do_m\303\251todo_appendchild-javascript/index.html" +++ "b/files/pt-br/orphaned/web/api/node/entendendo_o_uso_do_m\303\251todo_appendchild-javascript/index.html" @@ -1,6 +1,7 @@ --- title: Entendendo o uso do método appendChild em javascript -slug: Web/API/Node/Entendendo_o_uso_do_método_AppendChild-javascript +slug: orphaned/Web/API/Node/Entendendo_o_uso_do_método_AppendChild-javascript +original_slug: Web/API/Node/Entendendo_o_uso_do_método_AppendChild-javascript ---
    {{ApiRef("DOM")}}
    diff --git "a/files/pt-br/orphaned/web/guide/css/css_media_queries_(consultas_de_m\303\255dia_em_css)/index.html" "b/files/pt-br/orphaned/web/guide/css/css_media_queries_(consultas_de_m\303\255dia_em_css)/index.html" index c2f5f9f4ce..ac24931ebe 100644 --- "a/files/pt-br/orphaned/web/guide/css/css_media_queries_(consultas_de_m\303\255dia_em_css)/index.html" +++ "b/files/pt-br/orphaned/web/guide/css/css_media_queries_(consultas_de_m\303\255dia_em_css)/index.html" @@ -1,11 +1,12 @@ --- title: Usando CSS media queries (consultas de mídia em CSS) -slug: Web/Guide/CSS/CSS_media_queries_(consultas_de_mídia_em_CSS) +slug: orphaned/Web/Guide/CSS/CSS_media_queries_(consultas_de_mídia_em_CSS) tags: - CSS - Guía - Iniciante - media query +original_slug: Web/Guide/CSS/CSS_media_queries_(consultas_de_mídia_em_CSS) ---

    Uma media query (consulta de mídia) consiste de um tipo de mídia e de, ao menos, uma expressão que restringe o escopo dos estilos CSS pelo uso de propriedades de mídia, como width (largura), height (altura) e color (cor). Media queries, incluídas na especificação CSS3, permitem que a apresentação do conteúdo se adapte a uma variedade de dispositivos de exibição sem a necessidade de mudar o próprio conteúdo.

    diff --git a/files/pt-br/orphaned/web/html/element/command/index.html b/files/pt-br/orphaned/web/html/element/command/index.html index 99a42fb9db..849232e71d 100644 --- a/files/pt-br/orphaned/web/html/element/command/index.html +++ b/files/pt-br/orphaned/web/html/element/command/index.html @@ -1,7 +1,8 @@ --- title: command -slug: Web/HTML/Element/command +slug: orphaned/Web/HTML/Element/command translation_of: Web/HTML/Element/command +original_slug: Web/HTML/Element/command ---

    Sumário

    diff --git a/files/pt-br/orphaned/web/html/favicon/index.html b/files/pt-br/orphaned/web/html/favicon/index.html index 6b3bef6490..019f336089 100644 --- a/files/pt-br/orphaned/web/html/favicon/index.html +++ b/files/pt-br/orphaned/web/html/favicon/index.html @@ -1,6 +1,7 @@ --- title: favicon -slug: Web/HTML/favicon +slug: orphaned/Web/HTML/favicon +original_slug: Web/HTML/favicon ---

     

    diff --git "a/files/pt-br/orphaned/web/javascript/guide/cole\303\247\303\265es_chaveadas/index.html" "b/files/pt-br/orphaned/web/javascript/guide/cole\303\247\303\265es_chaveadas/index.html" index cb626865f8..0328d76216 100644 --- "a/files/pt-br/orphaned/web/javascript/guide/cole\303\247\303\265es_chaveadas/index.html" +++ "b/files/pt-br/orphaned/web/javascript/guide/cole\303\247\303\265es_chaveadas/index.html" @@ -1,11 +1,12 @@ --- title: Coleções chaveadas -slug: Web/JavaScript/Guide/Coleções_chaveadas +slug: orphaned/Web/JavaScript/Guide/Coleções_chaveadas tags: - Coleções - Guía - JavaScript - Mapas +original_slug: Web/JavaScript/Guide/Coleções_chaveadas ---
    {{jsSidebar("JavaScript Guide")}} {{PreviousNext("Web/JavaScript/Guide/Indexed_Collections", "Web/JavaScript/Guide/Working_with_Objects")}}
    diff --git a/files/pt-br/orphaned/web/javascript/guide/sintaxe_e_tipos/index.html b/files/pt-br/orphaned/web/javascript/guide/sintaxe_e_tipos/index.html index 953a9543de..2bf5fe39b9 100644 --- a/files/pt-br/orphaned/web/javascript/guide/sintaxe_e_tipos/index.html +++ b/files/pt-br/orphaned/web/javascript/guide/sintaxe_e_tipos/index.html @@ -1,6 +1,7 @@ --- title: Sintaxe e tipos -slug: Web/JavaScript/Guide/Sintaxe_e_tipos +slug: orphaned/Web/JavaScript/Guide/Sintaxe_e_tipos +original_slug: Web/JavaScript/Guide/Sintaxe_e_tipos ---
    {{jsSidebar("JavaScript Guide")}} {{PreviousNext("Web/JavaScript/Guide/Introduction", "Web/JavaScript/Guide/Control_flow_and_error_handling")}}
    diff --git a/files/pt-br/orphaned/web/javascript/reference/global_objects/array/prototype/index.html b/files/pt-br/orphaned/web/javascript/reference/global_objects/array/prototype/index.html index e863d9cc69..e7084dd594 100644 --- a/files/pt-br/orphaned/web/javascript/reference/global_objects/array/prototype/index.html +++ b/files/pt-br/orphaned/web/javascript/reference/global_objects/array/prototype/index.html @@ -1,11 +1,12 @@ --- title: Array.prototype -slug: Web/JavaScript/Reference/Global_Objects/Array/prototype +slug: orphaned/Web/JavaScript/Reference/Global_Objects/Array/prototype tags: - Array - JavaScript - Propriedade translation_of: Web/JavaScript/Reference/Global_Objects/Array/prototype +original_slug: Web/JavaScript/Reference/Global_Objects/Array/prototype ---
    {{JSRef}}
    diff --git a/files/pt-br/orphaned/web/javascript/reference/global_objects/bigint/prototype/index.html b/files/pt-br/orphaned/web/javascript/reference/global_objects/bigint/prototype/index.html index ff8de05541..504938e9f0 100644 --- a/files/pt-br/orphaned/web/javascript/reference/global_objects/bigint/prototype/index.html +++ b/files/pt-br/orphaned/web/javascript/reference/global_objects/bigint/prototype/index.html @@ -1,6 +1,6 @@ --- title: BigInt.prototype -slug: Web/JavaScript/Reference/Global_Objects/BigInt/prototype +slug: orphaned/Web/JavaScript/Reference/Global_Objects/BigInt/prototype tags: - BigInt - JavaScript @@ -8,6 +8,7 @@ tags: - Prototipo - Referencia translation_of: Web/JavaScript/Reference/Global_Objects/BigInt/prototype +original_slug: Web/JavaScript/Reference/Global_Objects/BigInt/prototype ---
    {{JSRef}}
    diff --git a/files/pt-br/orphaned/web/security/information_security_basics/index.html b/files/pt-br/orphaned/web/security/information_security_basics/index.html index 9508b0afdb..99607e0201 100644 --- a/files/pt-br/orphaned/web/security/information_security_basics/index.html +++ b/files/pt-br/orphaned/web/security/information_security_basics/index.html @@ -1,10 +1,11 @@ --- title: Básico de Segurança da Informação -slug: Web/Security/Básico_de_Segurança_da_Informação +slug: orphaned/Web/Security/Information_Security_Basics tags: - Iniciante - Segurança translation_of: Web/Security/Information_Security_Basics +original_slug: Web/Security/Básico_de_Segurança_da_Informação ---

    Entender o básico de segurança da informação pode ajudar você a evitar que seu software ou website estejam inseguros e vulneráveis a fraquezas que podem ser exploradas para ganhos financeiros ou outros motivos maliciosos. Estes artigos podem ajudar você a aprender o que você precisa. Com essa informação, você estará ciente do papel e importância da segurança no ciclo de desenvolvimento de software, além da distribuição do seu conteúdo.

    diff --git a/files/pt-br/tools/debugger/how_to/set_watch_expressions/index.html b/files/pt-br/tools/debugger/how_to/set_watch_expressions/index.html index 232074130f..d2908b2b6d 100644 --- a/files/pt-br/tools/debugger/how_to/set_watch_expressions/index.html +++ b/files/pt-br/tools/debugger/how_to/set_watch_expressions/index.html @@ -1,13 +1,14 @@ --- -title: 'Examine, modify, and watch variables' -slug: 'Tools/Debugger/How_to/Examine,_modify,_and_watch_variables' +title: Examine, modify, and watch variables +slug: Tools/Debugger/How_to/Set_Watch_Expressions tags: - expressão de observação - variáveis watch - watch expression - watch variables translation_of: Tools/Debugger/How_to/Set_Watch_Expressions -translation_of_original: 'Tools/Debugger/How_to/Examine,_modify,_and_watch_variables' +translation_of_original: Tools/Debugger/How_to/Examine,_modify,_and_watch_variables +original_slug: Tools/Debugger/How_to/Examine,_modify,_and_watch_variables ---
    {{ToolsSidebar}}

    Este componente não está ainda suportado no novo debugger. Se você precisar disto, você pode, por agora, voltar para o velho debugger para visitá-lo no about:config e configula-lo no "devtool.debugger.new-debugger-frontend" preferência para falso.

    diff --git a/files/pt-br/tools/debugger/index.html b/files/pt-br/tools/debugger/index.html index 225f4cb20a..88a7af5785 100644 --- a/files/pt-br/tools/debugger/index.html +++ b/files/pt-br/tools/debugger/index.html @@ -1,7 +1,8 @@ --- title: Depurador -slug: Tools/Depurador +slug: Tools/Debugger translation_of: Tools/Debugger +original_slug: Tools/Depurador ---
    {{ToolsSidebar}}
    diff --git a/files/pt-br/tools/debugger/set_a_logpoint/index.html b/files/pt-br/tools/debugger/set_a_logpoint/index.html index 0a9b75f07d..8e39e89c73 100644 --- a/files/pt-br/tools/debugger/set_a_logpoint/index.html +++ b/files/pt-br/tools/debugger/set_a_logpoint/index.html @@ -1,7 +1,8 @@ --- title: Set a logpoint -slug: Tools/Depurador/Set_a_logpoint +slug: Tools/Debugger/Set_a_logpoint translation_of: Tools/Debugger/Set_a_logpoint +original_slug: Tools/Depurador/Set_a_logpoint ---

    {{ToolsSidebar}}

    diff --git a/files/pt-br/tools/firefox_os_1.1_simulator/index.html b/files/pt-br/tools/firefox_os_1.1_simulator/index.html index 8b710a1cea..7709cc565b 100644 --- a/files/pt-br/tools/firefox_os_1.1_simulator/index.html +++ b/files/pt-br/tools/firefox_os_1.1_simulator/index.html @@ -1,12 +1,13 @@ --- title: Simulador Firefox OS 1.1 -slug: Tools/Simulador_Firefox_OS_1.1 +slug: Tools/Firefox_OS_1.1_Simulator tags: - Ferramentas - Firefox OS - Guia(2) - Guía translation_of: Tools/Firefox_OS_1.1_Simulator +original_slug: Tools/Simulador_Firefox_OS_1.1 ---
    {{ToolsSidebar}}
    diff --git a/files/pt-br/tools/measure_a_portion_of_the_page/index.html b/files/pt-br/tools/measure_a_portion_of_the_page/index.html index 005813bc8f..e62a2a97fa 100644 --- a/files/pt-br/tools/measure_a_portion_of_the_page/index.html +++ b/files/pt-br/tools/measure_a_portion_of_the_page/index.html @@ -1,6 +1,6 @@ --- title: Medir uma porção da página -slug: Tools/Medir_uma_porcao_da_pagina +slug: Tools/Measure_a_portion_of_the_page tags: - DevTools - Exibir coordenadas @@ -9,6 +9,7 @@ tags: - ferramentas do desenvolvedor - régua translation_of: Tools/Measure_a_portion_of_the_page +original_slug: Tools/Medir_uma_porcao_da_pagina ---
    {{ToolsSidebar}}
    diff --git a/files/pt-br/tools/page_inspector/how_to/examine_event_listeners/index.html b/files/pt-br/tools/page_inspector/how_to/examine_event_listeners/index.html index b1c8414a5b..34bcca189b 100644 --- a/files/pt-br/tools/page_inspector/how_to/examine_event_listeners/index.html +++ b/files/pt-br/tools/page_inspector/how_to/examine_event_listeners/index.html @@ -1,7 +1,8 @@ --- title: Examinando Eventos de Escuta -slug: Tools/Page_Inspector/How_to/Examinando_eventos_escuta +slug: Tools/Page_Inspector/How_to/Examine_event_listeners translation_of: Tools/Page_Inspector/How_to/Examine_event_listeners +original_slug: Tools/Page_Inspector/How_to/Examinando_eventos_escuta ---
    {{ToolsSidebar}}

    No Firefox 33 você verá um ícone "ev" no HTML Pane, próximo a elementos que tem eventos de escuta como mostra a figura abaixo:

    diff --git a/files/pt-br/tools/page_inspector/how_to/work_with_animations/index.html b/files/pt-br/tools/page_inspector/how_to/work_with_animations/index.html index 8d2d788d50..ec75510240 100644 --- a/files/pt-br/tools/page_inspector/how_to/work_with_animations/index.html +++ b/files/pt-br/tools/page_inspector/how_to/work_with_animations/index.html @@ -1,7 +1,8 @@ --- title: Trabalho Com Animações -slug: Tools/Page_Inspector/How_to/Trabalho_Com_Animaçoes +slug: Tools/Page_Inspector/How_to/Work_with_animations translation_of: Tools/Page_Inspector/How_to/Work_with_animations +original_slug: Tools/Page_Inspector/How_to/Trabalho_Com_Animaçoes ---
    {{ToolsSidebar}}

    This article covers three tools you can use to visualize and edit animations:

    diff --git a/files/pt-br/tools/performance/index.html b/files/pt-br/tools/performance/index.html index 880187e7e2..74a84f6a60 100644 --- a/files/pt-br/tools/performance/index.html +++ b/files/pt-br/tools/performance/index.html @@ -1,7 +1,8 @@ --- title: Performance -slug: Tools/atuação +slug: Tools/Performance translation_of: Tools/Performance +original_slug: Tools/atuação ---
    {{ToolsSidebar}}

    Esta ferramenta é nova no Firefox 34.

    diff --git a/files/pt-br/tools/remote_debugging/index.html b/files/pt-br/tools/remote_debugging/index.html index 6359eededd..d4676f103a 100644 --- a/files/pt-br/tools/remote_debugging/index.html +++ b/files/pt-br/tools/remote_debugging/index.html @@ -1,7 +1,8 @@ --- title: Depuração Remota -slug: Tools/Depuração_Remota +slug: Tools/Remote_Debugging translation_of: Tools/Remote_Debugging +original_slug: Tools/Depuração_Remota ---
    {{ToolsSidebar}}

    Você pode usar as ferramentas de desenvolvedor do Firefox, no seu desktop, para depurar remotamente o código em execução: em um processo diferente no mesmo dispositivo, ou em um dispositivo completamente diferente. Para fazer isso, use o Firefox para atribuir a Caixa de Ferramentas ao processo remoto, e, então, a Caixa de Ferramentas será iniciada em sua própria janela. Neste momento terão as seguintes ferramentas de suporte à depuração remota:

    diff --git a/files/pt-br/tools/responsive_design_mode/index.html b/files/pt-br/tools/responsive_design_mode/index.html index a5b6935fd3..08c8cea373 100644 --- a/files/pt-br/tools/responsive_design_mode/index.html +++ b/files/pt-br/tools/responsive_design_mode/index.html @@ -1,6 +1,6 @@ --- title: Modo Design Adaptável -slug: Tools/Modo_Design_Adaptavel +slug: Tools/Responsive_Design_Mode tags: - Desenvolvimento Web - Design @@ -12,10 +12,11 @@ tags: - Guia(2) - Guide - Guía - - 'I10n:priority' + - I10n:priority - Responsive Design - Tools translation_of: Tools/Responsive_Design_Mode +original_slug: Tools/Modo_Design_Adaptavel ---
    {{ToolsSidebar}}
    diff --git a/files/pt-br/tools/storage_inspector/index.html b/files/pt-br/tools/storage_inspector/index.html index 82215530a4..74ddb9588a 100644 --- a/files/pt-br/tools/storage_inspector/index.html +++ b/files/pt-br/tools/storage_inspector/index.html @@ -1,6 +1,6 @@ --- title: Inspetor de Armazenamento -slug: Tools/Inspetor_de_Armazenamento +slug: Tools/Storage_Inspector tags: - Armazenamento - Armazenamento Local @@ -11,6 +11,7 @@ tags: - inspetor de armazenamento - seção translation_of: Tools/Storage_Inspector +original_slug: Tools/Inspetor_de_Armazenamento ---
    {{ToolsSidebar}}
    diff --git a/files/pt-br/tools/style_editor/index.html b/files/pt-br/tools/style_editor/index.html index 903428edc7..4e797bb873 100644 --- a/files/pt-br/tools/style_editor/index.html +++ b/files/pt-br/tools/style_editor/index.html @@ -1,7 +1,8 @@ --- title: Editor de Estilos -slug: Tools/Editor_de_Estilos +slug: Tools/Style_Editor translation_of: Tools/Style_Editor +original_slug: Tools/Editor_de_Estilos ---
    {{ToolsSidebar}}

    O Editor de Estilos permite que você:

    diff --git a/files/pt-br/tools/web_console/ui_tour/index.html b/files/pt-br/tools/web_console/ui_tour/index.html index ae0c05f78e..22f39124d7 100644 --- a/files/pt-br/tools/web_console/ui_tour/index.html +++ b/files/pt-br/tools/web_console/ui_tour/index.html @@ -1,12 +1,13 @@ --- title: Abrindo o Web Console -slug: Tools/Web_Console/Opening_the_Web_Console +slug: Tools/Web_Console/UI_Tour tags: - Ferramentas - Navegador - console - web console translation_of: Tools/Web_Console/UI_Tour +original_slug: Tools/Web_Console/Opening_the_Web_Console ---
    {{ToolsSidebar}}
    diff --git a/files/pt-br/web/accessibility/an_overview_of_accessible_web_applications_and_widgets/index.html b/files/pt-br/web/accessibility/an_overview_of_accessible_web_applications_and_widgets/index.html index df43b575a6..da197714e9 100644 --- a/files/pt-br/web/accessibility/an_overview_of_accessible_web_applications_and_widgets/index.html +++ b/files/pt-br/web/accessibility/an_overview_of_accessible_web_applications_and_widgets/index.html @@ -1,6 +1,6 @@ --- title: Visão geral da acessibilidade nas aplicações web e widgets -slug: Web/Acessibilidade/An_overview_of_accessible_web_applications_and_widgets +slug: Web/Accessibility/An_overview_of_accessible_web_applications_and_widgets tags: - ARIA - Accessibility @@ -14,6 +14,7 @@ tags: - WAI-ARA - Widgets translation_of: Web/Accessibility/An_overview_of_accessible_web_applications_and_widgets +original_slug: Web/Acessibilidade/An_overview_of_accessible_web_applications_and_widgets ---

    A Rede Mundial está mudando. Estatísticamente, os sítios baseados em páginas estão, cada vez mais, sendo repostos por aplicações dinâmicas, em estilo Ambiente, que fazem uso intenso de JavaScript e AJAX. Estilistas estão criando novos widgets e controles inteiramente com a combinação de JavaScript, HTML e CSS. Este salto tem o potencial de aperfeiçoar, dramaticamente, a capacidade de resposta e a usabilidade da Rede, mas milhares de utilizadores estão sob o risco de exclusão, devido a algumas lacunas na acessibilidade. A JavaScript tem, tradicionalmente, tido a reputação de ser inviável para quem usa tecnologias assistivas, como leitores de tela mas, agora, existem maneiras de criar interfaces de utilização dinâmicas acessíveis a uma ampla variedade de pessoas.

    diff --git a/files/pt-br/web/accessibility/aria/aria_screen_reader_implementors_guide/index.html b/files/pt-br/web/accessibility/aria/aria_screen_reader_implementors_guide/index.html index 73b9605ef1..f0d4d3202f 100644 --- a/files/pt-br/web/accessibility/aria/aria_screen_reader_implementors_guide/index.html +++ b/files/pt-br/web/accessibility/aria/aria_screen_reader_implementors_guide/index.html @@ -1,10 +1,11 @@ --- title: Guia para implementar o leitor de tela ARIA -slug: Web/Accessibility/ARIA/Guia_para_implementar_o_leitor_de_tela_ARIA +slug: Web/Accessibility/ARIA/ARIA_Screen_Reader_Implementors_Guide tags: - ARIA - Acessibilidade translation_of: Web/Accessibility/ARIA/ARIA_Screen_Reader_Implementors_Guide +original_slug: Web/Accessibility/ARIA/Guia_para_implementar_o_leitor_de_tela_ARIA ---

    Regiões Ativas

    diff --git a/files/pt-br/web/accessibility/aria/aria_techniques/using_the_alert_role/index.html b/files/pt-br/web/accessibility/aria/aria_techniques/using_the_alert_role/index.html index 25d3222fcd..3a87a7fc72 100644 --- a/files/pt-br/web/accessibility/aria/aria_techniques/using_the_alert_role/index.html +++ b/files/pt-br/web/accessibility/aria/aria_techniques/using_the_alert_role/index.html @@ -1,6 +1,6 @@ --- title: Utilizando a função "alerta" -slug: Web/Accessibility/ARIA/ARIA_Techniques/Utilizando_o_alert_role +slug: Web/Accessibility/ARIA/ARIA_Techniques/Using_the_alert_role tags: - ARIA - Accessibility @@ -18,6 +18,7 @@ tags: - wcag1.2.1 - wcag3.3.1 translation_of: Web/Accessibility/ARIA/ARIA_Techniques/Using_the_alert_role +original_slug: Web/Accessibility/ARIA/ARIA_Techniques/Utilizando_o_alert_role ---

    Descrição

    diff --git a/files/pt-br/web/accessibility/aria/aria_techniques/using_the_aria-labelledby_attribute/index.html b/files/pt-br/web/accessibility/aria/aria_techniques/using_the_aria-labelledby_attribute/index.html index cd7cb90bb9..bfed81d160 100644 --- a/files/pt-br/web/accessibility/aria/aria_techniques/using_the_aria-labelledby_attribute/index.html +++ b/files/pt-br/web/accessibility/aria/aria_techniques/using_the_aria-labelledby_attribute/index.html @@ -1,11 +1,12 @@ --- title: Usando o atributo aria-labelledby -slug: Web/Accessibility/ARIA/ARIA_Techniques/Usando_o_atributo_aria-labelledby +slug: Web/Accessibility/ARIA/ARIA_Techniques/Using_the_aria-labelledby_attribute tags: - ARIA - Acessibilidade - PrecisaDeConteúdo translation_of: Web/Accessibility/ARIA/ARIA_Techniques/Using_the_aria-labelledby_attribute +original_slug: Web/Accessibility/ARIA/ARIA_Techniques/Usando_o_atributo_aria-labelledby ---

    Descrição

    diff --git a/files/pt-br/web/accessibility/aria/aria_techniques/using_the_aria-required_attribute/index.html b/files/pt-br/web/accessibility/aria/aria_techniques/using_the_aria-required_attribute/index.html index e93611b182..666dcbb418 100644 --- a/files/pt-br/web/accessibility/aria/aria_techniques/using_the_aria-required_attribute/index.html +++ b/files/pt-br/web/accessibility/aria/aria_techniques/using_the_aria-required_attribute/index.html @@ -1,10 +1,11 @@ --- title: Usando o atributo aria-required -slug: Web/Accessibility/ARIA/ARIA_Techniques/Usando_o_atributo_aria-required +slug: Web/Accessibility/ARIA/ARIA_Techniques/Using_the_aria-required_attribute tags: - ARIA - Acessibilidade translation_of: Web/Accessibility/ARIA/ARIA_Techniques/Using_the_aria-required_attribute +original_slug: Web/Accessibility/ARIA/ARIA_Techniques/Usando_o_atributo_aria-required ---
    diff --git a/files/pt-br/web/accessibility/aria/aria_techniques/using_the_slider_role/index.html b/files/pt-br/web/accessibility/aria/aria_techniques/using_the_slider_role/index.html index 18532f5f25..43ded9c152 100644 --- a/files/pt-br/web/accessibility/aria/aria_techniques/using_the_slider_role/index.html +++ b/files/pt-br/web/accessibility/aria/aria_techniques/using_the_slider_role/index.html @@ -1,7 +1,8 @@ --- title: Usando o slider role -slug: Web/Accessibility/ARIA/ARIA_Techniques/Usando_o_slider_role +slug: Web/Accessibility/ARIA/ARIA_Techniques/Using_the_slider_role translation_of: Web/Accessibility/ARIA/ARIA_Techniques/Using_the_slider_role +original_slug: Web/Accessibility/ARIA/ARIA_Techniques/Usando_o_slider_role ---

    Descrição

    diff --git a/files/pt-br/web/accessibility/aria/forms/basic_form_hints/index.html b/files/pt-br/web/accessibility/aria/forms/basic_form_hints/index.html index 722c60d420..ac3f88e18b 100644 --- a/files/pt-br/web/accessibility/aria/forms/basic_form_hints/index.html +++ b/files/pt-br/web/accessibility/aria/forms/basic_form_hints/index.html @@ -1,7 +1,8 @@ --- title: Dicas básicas de form -slug: Web/Accessibility/ARIA/forms/Dicas_básicas_de_form +slug: Web/Accessibility/ARIA/forms/Basic_form_hints translation_of: Web/Accessibility/ARIA/forms/Basic_form_hints +original_slug: Web/Accessibility/ARIA/forms/Dicas_básicas_de_form ---

    Form labels

    diff --git a/files/pt-br/web/accessibility/aria/widgets/overview/index.html b/files/pt-br/web/accessibility/aria/widgets/overview/index.html index 6e8cb06ae2..529e77dd5f 100644 --- a/files/pt-br/web/accessibility/aria/widgets/overview/index.html +++ b/files/pt-br/web/accessibility/aria/widgets/overview/index.html @@ -1,12 +1,13 @@ --- title: Visão geral -slug: Web/Accessibility/ARIA/widgets/Visão_geral +slug: Web/Accessibility/ARIA/widgets/overview tags: - Acessibilidade - JavaScript - Landing - PrecisaAtualizar translation_of: Web/Accessibility/ARIA/widgets/overview +original_slug: Web/Accessibility/ARIA/widgets/Visão_geral ---
    Aviso: precisa de atualização
    diff --git a/files/pt-br/web/accessibility/index.html b/files/pt-br/web/accessibility/index.html index b494b06163..41b6f337fc 100644 --- a/files/pt-br/web/accessibility/index.html +++ b/files/pt-br/web/accessibility/index.html @@ -1,6 +1,6 @@ --- title: Acessibilidade -slug: Web/Acessibilidade +slug: Web/Accessibility tags: - ARIA - Acessibilidade @@ -8,6 +8,7 @@ tags: - Desenvolvimento Web - TA - Tecnologias Assistivas translation_of: Web/Accessibility +original_slug: Web/Acessibilidade ---

    Acessiblidade no desenvolvimento Web significa permitir que o máximo possível de pessoas possa acessar os sites da web mesmo quando suas habilidades são limitadas de alguma forma. Aqui nós fornecemos informações sobre o desenvolvimento de conteúdo acessível.

    diff --git a/files/pt-br/web/accessibility/mobile_accessibility_checklist/index.html b/files/pt-br/web/accessibility/mobile_accessibility_checklist/index.html index 29d407c175..ab3ca9fec9 100644 --- a/files/pt-br/web/accessibility/mobile_accessibility_checklist/index.html +++ b/files/pt-br/web/accessibility/mobile_accessibility_checklist/index.html @@ -1,12 +1,13 @@ --- title: Acessibilidade para plataforma móvel -slug: Web/Acessibilidade/Accessibilidade_para_plataforma_movel +slug: Web/Accessibility/Mobile_accessibility_checklist tags: - Acessibilidade - Firefox OS - Guías - Móveis translation_of: Web/Accessibility/Mobile_accessibility_checklist +original_slug: Web/Acessibilidade/Accessibilidade_para_plataforma_movel ---

    Este documento contém uma lista concisa de requisitos para desenvolvedores de aplicativos móveis. Tem como intenção evoluir continuamente conforme forem aparecendo outros padrões.

    diff --git a/files/pt-br/web/accessibility/understanding_wcag/index.html b/files/pt-br/web/accessibility/understanding_wcag/index.html index 392c1008b7..fe54b3f7ef 100644 --- a/files/pt-br/web/accessibility/understanding_wcag/index.html +++ b/files/pt-br/web/accessibility/understanding_wcag/index.html @@ -1,10 +1,11 @@ --- title: Entendendo as Diretrizes de Acessibilidade do Conteúdo Web -slug: Web/Acessibilidade/Entendendo_WCAG +slug: Web/Accessibility/Understanding_WCAG tags: - WCAG - Web Content Accessibility Guidelines translation_of: Web/Accessibility/Understanding_WCAG +original_slug: Web/Acessibilidade/Entendendo_WCAG ---

    Este conjunto de artigos fornece explicações rápidas para ajudá-lo a entender as etapas que devem ser seguidas para estar em conformidade com as recomendações descritas nas Diretrizes de Acessibilidade para Conteúdo Web 2.0 ou 2.1 do W3C (ou apenas WCAG, para as finalidades deste artigo).

    diff --git a/files/pt-br/web/accessibility/understanding_wcag/keyboard/index.html b/files/pt-br/web/accessibility/understanding_wcag/keyboard/index.html index 905c6d062f..a18c118f9b 100644 --- a/files/pt-br/web/accessibility/understanding_wcag/keyboard/index.html +++ b/files/pt-br/web/accessibility/understanding_wcag/keyboard/index.html @@ -1,7 +1,8 @@ --- title: Keyboard -slug: Web/Acessibilidade/Entendendo_WCAG/Keyboard +slug: Web/Accessibility/Understanding_WCAG/Keyboard translation_of: Web/Accessibility/Understanding_WCAG/Keyboard +original_slug: Web/Acessibilidade/Entendendo_WCAG/Keyboard ---
    To be fully accessible, a web page must be operable by someone using only a keyboard to access and control it. This includes users of screen readers, but can also include users who have trouble operating a pointing device such as a mouse or trackball, or whose mouse is not working at the moment, or who simply prefer to use a keyboard for input whenever possible.
    diff --git a/files/pt-br/web/api/baseaudiocontext/currenttime/index.html b/files/pt-br/web/api/baseaudiocontext/currenttime/index.html index 71f3c9c894..8124041332 100644 --- a/files/pt-br/web/api/baseaudiocontext/currenttime/index.html +++ b/files/pt-br/web/api/baseaudiocontext/currenttime/index.html @@ -1,6 +1,6 @@ --- title: AudioContext.currentTime -slug: Web/API/AudioContext/currentTime +slug: Web/API/BaseAudioContext/currentTime tags: - API - AudioContext @@ -9,6 +9,7 @@ tags: - Web Audio API - currentTime translation_of: Web/API/BaseAudioContext/currentTime +original_slug: Web/API/AudioContext/currentTime ---

    {{ APIRef("Web Audio API") }}

    diff --git a/files/pt-br/web/api/battery_status_api/index.html b/files/pt-br/web/api/battery_status_api/index.html index 603750f72c..82a786cdef 100644 --- a/files/pt-br/web/api/battery_status_api/index.html +++ b/files/pt-br/web/api/battery_status_api/index.html @@ -1,6 +1,6 @@ --- title: Battery Status API -slug: WebAPI/Battery_Status +slug: Web/API/Battery_Status_API tags: - API - Apps @@ -11,6 +11,7 @@ tags: - Mobile - Obsoleto translation_of: Web/API/Battery_Status_API +original_slug: WebAPI/Battery_Status ---
    {{obsolete_header}}
    diff --git a/files/pt-br/web/api/batterymanager/ondischargingtimechange/index.html b/files/pt-br/web/api/batterymanager/ondischargingtimechange/index.html index 4f5c402588..1d6d19041f 100644 --- a/files/pt-br/web/api/batterymanager/ondischargingtimechange/index.html +++ b/files/pt-br/web/api/batterymanager/ondischargingtimechange/index.html @@ -1,6 +1,6 @@ --- title: BatteryManager.ondischargingtimechange -slug: Web/API/BatteryManager/ondischargintimechange +slug: Web/API/BatteryManager/ondischargingtimechange tags: - API - Battery API @@ -8,6 +8,7 @@ tags: - Propriedade - Referencia translation_of: Web/API/BatteryManager/ondischargingtimechange +original_slug: Web/API/BatteryManager/ondischargintimechange ---

    {{APIRef("Battery API")}}

    diff --git a/files/pt-br/web/api/canvas_api/a_basic_ray-caster/index.html b/files/pt-br/web/api/canvas_api/a_basic_ray-caster/index.html index ca188eb6f9..09f27a2e96 100644 --- a/files/pt-br/web/api/canvas_api/a_basic_ray-caster/index.html +++ b/files/pt-br/web/api/canvas_api/a_basic_ray-caster/index.html @@ -1,7 +1,8 @@ --- title: A basic ray-caster -slug: Web/HTML/Canvas/A_basic_ray-caster +slug: Web/API/Canvas_API/A_basic_ray-caster translation_of: Web/API/Canvas_API/A_basic_ray-caster +original_slug: Web/HTML/Canvas/A_basic_ray-caster ---
    {{CanvasSidebar}}
    diff --git a/files/pt-br/web/api/canvas_api/index.html b/files/pt-br/web/api/canvas_api/index.html index 821909e726..80bec60034 100644 --- a/files/pt-br/web/api/canvas_api/index.html +++ b/files/pt-br/web/api/canvas_api/index.html @@ -1,11 +1,12 @@ --- title: Canvas -slug: Web/HTML/Canvas +slug: Web/API/Canvas_API tags: - API - Canvas - Referência(2) translation_of: Web/API/Canvas_API +original_slug: Web/HTML/Canvas ---

    {{CanvasSidebar}}

    diff --git a/files/pt-br/web/api/canvas_api/tutorial/advanced_animations/index.html b/files/pt-br/web/api/canvas_api/tutorial/advanced_animations/index.html index 23f072420e..3b0d63fd8c 100644 --- a/files/pt-br/web/api/canvas_api/tutorial/advanced_animations/index.html +++ b/files/pt-br/web/api/canvas_api/tutorial/advanced_animations/index.html @@ -1,6 +1,6 @@ --- title: Advanced animations -slug: Web/Guide/HTML/Canvas_tutorial/Advanced_animations +slug: Web/API/Canvas_API/Tutorial/Advanced_animations tags: - Animation - Animations @@ -8,6 +8,7 @@ tags: - animated - efeitos em animações translation_of: Web/API/Canvas_API/Tutorial/Advanced_animations +original_slug: Web/Guide/HTML/Canvas_tutorial/Advanced_animations ---
    {{CanvasSidebar}} {{PreviousNext("Web/API/Canvas_API/Tutorial/Basic_animations", "Web/API/Canvas_API/Tutorial/Pixel_manipulation_with_canvas")}}
    diff --git a/files/pt-br/web/api/canvas_api/tutorial/applying_styles_and_colors/index.html b/files/pt-br/web/api/canvas_api/tutorial/applying_styles_and_colors/index.html index f711570b9f..71d09f6e71 100644 --- a/files/pt-br/web/api/canvas_api/tutorial/applying_styles_and_colors/index.html +++ b/files/pt-br/web/api/canvas_api/tutorial/applying_styles_and_colors/index.html @@ -1,7 +1,8 @@ --- title: Aplicando estilos e cores -slug: Web/Guide/HTML/Canvas_tutorial/Applying_styles_and_colors +slug: Web/API/Canvas_API/Tutorial/Applying_styles_and_colors translation_of: Web/API/Canvas_API/Tutorial/Applying_styles_and_colors +original_slug: Web/Guide/HTML/Canvas_tutorial/Applying_styles_and_colors ---
    {{CanvasSidebar}} {{PreviousNext("Web/API/Canvas_API/Tutorial/Drawing_shapes", "Web/API/Canvas_API/Tutorial/Drawing_text")}}
    diff --git a/files/pt-br/web/api/canvas_api/tutorial/basic_animations/index.html b/files/pt-br/web/api/canvas_api/tutorial/basic_animations/index.html index 125e0874a7..c0143de946 100644 --- a/files/pt-br/web/api/canvas_api/tutorial/basic_animations/index.html +++ b/files/pt-br/web/api/canvas_api/tutorial/basic_animations/index.html @@ -1,7 +1,8 @@ --- title: Basic animations -slug: Web/Guide/HTML/Canvas_tutorial/Basic_animations +slug: Web/API/Canvas_API/Tutorial/Basic_animations translation_of: Web/API/Canvas_API/Tutorial/Basic_animations +original_slug: Web/Guide/HTML/Canvas_tutorial/Basic_animations ---

    Já que estamos usando JavaScript para controlar {{HTMLElement("canvas")}} elementos, também é muito fácil criar animações interativas. Fazer animações mais complexas pode levar um tempo extra; esperamos introduzir um novo artigo para auxiliar sobre isso em breve.

    diff --git a/files/pt-br/web/api/canvas_api/tutorial/basic_usage/index.html b/files/pt-br/web/api/canvas_api/tutorial/basic_usage/index.html index 767a5ff97c..4f1593aa06 100644 --- a/files/pt-br/web/api/canvas_api/tutorial/basic_usage/index.html +++ b/files/pt-br/web/api/canvas_api/tutorial/basic_usage/index.html @@ -1,6 +1,6 @@ --- title: Utilização básica do Canvas -slug: Web/Guide/HTML/Canvas_tutorial/Utilizacao_basica +slug: Web/API/Canvas_API/Tutorial/Basic_usage tags: - Canvas - HTML @@ -8,6 +8,7 @@ tags: - Tutorial - graficos translation_of: Web/API/Canvas_API/Tutorial/Basic_usage +original_slug: Web/Guide/HTML/Canvas_tutorial/Utilizacao_basica ---
    {{CanvasSidebar}} {{PreviousNext("Web/API/Canvas_API/Tutorial", "Web/API/Canvas_API/Tutorial/Drawing_shapes")}}
    diff --git a/files/pt-br/web/api/canvas_api/tutorial/compositing/example/index.html b/files/pt-br/web/api/canvas_api/tutorial/compositing/example/index.html index 87de5aa19d..e294e9e1ca 100644 --- a/files/pt-br/web/api/canvas_api/tutorial/compositing/example/index.html +++ b/files/pt-br/web/api/canvas_api/tutorial/compositing/example/index.html @@ -1,12 +1,13 @@ --- title: Exemplo de Composição -slug: Web/Guide/HTML/Canvas_tutorial/Compositing/Exemplo +slug: Web/API/Canvas_API/Tutorial/Compositing/Example tags: - Canvas - Example - HTML5 - Tutorial translation_of: Web/API/Canvas_API/Tutorial/Compositing/Example +original_slug: Web/Guide/HTML/Canvas_tutorial/Compositing/Exemplo ---
    {{CanvasSidebar}}
    diff --git a/files/pt-br/web/api/canvas_api/tutorial/compositing/index.html b/files/pt-br/web/api/canvas_api/tutorial/compositing/index.html index 6d9ff5c33d..51c8afec02 100644 --- a/files/pt-br/web/api/canvas_api/tutorial/compositing/index.html +++ b/files/pt-br/web/api/canvas_api/tutorial/compositing/index.html @@ -1,7 +1,8 @@ --- title: Compositing and clipping -slug: Web/Guide/HTML/Canvas_tutorial/Compositing +slug: Web/API/Canvas_API/Tutorial/Compositing translation_of: Web/API/Canvas_API/Tutorial/Compositing +original_slug: Web/Guide/HTML/Canvas_tutorial/Compositing ---
    {{CanvasSidebar}} {{PreviousNext("Web/API/Canvas_API/Tutorial/Transformations", "Web/API/Canvas_API/Tutorial/Basic_animations")}}
    diff --git a/files/pt-br/web/api/canvas_api/tutorial/drawing_shapes/index.html b/files/pt-br/web/api/canvas_api/tutorial/drawing_shapes/index.html index f54fca780e..caa386d83e 100644 --- a/files/pt-br/web/api/canvas_api/tutorial/drawing_shapes/index.html +++ b/files/pt-br/web/api/canvas_api/tutorial/drawing_shapes/index.html @@ -1,6 +1,6 @@ --- title: Desenhando formas com canvas -slug: Web/Guide/HTML/Canvas_tutorial/Drawing_shapes +slug: Web/API/Canvas_API/Tutorial/Drawing_shapes tags: - Canvas - Gráficos(2) @@ -10,6 +10,7 @@ tags: - Intermediário - Tutorial translation_of: Web/API/Canvas_API/Tutorial/Drawing_shapes +original_slug: Web/Guide/HTML/Canvas_tutorial/Drawing_shapes ---
    {{CanvasSidebar}} {{PreviousNext("Web/API/Canvas_API/Tutorial/Basic_usage", "Web/API/Canvas_API/Tutorial/Applying_styles_and_colors")}}
    diff --git a/files/pt-br/web/api/canvas_api/tutorial/drawing_text/index.html b/files/pt-br/web/api/canvas_api/tutorial/drawing_text/index.html index 550719e627..d09cb537cb 100644 --- a/files/pt-br/web/api/canvas_api/tutorial/drawing_text/index.html +++ b/files/pt-br/web/api/canvas_api/tutorial/drawing_text/index.html @@ -1,12 +1,13 @@ --- title: Drawing text -slug: Web/Guide/HTML/Canvas_tutorial/Drawing_text +slug: Web/API/Canvas_API/Tutorial/Drawing_text tags: - Canvas - Intermediário - Tutorial - graficos translation_of: Web/API/Canvas_API/Tutorial/Drawing_text +original_slug: Web/Guide/HTML/Canvas_tutorial/Drawing_text ---
    {{CanvasSidebar}} {{PreviousNext("Web/API/Canvas_API/Tutorial/Applying_styles_and_colors", "Web/API/Canvas_API/Tutorial/Using_images")}}
    diff --git a/files/pt-br/web/api/canvas_api/tutorial/finale/index.html b/files/pt-br/web/api/canvas_api/tutorial/finale/index.html index 9cd393b652..4cc811ba68 100644 --- a/files/pt-br/web/api/canvas_api/tutorial/finale/index.html +++ b/files/pt-br/web/api/canvas_api/tutorial/finale/index.html @@ -1,7 +1,8 @@ --- title: Conclusão -slug: Web/Guide/HTML/Canvas_tutorial/Conclusão +slug: Web/API/Canvas_API/Tutorial/Finale translation_of: Web/API/Canvas_API/Tutorial/Finale +original_slug: Web/Guide/HTML/Canvas_tutorial/Conclusão ---
    {{CanvasSidebar}} {{PreviousNext("Web/API/Canvas_API/Tutorial/Optimizing_canvas")}}
    diff --git a/files/pt-br/web/api/canvas_api/tutorial/index.html b/files/pt-br/web/api/canvas_api/tutorial/index.html index 2f9dbab7df..7d571ff002 100644 --- a/files/pt-br/web/api/canvas_api/tutorial/index.html +++ b/files/pt-br/web/api/canvas_api/tutorial/index.html @@ -1,6 +1,6 @@ --- title: Canvas tutorial -slug: Web/Guide/HTML/Canvas_tutorial +slug: Web/API/Canvas_API/Tutorial tags: - Canvas - Graphics @@ -10,6 +10,7 @@ tags: - Intermediate - Web translation_of: Web/API/Canvas_API/Tutorial +original_slug: Web/Guide/HTML/Canvas_tutorial ---

     {{CanvasSidebar}}

    diff --git a/files/pt-br/web/api/canvas_api/tutorial/optimizing_canvas/index.html b/files/pt-br/web/api/canvas_api/tutorial/optimizing_canvas/index.html index d18afddefa..5a5a355a59 100644 --- a/files/pt-br/web/api/canvas_api/tutorial/optimizing_canvas/index.html +++ b/files/pt-br/web/api/canvas_api/tutorial/optimizing_canvas/index.html @@ -1,11 +1,12 @@ --- title: Otimizando canvas -slug: Web/Guide/HTML/Canvas_tutorial/Otimizando_Canvas +slug: Web/API/Canvas_API/Tutorial/Optimizing_canvas tags: - Canvas - Gráfico 2D - Otimização translation_of: Web/API/Canvas_API/Tutorial/Optimizing_canvas +original_slug: Web/Guide/HTML/Canvas_tutorial/Otimizando_Canvas ---
    {{CanvasSidebar}} {{PreviousNext("Web/API/Canvas_API/Tutorial/Hit_regions_and_accessibility", "Web/API/Canvas_API/Tutorial/Finale")}}
    diff --git a/files/pt-br/web/api/canvas_api/tutorial/using_images/index.html b/files/pt-br/web/api/canvas_api/tutorial/using_images/index.html index 0b0dcfe7e7..7d1978da46 100644 --- a/files/pt-br/web/api/canvas_api/tutorial/using_images/index.html +++ b/files/pt-br/web/api/canvas_api/tutorial/using_images/index.html @@ -1,7 +1,8 @@ --- title: Using images -slug: Web/Guide/HTML/Canvas_tutorial/Using_images +slug: Web/API/Canvas_API/Tutorial/Using_images translation_of: Web/API/Canvas_API/Tutorial/Using_images +original_slug: Web/Guide/HTML/Canvas_tutorial/Using_images ---
    {{CanvasSidebar}} {{PreviousNext("Web/API/Canvas_API/Tutorial/Drawing_text", "Web/API/Canvas_API/Tutorial/Transformations" )}}
    diff --git a/files/pt-br/web/api/crypto/getrandomvalues/index.html b/files/pt-br/web/api/crypto/getrandomvalues/index.html index 7e54e933ed..10279649e0 100644 --- a/files/pt-br/web/api/crypto/getrandomvalues/index.html +++ b/files/pt-br/web/api/crypto/getrandomvalues/index.html @@ -1,7 +1,8 @@ --- title: RandomSource.getRandomValues() -slug: Web/API/RandomSource/getRandomValues +slug: Web/API/Crypto/getRandomValues translation_of: Web/API/Crypto/getRandomValues +original_slug: Web/API/RandomSource/getRandomValues ---

    {{APIRef("Web Crypto API")}}

    diff --git a/files/pt-br/web/api/devicemotioneventacceleration/index.html b/files/pt-br/web/api/devicemotioneventacceleration/index.html index e8e5432e4a..fad161e7b2 100644 --- a/files/pt-br/web/api/devicemotioneventacceleration/index.html +++ b/files/pt-br/web/api/devicemotioneventacceleration/index.html @@ -1,12 +1,13 @@ --- title: DeviceAcceleration -slug: Web/API/DeviceAcceleration +slug: Web/API/DeviceMotionEventAcceleration tags: - API - Experimental - Interface translation_of: Web/API/DeviceMotionEventAcceleration translation_of_original: Web/API/DeviceAcceleration +original_slug: Web/API/DeviceAcceleration ---
    {{ ApiRef("Device Orientation Events") }}{{SeeCompatTable}}
    diff --git a/files/pt-br/web/api/devicemotioneventrotationrate/index.html b/files/pt-br/web/api/devicemotioneventrotationrate/index.html index 872b3c6f25..ef0df94cd8 100644 --- a/files/pt-br/web/api/devicemotioneventrotationrate/index.html +++ b/files/pt-br/web/api/devicemotioneventrotationrate/index.html @@ -1,8 +1,9 @@ --- title: DeviceRotationRate -slug: Web/API/DeviceRotationRate +slug: Web/API/DeviceMotionEventRotationRate translation_of: Web/API/DeviceMotionEventRotationRate translation_of_original: Web/API/DeviceRotationRate +original_slug: Web/API/DeviceRotationRate ---

    {{ ApiRef("Device Orientation Events") }} {{SeeCompatTable}}

    diff --git a/files/pt-br/web/api/document/readystatechange_event/index.html b/files/pt-br/web/api/document/readystatechange_event/index.html index 185350cb54..57a936b66c 100644 --- a/files/pt-br/web/api/document/readystatechange_event/index.html +++ b/files/pt-br/web/api/document/readystatechange_event/index.html @@ -1,7 +1,8 @@ --- title: readystatechange -slug: Web/Events/readystatechange +slug: Web/API/Document/readystatechange_event translation_of: Web/API/Document/readystatechange_event +original_slug: Web/Events/readystatechange ---

    {{ApiRef}}

    diff --git a/files/pt-br/web/api/document/registerelement/index.html b/files/pt-br/web/api/document/registerelement/index.html index bff318b3a9..8e83210080 100644 --- a/files/pt-br/web/api/document/registerelement/index.html +++ b/files/pt-br/web/api/document/registerelement/index.html @@ -1,6 +1,6 @@ --- title: Document.registerElement() -slug: Web/API/Document/ElementoRegistrado +slug: Web/API/Document/registerElement tags: - DOM - Document.registerElement() @@ -8,6 +8,7 @@ tags: - Web Components - registerElement translation_of: Web/API/Document/registerElement +original_slug: Web/API/Document/ElementoRegistrado ---

    {{APIRef("DOM")}}

    diff --git a/files/pt-br/web/api/document_object_model/events/index.html b/files/pt-br/web/api/document_object_model/events/index.html index 4d04915450..cd82ef8b39 100644 --- a/files/pt-br/web/api/document_object_model/events/index.html +++ b/files/pt-br/web/api/document_object_model/events/index.html @@ -1,7 +1,8 @@ --- title: Events and the DOM -slug: DOM/Referencia_do_DOM/Events +slug: Web/API/Document_Object_Model/Events translation_of: Web/API/Document_Object_Model/Events +original_slug: DOM/Referencia_do_DOM/Events ---
    {{DefaultAPISidebar("DOM")}}
    diff --git a/files/pt-br/web/api/document_object_model/examples/index.html b/files/pt-br/web/api/document_object_model/examples/index.html index 87ec3601e2..d8ada00c18 100644 --- a/files/pt-br/web/api/document_object_model/examples/index.html +++ b/files/pt-br/web/api/document_object_model/examples/index.html @@ -1,7 +1,8 @@ --- title: Examples of web and XML development using the DOM -slug: DOM/Referencia_do_DOM/Examples +slug: Web/API/Document_Object_Model/Examples translation_of: Web/API/Document_Object_Model/Examples +original_slug: DOM/Referencia_do_DOM/Examples ---

    Este capítulo fornece exemplos mais longos de desenvolvimento de Web e XML usando o DOM. Sempre que possível, os exemplos usam APIs, truques e padrões comuns no JavaScript para manipular o objeto de documento.

    diff --git a/files/pt-br/web/api/document_object_model/how_to_create_a_dom_tree/index.html b/files/pt-br/web/api/document_object_model/how_to_create_a_dom_tree/index.html index e6dd923fb5..2897718d3c 100644 --- a/files/pt-br/web/api/document_object_model/how_to_create_a_dom_tree/index.html +++ b/files/pt-br/web/api/document_object_model/how_to_create_a_dom_tree/index.html @@ -1,7 +1,8 @@ --- title: How to create a DOM tree -slug: DOM/Referencia_do_DOM/How_to_create_a_DOM_tree +slug: Web/API/Document_object_model/How_to_create_a_DOM_tree translation_of: Web/API/Document_object_model/How_to_create_a_DOM_tree +original_slug: DOM/Referencia_do_DOM/How_to_create_a_DOM_tree ---

    {{draft}}

    diff --git a/files/pt-br/web/api/document_object_model/index.html b/files/pt-br/web/api/document_object_model/index.html index b0ae4420a6..6fd369978d 100644 --- a/files/pt-br/web/api/document_object_model/index.html +++ b/files/pt-br/web/api/document_object_model/index.html @@ -1,7 +1,8 @@ --- title: Modelo de Objeto de Documento (DOM) -slug: DOM/Referencia_do_DOM +slug: Web/API/Document_Object_Model translation_of: Web/API/Document_Object_Model +original_slug: DOM/Referencia_do_DOM ---

    {{DefaultAPISidebar("DOM")}}

    diff --git a/files/pt-br/web/api/document_object_model/introduction/index.html b/files/pt-br/web/api/document_object_model/introduction/index.html index 010a5ecd54..667d6f1cfc 100644 --- a/files/pt-br/web/api/document_object_model/introduction/index.html +++ b/files/pt-br/web/api/document_object_model/introduction/index.html @@ -1,7 +1,8 @@ --- title: Introdução ao DOM -slug: DOM/Referencia_do_DOM/Introdução +slug: Web/API/Document_Object_Model/Introduction translation_of: Web/API/Document_Object_Model/Introduction +original_slug: DOM/Referencia_do_DOM/Introdução ---

    O DOM (Document Object Model) é a representação de dados dos objetos que compõem a estrutura e o conteúdo de um documento na Web. Neste guia, apresentaremos brevemente o DOM. Veremos como o DOM representa um documento {{Glossary ("HTML")}} ou {{Glossary ("XML")}} na memória e como você usa APIs para criar aplicativos e conteúdo da Web.

    diff --git a/files/pt-br/web/api/document_object_model/whitespace/index.html b/files/pt-br/web/api/document_object_model/whitespace/index.html index f4bebc3678..61efe15ee1 100644 --- a/files/pt-br/web/api/document_object_model/whitespace/index.html +++ b/files/pt-br/web/api/document_object_model/whitespace/index.html @@ -1,10 +1,11 @@ --- title: Whitespace no DOM -slug: DOM/Referencia_do_DOM/Whitespace_in_the_DOM +slug: Web/API/Document_Object_Model/Whitespace tags: - DOM - Intermediário translation_of: Web/API/Document_Object_Model/Whitespace +original_slug: DOM/Referencia_do_DOM/Whitespace_in_the_DOM ---

    O problema

    diff --git a/files/pt-br/web/api/documentorshadowroot/activeelement/index.html b/files/pt-br/web/api/documentorshadowroot/activeelement/index.html index ca10f98461..2223a29d1d 100644 --- a/files/pt-br/web/api/documentorshadowroot/activeelement/index.html +++ b/files/pt-br/web/api/documentorshadowroot/activeelement/index.html @@ -1,6 +1,6 @@ --- title: Document.activeElement -slug: Web/API/Document/activeElement +slug: Web/API/DocumentOrShadowRoot/activeElement tags: - API - Document @@ -9,6 +9,7 @@ tags: - Reference translation_of: Web/API/DocumentOrShadowRoot/activeElement translation_of_original: Web/API/Document/activeElement +original_slug: Web/API/Document/activeElement ---

    {{APIRef("DOM")}}

    diff --git a/files/pt-br/web/api/documentorshadowroot/elementfrompoint/index.html b/files/pt-br/web/api/documentorshadowroot/elementfrompoint/index.html index c64d67dd08..912dd85e80 100644 --- a/files/pt-br/web/api/documentorshadowroot/elementfrompoint/index.html +++ b/files/pt-br/web/api/documentorshadowroot/elementfrompoint/index.html @@ -1,6 +1,6 @@ --- title: Document.elementFromPoint() -slug: Web/API/Document/elementFromPoint +slug: Web/API/DocumentOrShadowRoot/elementFromPoint tags: - API - CSSOM View @@ -10,6 +10,7 @@ tags: - Reference translation_of: Web/API/DocumentOrShadowRoot/elementFromPoint translation_of_original: Web/API/Document/elementFromPoint +original_slug: Web/API/Document/elementFromPoint ---
    {{APIRef("DOM")}}
    diff --git a/files/pt-br/web/api/documentorshadowroot/getselection/index.html b/files/pt-br/web/api/documentorshadowroot/getselection/index.html index 2f52375799..11fff02755 100644 --- a/files/pt-br/web/api/documentorshadowroot/getselection/index.html +++ b/files/pt-br/web/api/documentorshadowroot/getselection/index.html @@ -1,8 +1,9 @@ --- title: Document.getSelection() -slug: Web/API/Document/getSelection +slug: Web/API/DocumentOrShadowRoot/getSelection translation_of: Web/API/DocumentOrShadowRoot/getSelection translation_of_original: Web/API/Document/getSelection +original_slug: Web/API/Document/getSelection ---

    {{APIRef("DOM")}}

    diff --git a/files/pt-br/web/api/element/blur_event/index.html b/files/pt-br/web/api/element/blur_event/index.html index 7eb9263be2..46619ccb93 100644 --- a/files/pt-br/web/api/element/blur_event/index.html +++ b/files/pt-br/web/api/element/blur_event/index.html @@ -1,7 +1,8 @@ --- title: blur (evento) -slug: Web/Events/blur +slug: Web/API/Element/blur_event translation_of: Web/API/Element/blur_event +original_slug: Web/Events/blur ---

    O evento blur é acionado quando um elemento perde foco. A diferença principal entre este evento e focusout é que apenas o segundo 'borbulha'.

    diff --git a/files/pt-br/web/api/element/focus_event/index.html b/files/pt-br/web/api/element/focus_event/index.html index 9f6dd7117d..543a21af0d 100644 --- a/files/pt-br/web/api/element/focus_event/index.html +++ b/files/pt-br/web/api/element/focus_event/index.html @@ -1,7 +1,8 @@ --- title: focus -slug: Web/Events/focus +slug: Web/API/Element/focus_event translation_of: Web/API/Element/focus_event +original_slug: Web/Events/focus ---

    O evento focus é acionado assim que um elemento recebe um foco. O grande diferencial entre este evento e o evento focusin, é que esse segundo "borbulha".

    diff --git a/files/pt-br/web/api/element/focusin_event/index.html b/files/pt-br/web/api/element/focusin_event/index.html index 797424de54..291956ed53 100644 --- a/files/pt-br/web/api/element/focusin_event/index.html +++ b/files/pt-br/web/api/element/focusin_event/index.html @@ -1,7 +1,8 @@ --- title: focusin -slug: Web/Events/focusin +slug: Web/API/Element/focusin_event translation_of: Web/API/Element/focusin_event +original_slug: Web/Events/focusin ---

    O evento focusin é acionado no momento em que o elemento receba o foco. A grande diferença entre esse evento e o evento  focus, é que apenas o focusin delega o seu evento para o elemento pai (conhecido como bubbling ou deletegate).

    diff --git a/files/pt-br/web/api/element/focusout_event/index.html b/files/pt-br/web/api/element/focusout_event/index.html index 8f72b211b2..366498c0a3 100644 --- a/files/pt-br/web/api/element/focusout_event/index.html +++ b/files/pt-br/web/api/element/focusout_event/index.html @@ -1,7 +1,8 @@ --- title: focusout -slug: Web/Events/focusout +slug: Web/API/Element/focusout_event translation_of: Web/API/Element/focusout_event +original_slug: Web/Events/focusout ---

    O evento focusout é acionado assim que o elemento perde o foco. A principal diferença entre esse evento e o evento blur, é que esse ultimo não gera "borbulhas".

    diff --git a/files/pt-br/web/api/event/comparison_of_event_targets/index.html b/files/pt-br/web/api/event/comparison_of_event_targets/index.html index e9b2004719..8c4be2bc7c 100644 --- a/files/pt-br/web/api/event/comparison_of_event_targets/index.html +++ b/files/pt-br/web/api/event/comparison_of_event_targets/index.html @@ -1,11 +1,12 @@ --- title: Comparativo entre Event Targets -slug: Web/API/Event/Comparativo_entre_Event_Targets +slug: Web/API/Event/Comparison_of_Event_Targets tags: - DOM - Event - event target translation_of: Web/API/Event/Comparison_of_Event_Targets +original_slug: Web/API/Event/Comparativo_entre_Event_Targets ---
    {{ ApiRef() }}
    diff --git a/files/pt-br/web/api/eventtarget/addeventlistener/index.html b/files/pt-br/web/api/eventtarget/addeventlistener/index.html index fea1e67e7b..00d38880bf 100644 --- a/files/pt-br/web/api/eventtarget/addeventlistener/index.html +++ b/files/pt-br/web/api/eventtarget/addeventlistener/index.html @@ -1,7 +1,8 @@ --- title: Element.addEventListener() -slug: Web/API/Element/addEventListener +slug: Web/API/EventTarget/addEventListener translation_of: Web/API/EventTarget/addEventListener +original_slug: Web/API/Element/addEventListener ---

    {{apiref("DOM Events")}}

    diff --git a/files/pt-br/web/api/fetch_api/cross-global_fetch_usage/index.html b/files/pt-br/web/api/fetch_api/cross-global_fetch_usage/index.html index c569966b5a..7fc550536e 100644 --- a/files/pt-br/web/api/fetch_api/cross-global_fetch_usage/index.html +++ b/files/pt-br/web/api/fetch_api/cross-global_fetch_usage/index.html @@ -1,7 +1,8 @@ --- title: Uso de busca Cross-global -slug: Web/API/Fetch_API/Uso_de_busca_Cross-global +slug: Web/API/Fetch_API/Cross-global_fetch_usage translation_of: Web/API/Fetch_API/Cross-global_fetch_usage +original_slug: Web/API/Fetch_API/Uso_de_busca_Cross-global ---

     

    diff --git a/files/pt-br/web/api/geolocation_api/index.html b/files/pt-br/web/api/geolocation_api/index.html index b6799afa16..32cda6784d 100644 --- a/files/pt-br/web/api/geolocation_api/index.html +++ b/files/pt-br/web/api/geolocation_api/index.html @@ -1,10 +1,11 @@ --- title: Usando geolocation -slug: Using_geolocation +slug: Web/API/Geolocation_API tags: - Geolocation API - Guia(2) translation_of: Web/API/Geolocation_API +original_slug: Using_geolocation ---

    API geolocation permite que o usuário forneça sua localização a aplicativos web se ele desejar. Por questões de privacidade, o usuário é perguntado se permite fornecer informações de localização.

    diff --git a/files/pt-br/web/api/history_api/example/index.html b/files/pt-br/web/api/history_api/example/index.html index a4dfc4b68f..6d0cbb2256 100644 --- a/files/pt-br/web/api/history_api/example/index.html +++ b/files/pt-br/web/api/history_api/example/index.html @@ -1,9 +1,10 @@ --- title: Exemplo de navegação Ajax -slug: Web/API/History_API/Exemplo +slug: Web/API/History_API/Example tags: - Exemplo navegação ajax translation_of: Web/API/History_API/Example +original_slug: Web/API/History_API/Exemplo ---

    Esse é um exemplo de um web site em AJAX web site composto por apenas três páginas (first_page.php, second_page.php e third_page.php). Para ver como funciona, crie os arquivos a seguir (ou git clone https://github.com/giabao/mdn-ajax-nav-example.git ):

    diff --git a/files/pt-br/web/api/html_drag_and_drop_api/file_drag_and_drop/index.html b/files/pt-br/web/api/html_drag_and_drop_api/file_drag_and_drop/index.html index 13609ee260..2442d4ed4b 100644 --- a/files/pt-br/web/api/html_drag_and_drop_api/file_drag_and_drop/index.html +++ b/files/pt-br/web/api/html_drag_and_drop_api/file_drag_and_drop/index.html @@ -1,7 +1,8 @@ --- title: Arrastar e soltar arquivos -slug: DragDrop/Drag_and_Drop/Arrastar_e_soltar_arquivos +slug: Web/API/HTML_Drag_and_Drop_API/File_drag_and_drop translation_of: Web/API/HTML_Drag_and_Drop_API/File_drag_and_drop +original_slug: DragDrop/Drag_and_Drop/Arrastar_e_soltar_arquivos ---

    {{DefaultAPISidebar("HTML Drag and Drop API")}}

    diff --git a/files/pt-br/web/api/html_drag_and_drop_api/index.html b/files/pt-br/web/api/html_drag_and_drop_api/index.html index 10e5592b91..216ac37d68 100644 --- a/files/pt-br/web/api/html_drag_and_drop_api/index.html +++ b/files/pt-br/web/api/html_drag_and_drop_api/index.html @@ -1,6 +1,6 @@ --- title: Arrastar e soltar -slug: DragDrop/Drag_and_Drop +slug: Web/API/HTML_Drag_and_Drop_API tags: - Avançado - Guia(2) @@ -10,6 +10,7 @@ tags: - arrastar e soltar - eventos translation_of: Web/API/HTML_Drag_and_Drop_API +original_slug: DragDrop/Drag_and_Drop ---

    {{DefaultAPISidebar("HTML Drag and Drop API")}}

    diff --git a/files/pt-br/web/api/htmlcontentelement/select/index.html b/files/pt-br/web/api/htmlcontentelement/select/index.html index 63fae05c69..4b9e56cae6 100644 --- a/files/pt-br/web/api/htmlcontentelement/select/index.html +++ b/files/pt-br/web/api/htmlcontentelement/select/index.html @@ -1,12 +1,13 @@ --- title: HTMLContentElement.select -slug: Web/API/HTMLContentElement/Seletor +slug: Web/API/HTMLContentElement/select tags: - API - HTMLContentElement - HTMLContentElement.select - Select translation_of: Web/API/HTMLContentElement/select +original_slug: Web/API/HTMLContentElement/Seletor ---

    {{ APIRef("Web Components") }}

    diff --git a/files/pt-br/web/api/htmlelement/accesskey/index.html b/files/pt-br/web/api/htmlelement/accesskey/index.html index e0425e3645..0e33c34d8e 100644 --- a/files/pt-br/web/api/htmlelement/accesskey/index.html +++ b/files/pt-br/web/api/htmlelement/accesskey/index.html @@ -1,8 +1,9 @@ --- title: Element.accessKey -slug: Web/API/Element/accessKey +slug: Web/API/HTMLElement/accessKey translation_of: Web/API/HTMLElement/accessKey translation_of_original: Web/API/Element/accessKey +original_slug: Web/API/Element/accessKey ---
    {{APIRef("DOM")}}
    diff --git a/files/pt-br/web/api/htmlelement/innertext/index.html b/files/pt-br/web/api/htmlelement/innertext/index.html index 1ab5e81027..8a6f33ed32 100644 --- a/files/pt-br/web/api/htmlelement/innertext/index.html +++ b/files/pt-br/web/api/htmlelement/innertext/index.html @@ -1,7 +1,8 @@ --- title: Node.innerText -slug: Web/API/Node/innerText +slug: Web/API/HTMLElement/innerText translation_of: Web/API/HTMLElement/innerText +original_slug: Web/API/Node/innerText ---
    {{APIRef("DOM")}}
    diff --git a/files/pt-br/web/api/htmlelement/input_event/index.html b/files/pt-br/web/api/htmlelement/input_event/index.html index dd69baf988..ed3453b49a 100644 --- a/files/pt-br/web/api/htmlelement/input_event/index.html +++ b/files/pt-br/web/api/htmlelement/input_event/index.html @@ -1,7 +1,8 @@ --- title: input -slug: Web/Events/input +slug: Web/API/HTMLElement/input_event translation_of: Web/API/HTMLElement/input_event +original_slug: Web/Events/input ---

    O evento input do DOM é disparado sincronicamente quando o valor de um elemento {{HTMLElement("input")}}, {{HTMLElement("select")}}, ou {{HTMLElement("textarea")}} é alterado. (Para elementos input com type=checkbox ou type=radio, o evento input não é disparado quando o usuário clica no elemento, porque o valor do atributo não é alterado.) Além disso, o evento é disparado no contenteditable editors quando o seu conteúdo é alterado. Nesse caso, O alvo do evento é o elemento host da edição. Se houver dois ou mais elementos que tenha contenteditable como true, o "host de edição" é o elemento antepassado mais próximo cujo pai não é editável. Similarmente, ele também é disparado no element raiz do designMode editors.

    diff --git a/files/pt-br/web/api/htmlmediaelement/abort_event/index.html b/files/pt-br/web/api/htmlmediaelement/abort_event/index.html index 62243a2762..721cc43353 100644 --- a/files/pt-br/web/api/htmlmediaelement/abort_event/index.html +++ b/files/pt-br/web/api/htmlmediaelement/abort_event/index.html @@ -1,8 +1,9 @@ --- title: abort -slug: Web/Events/abort +slug: Web/API/HTMLMediaElement/abort_event translation_of: Web/API/HTMLMediaElement/abort_event translation_of_original: Web/Events/abort +original_slug: Web/Events/abort ---

    O evento abort é disparado quando o carregamento de um recurso foi interrompido.

    diff --git a/files/pt-br/web/api/htmlorforeignelement/blur/index.html b/files/pt-br/web/api/htmlorforeignelement/blur/index.html index 25a2273aec..a8143402ef 100644 --- a/files/pt-br/web/api/htmlorforeignelement/blur/index.html +++ b/files/pt-br/web/api/htmlorforeignelement/blur/index.html @@ -1,6 +1,6 @@ --- title: HTMLElement.blur() -slug: Web/API/HTMLElement/blur +slug: Web/API/HTMLOrForeignElement/blur tags: - API - DOM HTML @@ -9,6 +9,7 @@ tags: - Referencia - metodo translation_of: Web/API/HTMLOrForeignElement/blur +original_slug: Web/API/HTMLElement/blur ---
    {{ APIRef("HTML DOM") }}
    diff --git a/files/pt-br/web/api/htmlorforeignelement/dataset/index.html b/files/pt-br/web/api/htmlorforeignelement/dataset/index.html index 2cb4ba63b0..76bd77a3c9 100644 --- a/files/pt-br/web/api/htmlorforeignelement/dataset/index.html +++ b/files/pt-br/web/api/htmlorforeignelement/dataset/index.html @@ -1,7 +1,8 @@ --- title: HTMLElement.dataset -slug: Web/API/HTMLElement/dataset +slug: Web/API/HTMLOrForeignElement/dataset translation_of: Web/API/HTMLOrForeignElement/dataset +original_slug: Web/API/HTMLElement/dataset ---

    {{ APIRef }}

    diff --git a/files/pt-br/web/api/htmlorforeignelement/focus/index.html b/files/pt-br/web/api/htmlorforeignelement/focus/index.html index 8f798b3d86..4649b935b9 100644 --- a/files/pt-br/web/api/htmlorforeignelement/focus/index.html +++ b/files/pt-br/web/api/htmlorforeignelement/focus/index.html @@ -1,7 +1,8 @@ --- title: HTMLElement.focus() -slug: Web/API/HTMLElement/focus +slug: Web/API/HTMLOrForeignElement/focus translation_of: Web/API/HTMLOrForeignElement/focus +original_slug: Web/API/HTMLElement/focus ---
    {{ APIRef("HTML DOM") }}
    diff --git a/files/pt-br/web/api/indexeddb_api/using_indexeddb/index.html b/files/pt-br/web/api/indexeddb_api/using_indexeddb/index.html index da14879b31..217fc304c5 100644 --- a/files/pt-br/web/api/indexeddb_api/using_indexeddb/index.html +++ b/files/pt-br/web/api/indexeddb_api/using_indexeddb/index.html @@ -1,9 +1,10 @@ --- title: Usando IndexedDB -slug: Web/API/IndexedDB_API/Usando_IndexedDB +slug: Web/API/IndexedDB_API/Using_IndexedDB tags: - API IndexedDB Tutorial Avançado translation_of: Web/API/IndexedDB_API/Using_IndexedDB +original_slug: Web/API/IndexedDB_API/Usando_IndexedDB ---

    IndexedDB é uma forma de armazenar dados no navegador do usuário. Com ele você pode criar aplicações web com possibilidade de fazer query sem necessidade de conexão, suas aplicações podem funcionar tanto online quanto offline. 

    diff --git a/files/pt-br/web/api/network_information_api/index.html b/files/pt-br/web/api/network_information_api/index.html index 032fc54169..aa9d0349e2 100644 --- a/files/pt-br/web/api/network_information_api/index.html +++ b/files/pt-br/web/api/network_information_api/index.html @@ -1,7 +1,8 @@ --- title: Network Information API -slug: WebAPI/Network_Information +slug: Web/API/Network_Information_API translation_of: Web/API/Network_Information_API +original_slug: WebAPI/Network_Information ---

    {{ SeeCompatTable() }}

    diff --git a/files/pt-br/web/api/notification/index.html b/files/pt-br/web/api/notification/index.html index 9103aac190..57f63a0e3e 100644 --- a/files/pt-br/web/api/notification/index.html +++ b/files/pt-br/web/api/notification/index.html @@ -1,11 +1,12 @@ --- title: Notificações -slug: Web/API/notificacoes +slug: Web/API/Notification tags: - API - Interface - Notificações translation_of: Web/API/Notification +original_slug: Web/API/notificacoes ---

    {{APIRef("Web Notifications")}}{{AvailableInWorkers}}{{securecontext_header}}

    diff --git a/files/pt-br/web/api/performance_api/index.html b/files/pt-br/web/api/performance_api/index.html index 1b6997e293..90eae5d668 100644 --- a/files/pt-br/web/api/performance_api/index.html +++ b/files/pt-br/web/api/performance_api/index.html @@ -1,7 +1,8 @@ --- title: API de Desempenho -slug: Web/API/API_de_Desempenho +slug: Web/API/Performance_API translation_of: Web/API/Performance_API +original_slug: Web/API/API_de_Desempenho ---
    {{DefaultAPISidebar("High Resolution Time")}}
    diff --git a/files/pt-br/web/api/push_api/best_practices/index.html b/files/pt-br/web/api/push_api/best_practices/index.html index 9b0fafd2b7..72588a56dd 100644 --- a/files/pt-br/web/api/push_api/best_practices/index.html +++ b/files/pt-br/web/api/push_api/best_practices/index.html @@ -1,6 +1,6 @@ --- title: Melhores práticas -slug: Web/API/API_Push/Best_Practices +slug: Web/API/Push_API/Best_Practices tags: - Apps - Iniciante @@ -9,6 +9,7 @@ tags: - Push API - Usabilidade translation_of: Web/API/Push_API/Best_Practices +original_slug: Web/API/API_Push/Best_Practices ---

    {{draft}}

    diff --git a/files/pt-br/web/api/push_api/index.html b/files/pt-br/web/api/push_api/index.html index 563b711cd8..d663d40a4a 100644 --- a/files/pt-br/web/api/push_api/index.html +++ b/files/pt-br/web/api/push_api/index.html @@ -1,6 +1,6 @@ --- title: API Push -slug: Web/API/API_Push +slug: Web/API/Push_API tags: - API - Experimental @@ -9,6 +9,7 @@ tags: - Referencia - Service Workers translation_of: Web/API/Push_API +original_slug: Web/API/API_Push ---
    {{DefaultAPISidebar("Push API")}}{{SeeCompatTable}}
    diff --git a/files/pt-br/web/api/selection/index.html b/files/pt-br/web/api/selection/index.html index 9cac677942..0128146817 100644 --- a/files/pt-br/web/api/selection/index.html +++ b/files/pt-br/web/api/selection/index.html @@ -1,6 +1,6 @@ --- title: Seleção -slug: Web/API/Seleção +slug: Web/API/Selection tags: - API - Experimental @@ -8,6 +8,7 @@ tags: - Referencia - Seleção translation_of: Web/API/Selection +original_slug: Web/API/Seleção ---
    {{ ApiRef("DOM") }}{{SeeCompatTable}}
    diff --git a/files/pt-br/web/api/svgaelement/target/index.html b/files/pt-br/web/api/svgaelement/target/index.html index e197ee81e5..4ce4fb3704 100644 --- a/files/pt-br/web/api/svgaelement/target/index.html +++ b/files/pt-br/web/api/svgaelement/target/index.html @@ -1,11 +1,12 @@ --- title: SVGAElement.target -slug: Web/API/SVGAElement/SVGAlement.target +slug: Web/API/SVGAElement/target tags: - Imagem vetorial - Vetores translation_of: Web/API/SVGAElement/target translation_of_original: Web/API/SVGAElement/SVGAlement.target +original_slug: Web/API/SVGAElement/SVGAlement.target ---

    {{APIRef("SVGAElement")}}

    diff --git a/files/pt-br/web/api/touch_events/index.html b/files/pt-br/web/api/touch_events/index.html index df21cdf335..fadec72daf 100644 --- a/files/pt-br/web/api/touch_events/index.html +++ b/files/pt-br/web/api/touch_events/index.html @@ -1,6 +1,6 @@ --- title: Eventos do Toque -slug: Web/Guide/Events/Touch_events +slug: Web/API/Touch_events tags: - Avançado - DOM @@ -9,6 +9,7 @@ tags: - Mobile - Visualização translation_of: Web/API/Touch_events +original_slug: Web/Guide/Events/Touch_events ---

    Com a finalidade de fornecer suporte de qualidade para interfaces baseadas em toque (touch), os eventos de touch oferecem a capacidade de interpretar a atividade em telas sensíveis ao toque ou trackpads.

    diff --git a/files/pt-br/web/api/web_animations_api/using_the_web_animations_api/index.html b/files/pt-br/web/api/web_animations_api/using_the_web_animations_api/index.html index 2743f68d65..e807617a5f 100644 --- a/files/pt-br/web/api/web_animations_api/using_the_web_animations_api/index.html +++ b/files/pt-br/web/api/web_animations_api/using_the_web_animations_api/index.html @@ -1,6 +1,6 @@ --- title: Usando a Web Animations API -slug: Web/API/Web_Animations_API/Usando_a_Web_Animations_API +slug: Web/API/Web_Animations_API/Using_the_Web_Animations_API tags: - Alice - Animação @@ -20,6 +20,7 @@ tags: - reverse - web animations api translation_of: Web/API/Web_Animations_API/Using_the_Web_Animations_API +original_slug: Web/API/Web_Animations_API/Usando_a_Web_Animations_API ---

    {{DefaultAPISidebar("Web Animations")}}

    diff --git a/files/pt-br/web/api/web_audio_api/index.html b/files/pt-br/web/api/web_audio_api/index.html index 8f582eb524..7f99c3695e 100644 --- a/files/pt-br/web/api/web_audio_api/index.html +++ b/files/pt-br/web/api/web_audio_api/index.html @@ -1,12 +1,13 @@ --- title: API Web Áudio -slug: Web/API/API_Web_Audio +slug: Web/API/Web_Audio_API tags: - Web Audio API - api de áudio - áudio api - áudio web translation_of: Web/API/Web_Audio_API +original_slug: Web/API/API_Web_Audio ---

    A API de áudio da web disponibiliza um poderoso e versátil sistema de controle de áudio para a Web, permitindo aos desenvolvedores escolher arquivos de áudio, adicionar efeitos a estes arquivos, criar reprodutores de áudio, aplicar spatial effects (como panning) e muito mais.

    diff --git a/files/pt-br/web/api/web_audio_api/simple_synth/index.html b/files/pt-br/web/api/web_audio_api/simple_synth/index.html index b0fdf2a0c4..622a71cff0 100644 --- a/files/pt-br/web/api/web_audio_api/simple_synth/index.html +++ b/files/pt-br/web/api/web_audio_api/simple_synth/index.html @@ -1,6 +1,6 @@ --- title: 'Tutorial e exemplo: Teclado de Sintetizador Simples' -slug: Web/API/API_Web_Audio/Sintetizador_simples +slug: Web/API/Web_Audio_API/Simple_synth tags: - Audio - Exemplo @@ -12,6 +12,7 @@ tags: - Tutorial - Web Audio API translation_of: Web/API/Web_Audio_API/Simple_synth +original_slug: Web/API/API_Web_Audio/Sintetizador_simples ---
    {{DefaultAPISidebar("Web Audio API")}}
    diff --git a/files/pt-br/web/api/web_storage_api/index.html b/files/pt-br/web/api/web_storage_api/index.html index f4e16bd9e7..d0256b1212 100644 --- a/files/pt-br/web/api/web_storage_api/index.html +++ b/files/pt-br/web/api/web_storage_api/index.html @@ -1,7 +1,8 @@ --- title: API de Armazenamento na Web -slug: Web/API/Web_Storage_API_pt_br +slug: Web/API/Web_Storage_API translation_of: Web/API/Web_Storage_API +original_slug: Web/API/Web_Storage_API_pt_br ---

    {{DefaultAPISidebar("Web Storage API")}}

    diff --git a/files/pt-br/web/api/web_storage_api/using_the_web_storage_api/index.html b/files/pt-br/web/api/web_storage_api/using_the_web_storage_api/index.html index eb9807f0ef..b43c7361fd 100644 --- a/files/pt-br/web/api/web_storage_api/using_the_web_storage_api/index.html +++ b/files/pt-br/web/api/web_storage_api/using_the_web_storage_api/index.html @@ -1,6 +1,6 @@ --- title: Usando a API Web Storage -slug: Web/API/Web_Storage_API_pt_br/Using_the_Web_Storage_API +slug: Web/API/Web_Storage_API/Using_the_Web_Storage_API tags: - API - Guía @@ -9,6 +9,7 @@ tags: - localStorage - sessionStorage translation_of: Web/API/Web_Storage_API/Using_the_Web_Storage_API +original_slug: Web/API/Web_Storage_API_pt_br/Using_the_Web_Storage_API ---
    {{DefaultAPISidebar("Web Storage API")}}
    diff --git a/files/pt-br/web/api/webgl_api/tutorial/adding_2d_content_to_a_webgl_context/index.html b/files/pt-br/web/api/webgl_api/tutorial/adding_2d_content_to_a_webgl_context/index.html index 7b4f6384f6..3efa67f3f3 100644 --- a/files/pt-br/web/api/webgl_api/tutorial/adding_2d_content_to_a_webgl_context/index.html +++ b/files/pt-br/web/api/webgl_api/tutorial/adding_2d_content_to_a_webgl_context/index.html @@ -1,10 +1,11 @@ --- title: Adicionando conteúdo 2D a um contexto WebGL -slug: Web/API/WebGL_API/Tutorial/Adicionando_conteudo_2D_a_um_contexto_WebGL +slug: Web/API/WebGL_API/Tutorial/Adding_2D_content_to_a_WebGL_context tags: - Tutorial - WebGL translation_of: Web/API/WebGL_API/Tutorial/Adding_2D_content_to_a_WebGL_context +original_slug: Web/API/WebGL_API/Tutorial/Adicionando_conteudo_2D_a_um_contexto_WebGL ---

    {{WebGLSidebar("Tutorial")}} {{PreviousNext("Web/API/WebGL_API/Tutorial/Getting_started_with_WebGL", "Web/API/WebGL_API/Tutorial/Using_shaders_to_apply_color_in_WebGL")}}

    diff --git a/files/pt-br/web/api/webrtc_api/simple_rtcdatachannel_sample/index.html b/files/pt-br/web/api/webrtc_api/simple_rtcdatachannel_sample/index.html index 72ac37e56a..9e3e309d90 100644 --- a/files/pt-br/web/api/webrtc_api/simple_rtcdatachannel_sample/index.html +++ b/files/pt-br/web/api/webrtc_api/simple_rtcdatachannel_sample/index.html @@ -1,7 +1,8 @@ --- title: Uma simples amostra de RTCDataChannel -slug: Web/API/WebRTC_API/Simples_RTCDataChannel_amostra +slug: Web/API/WebRTC_API/Simple_RTCDataChannel_sample translation_of: Web/API/WebRTC_API/Simple_RTCDataChannel_sample +original_slug: Web/API/WebRTC_API/Simples_RTCDataChannel_amostra ---

    {{WebRTCSidebar}}

    diff --git a/files/pt-br/web/api/websockets_api/index.html b/files/pt-br/web/api/websockets_api/index.html index 1a24b9d86a..7457f9dbb9 100644 --- a/files/pt-br/web/api/websockets_api/index.html +++ b/files/pt-br/web/api/websockets_api/index.html @@ -1,11 +1,12 @@ --- title: WebSockets -slug: WebSockets +slug: Web/API/WebSockets_API tags: - Referencia - Sumario - WebSockets translation_of: Web/API/WebSockets_API +original_slug: WebSockets ---

    WebSockets é uma tecnologia avançada que torna possível abrir uma sessão de comunicação interativa entre o navegador do usuário e um servidor. Com esta API, você pode enviar mensagens para um servidor e receber respostas orientadas a eventos sem ter que consultar o servidor para obter uma resposta.

    diff --git a/files/pt-br/web/api/websockets_api/writing_websocket_client_applications/index.html b/files/pt-br/web/api/websockets_api/writing_websocket_client_applications/index.html index af608ae641..5dc99a6a39 100644 --- a/files/pt-br/web/api/websockets_api/writing_websocket_client_applications/index.html +++ b/files/pt-br/web/api/websockets_api/writing_websocket_client_applications/index.html @@ -1,12 +1,13 @@ --- title: Escrevendo aplicações cliente WebSocket -slug: WebSockets/Escrevendo_aplicacoes_cliente_WebSocket +slug: Web/API/WebSockets_API/Writing_WebSocket_client_applications tags: - Cliente - Exemplo - Guía - WebSocket API translation_of: Web/API/WebSockets_API/Writing_WebSocket_client_applications +original_slug: WebSockets/Escrevendo_aplicacoes_cliente_WebSocket ---

    Aplicações cliente usam o WebSocket API para se comunicar com WebSocket servers sob o protocolo WebSocket.

    diff --git a/files/pt-br/web/api/websockets_api/writing_websocket_server/index.html b/files/pt-br/web/api/websockets_api/writing_websocket_server/index.html index 553ba11aec..6e06c7596c 100644 --- a/files/pt-br/web/api/websockets_api/writing_websocket_server/index.html +++ b/files/pt-br/web/api/websockets_api/writing_websocket_server/index.html @@ -1,7 +1,8 @@ --- title: 'Escrevendo um servidor WebSocket em C #' -slug: WebSockets/Writing_WebSocket_server +slug: Web/API/WebSockets_API/Writing_WebSocket_server translation_of: Web/API/WebSockets_API/Writing_WebSocket_server +original_slug: WebSockets/Writing_WebSocket_server ---

    Introdução

    diff --git a/files/pt-br/web/api/websockets_api/writing_websocket_servers/index.html b/files/pt-br/web/api/websockets_api/writing_websocket_servers/index.html index e493605538..1ad44bce90 100644 --- a/files/pt-br/web/api/websockets_api/writing_websocket_servers/index.html +++ b/files/pt-br/web/api/websockets_api/writing_websocket_servers/index.html @@ -1,6 +1,6 @@ --- title: Escrevendo um servidor WebSocket -slug: WebSockets/Writing_WebSocket_servers +slug: Web/API/WebSockets_API/Writing_WebSocket_servers tags: - Guía - HTML5 @@ -8,6 +8,7 @@ tags: - WebSocket - WebSockets translation_of: Web/API/WebSockets_API/Writing_WebSocket_servers +original_slug: WebSockets/Writing_WebSocket_servers ---

    Um servidor de WebSocket  é uma aplicação TCP que escuta uma porta de um servidor que segue um protocolo específico, simples assim. A tarefa de criar um servidor personalizado costuma assustar as pessoas; no entanto, pode ser fácil implementar um simples servidor WebSocket na sua plataforma de escolha. 

    diff --git a/files/pt-br/web/api/window/beforeunload_event/index.html b/files/pt-br/web/api/window/beforeunload_event/index.html index 6d6034318c..d8e22e6ba8 100644 --- a/files/pt-br/web/api/window/beforeunload_event/index.html +++ b/files/pt-br/web/api/window/beforeunload_event/index.html @@ -1,7 +1,8 @@ --- title: beforeunload -slug: Web/Events/beforeunload +slug: Web/API/Window/beforeunload_event translation_of: Web/API/Window/beforeunload_event +original_slug: Web/Events/beforeunload ---

    O evento beforeunload é disparado quando o window, o document e seus recursos estão prestes a ser descarregados.

    diff --git a/files/pt-br/web/api/window/domcontentloaded_event/index.html b/files/pt-br/web/api/window/domcontentloaded_event/index.html index eb54671921..d5d629de2a 100644 --- a/files/pt-br/web/api/window/domcontentloaded_event/index.html +++ b/files/pt-br/web/api/window/domcontentloaded_event/index.html @@ -1,7 +1,8 @@ --- title: DOMContentLoaded -slug: Web/Events/DOMContentLoaded +slug: Web/API/Window/DOMContentLoaded_event translation_of: Web/API/Window/DOMContentLoaded_event +original_slug: Web/Events/DOMContentLoaded ---

    O evento DOMContentLoaded é acionado quando todo o HTML foi completamente carregado e analisado, sem aguardar pelo CSS, imagens, e subframes para encerrar o carregamento. Um evento muito diferente - load - deve ser usado apenas para detectar uma página completamente carregada. É um engano comum as pessoas usarem load quando DOMContentLoaded seria muito mais apropriado.

    diff --git a/files/pt-br/web/api/window/load_event/index.html b/files/pt-br/web/api/window/load_event/index.html index db04b1ecbe..c83b7f981f 100644 --- a/files/pt-br/web/api/window/load_event/index.html +++ b/files/pt-br/web/api/window/load_event/index.html @@ -1,7 +1,8 @@ --- title: load -slug: Web/Events/load +slug: Web/API/Window/load_event translation_of: Web/API/Window/load_event +original_slug: Web/Events/load ---
    O evento de load é acionado quando um recurso e seus recursos
     dependentes terminaram de carregar.
    diff --git a/files/pt-br/web/api/window/localstorage/index.html b/files/pt-br/web/api/window/localstorage/index.html index 8c7c379435..611f5f396f 100644 --- a/files/pt-br/web/api/window/localstorage/index.html +++ b/files/pt-br/web/api/window/localstorage/index.html @@ -1,6 +1,6 @@ --- title: Window.localStorage -slug: Web/API/Window/Window.localStorage +slug: Web/API/Window/localStorage tags: - API - Armazenamento @@ -9,6 +9,7 @@ tags: - WindowLocalStorage - localStorage translation_of: Web/API/Window/localStorage +original_slug: Web/API/Window/Window.localStorage ---

    {{APIRef()}}

    diff --git a/files/pt-br/web/api/windoworworkerglobalscope/atob/index.html b/files/pt-br/web/api/windoworworkerglobalscope/atob/index.html index cb9058abe5..4e58ab2c16 100644 --- a/files/pt-br/web/api/windoworworkerglobalscope/atob/index.html +++ b/files/pt-br/web/api/windoworworkerglobalscope/atob/index.html @@ -1,12 +1,13 @@ --- title: WindowBase64.atob() -slug: Web/API/WindowBase64/atob +slug: Web/API/WindowOrWorkerGlobalScope/atob tags: - API - Referencia - WindowBase64 - metodo translation_of: Web/API/WindowOrWorkerGlobalScope/atob +original_slug: Web/API/WindowBase64/atob ---
    {{APIRef("HTML DOM")}}
    diff --git a/files/pt-br/web/api/windoworworkerglobalscope/cleartimeout/index.html b/files/pt-br/web/api/windoworworkerglobalscope/cleartimeout/index.html index f03f43979f..cbcbb80329 100644 --- a/files/pt-br/web/api/windoworworkerglobalscope/cleartimeout/index.html +++ b/files/pt-br/web/api/windoworworkerglobalscope/cleartimeout/index.html @@ -1,11 +1,12 @@ --- title: WindowTimers.clearTimeout() -slug: Web/API/WindowTimers/clearTimeout +slug: Web/API/WindowOrWorkerGlobalScope/clearTimeout tags: - API - Method - Window translation_of: Web/API/WindowOrWorkerGlobalScope/clearTimeout +original_slug: Web/API/WindowTimers/clearTimeout ---
    diff --git a/files/pt-br/web/api/xmlhttprequest/synchronous_and_asynchronous_requests/index.html b/files/pt-br/web/api/xmlhttprequest/synchronous_and_asynchronous_requests/index.html index 81b8fb8d3e..33115f191e 100644 --- a/files/pt-br/web/api/xmlhttprequest/synchronous_and_asynchronous_requests/index.html +++ b/files/pt-br/web/api/xmlhttprequest/synchronous_and_asynchronous_requests/index.html @@ -1,7 +1,8 @@ --- title: Requisições síncronas e assíncronas -slug: Web/API/XMLHttpRequest/Requisicoes_sincronas_e_assincronas +slug: Web/API/XMLHttpRequest/Synchronous_and_Asynchronous_Requests translation_of: 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.

    diff --git a/files/pt-br/web/api/xmlhttprequest/using_xmlhttprequest/index.html b/files/pt-br/web/api/xmlhttprequest/using_xmlhttprequest/index.html index b541e64bc1..3f5ff0c474 100644 --- a/files/pt-br/web/api/xmlhttprequest/using_xmlhttprequest/index.html +++ b/files/pt-br/web/api/xmlhttprequest/using_xmlhttprequest/index.html @@ -1,7 +1,8 @@ --- title: Usando XMLHttpRequest -slug: Web/API/XMLHttpRequest/Usando_XMLHttpRequest +slug: Web/API/XMLHttpRequest/Using_XMLHttpRequest translation_of: Web/API/XMLHttpRequest/Using_XMLHttpRequest +original_slug: Web/API/XMLHttpRequest/Usando_XMLHttpRequest ---

    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 HTTP 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.

    diff --git a/files/pt-br/web/css/actual_value/index.html b/files/pt-br/web/css/actual_value/index.html index b7f9307a58..75a7d517f2 100644 --- a/files/pt-br/web/css/actual_value/index.html +++ b/files/pt-br/web/css/actual_value/index.html @@ -1,7 +1,8 @@ --- title: Valor atual -slug: Web/CSS/Valor_atual +slug: Web/CSS/actual_value translation_of: Web/CSS/actual_value +original_slug: Web/CSS/Valor_atual ---
    {{CSSRef}}
    diff --git a/files/pt-br/web/css/attribute_selectors/index.html b/files/pt-br/web/css/attribute_selectors/index.html index 88881a61ea..024466be56 100644 --- a/files/pt-br/web/css/attribute_selectors/index.html +++ b/files/pt-br/web/css/attribute_selectors/index.html @@ -1,7 +1,8 @@ --- title: Seletor de atributos -slug: Web/CSS/Seletor_de_atributos +slug: Web/CSS/Attribute_selectors translation_of: Web/CSS/Attribute_selectors +original_slug: Web/CSS/Seletor_de_atributos ---
    {{CSSRef}}
    diff --git a/files/pt-br/web/css/box-ordinal-group/index.html b/files/pt-br/web/css/box-ordinal-group/index.html index 3c3963b7e6..38cc1d0538 100644 --- a/files/pt-br/web/css/box-ordinal-group/index.html +++ b/files/pt-br/web/css/box-ordinal-group/index.html @@ -1,8 +1,9 @@ --- title: '-moz-box-ordinal-group' -slug: Web/CSS/-moz-box-ordinal-group +slug: Web/CSS/box-ordinal-group translation_of: Web/CSS/box-ordinal-group translation_of_original: Web/CSS/-moz-box-ordinal-group +original_slug: Web/CSS/-moz-box-ordinal-group ---

    {{CSSRef}}{{Warning("Essa propriedade é parte do projeto do módulo original do CSS Flexible Box Layout, e foi substituído em projetos recentes.")}}

    diff --git a/files/pt-br/web/css/comments/index.html b/files/pt-br/web/css/comments/index.html index dabb46a04f..995dd3441d 100644 --- a/files/pt-br/web/css/comments/index.html +++ b/files/pt-br/web/css/comments/index.html @@ -1,11 +1,12 @@ --- title: Comentário -slug: Web/CSS/Comentário +slug: Web/CSS/Comments tags: - CSS - CSS Reference - Iniciante translation_of: Web/CSS/Comments +original_slug: Web/CSS/Comentário ---
    ios{{CSSRef}}
    diff --git a/files/pt-br/web/css/computed_value/index.html b/files/pt-br/web/css/computed_value/index.html index a4932b8d40..754daf3626 100644 --- a/files/pt-br/web/css/computed_value/index.html +++ b/files/pt-br/web/css/computed_value/index.html @@ -1,12 +1,13 @@ --- title: Valor Computado -slug: Web/CSS/valor_computado +slug: Web/CSS/computed_value tags: - CSS - Guía - Iniciante - Web translation_of: Web/CSS/computed_value +original_slug: Web/CSS/valor_computado ---
    {{cssref}}
    diff --git a/files/pt-br/web/css/css_animations/using_css_animations/index.html b/files/pt-br/web/css/css_animations/using_css_animations/index.html index 4bdd91ad9f..2b3187c0e3 100644 --- a/files/pt-br/web/css/css_animations/using_css_animations/index.html +++ b/files/pt-br/web/css/css_animations/using_css_animations/index.html @@ -1,6 +1,6 @@ --- title: Usando animações CSS -slug: Web/CSS/CSS_Animations/Usando_animações_CSS +slug: Web/CSS/CSS_Animations/Using_CSS_animations tags: - Advanced - CSS @@ -9,6 +9,7 @@ tags: - Experimental - Guide translation_of: Web/CSS/CSS_Animations/Using_CSS_animations +original_slug: Web/CSS/CSS_Animations/Usando_animações_CSS ---

    {{SeeCompatTable}}{{CSSRef}}

    diff --git a/files/pt-br/web/css/css_background_and_borders/border-image_generator/index.html b/files/pt-br/web/css/css_background_and_borders/border-image_generator/index.html index d350bce6b5..7f4cbb9f2c 100644 --- a/files/pt-br/web/css/css_background_and_borders/border-image_generator/index.html +++ b/files/pt-br/web/css/css_background_and_borders/border-image_generator/index.html @@ -1,9 +1,10 @@ --- title: Gerador de Border-image -slug: Web/CSS/Tools/Border-image_generator +slug: Web/CSS/CSS_Background_and_Borders/Border-image_generator tags: - Alternativas CSS translation_of: Web/CSS/CSS_Background_and_Borders/Border-image_generator +original_slug: Web/CSS/Tools/Border-image_generator ---

    Esta ferramenta pode ser utilizada para gerar o valor {{cssxref("border-image")}} em CSS3.

    diff --git a/files/pt-br/web/css/css_background_and_borders/border-radius_generator/index.html b/files/pt-br/web/css/css_background_and_borders/border-radius_generator/index.html index a7db08eb69..efdba46316 100644 --- a/files/pt-br/web/css/css_background_and_borders/border-radius_generator/index.html +++ b/files/pt-br/web/css/css_background_and_borders/border-radius_generator/index.html @@ -1,10 +1,11 @@ --- title: Gerador de Border-radius -slug: Web/CSS/Tools/Border-radius_generator +slug: Web/CSS/CSS_Background_and_Borders/Border-radius_generator tags: - CSS - Ferramentas translation_of: Web/CSS/CSS_Background_and_Borders/Border-radius_generator +original_slug: Web/CSS/Tools/Border-radius_generator ---

    Esta ferramenta pode ser utilizada para gerar o efeito {{cssxref("border-radius")}} em CSS3.

    diff --git a/files/pt-br/web/css/css_backgrounds_and_borders/index.html b/files/pt-br/web/css/css_backgrounds_and_borders/index.html index 59c2117194..3c843d9d45 100644 --- a/files/pt-br/web/css/css_backgrounds_and_borders/index.html +++ b/files/pt-br/web/css/css_backgrounds_and_borders/index.html @@ -1,6 +1,6 @@ --- title: CSS Background and Borders -slug: Web/CSS/CSS_Background_and_Borders +slug: Web/CSS/CSS_Backgrounds_and_Borders tags: - CSS - CSS Backgrounds and Borders @@ -10,6 +10,7 @@ tags: - TopicStub translation_of: Web/CSS/CSS_Backgrounds_and_Borders translation_of_original: Web/CSS/CSS_Background_and_Borders +original_slug: Web/CSS/CSS_Background_and_Borders ---

    {{CSSRef}}

    diff --git a/files/pt-br/web/css/css_backgrounds_and_borders/resizing_background_images/index.html b/files/pt-br/web/css/css_backgrounds_and_borders/resizing_background_images/index.html index d7c3ccfa3f..7928336c6e 100644 --- a/files/pt-br/web/css/css_backgrounds_and_borders/resizing_background_images/index.html +++ b/files/pt-br/web/css/css_backgrounds_and_borders/resizing_background_images/index.html @@ -1,8 +1,9 @@ --- title: Alterando a escala das imagens de background -slug: Web/Guide/CSS/Scaling_background_images +slug: Web/CSS/CSS_Backgrounds_and_Borders/Resizing_background_images translation_of: Web/CSS/CSS_Backgrounds_and_Borders/Resizing_background_images translation_of_original: Web/CSS/CSS_Background_and_Borders/Scaling_background_images +original_slug: Web/Guide/CSS/Scaling_background_images ---

    A propriedade CSS {{ cssxref("background-size") }} possibilita o ajuste das imagens do background, ao invés do comportamento padrão do navegador de mostrar a imagem no seu tamanho real. Você pode tanto aumentar como diminuir a imagem.

    diff --git a/files/pt-br/web/css/css_backgrounds_and_borders/using_multiple_backgrounds/index.html b/files/pt-br/web/css/css_backgrounds_and_borders/using_multiple_backgrounds/index.html index d0e4fa11f7..d103c2d441 100644 --- a/files/pt-br/web/css/css_backgrounds_and_borders/using_multiple_backgrounds/index.html +++ b/files/pt-br/web/css/css_backgrounds_and_borders/using_multiple_backgrounds/index.html @@ -1,6 +1,6 @@ --- title: Multiple backgrounds -slug: Web/CSS/CSS_Background_and_Borders/Using_CSS_multiple_backgrounds +slug: Web/CSS/CSS_Backgrounds_and_Borders/Using_multiple_backgrounds tags: - CSS - CSS Background @@ -9,6 +9,7 @@ tags: - Intermediate translation_of: Web/CSS/CSS_Backgrounds_and_Borders/Using_multiple_backgrounds translation_of_original: Web/CSS/CSS_Background_and_Borders/Using_CSS_multiple_backgrounds +original_slug: Web/CSS/CSS_Background_and_Borders/Using_CSS_multiple_backgrounds ---

    {{CSSRef}}

    diff --git a/files/pt-br/web/css/css_box_model/introduction_to_the_css_box_model/index.html b/files/pt-br/web/css/css_box_model/introduction_to_the_css_box_model/index.html index 8c0db35cf6..f246d86537 100644 --- a/files/pt-br/web/css/css_box_model/introduction_to_the_css_box_model/index.html +++ b/files/pt-br/web/css/css_box_model/introduction_to_the_css_box_model/index.html @@ -1,7 +1,8 @@ --- title: Box model -slug: Web/CSS/box_model +slug: Web/CSS/CSS_Box_Model/Introduction_to_the_CSS_box_model translation_of: Web/CSS/CSS_Box_Model/Introduction_to_the_CSS_box_model +original_slug: Web/CSS/box_model ---

    Resumo

    diff --git a/files/pt-br/web/css/css_box_model/mastering_margin_collapsing/index.html b/files/pt-br/web/css/css_box_model/mastering_margin_collapsing/index.html index cb658d4131..aa78bdaa3f 100644 --- a/files/pt-br/web/css/css_box_model/mastering_margin_collapsing/index.html +++ b/files/pt-br/web/css/css_box_model/mastering_margin_collapsing/index.html @@ -1,6 +1,6 @@ --- title: Dominando margin collapsing -slug: Web/CSS/CSS_Box_Model/margin_collapsing +slug: Web/CSS/CSS_Box_Model/Mastering_margin_collapsing tags: - CSS - CSS Box Model @@ -8,6 +8,7 @@ tags: - Intermediario(2) - Referencia translation_of: Web/CSS/CSS_Box_Model/Mastering_margin_collapsing +original_slug: Web/CSS/CSS_Box_Model/margin_collapsing ---
    {{CSSRef}}
    diff --git a/files/pt-br/web/css/css_colors/color_picker_tool/index.html b/files/pt-br/web/css/css_colors/color_picker_tool/index.html index a98aaf9342..5769079812 100644 --- a/files/pt-br/web/css/css_colors/color_picker_tool/index.html +++ b/files/pt-br/web/css/css_colors/color_picker_tool/index.html @@ -1,6 +1,6 @@ --- title: Seletor de cores -slug: Web/CSS/CSS_Colors/seletor_de_cores +slug: Web/CSS/CSS_Colors/Color_picker_tool tags: - CSS - Cores CSS @@ -14,6 +14,7 @@ tags: - cor - cores translation_of: Web/CSS/CSS_Colors/Color_picker_tool +original_slug: Web/CSS/CSS_Colors/seletor_de_cores ---

    ColorPicker tool

    diff --git a/files/pt-br/web/css/css_flexible_box_layout/basic_concepts_of_flexbox/index.html b/files/pt-br/web/css/css_flexible_box_layout/basic_concepts_of_flexbox/index.html index 05318caa79..03915905c1 100644 --- a/files/pt-br/web/css/css_flexible_box_layout/basic_concepts_of_flexbox/index.html +++ b/files/pt-br/web/css/css_flexible_box_layout/basic_concepts_of_flexbox/index.html @@ -1,6 +1,6 @@ --- title: Conceitos básicos de flexbox -slug: Web/CSS/CSS_Flexible_Box_Layout/Conceitos_Basicos_do_Flexbox +slug: Web/CSS/CSS_Flexible_Box_Layout/Basic_Concepts_of_Flexbox tags: - CSS - Flex @@ -10,6 +10,7 @@ tags: - eixos - flexbox translation_of: Web/CSS/CSS_Flexible_Box_Layout/Basic_Concepts_of_Flexbox +original_slug: Web/CSS/CSS_Flexible_Box_Layout/Conceitos_Basicos_do_Flexbox ---
    {{CSSRef}}
    diff --git a/files/pt-br/web/css/css_images/implementing_image_sprites_in_css/index.html b/files/pt-br/web/css/css_images/implementing_image_sprites_in_css/index.html index e14ba15c2d..ea9ebba28b 100644 --- a/files/pt-br/web/css/css_images/implementing_image_sprites_in_css/index.html +++ b/files/pt-br/web/css/css_images/implementing_image_sprites_in_css/index.html @@ -1,7 +1,8 @@ --- title: Implementando sprites de imagens em CSS -slug: Web/CSS/CSS_Images/Implementando_sprites_de_imagens_em_CSS +slug: Web/CSS/CSS_Images/Implementing_image_sprites_in_CSS translation_of: Web/CSS/CSS_Images/Implementing_image_sprites_in_CSS +original_slug: Web/CSS/CSS_Images/Implementando_sprites_de_imagens_em_CSS ---
    {{cssRef}}
    diff --git a/files/pt-br/web/css/css_positioning/understanding_z_index/index.html b/files/pt-br/web/css/css_positioning/understanding_z_index/index.html index 488ca0f600..4f1731946f 100644 --- a/files/pt-br/web/css/css_positioning/understanding_z_index/index.html +++ b/files/pt-br/web/css/css_positioning/understanding_z_index/index.html @@ -1,6 +1,6 @@ --- title: Understanding CSS z-index -slug: Web/Guide/CSS/Understanding_z_index +slug: Web/CSS/CSS_Positioning/Understanding_z_index tags: - CSS - Entendendo_CSS_z-index @@ -8,6 +8,7 @@ tags: - Web - z-index translation_of: Web/CSS/CSS_Positioning/Understanding_z_index +original_slug: Web/Guide/CSS/Understanding_z_index ---

    Normalmente páginas HTML podem ser consideradas bi-dimensionais, pois texto, imagens e outros elementos podem ser dispostos na página sem sobreposição. Há apenas um fluxo de renderização e todos os elementos sabem do espaço ocupado por outros. O atributo {{cssxref("z-index")}} lhe permite ajustar a ordem de sobreposição dos objetos ao renderizar o conteúdo.

    diff --git a/files/pt-br/web/css/css_selectors/index.html b/files/pt-br/web/css/css_selectors/index.html index 644d9d87e9..ca644d3c91 100644 --- a/files/pt-br/web/css/css_selectors/index.html +++ b/files/pt-br/web/css/css_selectors/index.html @@ -1,12 +1,13 @@ --- title: Seletores CSS -slug: Web/CSS/Seletores_CSS +slug: Web/CSS/CSS_Selectors tags: - CSS - Referência(2) - Seletores - Seletores CSS translation_of: Web/CSS/CSS_Selectors +original_slug: Web/CSS/Seletores_CSS ---
    {{CSSRef}}
    diff --git a/files/pt-br/web/css/css_types/index.html b/files/pt-br/web/css/css_types/index.html index 79256061ae..453be0fe49 100644 --- a/files/pt-br/web/css/css_types/index.html +++ b/files/pt-br/web/css/css_types/index.html @@ -1,12 +1,13 @@ --- title: Tipos básicos de dados CSS -slug: Web/CSS/CSS_Tipos +slug: Web/CSS/CSS_Types tags: - CSS - CSS tipos de dados - Referencia - Visão Geral translation_of: Web/CSS/CSS_Types +original_slug: Web/CSS/CSS_Tipos ---
    {{CssRef}}
    diff --git a/files/pt-br/web/css/hyphens/index.html b/files/pt-br/web/css/hyphens/index.html index c8e718562f..c6189fc13c 100644 --- a/files/pt-br/web/css/hyphens/index.html +++ b/files/pt-br/web/css/hyphens/index.html @@ -1,7 +1,8 @@ --- title: hifens -slug: Web/CSS/hifens +slug: Web/CSS/hyphens translation_of: Web/CSS/hyphens +original_slug: Web/CSS/hifens ---
    {{CSSRef}}
    diff --git a/files/pt-br/web/css/image/index.html b/files/pt-br/web/css/image/index.html index fe9631cb30..ed45fcadaf 100644 --- a/files/pt-br/web/css/image/index.html +++ b/files/pt-br/web/css/image/index.html @@ -1,6 +1,6 @@ --- title: -slug: Web/CSS/imagem +slug: Web/CSS/image tags: - CSS - CSS imagens @@ -10,6 +10,7 @@ tags: - Web - graficos translation_of: Web/CSS/image +original_slug: Web/CSS/imagem ---
    {{CSSRef}}
    diff --git a/files/pt-br/web/css/initial_value/index.html b/files/pt-br/web/css/initial_value/index.html index fea27bfe3c..2a042a41db 100644 --- a/files/pt-br/web/css/initial_value/index.html +++ b/files/pt-br/web/css/initial_value/index.html @@ -1,12 +1,13 @@ --- title: Valor inicial -slug: Web/CSS/valor_inicial +slug: Web/CSS/initial_value tags: - CSS - Iniciante - Web - valor inicial translation_of: Web/CSS/initial_value +original_slug: Web/CSS/valor_inicial ---
    {{cssref}}
    diff --git a/files/pt-br/web/css/layout_mode/index.html b/files/pt-br/web/css/layout_mode/index.html index 883cdbd4a4..c4c5f9afa8 100644 --- a/files/pt-br/web/css/layout_mode/index.html +++ b/files/pt-br/web/css/layout_mode/index.html @@ -1,7 +1,8 @@ --- title: Modelo de layout -slug: Web/CSS/Modelo_layout +slug: Web/CSS/Layout_mode translation_of: Web/CSS/Layout_mode +original_slug: Web/CSS/Modelo_layout ---

    O modelo de layout CSS, às vezes abreviado por layout, é um algoritimo que determina a posição e tamanho dos boxes baseado em como estes interagem com os boxes filhos e boxe ancestral. Há vários layouts:

    diff --git a/files/pt-br/web/css/mask/index.html b/files/pt-br/web/css/mask/index.html index 4b7f7f52d5..6b14e67849 100644 --- a/files/pt-br/web/css/mask/index.html +++ b/files/pt-br/web/css/mask/index.html @@ -1,6 +1,6 @@ --- title: mask -slug: mask +slug: Web/CSS/mask tags: - CSS - Compatibilidade Mobile @@ -11,6 +11,7 @@ tags: - Web - máscaras translation_of: Web/CSS/mask +original_slug: mask ---
    {{CSSRef}}
    diff --git a/files/pt-br/web/css/media_queries/using_media_queries/index.html b/files/pt-br/web/css/media_queries/using_media_queries/index.html index 4b9728eebd..aa5eb03a87 100644 --- a/files/pt-br/web/css/media_queries/using_media_queries/index.html +++ b/files/pt-br/web/css/media_queries/using_media_queries/index.html @@ -1,11 +1,12 @@ --- title: Usando Media Queries -slug: Web/Guide/CSS/CSS_Media_queries +slug: Web/CSS/Media_Queries/Using_media_queries tags: - CSS - Desenho Responsivo - Design Responsivo translation_of: Web/CSS/Media_Queries/Using_media_queries +original_slug: Web/Guide/CSS/CSS_Media_queries ---

    Uma media query consiste de um media type e pelo menos uma expressão que limita o escopo das folhas de estilo usando media features, tal como largura, altura e cor. Media queries, adicionadas no CSS3, deixam a apresentação do conteúdo adaptado a uma gama especifica de dispositivos não precisando mudar o conteúdo em si.

    diff --git a/files/pt-br/web/css/overflow-wrap/index.html b/files/pt-br/web/css/overflow-wrap/index.html index c23f4b966d..0ace224d5a 100644 --- a/files/pt-br/web/css/overflow-wrap/index.html +++ b/files/pt-br/web/css/overflow-wrap/index.html @@ -1,7 +1,8 @@ --- title: word-wrap -slug: Web/CSS/word-wrap +slug: Web/CSS/overflow-wrap translation_of: Web/CSS/overflow-wrap +original_slug: Web/CSS/word-wrap ---
    {{CSSRef}} {{SeeCompatTable}}
    diff --git a/files/pt-br/web/css/privacy_and_the__colon_visited_selector/index.html b/files/pt-br/web/css/privacy_and_the__colon_visited_selector/index.html index 273c7765e3..13c4876dc2 100644 --- a/files/pt-br/web/css/privacy_and_the__colon_visited_selector/index.html +++ b/files/pt-br/web/css/privacy_and_the__colon_visited_selector/index.html @@ -1,6 +1,6 @@ --- -title: 'Privacidade e o seletor :visited' -slug: 'Web/CSS/Privacidade_e_o_seletor_:visited' +title: Privacidade e o seletor :visited +slug: Web/CSS/Privacy_and_the_:visited_selector tags: - CSS - Guía @@ -8,7 +8,8 @@ tags: - Referencia - Segurança - Seletores -translation_of: 'Web/CSS/Privacy_and_the_:visited_selector' +translation_of: Web/CSS/Privacy_and_the_:visited_selector +original_slug: Web/CSS/Privacidade_e_o_seletor_:visited ---
    {{cssref}}
    diff --git a/files/pt-br/web/css/pseudo-elements/index.html b/files/pt-br/web/css/pseudo-elements/index.html index a457c9ac9a..4892001aa6 100644 --- a/files/pt-br/web/css/pseudo-elements/index.html +++ b/files/pt-br/web/css/pseudo-elements/index.html @@ -1,6 +1,6 @@ --- title: Pseudo-elementos -slug: Web/CSS/Pseudo-elementos +slug: Web/CSS/Pseudo-elements tags: - CSS - Principiantes @@ -8,6 +8,7 @@ tags: - Referencia - Seletores translation_of: Web/CSS/Pseudo-elements +original_slug: Web/CSS/Pseudo-elementos ---
    {{ CSSRef() }}
    diff --git a/files/pt-br/web/css/reference/index.html b/files/pt-br/web/css/reference/index.html index 1afbf4890e..af77086221 100644 --- a/files/pt-br/web/css/reference/index.html +++ b/files/pt-br/web/css/reference/index.html @@ -1,7 +1,8 @@ --- title: Referência de CSS -slug: Web/CSS/CSS_Reference +slug: Web/CSS/Reference translation_of: Web/CSS/Reference +original_slug: Web/CSS/CSS_Reference --- {{CSSRef}} diff --git a/files/pt-br/web/css/replaced_element/index.html b/files/pt-br/web/css/replaced_element/index.html index 22ba1b8ad0..48859c2ed8 100644 --- a/files/pt-br/web/css/replaced_element/index.html +++ b/files/pt-br/web/css/replaced_element/index.html @@ -1,7 +1,8 @@ --- title: Elemento substituído -slug: Web/CSS/Elemento_substituido +slug: Web/CSS/Replaced_element translation_of: Web/CSS/Replaced_element +original_slug: Web/CSS/Elemento_substituido ---
    {{CSSRef()}}
    diff --git a/files/pt-br/web/css/resolved_value/index.html b/files/pt-br/web/css/resolved_value/index.html index a045149bc7..8adf0cb651 100644 --- a/files/pt-br/web/css/resolved_value/index.html +++ b/files/pt-br/web/css/resolved_value/index.html @@ -1,12 +1,13 @@ --- title: Valor Resolvido -slug: Web/CSS/Valor_resolvido +slug: Web/CSS/resolved_value tags: - CSS - Guía - Iniciante - Web translation_of: Web/CSS/resolved_value +original_slug: Web/CSS/Valor_resolvido ---
    {{cssref}}
    diff --git a/files/pt-br/web/css/specified_value/index.html b/files/pt-br/web/css/specified_value/index.html index 939aa09234..4ee4c2c7de 100644 --- a/files/pt-br/web/css/specified_value/index.html +++ b/files/pt-br/web/css/specified_value/index.html @@ -1,11 +1,12 @@ --- title: Valor Especifícado -slug: Web/CSS/valor_espeficifco +slug: Web/CSS/specified_value tags: - CSS - Iniciante - Web translation_of: Web/CSS/specified_value +original_slug: Web/CSS/valor_espeficifco ---

    {{CSSRef}}

    diff --git a/files/pt-br/web/css/syntax/index.html b/files/pt-br/web/css/syntax/index.html index 4d6ff0bf1c..9651279e43 100644 --- a/files/pt-br/web/css/syntax/index.html +++ b/files/pt-br/web/css/syntax/index.html @@ -1,7 +1,8 @@ --- title: Sintaxe -slug: Web/CSS/sintaxe +slug: Web/CSS/Syntax translation_of: Web/CSS/Syntax +original_slug: Web/CSS/sintaxe ---

    O Objetivo básico da linguagem de folhas de estilo em cascata (CSS) é permitir que um motor do navegador pinte elementos na página com características específicas como cores, posições, ou decorações. A sintaxe CSS reflete estes objetivos e seus blocos de contrução básicos são:

    diff --git a/files/pt-br/web/css/universal_selectors/index.html b/files/pt-br/web/css/universal_selectors/index.html index 15e64a08ca..10a1fe372d 100644 --- a/files/pt-br/web/css/universal_selectors/index.html +++ b/files/pt-br/web/css/universal_selectors/index.html @@ -1,11 +1,12 @@ --- title: Seletor universal -slug: Web/CSS/Seletor_universal +slug: Web/CSS/Universal_selectors tags: - CSS - Referências - Seletores translation_of: Web/CSS/Universal_selectors +original_slug: Web/CSS/Seletor_universal ---
    {{CSSRef}}
    diff --git a/files/pt-br/web/css/used_value/index.html b/files/pt-br/web/css/used_value/index.html index 18c48dedb5..13f2ebd194 100644 --- a/files/pt-br/web/css/used_value/index.html +++ b/files/pt-br/web/css/used_value/index.html @@ -1,7 +1,8 @@ --- title: Valor usado -slug: Web/CSS/Valor_usado +slug: Web/CSS/used_value translation_of: Web/CSS/used_value +original_slug: Web/CSS/Valor_usado ---
    {{cssref}}
    diff --git a/files/pt-br/web/css/value_definition_syntax/index.html b/files/pt-br/web/css/value_definition_syntax/index.html index d14bcaecdf..e8cba9a59b 100644 --- a/files/pt-br/web/css/value_definition_syntax/index.html +++ b/files/pt-br/web/css/value_definition_syntax/index.html @@ -1,12 +1,13 @@ --- title: Sintexe do valor -slug: Web/CSS/Sintexe_valor +slug: Web/CSS/Value_definition_syntax tags: - CSS - Guía - Iniciante - Web translation_of: Web/CSS/Value_definition_syntax +original_slug: Web/CSS/Sintexe_valor ---
    {{CSSRef}}
    diff --git a/files/pt-br/web/css/visual_formatting_model/index.html b/files/pt-br/web/css/visual_formatting_model/index.html index a37a0cc7b0..0c33243826 100644 --- a/files/pt-br/web/css/visual_formatting_model/index.html +++ b/files/pt-br/web/css/visual_formatting_model/index.html @@ -1,11 +1,12 @@ --- title: Modelo de formatação visual -slug: Web/CSS/Modelo_Visual +slug: Web/CSS/Visual_formatting_model tags: - CSS - CSS conceitos basicos - Intermediário translation_of: Web/CSS/Visual_formatting_model +original_slug: Web/CSS/Modelo_Visual ---

    {{CSSRef}}

    diff --git a/files/pt-br/web/guide/events/creating_and_triggering_events/index.html b/files/pt-br/web/guide/events/creating_and_triggering_events/index.html index 632b54df75..82e42d1fe6 100644 --- a/files/pt-br/web/guide/events/creating_and_triggering_events/index.html +++ b/files/pt-br/web/guide/events/creating_and_triggering_events/index.html @@ -1,6 +1,6 @@ --- title: Criando e disparando eventos -slug: Web/Guide/Events/criando_e_disparando_eventos +slug: Web/Guide/Events/Creating_and_triggering_events tags: - Avançado - DOM @@ -8,6 +8,7 @@ tags: - JavaScript - eventos translation_of: Web/Guide/Events/Creating_and_triggering_events +original_slug: Web/Guide/Events/criando_e_disparando_eventos ---

    Este artigo demonstra como criar e disparar eventos DOM. Tais eventos são comumente chamados eventos sintéticos, oposto aos eventos disparados pelo próprio navegador.

    diff --git a/files/pt-br/web/guide/graphics/index.html b/files/pt-br/web/guide/graphics/index.html index 6abc792433..8d0e9f4d7d 100644 --- a/files/pt-br/web/guide/graphics/index.html +++ b/files/pt-br/web/guide/graphics/index.html @@ -1,6 +1,6 @@ --- title: Gráficos na Web -slug: Web/Guide/Gráficos +slug: Web/Guide/Graphics tags: - 2D - 3D @@ -12,6 +12,7 @@ tags: - WebGL - WebRTC translation_of: Web/Guide/Graphics +original_slug: Web/Guide/Gráficos ---

    Sites modernos da Web e aplicativos frequentemente precisam exibir gráficos. Imagens estáticas podem ser exibidas facilmente usando o elemento {{HTMLElement("img")}} ou configurando o background de elementos HTML usando a propriedade {{cssxref("background-image")}}. Você também pode construir gráficos em tempo real ou manipular imagens depois de criadas. Esses artigos fornecem conhecimento de como você pode realizar isto.

    diff --git a/files/pt-br/web/guide/html/content_categories/index.html b/files/pt-br/web/guide/html/content_categories/index.html index 7b55358b7b..9383cf432f 100644 --- a/files/pt-br/web/guide/html/content_categories/index.html +++ b/files/pt-br/web/guide/html/content_categories/index.html @@ -1,6 +1,6 @@ --- title: Categorias de conteúdo -slug: Web/Guide/HTML/Categorias_de_conteudo +slug: Web/Guide/HTML/Content_categories tags: - Avançado - Guía @@ -9,6 +9,7 @@ tags: - NeedsUpdate - Web translation_of: Web/Guide/HTML/Content_categories +original_slug: Web/Guide/HTML/Categorias_de_conteudo ---

    Cada elemento HTML deve permanecer, por regras, definindo que tipo de conteúdo ele pode ter. Essas regras estão agrupadas em modelos de conteúdo para muitos elementos. Cada elemento HTML pertence a nenhum, um, ou múltiplos modelos de conteúdo, cada regra de definição que o conteúdo do elemento deve seguir em um documento HTML.

    diff --git a/files/pt-br/web/guide/html/editable_content/index.html b/files/pt-br/web/guide/html/editable_content/index.html index ed2a588e47..74c41e4762 100644 --- a/files/pt-br/web/guide/html/editable_content/index.html +++ b/files/pt-br/web/guide/html/editable_content/index.html @@ -1,7 +1,8 @@ --- title: Content Editable -slug: Web/Guide/HTML/Content_Editable +slug: Web/Guide/HTML/Editable_content translation_of: Web/Guide/HTML/Editable_content +original_slug: Web/Guide/HTML/Content_Editable ---

    No HTML5 qualquer elemento pode ser editado. Usando alguns eventos de JavaScript podemos transformar sua web page em um editor de texto completo e rápido. Este artigo fornece algumas informações sobre esta funcionalidade.

    diff --git a/files/pt-br/web/guide/html/html5/index.html b/files/pt-br/web/guide/html/html5/index.html index e39b45444a..203e4363b9 100644 --- a/files/pt-br/web/guide/html/html5/index.html +++ b/files/pt-br/web/guide/html/html5/index.html @@ -1,6 +1,6 @@ --- title: HTML5 -slug: Web/HTML/HTML5 +slug: Web/Guide/HTML/HTML5 tags: - Desenvolvimento Web - Guía @@ -9,6 +9,7 @@ tags: - Visão Geral - Web translation_of: Web/Guide/HTML/HTML5 +original_slug: Web/HTML/HTML5 ---

    HTML5 é a mais recente evolução do padrão que define o HTML. O termo representa dois conceitos diferentes:

    diff --git a/files/pt-br/web/guide/html/html5/introduction_to_html5/index.html b/files/pt-br/web/guide/html/html5/introduction_to_html5/index.html index 465d67760d..dd4a4858cb 100644 --- a/files/pt-br/web/guide/html/html5/introduction_to_html5/index.html +++ b/files/pt-br/web/guide/html/html5/introduction_to_html5/index.html @@ -1,7 +1,8 @@ --- title: Introdução ao HTML5 -slug: Web/HTML/HTML5/Introduction_to_HTML5 +slug: Web/Guide/HTML/HTML5/Introduction_to_HTML5 translation_of: Web/Guide/HTML/HTML5/Introduction_to_HTML5 +original_slug: Web/HTML/HTML5/Introduction_to_HTML5 ---

    HTML5 é a mais nova versão do padrão HTML. Ele oferece novas funcionalidades para proporcionar não somente mídias diversas, mas para melhorar o suporte para criar aplicações web que possam interagir com o usuário, seus dados locais, e servidores mais facilmente e efetivamente.

    diff --git a/files/pt-br/web/guide/html/using_html_sections_and_outlines/index.html b/files/pt-br/web/guide/html/using_html_sections_and_outlines/index.html index 09ec86b3a2..a32255a36e 100644 --- a/files/pt-br/web/guide/html/using_html_sections_and_outlines/index.html +++ b/files/pt-br/web/guide/html/using_html_sections_and_outlines/index.html @@ -1,7 +1,8 @@ --- title: Seções e estrutura de um documento HTML5 -slug: Sections_and_Outlines_of_an_HTML5_document +slug: Web/Guide/HTML/Using_HTML_sections_and_outlines translation_of: Web/Guide/HTML/Using_HTML_sections_and_outlines +original_slug: Sections_and_Outlines_of_an_HTML5_document ---

    Importante: Atualmente não há implementações conhecidas do algorítmo de estrutura em navegadores gráficos ou user agents de tecnologia assistiva, apesar disso o algorítmo é implementado em outro software como em verificadores de conformidade. Assim, ao algorítmo de estrutura não pode ser confiada a  entrega da estrutura do documento para os usuários. Autores são aconselhados a usar níveis de cabeçalho (h1-h6) para transmitir a estrutura do documento.

    diff --git a/files/pt-br/web/guide/introduction_to_web_development/index.html b/files/pt-br/web/guide/introduction_to_web_development/index.html index 46944374f5..e9e156deef 100644 --- a/files/pt-br/web/guide/introduction_to_web_development/index.html +++ b/files/pt-br/web/guide/introduction_to_web_development/index.html @@ -1,6 +1,6 @@ --- title: Introdução ao Desenvolvimento Web -slug: Web/Guide/Introducao_ao_Desenvolvimento_Web +slug: Web/Guide/Introduction_to_Web_development tags: - CSS - CodingScriping @@ -9,6 +9,7 @@ tags: - JavaScript - Web translation_of: Web/Guide/Introduction_to_Web_development +original_slug: Web/Guide/Introducao_ao_Desenvolvimento_Web ---

    Se você está apenas começando com o desenvolvimento Web ou expandindo seus horizontes em novos domínios da espetacular Web, os links aqui devem ajudá-lo a começar.

    diff --git a/files/pt-br/web/guide/mobile/mobile-friendliness/index.html b/files/pt-br/web/guide/mobile/mobile-friendliness/index.html index 4fd3c49a1a..f0fd58179b 100644 --- a/files/pt-br/web/guide/mobile/mobile-friendliness/index.html +++ b/files/pt-br/web/guide/mobile/mobile-friendliness/index.html @@ -1,7 +1,8 @@ --- title: Site Móvel Amigável -slug: Web_Development/Mobile/Mobile-friendliness +slug: Web/Guide/Mobile/Mobile-friendliness translation_of: Web/Guide/Mobile/Mobile-friendliness +original_slug: Web_Development/Mobile/Mobile-friendliness ---

    O que é site móvel amigável?

    Mobile friendliness can mean a multitude of things, depending on who you’re talking to. It can be helpful to think of it in terms of three goals for improving your site’s user experience: Presentation, Content, and Performance.

    diff --git a/files/pt-br/web/guide/mobile/separate_sites/index.html b/files/pt-br/web/guide/mobile/separate_sites/index.html index 2ca783fbc9..b613cf74d8 100644 --- a/files/pt-br/web/guide/mobile/separate_sites/index.html +++ b/files/pt-br/web/guide/mobile/separate_sites/index.html @@ -1,7 +1,8 @@ --- title: Sites separados para celular e desktop -slug: Web_Development/Mobile/Sites_separados +slug: Web/Guide/Mobile/Separate_sites translation_of: Web/Guide/Mobile/Separate_sites +original_slug: Web_Development/Mobile/Sites_separados ---

    The "separate sites" approach to mobile Web development involves creating different sites for mobile and desktop Web users. This approach has positive and negative aspects.

    The good

    diff --git a/files/pt-br/web/html/attributes/index.html b/files/pt-br/web/html/attributes/index.html index cac8b527ec..e07f57f2d8 100644 --- a/files/pt-br/web/html/attributes/index.html +++ b/files/pt-br/web/html/attributes/index.html @@ -1,7 +1,8 @@ --- title: Atributos -slug: HTML/Attributes +slug: Web/HTML/Attributes translation_of: Web/HTML/Attributes +original_slug: HTML/Attributes ---

     

    diff --git a/files/pt-br/web/html/block-level_elements/index.html b/files/pt-br/web/html/block-level_elements/index.html index 3feed31681..1ac9c6089b 100644 --- a/files/pt-br/web/html/block-level_elements/index.html +++ b/files/pt-br/web/html/block-level_elements/index.html @@ -1,6 +1,6 @@ --- title: Elementos block-level -slug: Web/HTML/Elementos_block-level +slug: Web/HTML/Block-level_elements tags: - Desenvolvimento - Guía @@ -9,6 +9,7 @@ tags: - Iniciante - Web translation_of: Web/HTML/Block-level_elements +original_slug: Web/HTML/Elementos_block-level ---

    Elementos HTML (Linguagem de marcação de hipertexto) historicamente foram categorizados como “nível de bloco” ou elementos “em linha”. Um elemento em nível de bloco ocupa todo o espaço de seu elemento pai (container), criando assim um “bloco”. Este artigo ajuda a explicar o que isso significa.

    diff --git a/files/pt-br/web/html/cors_enabled_image/index.html b/files/pt-br/web/html/cors_enabled_image/index.html index 5e41b735fe..74ab0961d3 100644 --- a/files/pt-br/web/html/cors_enabled_image/index.html +++ b/files/pt-br/web/html/cors_enabled_image/index.html @@ -1,12 +1,13 @@ --- title: CORS_habilitar_imagens -slug: Web/HTML/CORS_imagens_habilitadas +slug: Web/HTML/CORS_enabled_image tags: - CORS - Canvas problems - Crossorigin - Segurança do Canvas translation_of: Web/HTML/CORS_enabled_image +original_slug: Web/HTML/CORS_imagens_habilitadas ---

    The HTML specification introduces a {{ htmlattrxref("crossorigin", "img") }} attribute for images that, in combination with an appropriate {{Glossary("CORS")}} header, allows images defined by the {{ HTMLElement("img") }} element that are loaded from foreign origins to be used in canvas as if they were being loaded from the current origin.

    diff --git a/files/pt-br/web/html/element/content/index.html b/files/pt-br/web/html/element/content/index.html index 1a1832de04..887d005b25 100644 --- a/files/pt-br/web/html/element/content/index.html +++ b/files/pt-br/web/html/element/content/index.html @@ -1,7 +1,8 @@ --- title: ': The Shadow DOM Content Placeholder element (obsolete)' -slug: Web/HTML/Element/conteúdo +slug: Web/HTML/Element/content translation_of: Web/HTML/Element/content +original_slug: Web/HTML/Element/conteúdo ---
    {{Deprecated_header}}
    diff --git a/files/pt-br/web/html/element/figure/index.html b/files/pt-br/web/html/element/figure/index.html index 309a10c791..dd0f0e1463 100644 --- a/files/pt-br/web/html/element/figure/index.html +++ b/files/pt-br/web/html/element/figure/index.html @@ -1,7 +1,8 @@ --- title:
    -slug: Web/HTML/Element/figura +slug: Web/HTML/Element/figure translation_of: Web/HTML/Element/figure +original_slug: Web/HTML/Element/figura ---

    Resumo

    diff --git a/files/pt-br/web/html/element/input/date/index.html b/files/pt-br/web/html/element/input/date/index.html index 0bb8fb07f8..dab213f636 100644 --- a/files/pt-br/web/html/element/input/date/index.html +++ b/files/pt-br/web/html/element/input/date/index.html @@ -1,6 +1,6 @@ --- title: -slug: Web/HTML/Element/Input/data +slug: Web/HTML/Element/input/date tags: - Date picker - Elemento @@ -13,6 +13,7 @@ tags: - Tipo de Input - data translation_of: Web/HTML/Element/input/date +original_slug: Web/HTML/Element/Input/data ---

    Os elementos {{htmlelement("input")}} do tipo date cria campos de entrada que permite o usuário informar uma data, como também usar uma caixa de texto que valida automaticamente o conteúdo, ou usando uma interface de seleção de data especial. O valor resultante inclui ano, mês e dia, mas não o horário. Os tipos de entrada time e datetime-local permitem informar horário e data/hora.

    diff --git a/files/pt-br/web/html/global_attributes/spellcheck/index.html b/files/pt-br/web/html/global_attributes/spellcheck/index.html index c379684839..5372dd0c57 100644 --- a/files/pt-br/web/html/global_attributes/spellcheck/index.html +++ b/files/pt-br/web/html/global_attributes/spellcheck/index.html @@ -1,12 +1,13 @@ --- title: Controlando a verificação ortográfica em formulários HTML -slug: Web/HTML/Controlando_verificacao_ortografica_em_formularios_HTML +slug: Web/HTML/Global_attributes/spellcheck tags: - Gerenciamento de configuração - HTML - Intermediário translation_of: Web/HTML/Global_attributes/spellcheck translation_of_original: Web/HTML/Controlling_spell_checking_in_HTML_forms +original_slug: Web/HTML/Controlando_verificacao_ortografica_em_formularios_HTML ---

    {{ gecko_minversion_header("1.8.1") }} Firefox 2 introduz suporte à verificação ortográfica  para áreas de texto e campos de texto em formulários web. O usuário pode especificar usando a interface about:config se a verificação ortográfica é ou não habilitada e se checará áreas de texto e campos de texto ou somente áreas de texto.

    diff --git a/files/pt-br/web/html/inline_elements/index.html b/files/pt-br/web/html/inline_elements/index.html index 7a5866b243..80bc6e2451 100644 --- a/files/pt-br/web/html/inline_elements/index.html +++ b/files/pt-br/web/html/inline_elements/index.html @@ -1,7 +1,8 @@ --- title: Elementos inline -slug: Web/HTML/Inline_elemente +slug: Web/HTML/Inline_elements translation_of: Web/HTML/Inline_elements +original_slug: Web/HTML/Inline_elemente ---

    Sumário

    "Inline" é uma categorização dos elementos do HTML, em contraste com os "elementos de bloco". Os elementos inline podem ser exibidos em nível de bloco ou outros elementos inline. Eles ocupam somente a largura de seu conteúdo. A diferença entre elementos inline e bloco incluem:

    diff --git a/files/pt-br/web/html/microformats/index.html b/files/pt-br/web/html/microformats/index.html index 01e61069a7..b7baf7fff1 100644 --- a/files/pt-br/web/html/microformats/index.html +++ b/files/pt-br/web/html/microformats/index.html @@ -1,7 +1,8 @@ --- title: Microformatos -slug: Web/HTML/microformatos +slug: Web/HTML/microformats translation_of: Web/HTML/microformats +original_slug: Web/HTML/microformatos ---
    {{HTMLSidebar}}
    diff --git a/files/pt-br/web/html/reference/index.html b/files/pt-br/web/html/reference/index.html index f0eda6be3f..cc18bbe218 100644 --- a/files/pt-br/web/html/reference/index.html +++ b/files/pt-br/web/html/reference/index.html @@ -1,7 +1,8 @@ --- title: Referência HTML -slug: Web/HTML/ReferenciaHTML +slug: Web/HTML/Reference translation_of: Web/HTML/Reference +original_slug: Web/HTML/ReferenciaHTML ---
    {{HTMLSidebar}}
    diff --git a/files/pt-br/web/http/basics_of_http/identifying_resources_on_the_web/index.html b/files/pt-br/web/http/basics_of_http/identifying_resources_on_the_web/index.html index 42830a10b9..bbd38652eb 100644 --- a/files/pt-br/web/http/basics_of_http/identifying_resources_on_the_web/index.html +++ b/files/pt-br/web/http/basics_of_http/identifying_resources_on_the_web/index.html @@ -1,6 +1,6 @@ --- title: Identificando recursos na web -slug: Web/HTTP/Basico_sobre_HTTP/Identifying_resources_on_the_Web +slug: Web/HTTP/Basics_of_HTTP/Identifying_resources_on_the_Web tags: - Esquema - HTTP @@ -12,6 +12,7 @@ tags: - query - resources translation_of: Web/HTTP/Basics_of_HTTP/Identifying_resources_on_the_Web +original_slug: Web/HTTP/Basico_sobre_HTTP/Identifying_resources_on_the_Web ---
    {{HTTPSidebar}}
    diff --git a/files/pt-br/web/http/basics_of_http/index.html b/files/pt-br/web/http/basics_of_http/index.html index a89b456f12..a536cb877c 100644 --- a/files/pt-br/web/http/basics_of_http/index.html +++ b/files/pt-br/web/http/basics_of_http/index.html @@ -1,7 +1,8 @@ --- title: Básico sobre HTTP -slug: Web/HTTP/Basico_sobre_HTTP +slug: Web/HTTP/Basics_of_HTTP translation_of: Web/HTTP/Basics_of_HTTP +original_slug: Web/HTTP/Basico_sobre_HTTP ---
    {{HTTPSidebar}}
    diff --git a/files/pt-br/web/http/basics_of_http/mime_types/common_types/index.html b/files/pt-br/web/http/basics_of_http/mime_types/common_types/index.html index d8f2b6898d..531155c129 100644 --- a/files/pt-br/web/http/basics_of_http/mime_types/common_types/index.html +++ b/files/pt-br/web/http/basics_of_http/mime_types/common_types/index.html @@ -1,10 +1,11 @@ --- title: Lista Incompleta de tipos MIME -slug: Web/HTTP/Basico_sobre_HTTP/MIME_types/Complete_list_of_MIME_types +slug: Web/HTTP/Basics_of_HTTP/MIME_types/Common_types tags: - Extensões HTTP - Tipos MIME translation_of: Web/HTTP/Basics_of_HTTP/MIME_types/Common_types +original_slug: Web/HTTP/Basico_sobre_HTTP/MIME_types/Complete_list_of_MIME_types ---
    {{HTTPSidebar}}
    diff --git a/files/pt-br/web/http/basics_of_http/mime_types/index.html b/files/pt-br/web/http/basics_of_http/mime_types/index.html index 3acce2553a..93c9408578 100644 --- a/files/pt-br/web/http/basics_of_http/mime_types/index.html +++ b/files/pt-br/web/http/basics_of_http/mime_types/index.html @@ -1,7 +1,8 @@ --- title: MIME types -slug: Web/HTTP/Basico_sobre_HTTP/MIME_types +slug: Web/HTTP/Basics_of_HTTP/MIME_types translation_of: Web/HTTP/Basics_of_HTTP/MIME_types +original_slug: Web/HTTP/Basico_sobre_HTTP/MIME_types ---
    {{HTTPSidebar}}
    diff --git a/files/pt-br/web/http/caching/index.html b/files/pt-br/web/http/caching/index.html index 9cfd4d4a0d..819b7bb656 100644 --- a/files/pt-br/web/http/caching/index.html +++ b/files/pt-br/web/http/caching/index.html @@ -1,6 +1,6 @@ --- title: Cacheamento HTTP -slug: Web/HTTP/HTTP +slug: Web/HTTP/Caching tags: - Cache - Cacheamento @@ -10,6 +10,7 @@ tags: - Rede - Web translation_of: Web/HTTP/Caching +original_slug: Web/HTTP/HTTP ---
    {{HTTPSidebar}}
    diff --git a/files/pt-br/web/http/compression/index.html b/files/pt-br/web/http/compression/index.html index a1f16b762f..d5d36e6906 100644 --- a/files/pt-br/web/http/compression/index.html +++ b/files/pt-br/web/http/compression/index.html @@ -1,11 +1,12 @@ --- title: Compressão em HTTP -slug: Web/HTTP/Compressão +slug: Web/HTTP/Compression tags: - Guía - HTTP - compressão translation_of: Web/HTTP/Compression +original_slug: Web/HTTP/Compressão ---
    {{HTTPSidebar}}
    diff --git a/files/pt-br/web/http/connection_management_in_http_1.x/index.html b/files/pt-br/web/http/connection_management_in_http_1.x/index.html index c67e52b062..e8472e7a19 100644 --- a/files/pt-br/web/http/connection_management_in_http_1.x/index.html +++ b/files/pt-br/web/http/connection_management_in_http_1.x/index.html @@ -1,6 +1,6 @@ --- title: Gerenciamento de Conexão em HTTP/1.x -slug: Web/HTTP/Gerenciamento_de_Conexão_em_HTTP_1.x +slug: Web/HTTP/Connection_management_in_HTTP_1.x tags: - Guide - Guía @@ -11,6 +11,7 @@ tags: - performace - sharding translation_of: Web/HTTP/Connection_management_in_HTTP_1.x +original_slug: Web/HTTP/Gerenciamento_de_Conexão_em_HTTP_1.x ---

    Gerenciamento de Conexão é um tema central em HTTP: abertura e manutenção de conexões e em grande parte tem impacto sobre o desempenho de Web sites e aplicações Web. Existem vários modelos, em HTTP/1.x: ligações de curta duração, conexões persistentes, canalização e HTTP (HTTP pipelining).

    diff --git a/files/pt-br/web/http/cors/index.html b/files/pt-br/web/http/cors/index.html index 51470f94b7..03a3decd0f 100644 --- a/files/pt-br/web/http/cors/index.html +++ b/files/pt-br/web/http/cors/index.html @@ -1,12 +1,13 @@ --- title: Cross-Origin Resource Sharing (CORS) -slug: Web/HTTP/Controle_Acesso_CORS +slug: Web/HTTP/CORS tags: - AJAX - CORS - HTTP - XMLHttpRequest translation_of: Web/HTTP/CORS +original_slug: Web/HTTP/Controle_Acesso_CORS ---
    {{HTTPSidebar}}
    diff --git a/files/pt-br/web/http/headers/connection/index.html b/files/pt-br/web/http/headers/connection/index.html index b8df737d95..d7caeef527 100644 --- a/files/pt-br/web/http/headers/connection/index.html +++ b/files/pt-br/web/http/headers/connection/index.html @@ -1,6 +1,6 @@ --- title: Connection -slug: Web/HTTP/Headers/Conexão +slug: Web/HTTP/Headers/Connection tags: - Cabeçalhos - HTTP @@ -8,6 +8,7 @@ tags: - Referencia - Web translation_of: Web/HTTP/Headers/Connection +original_slug: Web/HTTP/Headers/Conexão ---
    {{HTTPSidebar}}
    diff --git a/files/pt-br/web/http/headers/location/index.html b/files/pt-br/web/http/headers/location/index.html index 2b8ebcc404..292ec057cf 100644 --- a/files/pt-br/web/http/headers/location/index.html +++ b/files/pt-br/web/http/headers/location/index.html @@ -1,11 +1,12 @@ --- title: Location -slug: Web/HTTP/Headers/Localização +slug: Web/HTTP/Headers/Location tags: - Cabeçalho HTTP - Cabeçalho de Resposta - HTTP translation_of: Web/HTTP/Headers/Location +original_slug: Web/HTTP/Headers/Localização ---
    {{HTTPSidebar}}
    diff --git a/files/pt-br/web/http/messages/index.html b/files/pt-br/web/http/messages/index.html index 895c58d2e8..36ec334991 100644 --- a/files/pt-br/web/http/messages/index.html +++ b/files/pt-br/web/http/messages/index.html @@ -1,11 +1,12 @@ --- title: Mensagens HTTP -slug: Web/HTTP/Mensagens +slug: Web/HTTP/Messages tags: - Guía - HTTP - Protocolos translation_of: Web/HTTP/Messages +original_slug: Web/HTTP/Mensagens ---
    {{HTTPSidebar}}
    diff --git a/files/pt-br/web/http/redirections/index.html b/files/pt-br/web/http/redirections/index.html index c429ac82cb..c1547b54d4 100644 --- a/files/pt-br/web/http/redirections/index.html +++ b/files/pt-br/web/http/redirections/index.html @@ -1,11 +1,12 @@ --- title: Redirecionamentos em HTTP -slug: Web/HTTP/Redirecionamento +slug: Web/HTTP/Redirections tags: - Guía - HTTP - Redirecionamento translation_of: Web/HTTP/Redirections +original_slug: Web/HTTP/Redirecionamento ---
    {{HTTPSidebar}}
    diff --git a/files/pt-br/web/javascript/closures/index.html b/files/pt-br/web/javascript/closures/index.html index efc7578d7d..fff22112ea 100644 --- a/files/pt-br/web/javascript/closures/index.html +++ b/files/pt-br/web/javascript/closures/index.html @@ -1,6 +1,6 @@ --- title: Closures -slug: Web/JavaScript/Guide/Closures +slug: Web/JavaScript/Closures tags: - Closure - ES5 @@ -8,6 +8,7 @@ tags: - JavaScript - Referencia translation_of: Web/JavaScript/Closures +original_slug: Web/JavaScript/Guide/Closures ---
    {{jsSidebar("Intermediate")}}
    diff --git a/files/pt-br/web/javascript/enumerability_and_ownership_of_properties/index.html b/files/pt-br/web/javascript/enumerability_and_ownership_of_properties/index.html index 3d7feb0bd4..922f584797 100644 --- a/files/pt-br/web/javascript/enumerability_and_ownership_of_properties/index.html +++ b/files/pt-br/web/javascript/enumerability_and_ownership_of_properties/index.html @@ -1,9 +1,10 @@ --- title: Enumerabilidade e posse de propriedades -slug: Web/JavaScript/Enumerabilidade_e_posse_de_propriedades +slug: Web/JavaScript/Enumerability_and_ownership_of_properties tags: - JavaScript translation_of: Web/JavaScript/Enumerability_and_ownership_of_properties +original_slug: Web/JavaScript/Enumerabilidade_e_posse_de_propriedades ---
    {{JsSidebar("Mais")}}
    diff --git a/files/pt-br/web/javascript/guide/control_flow_and_error_handling/index.html b/files/pt-br/web/javascript/guide/control_flow_and_error_handling/index.html index e352b58f6d..3730244334 100644 --- a/files/pt-br/web/javascript/guide/control_flow_and_error_handling/index.html +++ b/files/pt-br/web/javascript/guide/control_flow_and_error_handling/index.html @@ -1,6 +1,6 @@ --- title: Controle de Fluxo e Manipulação de Erro -slug: Web/JavaScript/Guide/Declarações +slug: Web/JavaScript/Guide/Control_flow_and_error_handling tags: - Guia(2) - Iniciante @@ -8,6 +8,7 @@ tags: - declarações - declarações de controle translation_of: Web/JavaScript/Guide/Control_flow_and_error_handling +original_slug: Web/JavaScript/Guide/Declarações ---
    {{jsSidebar("JavaScript Guide")}} {{PreviousNext("Web/JavaScript/Guide/Grammar_and_types", "Web/JavaScript/Guide/Loops_and_iteration")}}
    diff --git a/files/pt-br/web/javascript/guide/details_of_the_object_model/index.html b/files/pt-br/web/javascript/guide/details_of_the_object_model/index.html index 55a4c928a5..c100c69612 100644 --- a/files/pt-br/web/javascript/guide/details_of_the_object_model/index.html +++ b/files/pt-br/web/javascript/guide/details_of_the_object_model/index.html @@ -1,12 +1,13 @@ --- title: Detalhes do modelo de objeto -slug: Web/JavaScript/Guide/Detalhes_do_Modelo_do_Objeto +slug: Web/JavaScript/Guide/Details_of_the_Object_Model tags: - Entidade - Modelo - Objeto - Orientação á Objeto translation_of: Web/JavaScript/Guide/Details_of_the_Object_Model +original_slug: Web/JavaScript/Guide/Detalhes_do_Modelo_do_Objeto ---

    JavaScript é uma linguagem orientada a objetos com base em protótipos, em vez de ser baseada em classes. Devido a essa base diferente, pode ser menos evidente como o JavaScript permite criar hierarquias de objetos e ter herança de propriedades e seus valores. Este capítulo tenta esclarecer essa situação.

    diff --git a/files/pt-br/web/javascript/guide/functions/index.html b/files/pt-br/web/javascript/guide/functions/index.html index 7077d1787b..a755ff6ffa 100644 --- a/files/pt-br/web/javascript/guide/functions/index.html +++ b/files/pt-br/web/javascript/guide/functions/index.html @@ -1,12 +1,13 @@ --- title: Funções -slug: Web/JavaScript/Guide/Funções +slug: Web/JavaScript/Guide/Functions tags: - Funções JavaScript - Guia(2) - Iniciante - JavaScript translation_of: Web/JavaScript/Guide/Functions +original_slug: Web/JavaScript/Guide/Funções ---
    {{jsSidebar("JavaScript Guide")}} {{PreviousNext("Web/JavaScript/Guide/Loops_and_iteration", "Web/JavaScript/Guide/Expressions_and_Operators")}}
    diff --git a/files/pt-br/web/javascript/guide/grammar_and_types/index.html b/files/pt-br/web/javascript/guide/grammar_and_types/index.html index 7920ee6b1a..fdb963677f 100644 --- a/files/pt-br/web/javascript/guide/grammar_and_types/index.html +++ b/files/pt-br/web/javascript/guide/grammar_and_types/index.html @@ -1,12 +1,13 @@ --- title: Sintaxe e tipos -slug: 'Web/JavaScript/Guide/Values,_variables,_and_literals' +slug: Web/JavaScript/Guide/Grammar_and_types tags: - Guia(2) - Guía - Iniciante - JavaScript translation_of: Web/JavaScript/Guide/Grammar_and_types +original_slug: Web/JavaScript/Guide/Values,_variables,_and_literals ---

    {{jsSidebar("JavaScript Guide")}} {{PreviousNext("Web/JavaScript/Guide/Introduction", "Web/JavaScript/Guide/Control_flow_and_error_handling")}}

    diff --git a/files/pt-br/web/javascript/guide/iterators_and_generators/index.html b/files/pt-br/web/javascript/guide/iterators_and_generators/index.html index 13a9b87f11..c62d2b0c6e 100644 --- a/files/pt-br/web/javascript/guide/iterators_and_generators/index.html +++ b/files/pt-br/web/javascript/guide/iterators_and_generators/index.html @@ -1,6 +1,6 @@ --- title: Iteratores e geradores -slug: Web/JavaScript/Guide/Iteratores_e_geradores +slug: Web/JavaScript/Guide/Iterators_and_Generators tags: - Generators - Guia(2) @@ -8,6 +8,7 @@ tags: - Iteradores - JavaScript translation_of: Web/JavaScript/Guide/Iterators_and_Generators +original_slug: Web/JavaScript/Guide/Iteratores_e_geradores ---
    {{jsSidebar("JavaScript Guide")}} {{PreviousNext("Web/JavaScript/Guide/Details_of_the_Object_Model", "Web/JavaScript/Guide/Meta_programming")}}
    diff --git a/files/pt-br/web/javascript/guide/loops_and_iteration/index.html b/files/pt-br/web/javascript/guide/loops_and_iteration/index.html index fcf7437612..132740fd40 100644 --- a/files/pt-br/web/javascript/guide/loops_and_iteration/index.html +++ b/files/pt-br/web/javascript/guide/loops_and_iteration/index.html @@ -1,7 +1,8 @@ --- title: Laços e iterações -slug: Web/JavaScript/Guide/Lacos_e_iteracoes +slug: Web/JavaScript/Guide/Loops_and_iteration translation_of: Web/JavaScript/Guide/Loops_and_iteration +original_slug: Web/JavaScript/Guide/Lacos_e_iteracoes ---
    {{jsSidebar("JavaScript Guide")}} {{PreviousNext("Web/JavaScript/Guide/Control_flow_and_error_handling", "Web/JavaScript/Guide/Functions")}}
    diff --git a/files/pt-br/web/javascript/guide/modules/index.html b/files/pt-br/web/javascript/guide/modules/index.html index 6a2cb73687..a9f6162954 100644 --- a/files/pt-br/web/javascript/guide/modules/index.html +++ b/files/pt-br/web/javascript/guide/modules/index.html @@ -1,7 +1,8 @@ --- title: Módulos JavaScript -slug: Web/JavaScript/Guide/Módulos +slug: Web/JavaScript/Guide/Modules translation_of: Web/JavaScript/Guide/Modules +original_slug: Web/JavaScript/Guide/Módulos ---
    {{JSSidebar("JavaScript Guide")}}{{Previous("Web/JavaScript/Guide/Meta_programming")}}
    diff --git a/files/pt-br/web/javascript/guide/numbers_and_dates/index.html b/files/pt-br/web/javascript/guide/numbers_and_dates/index.html index 8f08cb3619..09989b0605 100644 --- a/files/pt-br/web/javascript/guide/numbers_and_dates/index.html +++ b/files/pt-br/web/javascript/guide/numbers_and_dates/index.html @@ -1,7 +1,8 @@ --- title: Números e datas -slug: Web/JavaScript/Guide/Numeros_e_datas +slug: Web/JavaScript/Guide/Numbers_and_dates translation_of: Web/JavaScript/Guide/Numbers_and_dates +original_slug: Web/JavaScript/Guide/Numeros_e_datas ---
    {{jsSidebar("JavaScript Guide")}} {{PreviousNext("Web/JavaScript/Guide/Expressions_and_Operators", "Web/JavaScript/Guide/Text_formatting")}}
    diff --git a/files/pt-br/web/javascript/guide/text_formatting/index.html b/files/pt-br/web/javascript/guide/text_formatting/index.html index 1b4bb50772..6242469f60 100644 --- a/files/pt-br/web/javascript/guide/text_formatting/index.html +++ b/files/pt-br/web/javascript/guide/text_formatting/index.html @@ -1,10 +1,11 @@ --- title: Formatando texto -slug: Web/JavaScript/Guide/Formatando_texto +slug: Web/JavaScript/Guide/Text_formatting tags: - Guía - JavaScript translation_of: Web/JavaScript/Guide/Text_formatting +original_slug: Web/JavaScript/Guide/Formatando_texto ---
    {{jsSidebar("JavaScript Guide")}} {{PreviousNext("Web/JavaScript/Guide/Numbers_and_dates", "Web/JavaScript/Guide/Regular_Expressions")}}
    diff --git a/files/pt-br/web/javascript/guide/using_promises/index.html b/files/pt-br/web/javascript/guide/using_promises/index.html index a0dd09c8c2..900a15351a 100644 --- a/files/pt-br/web/javascript/guide/using_promises/index.html +++ b/files/pt-br/web/javascript/guide/using_promises/index.html @@ -1,6 +1,6 @@ --- title: Usando promises -slug: Web/JavaScript/Guide/Usando_promises +slug: Web/JavaScript/Guide/Using_promises tags: - Guía - Intermediário @@ -8,6 +8,7 @@ tags: - Promise - Promises translation_of: Web/JavaScript/Guide/Using_promises +original_slug: Web/JavaScript/Guide/Usando_promises ---
    {{jsSidebar("JavaScript Guide")}}{{PreviousNext("Web/JavaScript/Guide/Details_of_the_Object_Model", "Web/JavaScript/Guide/Iterators_and_Generators")}}
    diff --git a/files/pt-br/web/javascript/guide/working_with_objects/index.html b/files/pt-br/web/javascript/guide/working_with_objects/index.html index 1dccaeef2e..8184129163 100644 --- a/files/pt-br/web/javascript/guide/working_with_objects/index.html +++ b/files/pt-br/web/javascript/guide/working_with_objects/index.html @@ -1,6 +1,6 @@ --- title: Trabalhando com objetos -slug: Web/JavaScript/Guide/Trabalhando_com_Objetos +slug: Web/JavaScript/Guide/Working_with_Objects tags: - Comparando Objetos - Contrutor @@ -10,6 +10,7 @@ tags: - Iniciante - JavaScript translation_of: Web/JavaScript/Guide/Working_with_Objects +original_slug: Web/JavaScript/Guide/Trabalhando_com_Objetos ---

    A linguagem JavaScript é projetada com base em um simples paradigma orientado a objeto. Um objeto é uma coleção de propriedades, e uma propriedade é uma associação entre um nome (ou chave) e um valor. Um valor de propriedade pode ser uma função, que é então considerada um método do objeto. Além dos objetos que são pré-definidos no browser, você pode definir seus próprios objetos.

    diff --git a/files/pt-br/web/javascript/inheritance_and_the_prototype_chain/index.html b/files/pt-br/web/javascript/inheritance_and_the_prototype_chain/index.html index d6aad53066..b13bf04548 100644 --- a/files/pt-br/web/javascript/inheritance_and_the_prototype_chain/index.html +++ b/files/pt-br/web/javascript/inheritance_and_the_prototype_chain/index.html @@ -1,9 +1,10 @@ --- title: Herança e cadeia de protótipos (prototype chain) -slug: Web/JavaScript/Guide/Inheritance_and_the_prototype_chain +slug: Web/JavaScript/Inheritance_and_the_prototype_chain tags: - herança intermediário JavaScript OOP translation_of: Web/JavaScript/Inheritance_and_the_prototype_chain +original_slug: Web/JavaScript/Guide/Inheritance_and_the_prototype_chain ---
    {{jsSidebar("Advanced")}}
    diff --git a/files/pt-br/web/javascript/reference/errors/missing_curly_after_property_list/index.html b/files/pt-br/web/javascript/reference/errors/missing_curly_after_property_list/index.html index b10562516e..eee80d68fc 100644 --- a/files/pt-br/web/javascript/reference/errors/missing_curly_after_property_list/index.html +++ b/files/pt-br/web/javascript/reference/errors/missing_curly_after_property_list/index.html @@ -1,12 +1,13 @@ --- title: 'SyntaxError: missing } after property list' -slug: Web/JavaScript/Reference/Errors/Fecha_chaves_esquecida_apos_lista_propriedades +slug: Web/JavaScript/Reference/Errors/Missing_curly_after_property_list tags: - Erro de Sintaxe - Erros - JavaScript - SyntaxError translation_of: Web/JavaScript/Reference/Errors/Missing_curly_after_property_list +original_slug: Web/JavaScript/Reference/Errors/Fecha_chaves_esquecida_apos_lista_propriedades ---
    {{jsSidebar("Errors")}}
    diff --git a/files/pt-br/web/javascript/reference/errors/missing_parenthesis_after_argument_list/index.html b/files/pt-br/web/javascript/reference/errors/missing_parenthesis_after_argument_list/index.html index 83844d17b5..5027ca53fe 100644 --- a/files/pt-br/web/javascript/reference/errors/missing_parenthesis_after_argument_list/index.html +++ b/files/pt-br/web/javascript/reference/errors/missing_parenthesis_after_argument_list/index.html @@ -1,7 +1,8 @@ --- title: Erro de sintaxe falta ) depois da lista de argumentos -slug: Web/JavaScript/Reference/Errors/Fata_parênteses_após_lista_argumento +slug: Web/JavaScript/Reference/Errors/Missing_parenthesis_after_argument_list translation_of: Web/JavaScript/Reference/Errors/Missing_parenthesis_after_argument_list +original_slug: Web/JavaScript/Reference/Errors/Fata_parênteses_após_lista_argumento ---
    {{jsSidebar("Errors")}}
    diff --git a/files/pt-br/web/javascript/reference/errors/not_defined/index.html b/files/pt-br/web/javascript/reference/errors/not_defined/index.html index 6642b81b44..999168701a 100644 --- a/files/pt-br/web/javascript/reference/errors/not_defined/index.html +++ b/files/pt-br/web/javascript/reference/errors/not_defined/index.html @@ -1,7 +1,8 @@ --- title: 'ReferenceError: "x" não está definido' -slug: Web/JavaScript/Reference/Errors/Não_definido +slug: Web/JavaScript/Reference/Errors/Not_defined translation_of: Web/JavaScript/Reference/Errors/Not_defined +original_slug: Web/JavaScript/Reference/Errors/Não_definido ---
    {{jsSidebar("Errors")}}
    diff --git a/files/pt-br/web/javascript/reference/errors/unnamed_function_statement/index.html b/files/pt-br/web/javascript/reference/errors/unnamed_function_statement/index.html index 6f01588059..21d1bf6569 100644 --- a/files/pt-br/web/javascript/reference/errors/unnamed_function_statement/index.html +++ b/files/pt-br/web/javascript/reference/errors/unnamed_function_statement/index.html @@ -1,12 +1,13 @@ --- title: 'Erro de sintaxe: declaração de função requer um nome' -slug: Web/JavaScript/Reference/Errors/NãoNomeado_funcão_declaração +slug: Web/JavaScript/Reference/Errors/Unnamed_function_statement tags: - Erro - Erro de Sintaxe - JavaScript - Statement translation_of: Web/JavaScript/Reference/Errors/Unnamed_function_statement +original_slug: Web/JavaScript/Reference/Errors/NãoNomeado_funcão_declaração ---
    {{jsSidebar("Errors")}}
    diff --git a/files/pt-br/web/javascript/reference/functions/default_parameters/index.html b/files/pt-br/web/javascript/reference/functions/default_parameters/index.html index 82dc54abd8..a0f9a9e1ba 100644 --- a/files/pt-br/web/javascript/reference/functions/default_parameters/index.html +++ b/files/pt-br/web/javascript/reference/functions/default_parameters/index.html @@ -1,6 +1,6 @@ --- title: Parâmetros Predefinidos -slug: Web/JavaScript/Reference/Functions/Parametros_Predefinidos +slug: Web/JavaScript/Reference/Functions/Default_parameters tags: - ECMA2015 - ECMAScript6 @@ -10,6 +10,7 @@ tags: - Funções - JavaScript translation_of: Web/JavaScript/Reference/Functions/Default_parameters +original_slug: Web/JavaScript/Reference/Functions/Parametros_Predefinidos ---
    {{jsSidebar("Functions")}}
    diff --git a/files/pt-br/web/javascript/reference/functions/method_definitions/index.html b/files/pt-br/web/javascript/reference/functions/method_definitions/index.html index ac02cb9deb..07dba6291b 100644 --- a/files/pt-br/web/javascript/reference/functions/method_definitions/index.html +++ b/files/pt-br/web/javascript/reference/functions/method_definitions/index.html @@ -1,6 +1,6 @@ --- title: Definições de Método -slug: Web/JavaScript/Reference/Functions/Definicoes_metodos +slug: Web/JavaScript/Reference/Functions/Method_definitions tags: - ECMAScript 2015 - Funções @@ -8,6 +8,7 @@ tags: - Objeto - Sintaxe translation_of: Web/JavaScript/Reference/Functions/Method_definitions +original_slug: Web/JavaScript/Reference/Functions/Definicoes_metodos ---
    {{JsSidebar("Functions")}}
    diff --git a/files/pt-br/web/javascript/reference/global_objects/array/filter/index.html b/files/pt-br/web/javascript/reference/global_objects/array/filter/index.html index c7b0c08915..ce591d2cac 100644 --- a/files/pt-br/web/javascript/reference/global_objects/array/filter/index.html +++ b/files/pt-br/web/javascript/reference/global_objects/array/filter/index.html @@ -1,6 +1,6 @@ --- title: Array.prototype.filter() -slug: Web/JavaScript/Reference/Global_Objects/Array/filtro +slug: Web/JavaScript/Reference/Global_Objects/Array/filter tags: - Array - ECMAScript 5 @@ -8,6 +8,7 @@ tags: - Prototype - metodo translation_of: Web/JavaScript/Reference/Global_Objects/Array/filter +original_slug: Web/JavaScript/Reference/Global_Objects/Array/filtro ---
    {{JSRef}}
    diff --git a/files/pt-br/web/javascript/reference/global_objects/array/includes/index.html b/files/pt-br/web/javascript/reference/global_objects/array/includes/index.html index a0f794df1a..034eaef4d2 100644 --- a/files/pt-br/web/javascript/reference/global_objects/array/includes/index.html +++ b/files/pt-br/web/javascript/reference/global_objects/array/includes/index.html @@ -1,6 +1,6 @@ --- title: Array.prototype.includes() -slug: Web/JavaScript/Reference/Global_Objects/Array/contains +slug: Web/JavaScript/Reference/Global_Objects/Array/includes tags: - Array - ECMAScript7 @@ -8,6 +8,7 @@ tags: - Expérimental(2) - JavaScript translation_of: Web/JavaScript/Reference/Global_Objects/Array/includes +original_slug: Web/JavaScript/Reference/Global_Objects/Array/contains ---
    {{JSRef("Global_Objects", "Array")}}
    diff --git a/files/pt-br/web/javascript/reference/operators/comma_operator/index.html b/files/pt-br/web/javascript/reference/operators/comma_operator/index.html index be374104d0..4dc3672d8d 100644 --- a/files/pt-br/web/javascript/reference/operators/comma_operator/index.html +++ b/files/pt-br/web/javascript/reference/operators/comma_operator/index.html @@ -1,7 +1,8 @@ --- title: Operador Vírgula -slug: Web/JavaScript/Reference/Operators/Operador_Virgula +slug: Web/JavaScript/Reference/Operators/Comma_Operator translation_of: Web/JavaScript/Reference/Operators/Comma_Operator +original_slug: Web/JavaScript/Reference/Operators/Operador_Virgula ---
    {{jsSidebar("Operators")}}
    diff --git a/files/pt-br/web/javascript/reference/operators/conditional_operator/index.html b/files/pt-br/web/javascript/reference/operators/conditional_operator/index.html index 9b36afca80..341f5a6896 100644 --- a/files/pt-br/web/javascript/reference/operators/conditional_operator/index.html +++ b/files/pt-br/web/javascript/reference/operators/conditional_operator/index.html @@ -1,10 +1,11 @@ --- title: Operador Condicional Ternário -slug: Web/JavaScript/Reference/Operators/Operador_Condicional +slug: Web/JavaScript/Reference/Operators/Conditional_Operator tags: - JavaScript - Operadores Condicionais translation_of: Web/JavaScript/Reference/Operators/Conditional_Operator +original_slug: Web/JavaScript/Reference/Operators/Operador_Condicional ---
    {{jsSidebar("Operators")}}
    diff --git a/files/pt-br/web/javascript/reference/operators/destructuring_assignment/index.html b/files/pt-br/web/javascript/reference/operators/destructuring_assignment/index.html index 6b1a100b4b..f030975567 100644 --- a/files/pt-br/web/javascript/reference/operators/destructuring_assignment/index.html +++ b/files/pt-br/web/javascript/reference/operators/destructuring_assignment/index.html @@ -1,7 +1,8 @@ --- title: Atribuição via desestruturação (destructuring assignment) -slug: Web/JavaScript/Reference/Operators/Atribuicao_via_desestruturacao +slug: Web/JavaScript/Reference/Operators/Destructuring_assignment translation_of: Web/JavaScript/Reference/Operators/Destructuring_assignment +original_slug: Web/JavaScript/Reference/Operators/Atribuicao_via_desestruturacao ---
    {{jsSidebar("Operators")}}
    diff --git a/files/pt-br/web/javascript/reference/operators/nullish_coalescing_operator/index.html b/files/pt-br/web/javascript/reference/operators/nullish_coalescing_operator/index.html index 609bfa29fd..c1eb350cef 100644 --- a/files/pt-br/web/javascript/reference/operators/nullish_coalescing_operator/index.html +++ b/files/pt-br/web/javascript/reference/operators/nullish_coalescing_operator/index.html @@ -1,6 +1,6 @@ --- title: Operador de coalescência nula -slug: Web/JavaScript/Reference/Operators/operador_de_coalescencia_nula +slug: Web/JavaScript/Reference/Operators/Nullish_coalescing_operator tags: - JavaScript - Operador @@ -10,6 +10,7 @@ tags: - duas interrogações - nulidade translation_of: Web/JavaScript/Reference/Operators/Nullish_coalescing_operator +original_slug: Web/JavaScript/Reference/Operators/operador_de_coalescencia_nula ---

    {{JSSidebar("Operators")}}

    diff --git a/files/pt-br/web/javascript/reference/operators/object_initializer/index.html b/files/pt-br/web/javascript/reference/operators/object_initializer/index.html index ac59b4e7f8..d2276ff890 100644 --- a/files/pt-br/web/javascript/reference/operators/object_initializer/index.html +++ b/files/pt-br/web/javascript/reference/operators/object_initializer/index.html @@ -1,6 +1,6 @@ --- title: Inicializador de Objeto -slug: Web/JavaScript/Reference/Operators/Inicializador_Objeto +slug: Web/JavaScript/Reference/Operators/Object_initializer tags: - ECMAScript 2015 - JSON @@ -11,6 +11,7 @@ tags: - Propriedades - mutação translation_of: Web/JavaScript/Reference/Operators/Object_initializer +original_slug: Web/JavaScript/Reference/Operators/Inicializador_Objeto ---
    {{JsSidebar("Operadores")}}
    diff --git a/files/pt-br/web/javascript/reference/statements/async_function/index.html b/files/pt-br/web/javascript/reference/statements/async_function/index.html index 808f0b0306..506bec9063 100644 --- a/files/pt-br/web/javascript/reference/statements/async_function/index.html +++ b/files/pt-br/web/javascript/reference/statements/async_function/index.html @@ -1,10 +1,11 @@ --- title: Funções assíncronas -slug: Web/JavaScript/Reference/Statements/funcoes_assincronas +slug: Web/JavaScript/Reference/Statements/async_function tags: - Função - assíncrono translation_of: Web/JavaScript/Reference/Statements/async_function +original_slug: Web/JavaScript/Reference/Statements/funcoes_assincronas ---
    {{jsSidebar("Statements")}}
    diff --git a/files/pt-br/web/javascript/reference/template_literals/index.html b/files/pt-br/web/javascript/reference/template_literals/index.html index e2a11abfa4..0aea7202ff 100644 --- a/files/pt-br/web/javascript/reference/template_literals/index.html +++ b/files/pt-br/web/javascript/reference/template_literals/index.html @@ -1,7 +1,8 @@ --- title: Template strings -slug: Web/JavaScript/Reference/template_strings +slug: Web/JavaScript/Reference/Template_literals translation_of: Web/JavaScript/Reference/Template_literals +original_slug: Web/JavaScript/Reference/template_strings ---
    {{JsSidebar("More")}}
    diff --git a/files/pt-br/web/mathml/examples/index.html b/files/pt-br/web/mathml/examples/index.html index ac83b9e48a..22d248e8f1 100644 --- a/files/pt-br/web/mathml/examples/index.html +++ b/files/pt-br/web/mathml/examples/index.html @@ -1,7 +1,8 @@ --- title: Exemplos -slug: Web/MathML/Exemplos +slug: Web/MathML/Examples translation_of: Web/MathML/Examples +original_slug: Web/MathML/Exemplos ---

    Abaixo você irá encontrar alguns exemplos que irá ajudá-lo a entender como utilizar MathML para apresentar conceitos matemáticos complexos na Web.

    diff --git a/files/pt-br/web/media/formats/index.html b/files/pt-br/web/media/formats/index.html index 49c0b02fc1..08ce0424a5 100644 --- a/files/pt-br/web/media/formats/index.html +++ b/files/pt-br/web/media/formats/index.html @@ -1,6 +1,6 @@ --- title: Formatos de mídia suportados por elementos HTML de áudio e vídeo -slug: Web/HTML/formatos_midia_suportados +slug: Web/Media/Formats tags: - Audio - Firefox @@ -14,6 +14,7 @@ tags: - mp4 translation_of: Web/Media/Formats translation_of_original: Web/HTML/Supported_media_formats +original_slug: Web/HTML/formatos_midia_suportados ---

    Os elementos {{ HTMLElement("audio") }} e {{ HTMLElement("video") }} fornecem suporte para a reprodução de mídias de áudio e vídeo sem necessitar de plug-ins. Codecs de áudio e vídeo são usados para manipular arquivos de áudio e vídeo, diferentes codecs oferecem diferentes níveis de compressão e qualidade. Um formato do repositório é usado para armazenar e transmitir o codec de áudio e vídeo ( ambos juntos,  no caso de um vídeo com tilha sonora). Existem muitas combinações de codecs e formatos de containers, embora apenas alguns são relevantes para a internet.

    diff --git a/files/pt-br/web/performance/critical_rendering_path/index.html b/files/pt-br/web/performance/critical_rendering_path/index.html index 63746f132c..32bcad252c 100644 --- a/files/pt-br/web/performance/critical_rendering_path/index.html +++ b/files/pt-br/web/performance/critical_rendering_path/index.html @@ -1,7 +1,8 @@ --- title: Caminho de renderização crítico -slug: Web/Performance/caminho_de_renderizacao_critico +slug: Web/Performance/Critical_rendering_path translation_of: Web/Performance/Critical_rendering_path +original_slug: Web/Performance/caminho_de_renderizacao_critico ---

    {{draft}}

    diff --git a/files/pt-br/web/progressive_web_apps/introduction/index.html b/files/pt-br/web/progressive_web_apps/introduction/index.html index 483ea5cfc0..3ed5fe1b61 100644 --- a/files/pt-br/web/progressive_web_apps/introduction/index.html +++ b/files/pt-br/web/progressive_web_apps/introduction/index.html @@ -1,7 +1,8 @@ --- title: Introdução a progressive web apps -slug: Web/Progressive_web_apps/Introdução +slug: Web/Progressive_web_apps/Introduction translation_of: Web/Progressive_web_apps/Introduction +original_slug: Web/Progressive_web_apps/Introdução ---
    {{NextMenu("Web/Apps/Progressive/App_structure", "Web/Apps/Progressive")}}
    diff --git a/files/pt-br/web/svg/namespaces_crash_course/index.html b/files/pt-br/web/svg/namespaces_crash_course/index.html index 35f50be610..25e45b559f 100644 --- a/files/pt-br/web/svg/namespaces_crash_course/index.html +++ b/files/pt-br/web/svg/namespaces_crash_course/index.html @@ -1,10 +1,11 @@ --- title: Intensivo de Namespaces -slug: Web/SVG/Intensivo_de_Namespaces +slug: Web/SVG/Namespaces_Crash_Course tags: - SVG - XML translation_of: Web/SVG/Namespaces_Crash_Course +original_slug: Web/SVG/Intensivo_de_Namespaces ---

    Como um dialeto XML, o SVG tem namespace. É importante entender o conceito de namespaces e como eles são usados se você planeja criar seu próprio conteúdo em SVG. Versões de visualizadores SVG prévias ao lançamento do Firefox 1.5 infelizmente deu pouca atenção aos namespaces mas eles são essenciais para dialetos multi-XML suportando agentes de usuários como navegadores baseados em Gecko que devem ser muito rigorosos. Tome um tempo para entender namespaces agora e irá te privar de muita dor de cabeça no futuro.

    diff --git a/files/pt-br/web/tutorials/index.html b/files/pt-br/web/tutorials/index.html index 68be26f522..bd765e25f3 100644 --- a/files/pt-br/web/tutorials/index.html +++ b/files/pt-br/web/tutorials/index.html @@ -1,6 +1,6 @@ --- title: Tutoriais -slug: Web/Tutoriais +slug: Web/Tutorials tags: - Artigos Web - CSS @@ -16,6 +16,7 @@ tags: - Navegador - Tutorial translation_of: Web/Tutorials +original_slug: Web/Tutoriais ---

    Os links nesta página levam a uma variedade de tutoriais e materiais de treinamento. Se você está apenas começando, aprendendo o básico ou é um veterano em desenvolvimento web, aqui você pode encontrar recursos úteis, bem como as melhores práticas. Esses recursos são criados por empresas com visão de futuro e desenvolvedores que adotaram padrões e boas práticas para desenvolvimento na web, e que fornecem e permitem diferentes interpretações de acordo com a solução adotada pelo usuário, tudo isso através de uma licença de conteúdo aberto, como é o caso da Creative Commons.

    diff --git a/files/pt-br/web/web_components/using_custom_elements/index.html b/files/pt-br/web/web_components/using_custom_elements/index.html index 55af21ca48..cdac93bb4e 100644 --- a/files/pt-br/web/web_components/using_custom_elements/index.html +++ b/files/pt-br/web/web_components/using_custom_elements/index.html @@ -1,6 +1,6 @@ --- title: Usando custom elements -slug: Web/Web_Components/Usando_custom_elements +slug: Web/Web_Components/Using_custom_elements tags: - Autonomos - Classes @@ -10,6 +10,7 @@ tags: - custom elements - customized translation_of: Web/Web_Components/Using_custom_elements +original_slug: Web/Web_Components/Usando_custom_elements ---
    {{DefaultAPISidebar("Web Components")}}
    diff --git a/files/pt-br/web/xslt/xslt_js_interface_in_gecko/advanced_example/index.html b/files/pt-br/web/xslt/xslt_js_interface_in_gecko/advanced_example/index.html index 132fba5881..d9976ff53a 100644 --- a/files/pt-br/web/xslt/xslt_js_interface_in_gecko/advanced_example/index.html +++ b/files/pt-br/web/xslt/xslt_js_interface_in_gecko/advanced_example/index.html @@ -1,7 +1,8 @@ --- title: Exemplo Avançado -slug: The_XSLT_JavaScript_Interface_in_Gecko/Advanced_Example +slug: Web/XSLT/XSLT_JS_interface_in_Gecko/Advanced_Example translation_of: Web/XSLT/XSLT_JS_interface_in_Gecko/Advanced_Example +original_slug: The_XSLT_JavaScript_Interface_in_Gecko/Advanced_Example ---

    Exemplo Avançado

    diff --git a/files/pt-br/web/xslt/xslt_js_interface_in_gecko/index.html b/files/pt-br/web/xslt/xslt_js_interface_in_gecko/index.html index 7bcbbc6cd0..71545cf052 100644 --- a/files/pt-br/web/xslt/xslt_js_interface_in_gecko/index.html +++ b/files/pt-br/web/xslt/xslt_js_interface_in_gecko/index.html @@ -1,12 +1,13 @@ --- title: The XSLT/JavaScript Interface in Gecko -slug: The_XSLT_JavaScript_Interface_in_Gecko +slug: Web/XSLT/XSLT_JS_interface_in_Gecko tags: - DOM - NeedsTranslation - TopicStub - XSLT translation_of: Web/XSLT/XSLT_JS_interface_in_Gecko +original_slug: The_XSLT_JavaScript_Interface_in_Gecko ---
    1. Introduction
    2. diff --git a/files/pt-br/webassembly/understanding_the_text_format/index.html b/files/pt-br/webassembly/understanding_the_text_format/index.html index 70568c9112..0be9d36d90 100644 --- a/files/pt-br/webassembly/understanding_the_text_format/index.html +++ b/files/pt-br/webassembly/understanding_the_text_format/index.html @@ -1,7 +1,8 @@ --- title: Entendendo o formato textual do WebAssembly -slug: WebAssembly/Entendendo_o_formato_textual_do_WebAssembly +slug: WebAssembly/Understanding_the_text_format translation_of: WebAssembly/Understanding_the_text_format +original_slug: WebAssembly/Entendendo_o_formato_textual_do_WebAssembly ---
      {{WebAssemblySidebar}}
      diff --git a/files/pt-br/webassembly/using_the_javascript_api/index.html b/files/pt-br/webassembly/using_the_javascript_api/index.html index e9146bef62..8ff4be0f91 100644 --- a/files/pt-br/webassembly/using_the_javascript_api/index.html +++ b/files/pt-br/webassembly/using_the_javascript_api/index.html @@ -1,6 +1,6 @@ --- title: Usando a API JavaScript do WebAssembly -slug: WebAssembly/Usando_a_API_JavaScript_do_WebAssembly +slug: WebAssembly/Using_the_JavaScript_API tags: - API - Compilador @@ -11,6 +11,7 @@ tags: - memoria - tabela translation_of: WebAssembly/Using_the_JavaScript_API +original_slug: WebAssembly/Usando_a_API_JavaScript_do_WebAssembly ---
      {{WebAssemblySidebar}}
      -- cgit v1.2.3-54-g00ecf