Buttons 3

by Tom M

HTML

<div id="contentWrapper">

<div class="panel">
<p class ="button" id="btn1">Button 1</p>
<div id="article1" class="article outer">
Your comment is very incorrect. There is absolutely an alternative (more than one, in fact) to mixing your JavaScript in with your HTML markup.
</div>
</div>


<div class="panel">
<p class ="button" id="btn2">Button 2</p>
<div id="article2" class="article outer">
If you are programmatically generating the HTML anchors and injecting them into the DOM, it's marginally acceptable.
</div>
</div>

<div class="panel">
<p class ="button" id="btn3">Button 3</p>
<div id="article3" class="article outer">
It's not syntactically unsupported. JavaScript supports it just fine (just as it does with applying click handlers to other elements as well). It's simply the wrong HTML markup for the task at hand
</div>
</div>

<div id="fillMe">
</div>
</div>
<div id="test">

</div>

CSS

.article {
  display: none;
}

#fillMe {
  padding-top: 35px;
  width: 75%;
  float: right;
}



/*-------Smaller than 500px wide--------*/

@media screen and (max-width:500px) {
  
 #fillMe, #listdiv {
   display: none;
 }


#contentWrapper .article {
  display: none;
}

#contentWrapper .active .article {
  display: block;
}
 
}

/*-------Wider than 500px wide--------*/

@media screen and (min-width:500px) {
  
#fillMe {
  display: block;
}

ul li {
  list-style: none;
}

}

JavaScript

function mediaQuery(x) {
//If window is under 500px in width.
  if (x.matches) {
//Begin accordion code
   var initAccordion = function(accordionElement) {

	function handlePanelClick(event) {
  	showPanel(event.currentTarget);
  }
  
  function showPanel(panel) {
  var expandedPanel = accordionElement.querySelector(".active");
  if (expandedPanel) {
  		expandedPanel.classList.remove("active");
  }
  panel.classList.add("active");
  }
 
  var allPanelElements = accordionElement.querySelectorAll(".panel");
  for (var y = 0; y < allPanelElements.length; y++ ) {
  		allPanelElements[y].addEventListener("click", handlePanelClick);
  }
  
 //showPanel(allPanelElements[0]);
  
}
initAccordion(document.getElementById("contentWrapper"));
    
  } 
  else //If window if is over 500px in width.
  {
  let articleList = document.getElementsByClassName("article");

  	//Begin button code.
    var createfunc = function (i) {
    return function() { document.getElementById("fillMe").innerHTML = articleList[i].innerHTML;};
}


for (let i=0; i < articleList.length; i++) {
let button = document.getElementsByClassName("button");
button[i].addEventListener("click", createfunc(i));
}
  }
}


//Declare media query and add listener.
var x = window.matchMedia("(max-width: 500px)")
mediaQuery(x) // Call listener function at run time
x.addListener(mediaQuery) // Attach listener function on state changes