(function() {
  if (typeof self === 'undefined' || !self.Prism || !self.document) {
    return;
  }

  if (!Prism.plugins.toolbar) {
    console.warn('Show Languages plugin loaded before Toolbar plugin.');

    return;
  }

  // The languages map is built automatically with gulp
  var Languages = /*languages_placeholder[*/ {
    html: 'HTML',
    xml: 'XML',
    svg: 'SVG',
    mathml: 'MathML',
    css: 'CSS',
    clike: 'C-like',
    javascript: 'JavaScript',
    abap: 'ABAP',
    actionscript: 'ActionScript',
    apacheconf: 'Apache Configuration',
    apl: 'APL',
    applescript: 'AppleScript',
    arff: 'ARFF',
    asciidoc: 'AsciiDoc',
    asm6502: '6502 Assembly',
    aspnet: 'ASP.NET (C#)',
    autohotkey: 'AutoHotkey',
    autoit: 'AutoIt',
    basic: 'BASIC',
    csharp: 'C#',
    cpp: 'C++',
    coffeescript: 'CoffeeScript',
    csp: 'Content-Security-Policy',
    'css-extras': 'CSS Extras',
    django: 'Django/Jinja2',
    fsharp: 'F#',
    glsl: 'GLSL',
    graphql: 'GraphQL',
    http: 'HTTP',
    hpkp: 'HTTP Public-Key-Pins',
    hsts: 'HTTP Strict-Transport-Security',
    ichigojam: 'IchigoJam',
    inform7: 'Inform 7',
    json: 'JSON',
    latex: 'LaTeX',
    livescript: 'LiveScript',
    lolcode: 'LOLCODE',
    matlab: 'MATLAB',
    mel: 'MEL',
    n4js: 'N4JS',
    nasm: 'NASM',
    nginx: 'nginx',
    nsis: 'NSIS',
    objectivec: 'Objective-C',
    ocaml: 'OCaml',
    opencl: 'OpenCL',
    parigp: 'PARI/GP',
    php: 'PHP',
    'php-extras': 'PHP Extras',
    powershell: 'PowerShell',
    properties: '.properties',
    protobuf: 'Protocol Buffers',
    jsx: 'React JSX',
    tsx: 'React TSX',
    renpy: "Ren'py",
    rest: 'reST (reStructuredText)',
    sas: 'SAS',
    sass: 'Sass (Sass)',
    scss: 'Sass (Scss)',
    sql: 'SQL',
    typescript: 'TypeScript',
    vbnet: 'VB.Net',
    vhdl: 'VHDL',
    vim: 'vim',
    wiki: 'Wiki markup',
    xojo: 'Xojo (REALbasic)',
    yaml: 'YAML',
  } /*]*/;
  Prism.plugins.toolbar.registerButton('show-language', function(env) {
    var pre = env.element.parentNode;
    if (!pre || !/pre/i.test(pre.nodeName)) {
      return;
    }
    var language =
      pre.getAttribute('data-language') ||
      Languages[env.language] ||
      env.language.substring(0, 1).toUpperCase() + env.language.substring(1);

    var element = document.createElement('span');
    element.textContent = language;

    return element;
  });
})();
