jQuery Attribute selector performance (v18)

Revision 18 of this benchmark created on


Description

Test to see if jQuery filters by selector before doing attribute matching.

Preparation HTML

<html lang="fr" dir="ltr" class="redesign "><head prefix="og: http://ogp.me/ns#">
  <meta charset="utf-8">
  <meta http-equiv="X-UA-Compatible" content="IE=Edge">
  <script>(function(d) { d.className = d.className.replace(/\bno-js/, ''); })(document.documentElement);</script>
        
    <title>Translate Article | HTML | MDN</title>

  <meta name="viewport" content="width=device-width, initial-scale=1">
  <meta name="robots" content="index, follow">
  <link rel="home" href="/fr/">
  <link rel="copyright" href="#copyright">

  <link href="//mozorg.cdn.mozilla.net/media/css/tabzilla-min.css" type="text/css" rel="stylesheet">
              <link rel="stylesheet" media="all" href="/media/redesign/css/font-awesome.css?build=1407116011">
<link rel="stylesheet" media="all" href="/media/redesign/css/main.css?build=1407172956">
<link rel="stylesheet" media="all" href="/media/redesign/css/badges.css?build=1407116011">

      
    <link rel="stylesheet" media="all" href="/media/redesign/css/wiki.css?build=1407172956">
<link rel="stylesheet" media="all" href="/media/redesign/css/zones.css?build=1407172956">
<link rel="stylesheet" media="all" href="/media/redesign/css/diff.css?build=1407116011">
<link rel="stylesheet" media="all" href="/media/js/libs/prism/themes/prism.css?build=1406102798">
<link rel="stylesheet" media="all" href="/media/js/libs/prism/plugins/line-highlight/prism-line-highlight.css?build=1390833122">
<link rel="stylesheet" media="all" href="/media/js/libs/prism/plugins/ie8/prism-ie8.css?build=1390833122">
<link rel="stylesheet" media="all" href="/media/js/prism-mdn/plugins/line-numbering/prism-line-numbering.css?build=1400265851">
<link rel="stylesheet" media="all" href="/media/js/prism-mdn/components/prism-json.css?build=1390833122">
<link rel="stylesheet" media="all" href="/media/redesign/css/wiki-syntax.css?build=1407116012">

          <link rel="stylesheet" type="text/css" href="/en-US/docs/Template:CustomCSS?raw=1">
    
    <link rel="stylesheet" media="screen,projection,tv" href="/media/redesign/css/wiki-edit.css?build=1407172956">
    <link rel="stylesheet" media="screen,projection,tv" href="/media/js/libs/jquery-ui-1.10.3.custom/css/ui-lightness/jquery-ui-1.10.3.custom.min.css?build=1390833122">
<link rel="stylesheet" media="screen,projection,tv" href="/media/css/jqueryui/moz-jquery-plugins.css?build=1400767112">
<link rel="stylesheet" media="screen,projection,tv" href="/media/redesign/css/jquery-ui-customizations.css?build=1407116011">

  <!-- common social tags -->
    <meta property="og:type" content="website">
  <meta property="og:image" content="http://developer-local.allizom.org/media/redesign/img/opengraph-logo.png">
  <meta property="og:site_name" content="Mozilla Developer Network">
  <meta name="twitter:card" content="summary">
  <meta name="twitter:image" content="http://developer-local.allizom.org/media/redesign/img/opengraph-logo.png">
  <meta name="twitter:site" content="@NewOnMDN">
  <meta name="twitter:creator" content="@NewOnMDN">

  <link rel="search" type="application/opensearchdescription+xml" href="https://developer-local.allizom.org/fr/search/xml" title="Mozilla Developer Network">

  <!-- third-generation iPad with high-resolution Retina display: -->
  <link rel="apple-touch-icon-precomposed" sizes="144x144" href="/media/redesign/img/favicon144.png">
  <!-- iPhone with high-resolution Retina display: -->
  <link rel="apple-touch-icon-precomposed" sizes="114x114" href="/media/redesign/img/favicon114.png">
  <!-- first- and second-generation iPad: -->
  <link rel="apple-touch-icon-precomposed" sizes="72x72" href="/media/redesign/img/favicon72.png">
  <!-- non-Retina iPhone, iPod Touch, and Android 2.1+ devices: -->
  <link rel="apple-touch-icon-precomposed" href="/media/redesign/img/favicon57.png">
  <!-- basic favicon -->
          <link rel="shortcut icon" href="/media/redesign/img/favicon32-local.png">
  <!--[if IE]>
  <meta http-equiv="imagetoolbar" content="no">
  <script src="/media/js/libs/html5.js"></script>
  <![endif]-->

    <link rel="stylesheet" media="screen,projection,tv" href="/media/redesign/css/home.css?build=1407172956">
<link rel="stylesheet" media="screen,projection,tv" href="/media/js/libs/owl.carousel/owl-carousel/owl.carousel.css?build=1392313545">
<link rel="stylesheet" media="screen,projection,tv" href="/media/js/libs/owl.carousel/owl-carousel/owl.theme.css?build=1392313545">

        <style type="text/css"></style><script type="text/javascript" src="/en-US/docs/ckeditor_config.js?t=C6HH5UF"></script><script type="text/javascript" src="/en-US/docs/ckeditor_config.js?t=dev"></script><meta name="chromesniffer" id="chromesniffer_meta" content="{&quot;jQuery&quot;:&quot;2.1.0&quot;,&quot;jQuery UI&quot;:&quot;1.10.3&quot;}"><script type="text/javascript" src="chrome-extension://homgcnaoacgigpkkljjjekpignblkeae/detector.js"></script><script type="text/javascript" src="https://developer-local.allizom.org/media/js/libs/ckeditor/skins/kuma/skin.js?t=dev"></script><link rel="stylesheet" type="text/css" href="https://developer-local.allizom.org/media/js/libs/ckeditor/skins/kuma/editor.css?t=dev"><script type="text/javascript" src="https://developer-local.allizom.org/media/js/libs/ckeditor/lang/en.js?t=dev"></script><script type="text/javascript" src="https://developer-local.allizom.org/media/js/libs/ckeditor/plugins/definitionlist/plugin.js?t=dev"></script><script type="text/javascript" src="https://developer-local.allizom.org/media/js/libs/ckeditor/plugins/mdn-buttons/plugin.js?t=dev"></script><script type="text/javascript" src="https://developer-local.allizom.org/media/js/libs/ckeditor/plugins/mdn-link/plugin.js?t=dev"></script><script type="text/javascript" src="https://developer-local.allizom.org/media/js/libs/ckeditor/plugins/mdn-syntaxhighlighter/plugin.js?t=dev"></script><script type="text/javascript" src="https://developer-local.allizom.org/media/js/libs/ckeditor/plugins/mdn-keystrokes/plugin.js?t=dev"></script><script type="text/javascript" src="https://developer-local.allizom.org/media/js/libs/ckeditor/plugins/mdn-attachments/plugin.js?t=dev"></script><script type="text/javascript" src="https://developer-local.allizom.org/media/js/libs/ckeditor/plugins/mdn-image/plugin.js?t=dev"></script><script type="text/javascript" src="https://developer-local.allizom.org/media/js/libs/ckeditor/plugins/mdn-enterkey/plugin.js?t=dev"></script><script type="text/javascript" src="https://developer-local.allizom.org/media/js/libs/ckeditor/plugins/mdn-wrapstyle/plugin.js?t=dev"></script><script type="text/javascript" src="https://developer-local.allizom.org/media/js/libs/ckeditor/plugins/mdn-table/plugin.js?t=dev"></script><script type="text/javascript" src="https://developer-local.allizom.org/media/js/libs/ckeditor/plugins/tablesort/plugin.js?t=dev"></script><script type="text/javascript" src="https://developer-local.allizom.org/media/js/libs/ckeditor/plugins/mdn-sampler/plugin.js?t=dev"></script><script type="text/javascript" src="https://developer-local.allizom.org/media/js/libs/ckeditor/plugins/mdn-sample-finder/plugin.js?t=dev"></script><script type="text/javascript" src="https://developer-local.allizom.org/media/js/libs/ckeditor/plugins/mdn-maximize/plugin.js?t=dev"></script><script type="text/javascript" src="https://developer-local.allizom.org/media/js/libs/ckeditor/plugins/mdn-redirect/plugin.js?t=dev"></script><script type="text/javascript" src="https://developer-local.allizom.org/media/js/libs/ckeditor/plugins/youtube/plugin.js?t=dev"></script><script type="text/javascript" src="https://developer-local.allizom.org/media/js/libs/ckeditor/plugins/autogrow/plugin.js?t=dev"></script><script type="text/javascript" src="https://developer-local.allizom.org/media/js/libs/ckeditor/plugins/texzilla/plugin.js?t=dev"></script><script type="text/javascript" src="https://developer-local.allizom.org/media/js/libs/ckeditor/plugins/combobutton/plugin.js?t=dev"></script><script type="text/javascript" src="https://developer-local.allizom.org/media/js/libs/ckeditor/plugins/definitionlist/lang/en.js?t=dev"></script><script type="text/javascript" src="https://developer-local.allizom.org/media/js/libs/ckeditor/plugins/tablesort/lang/en.js?t=dev"></script></head>
<body class="translate"><div id="tabzilla-panel" class="tabzilla-closed" tabindex="-1">  <div id="tabzilla-contents">    <div id="tabzilla-promo">      <div class="snippet" id="tabzilla-promo-webwewant">        <a href="https://webwewant.mozilla.org/?icn=tabz">          <h4>What kind of Web do you want?</h4>          <p>Share your vision</p>        </a>      </div>    </div>    <div id="tabzilla-nav">      <ul>        <li><h2>Mozilla</h2>          <div>            <ul>              <li><a href="https://www.mozilla.org/mission/?icn=tabz">Mission</a></li>              <li><a href="https://www.mozilla.org/about/?icn=tabz">About</a></li>              <li><a href="https://www.mozilla.org/projects/?icn=tabz">Projects</a></li>              <li><a href="https://support.mozilla.org/?icn=tabz">Support</a></li>              <li><a href="https://developer.mozilla.org/?icn=tabz">Developer Network</a></li>            </ul>          </div>        </li>        <li><h2>Products</h2>          <div>            <ul>              <li><a href="https://www.mozilla.org/firefox/?icn=tabz">Firefox</a></li>              <li><a href="https://www.mozilla.org/thunderbird/?icn=tabz">Thunderbird</a></li>              <li><a href="https://www.mozilla.org/firefox/os/?icn=tabz">Firefox OS</a></li>            </ul>          </div>        </li>        <li><h2>Innovations</h2>          <div>            <ul>              <li><a href="https://webmaker.org/?icn=tabz">Webmaker</a></li>              <li><a href="https://www.mozilla.org/research/?icn=tabz">Research</a></li>            </ul>          </div>        </li>        <li><h2>Get Involved</h2>          <div>            <ul>              <li><a href="https://www.mozilla.org/contribute/?icn=tabz">Volunteer</a></li>              <li><a href="https://careers.mozilla.org/?icn=tabz">Careers</a></li>              <li><a href="https://www.mozilla.org/en-US/about/mozilla-spaces/?icn=tabz">Find us</a></li>              <li><a href="https://sendto.mozilla.org/page/contribute/Give-Now?icn=tabz&amp;source=mozillaorg_default_tabzillaTXT" class="donate">Donate</a></li>              <li><a href="https://www.mozilla.org/about/partnerships/?icn=tabz">Partner</a></li>            </ul>          </div>        </li>        <li id="tabzilla-search">          <a href="https://wiki.mozilla.org/Websites/Directory?icn=tabz">Website Directory</a>          <form title="Search Mozilla sites" role="search" action="https://www.google.com/cse">            <input type="hidden" value="002443141534113389537:ysdmevkkknw" name="cx">            <input type="hidden" value="FORID:0" name="cof">            <label for="q">Search</label>            <input type="search" placeholder="Search" id="q" name="q">          </form>        </li>      </ul>    </div>  </div></div>

  <script type="text/javascript">
    (function(win) {
        'use strict';

                    (function(){
  var FLAGS = {
    'events_map': true,'kumaediting': true,'oauth_login': true,'page_move': true
    },
    SWITCHES = {
    
    },
    SAMPLES = {
    
    };
  window.waffle = {
    "flag_is_active": function waffle_flag(flag_name) {
      
      return !!FLAGS[flag_name];
    },
    "switch_is_active": function waffle_switch(switch_name) {
      
      return !!SWITCHES[switch_name];
    },
    "sample_is_active": function waffle_sample(sample_name) {
      
      return !!SAMPLES[sample_name];
    },
    "FLAGS": FLAGS,
    "SWITCHES": SWITCHES,
    "SAMPLES": SAMPLES
  };
})();

                
        // This represents the site configuration
        win.mdn = {
            build: 'dev',
            // Properties and settings for CKEditor will go here
            ckeditor: {},
            // Feature test results and methods will be placed here
            features: {},
            // The path to media (images, CSS, JS) in MDN
            mediaPath: '/media/',
            // Optimizely API
            optimizely: win['optimizely'] || [],
            // Site notifications
            notifications: [],
            
            // Wiki-specific settings will be placed here
            wiki: {
                autosuggestTitleUrl: '/fr/docs/get-documents'
            },
        };

        // Ensures gettext always returns something, is always set
        win.gettext = function(x) {
            return x;
        }
    })(window);
