KO bootstrap popover

by Retsam19

HTML

<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.4.0/knockout-min.js"></script>
<script src="https://code.jquery.com/jquery-2.2.4.min.js"></script>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
<div>
<div id="popover-container">
  <div>
    <button id="popover-trigger">
    Popover
    </button>
  </div>
</div>
</div>
<script type="text/html" id="popover-header">
  Counter: <span data-bind="text: counter"></span> <a data-bind="click: reset">X</a>
</script>
<script type="text/html" id="popover-content">
    <button data-bind="click: incr">Increment</button>
</script>

Babel + JSX

const buttonEl = document.getElementById("popover-trigger");

var counter = ko.observable(0);

ko.applyBindings({
	root: true,
  popover: {
  	root: false,
    counter: counter,
    incr: function () {
			counter(counter() + 1);
		},
    reset: function () {
      counter(0);
    }
  }
});

const bindingContext = ko.contextFor(document.body);

const HEADER_HTML = document.getElementById("popover-header").innerHTML;
const CONTENT_HTML = document.getElementById("popover-content").innerHTML;

const header = $("<div>")
	.append(HEADER_HTML)
  .get(0);
const content = $("<div>")
	.append(CONTENT_HTML)
  .get(0);
  
const childContext = bindingContext.createChildContext(
   bindingContext.$data.popover
);

ko.applyBindingsToDescendants(childContext, header);
ko.applyBindingsToDescendants(childContext, content);

$(buttonEl).popover({
	title: header,
  content: content,
  html: true,
  container: "#popover-container"
});