/**
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements.  See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership.  The ASF licenses this file
 * to you under the Apache License, Version 2.0 (the
 * "License"); you may not use this file except in compliance
 * with the License.  You may obtain a copy of the License at
 *
 *   http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing,
 * software distributed under the License is distributed on an
 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 * KIND, either express or implied.  See the License for the
 * specific language governing permissions and limitations
 * under the License.
 */

const handleContentDrawer = () => {
  const drawer = window.document.querySelector("#content-drawer");
  const navbar = window.document.querySelector("#content-navbar");
  const openButton = window.document.querySelector("#content-open-button");
  const closeButton = window.document.querySelector("#content-close-button");

  if (!(drawer && openButton && closeButton && navbar)) return;

  const toggleDrawer = () => {
    drawer.classList.toggle("content-drawer-container--open");
    navbar.classList.toggle("navbar--hidden");
  };

  openButton.addEventListener("click", toggleDrawer);
  closeButton.addEventListener("click", toggleDrawer);

};

handleContentDrawer();