</script>
  

  
  <ul id="nav-access">
    <li><a href="#content" id="skip-main">Skip to main content</a></li>
    <li><a id="skip-language" href="#language">Select language</a></li>
          <li><a href="#q" id="skip-search">Skip to search</a></li>
      </ul>

  <!-- Header -->
  <header id="main-header"><div class="center">

    <div class="clear header-login">
      <a href="//www.mozilla.org/" id="tabzilla" class="no-track" aria-label="Mozilla links">mozilla</a>
                  <div class="user-state">
                <ul>
            <li><a href="/fr/profiles/akshayaurora">akshayaurora</a></li>
            <li><a href="/fr/users/signout/?next=/fr/docs/Web/HTML$edit">Sign out</a></li>
        </ul>
    </div>
          </div>

    <a href="/fr/" class="logo">Mozilla Developer Network</a>

    <nav id="main-nav" role="navigation"><ul><li><a href="/en-US/docs/Zones">Zones<i aria-hidden="true" class="icon-caret-down"></i></a>

        <div class="submenu submenu-single" id="nav-zones-submenu" aria-hidden="true" style="z-index: 99998;">
          <div class="submenu-column">
            <ul>
              <li><a href="/en-US/docs/Mozilla/Add-ons">Add-ons</a></li>
              <li><a href="/en-US/docs/Apps">App Center</a></li>
              <li><a href="/en-US/docs/Firefox">Firefox</a></li>
              <li><a href="/en-US/docs/Mozilla/Marketplace">Firefox Marketplace</a></li>
              <li><a href="/en-US/docs/Firefox_OS">Firefox OS</a></li>
              <li><a href="/en-US/docs/Persona">Persona</a></li>
            </ul>
          </div>
        <button type="button" class="submenu-close transparent">                        <span class="offscreen">Close submenu</span>                        <i aria-hidden="true" class="icon-remove-sign"></i>                    </button></div>
      </li><li><a href="/fr/docs/Web">Web Platform<i aria-hidden="true" class="icon-caret-down"></i></a>

        <div class="submenu" id="nav-platform-submenu" aria-hidden="true" style="display: none; z-index: 99998;">
          <div class="submenu-column">
            <div class="title">Technologies</div>
            <ul>
              <li><a href="/fr/docs/Web/HTML">HTML</a></li>
              <li><a href="/en-US/docs/Web/CSS">CSS</a></li>
              <li><a href="/en-US/docs/Web/JavaScript">JavaScript</a></li>
              <li><a href="/en-US/docs/Web/Guide/Graphics">Graphics</a></li>
              <li><a href="/en-US/docs/Web/API">APIs / DOM</a></li>
              <li><a href="/en-US/docs/Web/Apps">Apps</a></li>
              <li><a href="/en-US/docs/Web/MathML">MathML</a></li>
            </ul>
          </div><div class="submenu-column last">
            <div class="title">References &amp; Guides</div>
            <ul>
              <li><a href="/en-US/docs/Web/Tutorials">Tutorials</a></li>
              <li><a href="/en-US/docs/Web/Reference">References</a></li>
              <li><a href="/en-US/docs/Web/Guide">Developer Guides</a></li>
              <li><a href="/en-US/docs/Web/Accessibility">Accessibility</a></li>
              <li><a href="/fr/demos/">Demos</a></li>
              <li><a href="/fr/docs/Web">...more docs</a></li>
            </ul>
          </div>
        <button type="button" class="submenu-close transparent">                        <span class="offscreen">Close submenu</span>                        <i aria-hidden="true" class="icon-remove-sign"></i>                    </button></div>
      </li><li><a href="/en-US/docs/Tools">Tools</a></li><li><a href="/fr/demos/">Demos</a></li><li><a href="/en-US/docs/Mozilla/Connect">Connect</a></li><li class="main-nav-search"><form action="/fr/search" method="get" role="search">
        <div class="search-wrap">
          <label for="main-q" class="offscreen">Rechercher</label>
          <input type="search" id="main-q" name="q" data-placeholder="Rechercher" data-value="" value="">
          <span class="search-trigger"><i aria-hidden="true" class="icon-search"></i></span>&nbsp;
          <button type="submit" class="offscreen">Rechercher</button>
        </div>
      </form></li></ul></nav>
  </div></header>

  <!-- Content will go here -->
  <main id="content" role="main"><div class="center clear">
    
    <form action="" method="post" data-json-url="/fr/docs.json" id="translate-document">
      <div style="display:none"><input type="hidden" name="csrfmiddlewaretoken" value="06KcEKS3Tyqr1lVxt999BCkXei7fLiSA"></div>
      <input type="hidden" name="form" value="both">

      <div id="localize-document" class="editing">
        <header id="article-head">
          <div class="title">
           <h1><span class="action">Translating</span> <em>HTML</em></h1>
          </div>

          <div class="change-locale">
            Translating article to Français.
          </div>

          


  <iframe id="save-and-edit-target" name="save-and-edit-target"></iframe>  <input type="hidden" id="new-page-href" value="/fr/docs/new">
  <input type="hidden" id="new-page-label" value="New Page">
  <input type="hidden" id="new-page-msg" value="Discard changes and create a new document?">

<ul class="page-buttons">
    <li>
    <button type="submit" class="button positive btn-save-and-edit" data-optimizely-hook="button-save-and-keep-editing button-save-and-keep-editing-top"><span>Save and Keep Editing</span><i aria-hidden="true" class="icon-edit"></i></button>
  </li>
    <li>
    <button type="submit" class="button positive btn-save">Save Changes<i aria-hidden="true" class="icon-save"></i></button>
  </li>
  <li>
    <button type="button" class="btn-preview" data-preview-url="/fr/docs/preview-wiki-content">Preview Changes<i aria-hidden="true" class="icon-play-circle"></i></button>
  </li>
  <li>
    <a href="/fr/docs/Web/HTML" class="button negative btn-discard">Discard Changes<i aria-hidden="true" class="icon-undo"></i></a>
  </li>
</ul>


        </header>

                <details id="trans-description">
        <summary><h2>Translate Description</h2></summary>
        
            <ul class="description">
              <li>
                <dl class="approved">
                  <dt>Title:</dt>
                  <dd>HTML</dd>
                </dl>
                <dl class="localized">
                  <dt><label for="id_title" title="Title of article">Title in Français:</label></dt>
                  <dd><input name="title" maxlength="255" placeholder="Name Your Article" required="required" type="text" id="id_title" value="HTML"></dd>
                </dl>
              </li>
                              <li>
                  <dl class="approved">
                    <dt>Slug:</dt>
                    <dd>HTML</dd>
                  </dl>
                  <dl class="localized">
                    <dt><label for="id_slug" title="Article URL">Slug in Français:</label></dt>
                    <dd><input name="slug" required="required" value="HTML" maxlength="255" type="text" id="id_slug"></dd>
                  </dl>
                </li>
                                <li>
                  <dl class="approved">
                    <dt>Parent:</dt>
                    <dd>Web</dd>
                  </dl>
                  <dl class="localized">
                    <dt>&nbsp;</dt>
                    <dd>&nbsp;</dd>
                  </dl>
                </li>
                                                            <li>
                  <dl class="approved">
                    <dt>&nbsp;</dt>
                    <dd>&nbsp;</dd>
                  </dl>
                  <dl class="localized">
                    <dt><label><abbr title="Generate table of contents">TOC:</abbr></label></dt>
                    <dd><select required="required" name="toc_depth" id="id_toc_depth">
<option value="0">No table of contents</option>
<option value="1">All levels</option>
<option value="2">H2 and higher</option>
<option value="3">H3 and higher</option>
<option value="4" selected="selected">H4 and higher</option>
</select></dd>
                  </dl>
                </li>
                                          <li class="metadata-choose-parent" style="display: block;">
                <dl class="approved">
                  <dt>&nbsp;</dt>
                  <dd>&nbsp;</dd>
                </dl>
                <dl class="localized">
                  <dt><label>Lookup:</label>
                    <span role="status" aria-live="polite" class="ui-helper-hidden-accessible"></span><input type="text" id="parent_text" class="ui-autocomplete-input" autocomplete="off">
                    <input type="hidden" name="parent_id" id="parent_id" value="3">
                  </dt>
                  <dd>Find the translation source with the lookup above and then click "Save Changes.</dd>
                </dl>
              </li>
                          </ul>
      </details>
                  <details id="trans-content" open="open" class="translate-only">
            <summary><h2>Translate Content</h2></summary>
            
                                                  
                        <div id="content-fields">
              <article class="approved text-content">
                <header>
                    <h3 class="approved-title">Approved English (US) version:</h3>
                    <div class="translate-buttons">
                        <button class="doc-mode-btn" data-alternate-message="View Rendered">View Source</button>
                        <button class="hide-original-btn" data-alternate-message="Hide English (US)">Show English (US)</button>
                    </div>
                </header>
                <div class="boxed translate-rendered">
                  <p>Check 123 test again</p>
<p>{{ gecko_minversion_header("2.0") }}</p>
<p>{{ Next("WebGL/Adding_2D_content_to_a_WebGL_context") }}</p>
<p><a class="external external-icon" href="http://www.khronos.org/webgl/" title="http://www.khronos.org/webgl/">WebGL</a> enables web content to use an API&nbsp;based on <a class="external external-icon" href="http://www.khronos.org/opengles/" title="http://www.khronos.org/opengles/">OpenGL&nbsp;ES</a> 2.0 to perform 3D rendering in an HTML&nbsp;<a class="internal" href="/en/HTML/Canvas" title="en/HTML/Canvas"><code>canvas</code></a> in browsers that support it without the use of plug-ins. WebGL programs consist of control code written in JavaScript and special effects code(shader code) that is executed on a computer's Graphics Processing Unit (GPU). WebGL elements can be mixed with other HTML elements and composited with other parts of the page or page background.</p>
<p>This article will introduce you to the basics of using WebGL. It's assumed that you already have an understanding of the mathematics involved in 3D graphics, and this article doesn't pretend to try to teach you OpenGL itself.</p>
<h2 id="Preparing_to_render_in_3D">Preparing to render in 3D</h2>
<p>The first thing you need in order to use WebGL to render in 3D is a canvas. The HTML&nbsp;fragment below establishes a canvas and sets up an <code>onload</code> event handler that will be used to initialize our WebGL context.</p>
<pre class="brush: html">&lt;body onload="start()"&gt;
  &lt;canvas id="glcanvas" width="640" height="480"&gt;
    Your browser doesn't appear to support the HTML5 &lt;code&gt;&amp;lt;canvas&amp;gt;&lt;/code&gt; element.
  &lt;/canvas&gt;
&lt;/body&gt;
</pre>
<h3 id="Preparing_the_WebGL.C2.A0context">Preparing the WebGL&nbsp;context</h3>
<p>The <code>start()</code>&nbsp;function, in our JavaScript code, is called after the document is loaded. Its mission is to set up the WebGL&nbsp;context and start rendering content.</p>
<pre class="brush: js">var gl; // A global variable for the WebGL context

function start() {
  var canvas = document.getElementById("glcanvas");

  gl = initWebGL(canvas);      // Initialize the GL context
  
  // Only continue if WebGL is available and working
  
  if (gl) {
    gl.clearColor(0.0, 0.0, 0.0, 1.0);                      // Set clear color to black, fully opaque
    gl.enable(gl.DEPTH_TEST);                               // Enable depth testing
    gl.depthFunc(gl.LEQUAL);                                // Near things obscure far things
    gl.clear(gl.COLOR_BUFFER_BIT|gl.DEPTH_BUFFER_BIT);      // Clear the color as well as the depth buffer.
&nbsp; }
}
</pre>
<p>The first thing we do here is obtain a reference to the canvas, stashing it in a variable called <code>canvas</code>. Obviously if you don't need to repeatedly reference the canvas, you should avoid saving this value globally, and just save it in a local variable or member field of an object.</p>
<p>Once we have the canvas, we call a function called <code>initWebGL()</code>; this is a function we'll define momentarily; its job is to initialize the WebGL context.</p>
<p>If the context is successfully initialized, <code>gl</code> is a reference to it. In this case, we set the clear color to black, then clear the context to that color. After that, the context is configured by setting parameters. In this case, we're enabling depth testing and specifying that closer objects will obscure objects that are farther away.</p>
<p>For the purposes of this initial pass at the code, that's all we're going to do. We'll look at how to actually start doing something a little later.</p>
<h3 id="Creating_a_WebGL.C2.A0context">Creating a WebGL&nbsp;context</h3>
<p>The <code>initWebGL()</code>&nbsp;function looks like this:</p>
<pre class="brush: js">function initWebGL(canvas) {
  gl = null;
  
  try {
&nbsp; &nbsp;&nbsp;// Try to grab the standard context. If it fails, fallback to experimental.
&nbsp;&nbsp;&nbsp; gl = canvas.getContext("webgl") || canvas.getContext("experimental-webgl");
&nbsp; }
&nbsp; catch(e) {}
  
  // If we don't have a GL context, give up now
  if (!gl) {
    alert("Unable to initialize WebGL. Your browser may not support it.");
    gl = null;
  }
  
  return gl;
}

</pre>
<p>To obtain a WebGL context for a canvas, we request the context named "webgl" from the canvas. If this fails, we try the name "experimental-webgl". If that, too, fails, we display an alert letting the user know they appear not to have WebGL support. That's all there is to it. At this point, <code>gl</code> is either null (meaning there is no WebGL context available) or is a reference to the WebGL context into which we'll be rendering.</p>
<div class="note">
 <strong>Note:</strong> The context name "experimental-webgl" is a temporary name for the context for use during development of the specification; the name "webgl" will be used once the spec is finalized.</div>
<p>At this point, you have enough code that the WebGL&nbsp;context should successfully initialize, and you should wind up with a big black, empty box, ready and waiting to receive content.</p>
<p><a href="/samples/webgl/sample1/index.html" title="https://developer.mozilla.org/samples/webgl/sample1/index.html">Try this example live by clicking here</a> if you're running a WebGL compatible browser.</p>
<h3 id="Resizing_the_WebGL_context">Resizing the WebGL context</h3>
<p>A new WebGL context will set its viewport resolution to the height and width of its canvas element, without CSS, at the instant the context was obtained. Editing the style of a canvas element will change its displayed size but will not change its rendering resolution. Editing the width and height attributes of a canvas element after the context has been created will also not change the number of pixels to be drawn. To change the resolution which WebGL renders at, such as when the user resizes the window of a full-document canvas or you wish to provide in-app adjustable graphics settings, you will need to call the WebGL context's <code>viewport()</code> function to acknowledge the change.</p>
<p>To modify the rendered resolution of a WebGL context with variables <code>gl</code> and <code>canvas</code> as used in the above example:</p>
<pre class="brush: js">gl.viewport(0, 0, canvas.width, canvas.height);</pre>
<p>A canvas will experience scaling when it is rendered at a different resolution than its CSS style makes it occupy on the display. Resizing with CSS is mostly useful to save resources by rendering at a low resolution and allowing the browser to upscale; downscaling is possible which would produce a super sample antialiasing (SSAA) effect (albeit with naive results and a severe performance cost). It is often best to rely upon the MSAA and texture filtering implementations of the user's browser, if available and appropriate, rather than doing it via brute force and hoping that the browser's image reduction algorithm produces a cleaner result.</p>
<h3 id="See_also" style="line-height: 24px;">See also</h3>
<ul>
 <li><a href="http://dev.opera.com/articles/view/an-introduction-to-webgl/">An introduction to WebGL</a>&nbsp;- Written by Luz Caballero at the DEV.OPERA. This article addresses that what WebGL is, how WebGL works and the rendering pipeline concept and introduces some WebGL libraries.</li>
 <li><a href="http://duriansoftware.com/joe/An-intro-to-modern-OpenGL.-Table-of-Contents.html">An intro to modern OpenGL</a>&nbsp;- A series nice articles about OpenGL written by Joe Groff. Joe gives a clear intro about OpenGL from its history to the important graphics pipeline concept and provides some examples to demo how OpenGL works. If you have no idea about OpenGL, this is a good place to start.</li>
</ul>
<p>{{ Next("WebGL/Adding_2D_content_to_a_WebGL_context") }}</p>
<p>{{ languages( { "de": "de/WebGL/Einführung_in_WebGL", "fr": "fr/WebGL/Commencer_avec_WebGL", "ja": "ja/WebGL/Getting_started_with_WebGL" } ) }}</p>
<p>&nbsp;</p>
<p>Doing a test.</p>
<h3 id=".C2.A0">&nbsp;</h3>
                </div>
                <div class="boxed translate-source hidden">
                    <textarea readonly="" style="height: 2499px;">&lt;p&gt;Check 123 test again&lt;/p&gt;
&lt;p&gt;{{ gecko_minversion_header("2.0") }}&lt;/p&gt;
&lt;p&gt;{{ Next("WebGL/Adding_2D_content_to_a_WebGL_context") }}&lt;/p&gt;
&lt;p&gt;&lt;a class="external" href="http://www.khronos.org/webgl/" title="http://www.khronos.org/webgl/"&gt;WebGL&lt;/a&gt; enables web content to use an API&nbsp;based on &lt;a class="external" href="http://www.khronos.org/opengles/" title="http://www.khronos.org/opengles/"&gt;OpenGL&nbsp;ES&lt;/a&gt; 2.0 to perform 3D rendering in an HTML&nbsp;&lt;a class="internal" href="/en/HTML/Canvas" title="en/HTML/Canvas"&gt;&lt;code&gt;canvas&lt;/code&gt;&lt;/a&gt; in browsers that support it without the use of plug-ins. WebGL programs consist of control code written in JavaScript and special effects code(shader code) that is executed on a computer's Graphics Processing Unit (GPU). WebGL elements can be mixed with other HTML elements and composited with other parts of the page or page background.&lt;/p&gt;
&lt;p&gt;This article will introduce you to the basics of using WebGL. It's assumed that you already have an understanding of the mathematics involved in 3D graphics, and this article doesn't pretend to try to teach you OpenGL itself.&lt;/p&gt;
&lt;h2 id="Preparing_to_render_in_3D"&gt;Preparing to render in 3D&lt;/h2&gt;
&lt;p&gt;The first thing you need in order to use WebGL to render in 3D is a canvas. The HTML&nbsp;fragment below establishes a canvas and sets up an &lt;code&gt;onload&lt;/code&gt; event handler that will be used to initialize our WebGL context.&lt;/p&gt;
&lt;pre class="brush: html"&gt;&lt;body onload="start()"&gt;
  &lt;canvas id="glcanvas" width="640" height="480"&gt;
    Your browser doesn't appear to support the HTML5 &lt;code&gt;&amp;lt;canvas&amp;gt;&lt;/code&gt; element.
  &lt;/canvas&gt;
&lt;/body&gt;
&lt;/pre&gt;
&lt;h3 id="Preparing_the_WebGL.C2.A0context"&gt;Preparing the WebGL&nbsp;context&lt;/h3&gt;
&lt;p&gt;The &lt;code&gt;start()&lt;/code&gt;&nbsp;function, in our JavaScript code, is called after the document is loaded. Its mission is to set up the WebGL&nbsp;context and start rendering content.&lt;/p&gt;
&lt;pre class="brush: js"&gt;var gl; // A global variable for the WebGL context

function start() {
  var canvas = document.getElementById("glcanvas");

  gl = initWebGL(canvas);      // Initialize the GL context
  
  // Only continue if WebGL is available and working
  
  if (gl) {
    gl.clearColor(0.0, 0.0, 0.0, 1.0);                      // Set clear color to black, fully opaque
    gl.enable(gl.DEPTH_TEST);                               // Enable depth testing
    gl.depthFunc(gl.LEQUAL);                                // Near things obscure far things
    gl.clear(gl.COLOR_BUFFER_BIT|gl.DEPTH_BUFFER_BIT);      // Clear the color as well as the depth buffer.
&nbsp; }
}
&lt;/pre&gt;
&lt;p&gt;The first thing we do here is obtain a reference to the canvas, stashing it in a variable called &lt;code&gt;canvas&lt;/code&gt;. Obviously if you don't need to repeatedly reference the canvas, you should avoid saving this value globally, and just save it in a local variable or member field of an object.&lt;/p&gt;
&lt;p&gt;Once we have the canvas, we call a function called &lt;code&gt;initWebGL()&lt;/code&gt;; this is a function we'll define momentarily; its job is to initialize the WebGL context.&lt;/p&gt;
&lt;p&gt;If the context is successfully initialized, &lt;code&gt;gl&lt;/code&gt; is a reference to it. In this case, we set the clear color to black, then clear the context to that color. After that, the context is configured by setting parameters. In this case, we're enabling depth testing and specifying that closer objects will obscure objects that are farther away.&lt;/p&gt;
&lt;p&gt;For the purposes of this initial pass at the code, that's all we're going to do. We'll look at how to actually start doing something a little later.&lt;/p&gt;
&lt;h3 id="Creating_a_WebGL.C2.A0context"&gt;Creating a WebGL&nbsp;context&lt;/h3&gt;
&lt;p&gt;The &lt;code&gt;initWebGL()&lt;/code&gt;&nbsp;function looks like this:&lt;/p&gt;
&lt;pre class="brush: js"&gt;function initWebGL(canvas) {
  gl = null;
  
  try {
&nbsp; &nbsp;&nbsp;// Try to grab the standard context. If it fails, fallback to experimental.
&nbsp;&nbsp;&nbsp; gl = canvas.getContext("webgl") || canvas.getContext("experimental-webgl");
&nbsp; }
&nbsp; catch(e) {}
  
  // If we don't have a GL context, give up now
  if (!gl) {
    alert("Unable to initialize WebGL. Your browser may not support it.");
    gl = null;
  }
  
  return gl;
}

&lt;/pre&gt;
&lt;p&gt;To obtain a WebGL context for a canvas, we request the context named "webgl" from the canvas. If this fails, we try the name "experimental-webgl". If that, too, fails, we display an alert letting the user know they appear not to have WebGL support. That's all there is to it. At this point, &lt;code&gt;gl&lt;/code&gt; is either null (meaning there is no WebGL context available) or is a reference to the WebGL context into which we'll be rendering.&lt;/p&gt;
&lt;div class="note"&gt;
 &lt;strong&gt;Note:&lt;/strong&gt; The context name "experimental-webgl" is a temporary name for the context for use during development of the specification; the name "webgl" will be used once the spec is finalized.&lt;/div&gt;
&lt;p&gt;At this point, you have enough code that the WebGL&nbsp;context should successfully initialize, and you should wind up with a big black, empty box, ready and waiting to receive content.&lt;/p&gt;
&lt;p&gt;&lt;a href="/samples/webgl/sample1/index.html" title="https://developer.mozilla.org/samples/webgl/sample1/index.html"&gt;Try this example live by clicking here&lt;/a&gt; if you're running a WebGL compatible browser.&lt;/p&gt;
&lt;h3 id="Resizing_the_WebGL_context"&gt;Resizing the WebGL context&lt;/h3&gt;
&lt;p&gt;A new WebGL context will set its viewport resolution to the height and width of its canvas element, without CSS, at the instant the context was obtained. Editing the style of a canvas element will change its displayed size but will not change its rendering resolution. Editing the width and height attributes of a canvas element after the context has been created will also not change the number of pixels to be drawn. To change the resolution which WebGL renders at, such as when the user resizes the window of a full-document canvas or you wish to provide in-app adjustable graphics settings, you will need to call the WebGL context's &lt;code&gt;viewport()&lt;/code&gt; function to acknowledge the change.&lt;/p&gt;
&lt;p&gt;To modify the rendered resolution of a WebGL context with variables &lt;code&gt;gl&lt;/code&gt; and &lt;code&gt;canvas&lt;/code&gt; as used in the above example:&lt;/p&gt;
&lt;pre class="brush: js"&gt;gl.viewport(0, 0, canvas.width, canvas.height);&lt;/pre&gt;
&lt;p&gt;A canvas will experience scaling when it is rendered at a different resolution than its CSS style makes it occupy on the display. Resizing with CSS is mostly useful to save resources by rendering at a low resolution and allowing the browser to upscale; downscaling is possible which would produce a super sample antialiasing (SSAA) effect (albeit with naive results and a severe performance cost). It is often best to rely upon the MSAA and texture filtering implementations of the user's browser, if available and appropriate, rather than doing it via brute force and hoping that the browser's image reduction algorithm produces a cleaner result.&lt;/p&gt;
&lt;h3 id="See_also" style="line-height: 24px;"&gt;See also&lt;/h3&gt;
&lt;ul&gt;
 &lt;li&gt;&lt;a href="http://dev.opera.com/articles/view/an-introduction-to-webgl/"&gt;An introduction to WebGL&lt;/a&gt;&nbsp;- Written by Luz Caballero at the DEV.OPERA. This article addresses that what WebGL is, how WebGL works and the rendering pipeline concept and introduces some WebGL libraries.&lt;/li&gt;
 &lt;li&gt;&lt;a href="http://duriansoftware.com/joe/An-intro-to-modern-OpenGL.-Table-of-Contents.html"&gt;An intro to modern OpenGL&lt;/a&gt;&nbsp;- A series nice articles about OpenGL written by Joe Groff. Joe gives a clear intro about OpenGL from its history to the important graphics pipeline concept and provides some examples to demo how OpenGL works. If you have no idea about OpenGL, this is a good place to start.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;{{ Next("WebGL/Adding_2D_content_to_a_WebGL_context") }}&lt;/p&gt;
&lt;p&gt;{{ languages( { "de": "de/WebGL/Einführung_in_WebGL", "fr": "fr/WebGL/Commencer_avec_WebGL", "ja": "ja/WebGL/Getting_started_with_WebGL" } ) }}&lt;/p&gt;
&lt;p&gt;&nbsp;&lt;/p&gt;
&lt;p&gt;Doing a test.&lt;/p&gt;
&lt;h3 id=".C2.A0"&gt;&nbsp;&lt;/h3&gt;</textarea>
                </div>
              </article>
              <article class="localized">
                <header>
                  <div class="guide-links">
  <a target="_blank" href="/en-US/docs/Project:MDN/Contributing/Editor_guide">Editor Guide</a>
  •
  <a target="_blank" href="/en-US/docs/Project:MDN/Style_guide">Style Guide</a>
</div>                  <h3>Français translation:</h3>
                </header>
                <div class="ckeditor-container editor-container">
                      <div class="editor">
    <div class="editor-tools"></div>
    <div class="notice"><p>You have a draft in progress.  <a href="" class="restoreLink">Restore the draft content</a> or <a href="" class="discardLink">discard the draft</a>.</p></div><textarea id="id_content" rows="10" cols="40" name="content" style="visibility: hidden; display: none;">&lt;p&gt;{{ gecko_minversion_header("2.0") }}&lt;/p&gt;
&lt;p&gt;{{ Next("WebGL/Adding_2D_content_to_a_WebGL_context") }}&lt;/p&gt;
&lt;p&gt;New information.&lt;/p&gt;
&lt;p&gt;&lt;a class="external" href="http://www.khronos.org/webgl/" title="http://www.khronos.org/webgl/"&gt;WebGL&lt;/a&gt; enables web content to use an API&nbsp;based on &lt;a class="external" href="http://www.khronos.org/opengles/" title="http://www.khronos.org/opengles/"&gt;OpenGL&nbsp;ES&lt;/a&gt; 2.0 to perform 3D rendering in an HTML&nbsp;&lt;a class="internal" href="/en/HTML/Canvas" title="en/HTML/Canvas"&gt;&lt;code&gt;canvas&lt;/code&gt;&lt;/a&gt; in browsers that support it without the use of plug-ins. WebGL programs consist of control code written in JavaScript and special effects code(shader code) that is executed on a computer's Graphics Processing Unit (GPU). WebGL elements can be mixed with other HTML elements and composited with other parts of the page or page background.&lt;/p&gt;
&lt;p&gt;This article will introduce you to the basics of using WebGL. It's assumed that you already have an understanding of the mathematics involved in 3D graphics, and this article doesn't pretend to try to teach you OpenGL itself.&lt;/p&gt;
&lt;h2 id="Preparing_to_render_in_3D"&gt;Preparing to render in 3D&lt;/h2&gt;
&lt;p&gt;The first thing you need in order to use WebGL to render in 3D is a canvas. The HTML&nbsp;fragment below establishes a canvas and sets up an &lt;code&gt;onload&lt;/code&gt; event handler that will be used to initialize our WebGL context.&lt;/p&gt;
&lt;pre class="brush: html"&gt;&amp;lt;body onload="start()"&amp;gt;
  &amp;lt;canvas id="glcanvas" width="640" height="480"&amp;gt;
    Your browser doesn't appear to support the HTML5 &amp;lt;code&amp;gt;&amp;amp;lt;canvas&amp;amp;gt;&amp;lt;/code&amp;gt; element.
  &amp;lt;/canvas&amp;gt;
&amp;lt;/body&amp;gt;
&lt;/pre&gt;
&lt;h3 id="Preparing_the_WebGL.C2.A0context"&gt;Preparing the WebGL&nbsp;context&lt;/h3&gt;
&lt;p&gt;The &lt;code&gt;start()&lt;/code&gt;&nbsp;function, in our JavaScript code, is called after the document is loaded. Its mission is to set up the WebGL&nbsp;context and start rendering content.&lt;/p&gt;
&lt;pre class="brush: js"&gt;var gl; // A global variable for the WebGL context

function start() {
  var canvas = document.getElementById("glcanvas");

  gl = initWebGL(canvas);      // Initialize the GL context
  
  // Only continue if WebGL is available and working
  
  if (gl) {
    gl.clearColor(0.0, 0.0, 0.0, 1.0);                      // Set clear color to black, fully opaque
    gl.enable(gl.DEPTH_TEST);                               // Enable depth testing
    gl.depthFunc(gl.LEQUAL);                                // Near things obscure far things
    gl.clear(gl.COLOR_BUFFER_BIT|gl.DEPTH_BUFFER_BIT);      // Clear the color as well as the depth buffer.
&nbsp; }
}
&lt;/pre&gt;
&lt;p&gt;The first thing we do here is obtain a reference to the canvas, stashing it in a variable called &lt;code&gt;canvas&lt;/code&gt;. Obviously if you don't need to repeatedly reference the canvas, you should avoid saving this value globally, and just save it in a local variable or member field of an object.&lt;/p&gt;
&lt;p&gt;Once we have the canvas, we call a function called &lt;code&gt;initWebGL()&lt;/code&gt;; this is a function we'll define momentarily; its job is to initialize the WebGL context.&lt;/p&gt;
&lt;p&gt;If the context is successfully initialized, &lt;code&gt;gl&lt;/code&gt; is a reference to it. In this case, we set the clear color to black, then clear the context to that color. After that, the context is configured by setting parameters. In this case, we're enabling depth testing and specifying that closer objects will obscure objects that are farther away.&lt;/p&gt;
&lt;p&gt;For the purposes of this initial pass at the code, that's all we're going to do. We'll look at how to actually start doing something a little later.&lt;/p&gt;
&lt;h3 id="Creating_a_WebGL.C2.A0context"&gt;Creating a WebGL&nbsp;context&lt;/h3&gt;
&lt;p&gt;The &lt;code&gt;initWebGL()&lt;/code&gt;&nbsp;function looks like this:&lt;/p&gt;
&lt;pre class="brush: js"&gt;function initWebGL(canvas) {
  gl = null;
  
  try {
&nbsp; &nbsp;&nbsp;// Try to grab the standard context. If it fails, fallback to experimental.
&nbsp;&nbsp;&nbsp; gl = canvas.getContext("webgl") || canvas.getContext("experimental-webgl");
&nbsp; }
&nbsp; catch(e) {}
  
  // If we don't have a GL context, give up now
  if (!gl) {
    alert("Unable to initialize WebGL. Your browser may not support it.");
    gl = null;
  }
  
  return gl;
}

&lt;/pre&gt;
&lt;p&gt;To obtain a WebGL context for a canvas, we request the context named "webgl" from the canvas. If this fails, we try the name "experimental-webgl". If that, too, fails, we display an alert letting the user know they appear not to have WebGL support. That's all there is to it. At this point, &lt;code&gt;gl&lt;/code&gt; is either null (meaning there is no WebGL context available) or is a reference to the WebGL context into which we'll be rendering.&lt;/p&gt;
&lt;div class="note"&gt;
 &lt;strong&gt;Note:&lt;/strong&gt; The context name "experimental-webgl" is a temporary name for the context for use during development of the specification; the name "webgl" will be used once the spec is finalized.&lt;/div&gt;
&lt;p&gt;At this point, you have enough code that the WebGL&nbsp;context should successfully initialize, and you should wind up with a big black, empty box, ready and waiting to receive content.&lt;/p&gt;
&lt;p&gt;&lt;a href="/samples/webgl/sample1/index.html" title="https://developer.mozilla.org/samples/webgl/sample1/index.html"&gt;Try this example live by clicking here&lt;/a&gt; if you're running a WebGL compatible browser.&lt;/p&gt;
&lt;h3 id="Resizing_the_WebGL_context"&gt;Resizing the WebGL context&lt;/h3&gt;
&lt;p&gt;A new WebGL context will set its viewport resolution to the height and width of its canvas element, without CSS, at the instant the context was obtained. Editing the style of a canvas element will change its displayed size but will not change its rendering resolution. Editing the width and height attributes of a canvas element after the context has been created will also not change the number of pixels to be drawn. To change the resolution which WebGL renders at, such as when the user resizes the window of a full-document canvas or you wish to provide in-app adjustable graphics settings, you will need to call the WebGL context's &lt;code&gt;viewport()&lt;/code&gt; function to acknowledge the change.&lt;/p&gt;
&lt;p&gt;To modify the rendered resolution of a WebGL context with variables &lt;code&gt;gl&lt;/code&gt; and &lt;code&gt;canvas&lt;/code&gt; as used in the above example:&lt;/p&gt;
&lt;pre class="brush: js"&gt;gl.viewport(0, 0, canvas.width, canvas.height);&lt;/pre&gt;
&lt;p&gt;A canvas will experience scaling when it is rendered at a different resolution than its CSS style makes it occupy on the display. Resizing with CSS is mostly useful to save resources by rendering at a low resolution and allowing the browser to upscale; downscaling is possible which would produce a super sample antialiasing (SSAA) effect (albeit with naive results and a severe performance cost). It is often best to rely upon the MSAA and texture filtering implementations of the user's browser, if available and appropriate, rather than doing it via brute force and hoping that the browser's image reduction algorithm produces a cleaner result.&lt;/p&gt;
&lt;h3 id="See_also" style="line-height: 24px;"&gt;See also&lt;/h3&gt;
&lt;ul&gt;
 &lt;li&gt;&lt;a href="http://dev.opera.com/articles/view/an-introduction-to-webgl/"&gt;An introduction to WebGL&lt;/a&gt;&nbsp;- Written by Luz Caballero at the DEV.OPERA. This article addresses that what WebGL is, how WebGL works and the rendering pipeline concept and introduces some WebGL libraries.&lt;/li&gt;
 &lt;li&gt;&lt;a href="http://duriansoftware.com/joe/An-intro-to-modern-OpenGL.-Table-of-Contents.html"&gt;An intro to modern OpenGL&lt;/a&gt;&nbsp;- A series nice articles about OpenGL written by Joe Groff. Joe gives a clear intro about OpenGL from its history to the important graphics pipeline concept and provides some examples to demo how OpenGL works. If you have no idea about OpenGL, this is a good place to start.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;{{ Next("WebGL/Adding_2D_content_to_a_WebGL_context") }}&lt;/p&gt;
&lt;p&gt;{{ languages( { "de": "de/WebGL/Einführung_in_WebGL", "fr": "fr/WebGL/Commencer_avec_WebGL", "ja": "ja/WebGL/Getting_started_with_WebGL" } ) }}&lt;/p&gt;
&lt;p&gt;&nbsp;&lt;/p&gt;
&lt;p&gt;Doing a test.&lt;/p&gt;
&lt;h3 id=".C2.A0"&gt;&nbsp;&lt;/h3&gt;</textarea><span id="cke_id_content" class="cke_skin_kuma cke_1 cke_editor_id_content" dir="ltr" title="" lang="en" tabindex="0" role="application" aria-labelledby="cke_id_content_arialbl"><span id="cke_id_content_arialbl" class="cke_voice_label">Rich Text Editor</span><span class="cke_browser_webkit" role="presentation"><span class="cke_wrapper cke_ltr" role="presentation"><table class="cke_editor" border="0" cellspacing="0" cellpadding="0" role="presentation"><tbody><tr role="presentation"><td id="cke_top_id_content" class="cke_top" role="presentation"><div class="cke_toolbox" role="group" aria-labelledby="cke_6" onmousedown="return false;" style="position: relative; top: auto; width: auto;"><span id="cke_6" class="cke_voice_label">Editor toolbars</span><span id="cke_7" class="cke_toolbar" role="toolbar"><span class="cke_toolbar_start"></span><span class="cke_toolgroup" role="presentation"><span class="cke_button"><a id="cke_8" class="cke_off cke_button_source" "="" href="javascript:void('Source')" title="Source" tabindex="-1" hidefocus="true" role="button" aria-labelledby="cke_8_label" onkeydown="return CKEDITOR.tools.callFunction(3, event);" onfocus="return CKEDITOR.tools.callFunction(4, event);" onclick="CKEDITOR.tools.callFunction(5, this); return false;"><span class="cke_icon">&nbsp;</span><span id="cke_8_label" class="cke_label">Source</span></a></span><span class="cke_button"><a id="cke_9" class="cke_off cke_button_save" "="" href="javascript:void('Save and Keep EditingSave and Keep Editing')" title="Save and Keep EditingSave and Keep Editing" tabindex="-1" hidefocus="true" role="button" aria-labelledby="cke_9_label" onkeydown="return CKEDITOR.tools.callFunction(6, event);" onfocus="return CKEDITOR.tools.callFunction(7, event);" onclick="CKEDITOR.tools.callFunction(8, this); return false;"><span class="cke_icon">&nbsp;</span><span id="cke_9_label" class="cke_label">Save and Keep EditingSave and Keep Editing</span></a></span><span class="cke_button"><a id="cke_10" class="cke_off cke_button_save_exit" "="" href="javascript:void('Save and Exit')" title="Save and Exit" tabindex="-1" hidefocus="true" role="button" aria-labelledby="cke_10_label" onkeydown="return CKEDITOR.tools.callFunction(9, event);" onfocus="return CKEDITOR.tools.callFunction(10, event);" onclick="CKEDITOR.tools.callFunction(11, this); return false;"><span class="cke_icon">&nbsp;</span><span id="cke_10_label" class="cke_label">Save and Exit</span></a></span><span class="cke_separator" role="separator"></span><span class="cke_button"><a id="cke_11" class="cke_off cke_button_pastetext" "="" href="javascript:void('Paste as plain text')" title="Paste as plain text" tabindex="-1" hidefocus="true" role="button" aria-labelledby="cke_11_label" onkeydown="return CKEDITOR.tools.callFunction(12, event);" onfocus="return CKEDITOR.tools.callFunction(13, event);" onclick="CKEDITOR.tools.callFunction(14, this); return false;"><span class="cke_icon">&nbsp;</span><span id="cke_11_label" class="cke_label">Paste as plain text</span></a></span><span class="cke_button"><a id="cke_12" class="cke_off cke_button_pastefromword" "="" href="javascript:void('Paste from Word')" title="Paste from Word" tabindex="-1" hidefocus="true" role="button" aria-labelledby="cke_12_label" onkeydown="return CKEDITOR.tools.callFunction(15, event);" onfocus="return CKEDITOR.tools.callFunction(16, event);" onclick="CKEDITOR.tools.callFunction(17, this); return false;"><span class="cke_icon">&nbsp;</span><span id="cke_12_label" class="cke_label">Paste from Word</span></a></span><span class="cke_separator" role="separator"></span><span class="cke_button"><a id="cke_13" class="cke_off cke_button_checkspell" "="" href="javascript:void('Check Spelling')" title="Check Spelling" tabindex="-1" hidefocus="true" role="button" aria-labelledby="cke_13_label" onkeydown="return CKEDITOR.tools.callFunction(18, event);" onfocus="return CKEDITOR.tools.callFunction(19, event);" onclick="CKEDITOR.tools.callFunction(20, this); return false;"><span class="cke_icon">&nbsp;</span><span id="cke_13_label" class="cke_label">Check Spelling</span></a></span><span class="cke_button"><a id="cke_14" class="cke_off cke_button_scayt" "="" href="javascript:void('Spell Check As You Type')" title="Spell Check As You Type" tabindex="-1" hidefocus="true" role="button" aria-labelledby="cke_14_label" aria-haspopup="true" onkeydown="return CKEDITOR.tools.callFunction(21, event);" onfocus="return CKEDITOR.tools.callFunction(22, event);" onclick="CKEDITOR.tools.callFunction(23, this); return false;"><span class="cke_icon">&nbsp;</span><span id="cke_14_label" class="cke_label">Spell Check As You Type</span><span class="cke_buttonarrow">&nbsp;</span></a></span><span class="cke_separator" role="separator"></span><span class="cke_button"><a id="cke_15" class="cke_off cke_button_find" "="" href="javascript:void('Find')" title="Find" tabindex="-1" hidefocus="true" role="button" aria-labelledby="cke_15_label" onkeydown="return CKEDITOR.tools.callFunction(24, event);" onfocus="return CKEDITOR.tools.callFunction(25, event);" onclick="CKEDITOR.tools.callFunction(26, this); return false;"><span class="cke_icon">&nbsp;</span><span id="cke_15_label" class="cke_label">Find</span></a></span><span class="cke_button"><a id="cke_16" class="cke_off cke_button_replace" "="" href="javascript:void('Replace')" title="Replace" tabindex="-1" hidefocus="true" role="button" aria-labelledby="cke_16_label" onkeydown="return CKEDITOR.tools.callFunction(27, event);" onfocus="return CKEDITOR.tools.callFunction(28, event);" onclick="CKEDITOR.tools.callFunction(29, this); return false;"><span class="cke_icon">&nbsp;</span><span id="cke_16_label" class="cke_label">Replace</span></a></span><span class="cke_separator" role="separator"></span><span class="cke_button"><a id="cke_17" class="cke_off cke_button_showblocks" "="" href="javascript:void('Show Blocks')" title="Show Blocks" tabindex="-1" hidefocus="true" role="button" aria-labelledby="cke_17_label" onkeydown="return CKEDITOR.tools.callFunction(30, event);" onfocus="return CKEDITOR.tools.callFunction(31, event);" onclick="CKEDITOR.tools.callFunction(32, this); return false;"><span class="cke_icon">&nbsp;</span><span id="cke_17_label" class="cke_label">Show Blocks</span></a></span></span><span class="cke_toolbar_end"></span></span><span id="cke_18" class="cke_toolbar" role="toolbar"><span class="cke_toolbar_start"></span><span class="cke_toolgroup" role="presentation"><span class="cke_button"><a id="cke_19" class="cke_off cke_button_bulletedlist" "="" href="javascript:void('Insert/Remove Bulleted List')" title="Insert/Remove Bulleted List" tabindex="-1" hidefocus="true" role="button" aria-labelledby="cke_19_label" onkeydown="return CKEDITOR.tools.callFunction(33, event);" onfocus="return CKEDITOR.tools.callFunction(34, event);" onclick="CKEDITOR.tools.callFunction(35, this); return false;"><span class="cke_icon">&nbsp;</span><span id="cke_19_label" class="cke_label">Insert/Remove Bulleted List</span></a></span><span class="cke_button"><a id="cke_20" class="cke_off cke_button_numberedlist" "="" href="javascript:void('Insert/Remove Numbered List')" title="Insert/Remove Numbered List" tabindex="-1" hidefocus="true" role="button" aria-labelledby="cke_20_label" onkeydown="return CKEDITOR.tools.callFunction(36, event);" onfocus="return CKEDITOR.tools.callFunction(37, event);" onclick="CKEDITOR.tools.callFunction(38, this); return false;"><span class="cke_icon">&nbsp;</span><span id="cke_20_label" class="cke_label">Insert/Remove Numbered List</span></a></span><span class="cke_button cke_noalphafix"><a id="cke_21" class="cke_off cke_button_definitionlist" "="" href="javascript:void('Definition List')" title="Definition List" tabindex="-1" hidefocus="true" role="button" aria-labelledby="cke_21_label" onkeydown="return CKEDITOR.tools.callFunction(39, event);" onfocus="return CKEDITOR.tools.callFunction(40, event);" onclick="CKEDITOR.tools.callFunction(41, this); return false;"><span class="cke_icon" style="background-image:url(https://developer-local.allizom.org/media/js/libs/ckeditor/plugins/definitionlist/images/dl.gif?t=dev);background-position:0 0px;">&nbsp;</span><span id="cke_21_label" class="cke_label">Definition List</span></a></span><span class="cke_button cke_noalphafix"><a id="cke_22" class="cke_off cke_button_definitionterm" "="" href="javascript:void('Definition Term')" title="Definition Term" tabindex="-1" hidefocus="true" role="button" aria-labelledby="cke_22_label" onkeydown="return CKEDITOR.tools.callFunction(42, event);" onfocus="return CKEDITOR.tools.callFunction(43, event);" onclick="CKEDITOR.tools.callFunction(44, this); return false;"><span class="cke_icon" style="background-image:url(https://developer-local.allizom.org/media/js/libs/ckeditor/plugins/definitionlist/images/dt.gif?t=dev);background-position:0 0px;">&nbsp;</span><span id="cke_22_label" class="cke_label">Definition Term</span></a></span><span class="cke_button cke_noalphafix"><a id="cke_23" class="cke_off cke_button_definitiondesc" "="" href="javascript:void('Definition Description')" title="Definition Description" tabindex="-1" hidefocus="true" role="button" aria-labelledby="cke_23_label" onkeydown="return CKEDITOR.tools.callFunction(45, event);" onfocus="return CKEDITOR.tools.callFunction(46, event);" onclick="CKEDITOR.tools.callFunction(47, this); return false;"><span class="cke_icon" style="background-image:url(https://developer-local.allizom.org/media/js/libs/ckeditor/plugins/definitionlist/images/dd.gif?t=dev);background-position:0 0px;">&nbsp;</span><span id="cke_23_label" class="cke_label">Definition Description</span></a></span><span class="cke_separator" role="separator"></span><span class="cke_button"><a id="cke_24" class="cke_button_outdent cke_disabled" "="" href="javascript:void('Decrease Indent')" title="Decrease Indent" tabindex="-1" hidefocus="true" role="button" aria-labelledby="cke_24_label" onkeydown="return CKEDITOR.tools.callFunction(48, event);" onfocus="return CKEDITOR.tools.callFunction(49, event);" onclick="CKEDITOR.tools.callFunction(50, this); return false;" aria-disabled="true"><span class="cke_icon">&nbsp;</span><span id="cke_24_label" class="cke_label">Decrease Indent</span></a></span><span class="cke_button"><a id="cke_25" class="cke_off cke_button_indent" "="" href="javascript:void('Increase Indent')" title="Increase Indent" tabindex="-1" hidefocus="true" role="button" aria-labelledby="cke_25_label" onkeydown="return CKEDITOR.tools.callFunction(51, event);" onfocus="return CKEDITOR.tools.callFunction(52, event);" onclick="CKEDITOR.tools.callFunction(53, this); return false;"><span class="cke_icon">&nbsp;</span><span id="cke_25_label" class="cke_label">Increase Indent</span></a></span><span class="cke_button"><a id="cke_26" class="cke_off cke_button_blockquote" "="" href="javascript:void('Block Quote')" title="Block Quote" tabindex="-1" hidefocus="true" role="button" aria-labelledby="cke_26_label" onkeydown="return CKEDITOR.tools.callFunction(54, event);" onfocus="return CKEDITOR.tools.callFunction(55, event);" onclick="CKEDITOR.tools.callFunction(56, this); return false;"><span class="cke_icon">&nbsp;</span><span id="cke_26_label" class="cke_label">Block Quote</span></a></span><span class="cke_separator" role="separator"></span><span class="cke_button"><a id="cke_27" class="cke_off cke_button_image" "="" href="javascript:void('Image')" title="Image" tabindex="-1" hidefocus="true" role="button" aria-labelledby="cke_27_label" onkeydown="return CKEDITOR.tools.callFunction(57, event);" onfocus="return CKEDITOR.tools.callFunction(58, event);" onclick="CKEDITOR.tools.callFunction(59, this); return false;"><span class="cke_icon">&nbsp;</span><span id="cke_27_label" class="cke_label">Image</span></a></span><span class="cke_button"><a id="cke_28" class="cke_off cke_button_table" "="" href="javascript:void('Table')" title="Table" tabindex="-1" hidefocus="true" role="button" aria-labelledby="cke_28_label" onkeydown="return CKEDITOR.tools.callFunction(60, event);" onfocus="return CKEDITOR.tools.callFunction(61, event);" onclick="CKEDITOR.tools.callFunction(62, this); return false;"><span class="cke_icon">&nbsp;</span><span id="cke_28_label" class="cke_label">Table</span></a></span><span class="cke_separator" role="separator"></span><span class="cke_button"><a id="cke_29" class="cke_off cke_button_textcolor" "="" href="javascript:void('Text Color')" title="Text Color" tabindex="-1" hidefocus="true" role="button" aria-labelledby="cke_29_label" aria-haspopup="true" onkeydown="return CKEDITOR.tools.callFunction(63, event);" onfocus="return CKEDITOR.tools.callFunction(64, event);" onclick="CKEDITOR.tools.callFunction(65, this); return false;"><span class="cke_icon">&nbsp;</span><span id="cke_29_label" class="cke_label">Text Color</span><span class="cke_buttonarrow">&nbsp;</span></a></span><span class="cke_button"><a id="cke_30" class="cke_off cke_button_bgcolor" "="" href="javascript:void('Background Color')" title="Background Color" tabindex="-1" hidefocus="true" role="button" aria-labelledby="cke_30_label" aria-haspopup="true" onkeydown="return CKEDITOR.tools.callFunction(66, event);" onfocus="return CKEDITOR.tools.callFunction(67, event);" onclick="CKEDITOR.tools.callFunction(68, this); return false;"><span class="cke_icon">&nbsp;</span><span id="cke_30_label" class="cke_label">Background Color</span><span class="cke_buttonarrow">&nbsp;</span></a></span><span class="cke_separator" role="separator"></span><span class="cke_button"><a id="cke_31" class="cke_button_bidiltr cke_on" "="" href="javascript:void('Text direction from left to right')" title="Text direction from left to right" tabindex="-1" hidefocus="true" role="button" aria-labelledby="cke_31_label" onkeydown="return CKEDITOR.tools.callFunction(69, event);" onfocus="return CKEDITOR.tools.callFunction(70, event);" onclick="CKEDITOR.tools.callFunction(71, this); return false;" aria-pressed="true"><span class="cke_icon">&nbsp;</span><span id="cke_31_label" class="cke_label">Text direction from left to right</span></a></span><span class="cke_button"><a id="cke_32" class="cke_off cke_button_bidirtl" "="" href="javascript:void('Text direction from right to left')" title="Text direction from right to left" tabindex="-1" hidefocus="true" role="button" aria-labelledby="cke_32_label" onkeydown="return CKEDITOR.tools.callFunction(72, event);" onfocus="return CKEDITOR.tools.callFunction(73, event);" onclick="CKEDITOR.tools.callFunction(74, this); return false;"><span class="cke_icon">&nbsp;</span><span id="cke_32_label" class="cke_label">Text direction from right to left</span></a></span></span><span class="cke_toolbar_end"></span></span><span id="cke_33" class="cke_toolbar" role="toolbar"><span class="cke_toolbar_start"></span><span class="cke_toolgroup" role="presentation"><span class="cke_button"><a id="cke_34" class="cke_off cke_button_maximize" "="" href="javascript:void('Maximize')" title="Maximize" tabindex="-1" hidefocus="true" role="button" aria-labelledby="cke_34_label" onkeydown="return CKEDITOR.tools.callFunction(75, event);" onfocus="return CKEDITOR.tools.callFunction(76, event);" onclick="CKEDITOR.tools.callFunction(77, this); return false;"><span class="cke_icon">&nbsp;</span><span id="cke_34_label" class="cke_label">Maximize</span></a></span></span><span class="cke_toolbar_end"></span></span><div class="cke_break"></div><span id="cke_35" class="cke_toolbar" role="toolbar"><span class="cke_toolbar_start"></span><span class="cke_toolgroup" role="presentation"><span class="cke_button"><a id="cke_36" class="cke_off mdn-buttons-button h2" "="" href="javascript:void('h2')" title="h2" tabindex="-1" hidefocus="true" role="button" aria-labelledby="cke_36_label" onkeydown="return CKEDITOR.tools.callFunction(78, event);" onfocus="return CKEDITOR.tools.callFunction(79, event);" onclick="CKEDITOR.tools.callFunction(80, this); return false;"><span class="cke_icon">&nbsp;</span><span id="cke_36_label" class="cke_label">h2</span></a></span><span class="cke_button"><a id="cke_37" class="cke_off mdn-buttons-button h3" "="" href="javascript:void('h3')" title="h3" tabindex="-1" hidefocus="true" role="button" aria-labelledby="cke_37_label" onkeydown="return CKEDITOR.tools.callFunction(81, event);" onfocus="return CKEDITOR.tools.callFunction(82, event);" onclick="CKEDITOR.tools.callFunction(83, this); return false;"><span class="cke_icon">&nbsp;</span><span id="cke_37_label" class="cke_label">h3</span></a></span><span class="cke_button"><a id="cke_38" class="cke_off mdn-buttons-button h4" "="" href="javascript:void('h4')" title="h4" tabindex="-1" hidefocus="true" role="button" aria-labelledby="cke_38_label" onkeydown="return CKEDITOR.tools.callFunction(84, event);" onfocus="return CKEDITOR.tools.callFunction(85, event);" onclick="CKEDITOR.tools.callFunction(86, this); return false;"><span class="cke_icon">&nbsp;</span><span id="cke_38_label" class="cke_label">h4</span></a></span><span class="cke_button"><a id="cke_39" class="cke_off mdn-buttons-button h5" "="" href="javascript:void('h5')" title="h5" tabindex="-1" hidefocus="true" role="button" aria-labelledby="cke_39_label" onkeydown="return CKEDITOR.tools.callFunction(87, event);" onfocus="return CKEDITOR.tools.callFunction(88, event);" onclick="CKEDITOR.tools.callFunction(89, this); return false;"><span class="cke_icon">&nbsp;</span><span id="cke_39_label" class="cke_label">h5</span></a></span><span class="cke_button"><a id="cke_40" class="cke_off mdn-buttons-button h6" "="" href="javascript:void('h6')" title="h6" tabindex="-1" hidefocus="true" role="button" aria-labelledby="cke_40_label" onkeydown="return CKEDITOR.tools.callFunction(90, event);" onfocus="return CKEDITOR.tools.callFunction(91, event);" onclick="CKEDITOR.tools.callFunction(92, this); return false;"><span class="cke_icon">&nbsp;</span><span id="cke_40_label" class="cke_label">h6</span></a></span></span><span class="cke_rcombo" role="presentation"><span id="cke_41" class="cke_styles cke_off" role="presentation"><span id="cke_41_label" class="cke_label">Styles</span><a hidefocus="true" title="Formatting Styles" tabindex="-1" href="javascript:void('Styles')" role="button" aria-labelledby="cke_41_label" aria-describedby="cke_41_text" aria-haspopup="true" onkeydown="CKEDITOR.tools.callFunction( 94, event, this );" onfocus="return CKEDITOR.tools.callFunction(95, event);" onclick="CKEDITOR.tools.callFunction(93, this); return false;"><span><span id="cke_41_text" class="cke_text">None</span></span><span class="cke_openbutton"><span class="cke_icon"></span></span></a></span></span><span class="cke_toolbar_end"></span></span><span id="cke_42" class="cke_toolbar" role="toolbar"><span class="cke_toolbar_start"></span><span class="cke_toolgroup" role="presentation"><span class="cke_button"><a id="cke_43" class="cke_off mdn-buttons-button pre" "="" href="javascript:void('pre')" title="pre" tabindex="-1" hidefocus="true" role="button" aria-labelledby="cke_43_label" onkeydown="return CKEDITOR.tools.callFunction(96, event);" onfocus="return CKEDITOR.tools.callFunction(97, event);" onclick="CKEDITOR.tools.callFunction(98, this); return false;"><span class="cke_icon">&nbsp;</span><span id="cke_43_label" class="cke_label">pre</span></a></span><span class="cke_button"><a id="cke_44" class="cke_syntaxhighlighter cke_off" "="" href="javascript:void('Syntax Highlighter')" title="Syntax Highlighter" tabindex="-1" hidefocus="true" role="button" aria-labelledby="cke_44_label" aria-haspopup="true" onkeydown="CKEDITOR.tools.callFunction( 100, event, this );" onclick="CKEDITOR.tools.callFunction(99, this); return false;"><span class="cke_icon" style="background-image:url(https://developer-local.allizom.org/media/js/libs/ckeditor/skins/kuma/icons.png?t=dev);background-position:0 -16px;">&nbsp;</span><span id="cke_44_label" class="cke_label">Syntax Highlighter</span><span class="cke_buttonarrow">&nbsp;</span></a></span><span class="cke_button"><a id="cke_45" class="cke_off cke_button_mdn_sampler" "="" href="javascript:void('Insert Code Sample Template')" title="Insert Code Sample Template" tabindex="-1" hidefocus="true" role="button" aria-labelledby="cke_45_label" onkeydown="return CKEDITOR.tools.callFunction(101, event);" onfocus="return CKEDITOR.tools.callFunction(102, event);" onclick="CKEDITOR.tools.callFunction(103, this); return false;"><span class="cke_icon" style="background-image:url(https://developer-local.allizom.org/media/js/libs/ckeditor/skins/kuma/icons.png?t=dev);background-position:0 -688px;">&nbsp;</span><span id="cke_45_label" class="cke_label">Insert Code Sample Template</span></a></span><span class="cke_button"><a id="cke_46" class="cke_off cke_button_mdn_sample_finder" "="" href="javascript:void('Insert Code Sample iFrame')" title="Insert Code Sample iFrame" tabindex="-1" hidefocus="true" role="button" aria-labelledby="cke_46_label" onkeydown="return CKEDITOR.tools.callFunction(104, event);" onfocus="return CKEDITOR.tools.callFunction(105, event);" onclick="CKEDITOR.tools.callFunction(106, this); return false;"><span class="cke_icon" style="background-image:url(https://developer-local.allizom.org/media/js/libs/ckeditor/skins/kuma/icons.png?t=dev);background-position:0 -672px;">&nbsp;</span><span id="cke_46_label" class="cke_label">Insert Code Sample iFrame</span></a></span><span class="cke_button"><a id="cke_47" class="cke_off cke_button_mdn_redirect" "="" href="javascript:void('Create a Redirect')" title="Create a Redirect" tabindex="-1" hidefocus="true" role="button" aria-labelledby="cke_47_label" onkeydown="return CKEDITOR.tools.callFunction(107, event);" onfocus="return CKEDITOR.tools.callFunction(108, event);" onclick="CKEDITOR.tools.callFunction(109, this); return false;"><span class="cke_icon" style="background-image:url(https://developer-local.allizom.org/media/js/libs/ckeditor/skins/kuma/icons.png?t=dev);background-position:0 -224px;">&nbsp;</span><span id="cke_47_label" class="cke_label">Create a Redirect</span></a></span><span class="cke_button"><a id="cke_48" class="cke_off cke_button_youtube" "="" href="javascript:void('Embed YouTube Video')" title="Embed YouTube Video" tabindex="-1" hidefocus="true" role="button" aria-labelledby="cke_48_label" onkeydown="return CKEDITOR.tools.callFunction(110, event);" onfocus="return CKEDITOR.tools.callFunction(111, event);" onclick="CKEDITOR.tools.callFunction(112, this); return false;"><span class="cke_icon" style="background-image:url(https://developer-local.allizom.org/media/js/libs/ckeditor/plugins/youtube/images/icon.png?t=dev);background-position:0 0px;">&nbsp;</span><span id="cke_48_label" class="cke_label">Embed YouTube Video</span></a></span><span class="cke_button"><a id="cke_49" class="cke_off cke_button_texzillaDialog" "="" href="javascript:void('Insert MathML based on (La)TeX')" title="Insert MathML based on (La)TeX" tabindex="-1" hidefocus="true" role="button" aria-labelledby="cke_49_label" onkeydown="return CKEDITOR.tools.callFunction(113, event);" onfocus="return CKEDITOR.tools.callFunction(114, event);" onclick="CKEDITOR.tools.callFunction(115, this); return false;"><span class="cke_icon" style="background-image:url(https://developer-local.allizom.org/media/js/libs/ckeditor/plugins/texzilla/icons/texzilla.png?t=dev);background-position:0 0px;">&nbsp;</span><span id="cke_49_label" class="cke_label">Insert MathML based on (La)TeX</span></a></span></span><span class="cke_toolbar_end"></span></span><span id="cke_50" class="cke_toolbar" role="toolbar"><span class="cke_toolbar_start"></span><span class="cke_toolgroup" role="presentation"><span class="cke_button"><a id="cke_51" class="cke_off cke_button_link" "="" href="javascript:void('Link')" title="Link" tabindex="-1" hidefocus="true" role="button" aria-labelledby="cke_51_label" onkeydown="return CKEDITOR.tools.callFunction(116, event);" onfocus="return CKEDITOR.tools.callFunction(117, event);" onclick="CKEDITOR.tools.callFunction(118, this); return false;"><span class="cke_icon">&nbsp;</span><span id="cke_51_label" class="cke_label">Link</span></a></span><span class="cke_button"><a id="cke_52" class="cke_button_unlink cke_disabled" "="" href="javascript:void('Unlink')" title="Unlink" tabindex="-1" hidefocus="true" role="button" aria-labelledby="cke_52_label" onkeydown="return CKEDITOR.tools.callFunction(119, event);" onfocus="return CKEDITOR.tools.callFunction(120, event);" onclick="CKEDITOR.tools.callFunction(121, this); return false;" aria-disabled="true"><span class="cke_icon">&nbsp;</span><span id="cke_52_label" class="cke_label">Unlink</span></a></span><span class="cke_button"><a id="cke_53" class="cke_off cke_button_anchor" "="" href="javascript:void('Anchor')" title="Anchor" tabindex="-1" hidefocus="true" role="button" aria-labelledby="cke_53_label" onkeydown="return CKEDITOR.tools.callFunction(122, event);" onfocus="return CKEDITOR.tools.callFunction(123, event);" onclick="CKEDITOR.tools.callFunction(124, this); return false;"><span class="cke_icon">&nbsp;</span><span id="cke_53_label" class="cke_label">Anchor</span></a></span><span class="cke_separator" role="separator"></span><span class="cke_button"><a id="cke_54" class="cke_off cke_button_bold" "="" href="javascript:void('Bold')" title="Bold" tabindex="-1" hidefocus="true" role="button" aria-labelledby="cke_54_label" onkeydown="return CKEDITOR.tools.callFunction(125, event);" onfocus="return CKEDITOR.tools.callFunction(126, event);" onclick="CKEDITOR.tools.callFunction(127, this); return false;"><span class="cke_icon">&nbsp;</span><span id="cke_54_label" class="cke_label">Bold</span></a></span><span class="cke_button"><a id="cke_55" class="cke_off cke_button_italic" "="" href="javascript:void('Italic')" title="Italic" tabindex="-1" hidefocus="true" role="button" aria-labelledby="cke_55_label" onkeydown="return CKEDITOR.tools.callFunction(128, event);" onfocus="return CKEDITOR.tools.callFunction(129, event);" onclick="CKEDITOR.tools.callFunction(130, this); return false;"><span class="cke_icon">&nbsp;</span><span id="cke_55_label" class="cke_label">Italic</span></a></span><span class="cke_button"><a id="cke_56" class="cke_off cke_button_underline" "="" href="javascript:void('Underline')" title="Underline" tabindex="-1" hidefocus="true" role="button" aria-labelledby="cke_56_label" onkeydown="return CKEDITOR.tools.callFunction(131, event);" onfocus="return CKEDITOR.tools.callFunction(132, event);" onclick="CKEDITOR.tools.callFunction(133, this); return false;"><span class="cke_icon">&nbsp;</span><span id="cke_56_label" class="cke_label">Underline</span></a></span><span class="cke_button"><a id="cke_57" class="cke_off mdn-buttons-button code" "="" href="javascript:void('code')" title="code" tabindex="-1" hidefocus="true" role="button" aria-labelledby="cke_57_label" onkeydown="return CKEDITOR.tools.callFunction(134, event);" onfocus="return CKEDITOR.tools.callFunction(135, event);" onclick="CKEDITOR.tools.callFunction(136, this); return false;"><span class="cke_icon">&nbsp;</span><span id="cke_57_label" class="cke_label">code</span></a></span><span class="cke_button"><a id="cke_58" class="cke_off cke_button_strike" "="" href="javascript:void('Strike Through')" title="Strike Through" tabindex="-1" hidefocus="true" role="button" aria-labelledby="cke_58_label" onkeydown="return CKEDITOR.tools.callFunction(137, event);" onfocus="return CKEDITOR.tools.callFunction(138, event);" onclick="CKEDITOR.tools.callFunction(139, this); return false;"><span class="cke_icon">&nbsp;</span><span id="cke_58_label" class="cke_label">Strike Through</span></a></span><span class="cke_button"><a id="cke_59" class="cke_off cke_button_superscript" "="" href="javascript:void('Superscript')" title="Superscript" tabindex="-1" hidefocus="true" role="button" aria-labelledby="cke_59_label" onkeydown="return CKEDITOR.tools.callFunction(140, event);" onfocus="return CKEDITOR.tools.callFunction(141, event);" onclick="CKEDITOR.tools.callFunction(142, this); return false;"><span class="cke_icon">&nbsp;</span><span id="cke_59_label" class="cke_label">Superscript</span></a></span><span class="cke_button"><a id="cke_60" class="cke_off cke_button_removeFormat" "="" href="javascript:void('Remove Format')" title="Remove Format" tabindex="-1" hidefocus="true" role="button" aria-labelledby="cke_60_label" onkeydown="return CKEDITOR.tools.callFunction(143, event);" onfocus="return CKEDITOR.tools.callFunction(144, event);" onclick="CKEDITOR.tools.callFunction(145, this); return false;"><span class="cke_icon">&nbsp;</span><span id="cke_60_label" class="cke_label">Remove Format</span></a></span><span class="cke_separator" role="separator"></span><span class="cke_button"><a id="cke_61" class="cke_button_justifyleft cke_on" "="" href="javascript:void('Align Left')" title="Align Left" tabindex="-1" hidefocus="true" role="button" aria-labelledby="cke_61_label" onkeydown="return CKEDITOR.tools.callFunction(146, event);" onfocus="return CKEDITOR.tools.callFunction(147, event);" onclick="CKEDITOR.tools.callFunction(148, this); return false;" aria-pressed="true"><span class="cke_icon">&nbsp;</span><span id="cke_61_label" class="cke_label">Align Left</span></a></span><span class="cke_button"><a id="cke_62" class="cke_off cke_button_justifycenter" "="" href="javascript:void('Center')" title="Center" tabindex="-1" hidefocus="true" role="button" aria-labelledby="cke_62_label" onkeydown="return CKEDITOR.tools.callFunction(149, event);" onfocus="return CKEDITOR.tools.callFunction(150, event);" onclick="CKEDITOR.tools.callFunction(151, this); return false;"><span class="cke_icon">&nbsp;</span><span id="cke_62_label" class="cke_label">Center</span></a></span><span class="cke_button"><a id="cke_63" class="cke_off cke_button_justifyright" "="" href="javascript:void('Align Right')" title="Align Right" tabindex="-1" hidefocus="true" role="button" aria-labelledby="cke_63_label" onkeydown="return CKEDITOR.tools.callFunction(152, event);" onfocus="return CKEDITOR.tools.callFunction(153, event);" onclick="CKEDITOR.tools.callFunction(154, this); return false;"><span class="cke_icon">&nbsp;</span><span id="cke_63_label" class="cke_label">Align Right</span></a></span></span><span class="cke_toolbar_end"></span></span><div id="cke_path_id_content" class="cke_path" role="group" aria-labelledby="cke_path_id_content_label"><a id="cke_elementspath_5_1" href="javascript:void('body')" tabindex="-1" title="body element" hidefocus="true" onkeydown="return CKEDITOR.tools.callFunction(1,1, event );" onclick="CKEDITOR.tools.callFunction(0,1); return false;" role="button" aria-labelledby="cke_elementspath_5_1_label">body<span id="cke_elementspath_5_1_label" class="cke_label">body element</span></a><a id="cke_elementspath_5_0" href="javascript:void('p')" tabindex="-1" title="p element" hidefocus="true" onkeydown="return CKEDITOR.tools.callFunction(1,0, event );" onclick="CKEDITOR.tools.callFunction(0,0); return false;" role="button" aria-labelledby="cke_elementspath_5_0_label">p<span id="cke_elementspath_5_0_label" class="cke_label">p element</span></a><span class="cke_empty">&nbsp;</span></div></div></td></tr><tr role="presentation"><td id="cke_contents_id_content" class="cke_contents" style="height: 3593px;" role="presentation"><span id="cke_67" class="cke_voice_label">Press ALT 0 for help</span><iframe style="width: 1197px; height: 100%;" frameborder="0" aria-describedby="cke_67" title="Rich text editor, id_content" src="" tabindex="-1" allowtransparency="true"></iframe></td></tr><tr role="presentation"><td id="cke_bottom_id_content" class="cke_bottom" role="presentation"><span id="cke_path_id_content_label" class="cke_voice_label">Elements path</span></td></tr></tbody></table><style>.cke_skin_kuma{visibility:hidden;}</style></span></span></span>
  </div>

                </div>
              </article>
            </div>
            <input type="hidden" name="based_on" value="605" id="id_based_on"><input type="hidden" name="current_rev" id="id_current_rev">
          </details>
          <details id="trans-meta" open="open">
            <summary><h2>Translate Tags</h2></summary>
            <div class="wiki-block">
              <p>
                Categorize the article. It will make the article findable under the right filters in the search engine. <a target="_blank" href="/en-US/docs/Project:MDN/Contributing/Tagging_standards">Read the Tagging Guide</a>.              </p>
                <div class="approved">
                  <section class="page-tags">
                  <h3>English tags</h3>
                                        <div id="translate-tags">
                                              <p>This document has no tags.</p>
                                          </div>
                  </section>
                </div>
                <div class="localized">
                  <section id="page-tags" class="page-tags">
                  <h3>Français tags</h3>
                    <ul class="tagit ui-widget ui-widget-content"><li class="tagit-new"><span role="status" aria-live="polite" class="ui-helper-hidden-accessible"></span><input type="text" class="ui-widget-content ui-autocomplete-input" autocomplete="off" placeholder="New tag..."></li></ul>
                  <input type="hidden" name="tags" id="hiddenTags" value=""></section>
                </div>
              </div>
          </details>
          <details id="trans-version" open="open">
            <summary><h2>Version Notes</h2></summary>
              <section class="wiki-block">
                <h3>Localization flags</h3>
                <ul>
<li><label for="id_localization_tags_0"><input checked="checked" type="checkbox" name="localization_tags" value="inprogress" id="id_localization_tags_0"> Localization in progress - not completely translated yet.</label></li>
</ul>
              </section>

              <div class="wiki-block">

    <h3>Review needed?</h3>
    <ul>
<li><label for="id_review_tags_0"><input type="checkbox" name="review_tags" value="technical" id="id_review_tags_0"> Technical - code samples, APIs, or technologies</label></li>
<li><label for="id_review_tags_1"><input type="checkbox" name="review_tags" value="editorial" id="id_review_tags_1"> Editorial - prose, grammar, or content</label></li>
<li><label for="id_review_tags_2"><input type="checkbox" name="review_tags" value="template" id="id_review_tags_2"> Template - KumaScript code</label></li>
</ul>

</div>
              <section class="wiki-block" id="page-comment">
  <h3><i aria-hidden="true" class="icon-comment"></i>Revision Comment <a href="/en-US/docs/Project:MDN/Contributing/Editor_guide/Editing#The_revision_comment_box"><i aria-hidden="true" title="Learn how to use Revision Comments" class="icon-question-sign editor-help-icon"></i></a></h3>
  <p>Tell us why you made additions and changes. It is optional, but will make page history easier to understand.</p>
  <input type="text" name="comment" id="id_comment">
</section>
          </details>
        
        <section class="wiki-block">
                



<ul class="page-buttons">
    <li>
    <button type="submit" class="button positive btn-save-and-edit" data-optimizely-hook="button-save-and-keep-editing button-save-and-keep-editing-bottom"><span>Save and Keep Editing</span><i aria-hidden="true" class="icon-edit"></i></button>
  </li>
    <li>
    <button type="submit" class="button positive btn-save">Save Changes<i aria-hidden="true" class="icon-save"></i></button>
  </li>
  <li>
    <button type="button" class="btn-preview" data-preview-url="/fr/docs/preview-wiki-content">Preview Changes<i aria-hidden="true" class="icon-play-circle"></i></button>
  </li>
  <li>
    <a href="/fr/docs/Web/HTML" class="button negative btn-discard">Discard Changes<i aria-hidden="true" class="icon-undo"></i></a>
  </li>
</ul>


        </section>

      </div>
    </form>

  <section id="page-attachments" class="wiki-block">

  <h3><i aria-hidden="true" class="icon-paperclip"></i>Attachments <a href="/en-US/docs/Project:MDN/Contributing/Editor_guide/Editing#The_attachments_box"><i aria-hidden="true" title="Learn how to use Attachments" class="icon-question-sign editor-help-icon"></i></a></h3>

  
  <p id="page-attachments-no-message" class="">
    This document has no attachments. Images can be attached, and then embedded in the article.
          <button id="page-attachments-button" class="neutral">Attach Files<i aria-hidden="true" class="icon-paperclip"></i></button>
      </p>

  <script>
    mdn.wiki.attachments = [];
  </script>


    <table cellpadding="0" cellspacing="0" id="page-attachments-table" class="hidden">
      <thead>
        <tr><th>Fichier</th>
        <th>Size</th>
        <th>Date</th>
        <th>Attached by</th>
      </tr></thead>
      <tbody>
              </tbody>
    </table>


    <form method="post" action="/files/new/" id="page-attachments-form" enctype="multipart/form-data" target="page-attachments-upload-target">
    <div style="display:none"><input type="hidden" name="csrfmiddlewaretoken" value="06KcEKS3Tyqr1lVxt999BCkXei7fLiSA"></div>
    <table cellpadding="0" cellspacing="0" id="page-attachments-new-table" class="hidden">
      <thead>
        <tr><th class="hidden page-attachment-actions-cell">&nbsp;</th>
        <th>Fichier</th>
        <th>Title</th>
        <th>Description</th>
        <th>Comments</th>
      </tr></thead>
      <tbody>
        <tr>
          <td class="hidden page-attachment-actions-cell"><a href="javascript:;" class="hidden delete-attachment">Supprimer</a></td>
          <td class="page-attachment-actions-file-cell"><input required="required" type="file" name="file" id="id_file"></td>
          <td><input id="id_title" required="required" type="text" name="title" maxlength="255"></td>
          <td><textarea id="id_description" rows="10" cols="40" name="description"></textarea></td>
          <td><input id="id_comment" type="text" name="comment" maxlength="255"></td>
        </tr>
        <tr>
          <td colspan="4">
            <input type="submit" name="submit" value="Upload">

                        <img src="/media/redesign/img/upload-spinner.gif" id="page-attachments-spinner" alt="Uploading">
          </td>
        </tr>
      </tbody>
    </table>
    <iframe id="page-attachments-upload-target" name="page-attachments-upload-target"></iframe>
  <input type="hidden" name="is_ajax" value="1"></form>
  </section>
  </div></main>

  <!-- Footer -->
  <footer><div class="center">
    <div class="column-container">
      <div class="column-main">
                <p>
          <bdi>© 2005-2014 Mozilla Developer Network and individual contributors<br> Content is available under <a href="/en-US/docs/Project:MDN/About#Copyrights_and_licenses">these licenses</a> · <a href="/en-US/docs/Project:MDN/About">About MDN</a> · <a href="//github.com/mozilla/kuma">Contribute to the code</a> · <a href="//www.mozilla.org/privacy/websites/">Privacy policy</a></bdi>        </p>
              </div>
      <div class="column-strip">
                                <form class="languages go" method="get" action="#">
  <label for="language">Other languages:</label>
    <select id="language" class="autosubmit" name="lang">
    <option value="ar">
        عربي
      </option><option value="bn-BD">
        বাংলা (বাংলাদেশ)
      </option><option value="ca">
        catal�?
      </option><option value="cs">
        Čeština
      </option><option value="de">
        Deutsch
      </option><option value="el">
        Ελληνικά
      </option><option value="en-US">
        English
      </option><option value="es">
        Español
      </option><option value="fa">
        فارس?�
      </option><option value="fi">
        suomi
      </option><option value="fr" selected="">
        Français
      </option><option value="fy-NL">
        Frysk
      </option><option value="ga-IE">
        Gaeilge (Éire)
      </option><option value="he">
        עברית
      </option><option value="hi-IN">
        हिन्दी (भारत)
      </option><option value="hr">
        Hrvatski
      </option><option value="hu">
        Magyar
      </option><option value="id">
        Bahasa Indonesia
      </option><option value="it">
        Italiano
      </option><option value="ja">
        日本語
      </option><option value="ka">
        ქა�?თული
      </option><option value="ko">
        한국어
      </option><option value="ml">
        മലയാളം
      </option><option value="ms">
        ﺐﻫﺎﺳ ﻡﻼﻳﻭ
      </option><option value="nl">
        Nederlands
      </option><option value="pl">
        Polski
      </option><option value="pt-BR">
        Português (do Brasil)
      </option><option value="pt-PT">
        Português (Europeu)
      </option><option value="ro">
        română
      </option><option value="ru">
        �?усский
      </option><option value="sq">
        Shqip
      </option><option value="ta">
        தமிழ்
      </option><option value="th">
        ไทย
      </option><option value="tr">
        Türkçe
      </option><option value="vi">
        Tiếng Việt
      </option><option value="zh-CN">
        中文 (简体)
      </option><option value="zh-TW">
        正體中文 (繁體)
      </option>  </select>
  <noscript>&lt;button type="submit"&gt;Envoyer&lt;/button&gt;</noscript>
</form>                        </div>
    </div>
  </div></footer>

  <!-- site js -->
    <script src="/fr/jsi18n/build:dev"></script>
  
      <!--[if lte IE 8]><script src="/media/redesign/js/libs/selectivizr-1.0.2/selectivizr-build.js?build=dev"></script><![endif]-->

    <script src="/media/js/libs/jquery-2.1.0.js?build=1395358687"></script>
<script src="/media/redesign/js/components.js?build=1407173074"></script>
<script src="/media/redesign/js/analytics.js?build=1406102798"></script>
<script src="/media/redesign/js/main.js?build=1407172949"></script>
<script src="/media/redesign/js/badges.js?build=1400265851"></script>

    
          <script src="/media/redesign/js/search-navigator.js?build=1406102798"></script>
<script src="/media/redesign/js/wiki.js?build=1406649114"></script><script data-manual="" async="" src="/media/js/syntax-prism-min.js?build=dev"></script>
      
    <script src="/media/js/libs/jquery-ui-1.10.3.custom/js/jquery-ui-1.10.3.custom.min.js?build=1390833122"></script>
<script src="/media/js/moz-jquery-plugins.js?build=1400265851"></script>

  <script type="text/javascript">
  mdn.wiki.tagSuggestions = ["Accessibility", "AJAX", "API", "Apps", "Canvas", "CSS", "Device", "DOM", "Events", "Extensions", "Firefox", "Firefox OS", "Games", "Gecko", "Graphics", "Internationalization", "History", "HTML", "HTTP", "JavaScript", "Layout", "Localization", "MDN", "Mobile", "Mozilla", "Networking", "Persona", "Places", "Plugins", "Protocols", "Reference", "Tutorial", "Landing", "junk", "NeedsMarkupWork", "NeedsContent", "NeedsExample"];
</script>  <script src="/media/js/libs/ckeditor/ckeditor.js?build=dev"></script>
<script src="/media/js/libs/ckeditor/adapters/jquery.js?build=dev"></script>  <script src="/media/js/wiki-edit.js?build=1407173151"></script>
<script src="/media/js/libs/tag-it.js?build=1390833122"></script>
<script src="/media/js/wiki-tags-edit.js?build=1400265851"></script>


<style type="text/css">
@media print { #djDebug {display:none;}}
</style>
<link rel="stylesheet" href="/static/debug_toolbar/css/toolbar.css" type="text/css">
<script>//<![CDATA[
if(!window.jQuery) document.write('<scr'+'ipt src="//ajax.googleapis.com/ajax/libs/jquery/2.0.3/jquery.min.js"></scr'+'ipt>');
//]]></script>
<script src="/static/debug_toolbar/js/jquery.cookie.js"></script>
<script src="/static/debug_toolbar/js/toolbar.js"></script>
<div id="djDebug" style="" dir="ltr" data-store-id="0b1d653c4c964c039c1664d206b35f35" data-render-panel-url="/__debug__/render_panel/">
        <div style="display: none;" id="djDebugToolbar">
                <ul id="djDebugPanelList">
                        
                        <li><a id="djHideToolBarButton" href="#" title="Masquer la barre d'outils">Masquer »</a></li>
                        
                        
                                <li class="djDebugPanelButton">
                                        <input type="checkbox" data-cookie="djdtVersionsPanel" checked="checked" title="Désactiver pour les requêtes suivantes">
                                        
                                                <a href="#" title="Versions" class="VersionsPanel">
                                        
                                        Versions
                                        
                                        
                                                <br><small>Django 1.4.13</small>
                                        
                                        
                                        
                                                </a>
                                        
                                </li>
                        
                                <li class="djDebugPanelButton">
                                        <input type="checkbox" data-cookie="djdtTimerPanel" checked="checked" title="Désactiver pour les requêtes suivantes">
                                        
                                                <a href="#" title="Temps" class="TimerPanel">
                                        
                                        Temps
                                        
                                        
                                                <br><small>CPU: 4328.27ms (3982.89ms)</small>
                                        
                                        
                                        
                                                </a>
                                        
                                </li>
                        
                                <li class="djDebugPanelButton">
                                        <input type="checkbox" data-cookie="djdtSettingsPanel" checked="checked" title="Désactiver pour les requêtes suivantes">
                                        
                                                <a href="#" title="Paramètres de <code>settings_local</code>" class="SettingsPanel">
                                        
                                        Paramètres
                                        
                                        
                                                
                                        
                                        
                                        
                                                </a>
                                        
                                </li>
                        
                                <li class="djDebugPanelButton">
                                        <input type="checkbox" data-cookie="djdtHeadersPanel" checked="checked" title="Désactiver pour les requêtes suivantes">
                                        
                                                <a href="#" title="En-têtes" class="HeadersPanel">
                                        
                                        En-têtes
                                        
                                        
                                                
                                        
                                        
                                        
                                                </a>
                                        
                                </li>
                        
                                <li class="djDebugPanelButton">
                                        <input type="checkbox" data-cookie="djdtRequestPanel" checked="checked" title="Désactiver pour les requêtes suivantes">
                                        
                                                <a href="#" title="Requête" class="RequestPanel">
                                        
                                        Requête
                                        
                                        
                                                
                                        
                                        
                                        
                                                </a>
                                        
                                </li>
                        
                                <li class="djDebugPanelButton">
                                        <input type="checkbox" data-cookie="djdtTemplatesPanel" checked="checked" title="Désactiver pour les requêtes suivantes">
                                        
                                                <a href="#" title="Gabarits (3 affichés)" class="TemplatesPanel">
                                        
                                        Gabarits
                                        
                                        
                                                
                                        
                                        
                                        
                                                </a>
                                        
                                </li>
                        
                                <li class="djDebugPanelButton">
                                        <input type="checkbox" data-cookie="djdtCachePanel" checked="checked" title="Désactiver pour les requêtes suivantes">
                                        
                                                <a href="#" title="Appels au cache depuis 3 moteurs" class="CachePanel">
                                        
                                        Cache
                                        
                                        
                                                <br><small>6 appels en 50.72ms</small>
                                        
                                        
                                        
                                                </a>
                                        
                                </li>
                        
                                <li class="djDebugPanelButton">
                                        <input type="checkbox" data-cookie="djdtSQLPanel" checked="checked" title="Désactiver pour les requêtes suivantes">
                                        
                                                <a href="#" title="SQL queries from 1 connection" class="SQLPanel">
                                        
                                        SQL
                                        
                                        
                                                <br><small>112 queries in 59.46ms</small>
                                        
                                        
                                        
                                                </a>
                                        
                                </li>
                        
                                <li class="djDebugPanelButton">
                                        <input type="checkbox" data-cookie="djdtSignalsPanel" checked="checked" title="Désactiver pour les requêtes suivantes">
                                        
                                                <a href="#" title="Signaux" class="SignalsPanel">
                                        
                                        Signaux
                                        
                                        
                                                <br><small>41 receveurs de 12 signaux</small>
                                        
                                        
                                        
                                                </a>
                                        
                                </li>
                        
                                <li class="djDebugPanelButton">
                                        <input type="checkbox" data-cookie="djdtLoggingPanel" checked="checked" title="Désactiver pour les requêtes suivantes">
                                        
                                                <a href="#" title="Messages du journal" class="LoggingPanel">
                                        
                                        Journaux
                                        
                                        
                                                <br><small>0 message</small>
                                        
                                        
                                        
                                                </a>
                                        
                                </li>
                        
                                <li class="djDebugPanelButton">
                                        <input type="checkbox" data-cookie="djdtRedirectsPanel" title="Activer pour les requêtes suivantes">
                                        
                                                <div class="contentless disabled">
                                        
                                        Interception des redirections
                                        
                                        
                                                </div>
                                        
                                </li>
                        
                </ul>
        </div>
        <div style="" id="djDebugToolbarHandle">
                <span title="Afficher la barre d'outils" id="djShowToolBarButton">«</span>
        </div>
        
                
                        <div id="VersionsPanel" class="panelContent" style="display: none;">
                                <div class="djDebugPanelTitle">
                                        <a href="" class="djDebugClose">Fermer</a>
                                        <h3>Versions</h3>
                                </div>
                                <div class="djDebugPanelContent">
                                        <div class="scroll">
                                                
                                        </div>
                                </div>
                        </div>
                
        
                
                        <div id="TimerPanel" class="panelContent" style="display: none;">
                                <div class="djDebugPanelTitle">
                                        <a href="" class="djDebugClose">Fermer</a>
                                        <h3>Temps</h3>
                                </div>
                                <div class="djDebugPanelContent">
                                        <div class="scroll">
                                                
                                        </div>
                                </div>
                        </div>
                
        
                
                        <div id="SettingsPanel" class="panelContent" style="display: none;">
                                <div class="djDebugPanelTitle">
                                        <a href="" class="djDebugClose">Fermer</a>
                                        <h3>Paramètres de <code>settings_local</code></h3>
                                </div>
                                <div class="djDebugPanelContent">
                                        <div class="scroll">
                                                
                                        </div>
                                </div>
                        </div>
                
        
                
                        <div id="HeadersPanel" class="panelContent" style="display: none;">
                                <div class="djDebugPanelTitle">
                                        <a href="" class="djDebugClose">Fermer</a>
                                        <h3>En-têtes</h3>
                                </div>
                                <div class="djDebugPanelContent">
                                        <div class="scroll">
                                                
                                        </div>
                                </div>
                        </div>
                
        
                
                        <div id="RequestPanel" class="panelContent" style="display: none;">
                                <div class="djDebugPanelTitle">
                                        <a href="" class="djDebugClose">Fermer</a>
                                        <h3>Requête</h3>
                                </div>
                                <div class="djDebugPanelContent">
                                        <div class="scroll">
                                                
                                        </div>
                                </div>
                        </div>
                
        
                
                        <div id="TemplatesPanel" class="panelContent" style="display: none;">
                                <div class="djDebugPanelTitle">
                                        <a href="" class="djDebugClose">Fermer</a>
                                        <h3>Gabarits (3 affichés)</h3>
                                </div>
                                <div class="djDebugPanelContent">
                                        <div class="scroll">
                                                
                                        </div>
                                </div>
                        </div>
                
        
                
                        <div id="CachePanel" class="panelContent" style="display: none;">
                                <div class="djDebugPanelTitle">
                                        <a href="" class="djDebugClose">Fermer</a>
                                        <h3>Appels au cache depuis 3 moteurs</h3>
                                </div>
                                <div class="djDebugPanelContent">
                                        <div class="scroll">
                                                
                                        </div>
                                </div>
                        </div>
                
        
                
                        <div id="SQLPanel" class="panelContent" style="display: none;">
                                <div class="djDebugPanelTitle">
                                        <a href="" class="djDebugClose">Fermer</a>
                                        <h3>SQL queries from 1 connection</h3>
                                </div>
                                <div class="djDebugPanelContent">
                                        <div class="scroll">
                                                
                                        </div>
                                </div>
                        </div>
                
        
                
                        <div id="SignalsPanel" class="panelContent" style="display: none;">
                                <div class="djDebugPanelTitle">
                                        <a href="" class="djDebugClose">Fermer</a>
                                        <h3>Signaux</h3>
                                </div>
                                <div class="djDebugPanelContent">
                                        <div class="scroll">
                                                
                                        </div>
                                </div>
                        </div>
                
        
                
                        <div id="LoggingPanel" class="panelContent" style="display: none;">
                                <div class="djDebugPanelTitle">
                                        <a href="" class="djDebugClose">Fermer</a>
                                        <h3>Messages du journal</h3>
                                </div>
                                <div class="djDebugPanelContent">
                                        <div class="scroll">
                                                
                                        </div>
                                </div>
                        </div>
                
        
                
        
        <div id="djDebugWindow" class="panelContent" style="display: none;"></div>
</div>

<ul class="ui-autocomplete ui-front ui-menu ui-widget ui-widget-content ui-corner-all" id="ui-id-1" tabindex="0" style="display: none;"></ul><ul class="ui-autocomplete ui-front ui-menu ui-widget ui-widget-content ui-corner-all" id="ui-id-2" tabindex="0" style="display: none;"></ul></body></html><script src="//ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"></script>

Test runner

Ready to run.

Testing in
TestOps/sec
Attribute matching only
$('[data-alternate-message]');
ready
Attribute matching with class first
$('.t');
ready
Chained
 
ready

Revisions

You can edit these tests or add more tests to this page by appending /edit to the URL.